Integrate CLTensorArgument

- Add CLTensorArgument to query the components and storages as OpenCL
variables (or by values when possible)
- Add caching mechanism in CLTensorArgument to keep track of the components and storages used
- Add unit tests

Resolves COMPMID-5787

Signed-off-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com>
Change-Id: Ib39e1f77b097e5b907a296fe6b0d41bb4bcd4ffc
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9908
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Gunes Bayir <gunes.bayir@arm.com>
Reviewed-by: Jakub Sujak <jakub.sujak@arm.com>
diff --git a/compute_kernel_writer/include/ckw/Error.h b/compute_kernel_writer/include/ckw/Error.h
index 100bdc4..eaf3f10 100644
--- a/compute_kernel_writer/include/ckw/Error.h
+++ b/compute_kernel_writer/include/ckw/Error.h
@@ -87,7 +87,7 @@
 
 #ifdef COMPUTE_KERNEL_WRITER_ASSERTS_ENABLED
 
-/** If the condition is not met, throw an std::runtime_error with the specified message.
+/** If the condition is not met, throw an std::runtime_error with the specified message if assertion is enabled.
  *
  * @param[in] cond The condition that is expected to be true.
  * @param[in] msg  The error message when the condition is not met.
@@ -101,18 +101,23 @@
         }                         \
     } while(false)
 
-/** If the condition is not met, throw an std::runtime_error.
+#else // COMPUTE_KERNEL_WRITER_ASSERTS_ENABLED
+
+#define CKW_ASSERT_MSG(cond, msg)
+
+#endif // COMPUTE_KERNEL_WRITER_ASSERTS_ENABLED
+
+/** If the condition is not met, throw an std::runtime_error if assertion is enabled.
  *
  * @param[in] cond The condition that is expected to be true.
  */
 #define CKW_ASSERT(cond) CKW_ASSERT_MSG(cond, #cond)
 
-#else // COMPUTE_KERNEL_WRITER_ASSERTS_ENABLED
-
-#define CKW_ASSERT_MSG(cond, msg)
-#define CKW_ASSERT(cond)
-
-#endif // COMPUTE_KERNEL_WRITER_ASSERTS_ENABLED
+/** Throw an std::runtime_error with the specified message if assertion is enabled.
+ *
+ * @param[in] msg  The error message when the condition is not met.
+ */
+#define CKW_ASSERT_FAILED_MSG(msg) CKW_ASSERT_MSG(false, msg)
 
 } // namespace ckw