COMPMID-1834: Add transpose support to CLGEMMReshapeLHSMatrixKernel

Change-Id: I913a7297a0c34a05b1d37eab1489b430423700e8
Reviewed-on: https://review.mlplatform.org/417
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
diff --git a/tests/validation/CL/GEMMReshapeLHSMatrix.cpp b/tests/validation/CL/GEMMReshapeLHSMatrix.cpp
index ea6589d..a2dd9c2 100644
--- a/tests/validation/CL/GEMMReshapeLHSMatrix.cpp
+++ b/tests/validation/CL/GEMMReshapeLHSMatrix.cpp
@@ -42,32 +42,6 @@
 {
 namespace validation
 {
-namespace
-{
-// *INDENT-OFF*
-// clang-format off
-/** Data types */
-const auto data_types = framework::dataset::make("DataType", { DataType::QASYMM8, DataType::F16, DataType::F32 });
-
-/** Batch size values to test */
-const auto b_values = framework::dataset::make("batchsize", 1, 3);
-
-/** M0 values to test */
-const auto m0_values = framework::dataset::make("M0", 2, 9);
-
-/** K0 values to test */
-const auto k0_values = framework::dataset::make("K0", { 2, 4, 8, 16 });
-
-/** V0 values to test */
-const auto v0_values = framework::dataset::make("V0", 1, 4);
-
-/** Interleave values to test */
-const auto i_values = framework::dataset::make("interleave", { true, false });
-
-/** Transpose values to test */
-const auto t_values = framework::dataset::make("transpose", { false });
-} // namespace
-
 using namespace arm_compute::misc::shape_calculator;
 
 // Initialize the output tensor with zero and fill the border with zero
@@ -80,18 +54,40 @@
 template <typename T>
 using CLGEMMReshapeLHSMatrix3DFixture = GEMMReshapeLHSMatrixValidationFixture<CLTensor, CLAccessor, CLGEMMReshapeLHSMatrix, T, true>;
 
-TEST_SUITE(CL)
-TEST_SUITE(GEMMReshapeLHSMatrix)
+// *INDENT-OFF*
+// clang-format off
+/** Data types */
 
-DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape2DShapes(),
-                                                                   b_values),
-                                                                   data_types),
-                                                                   m0_values),
-                                                                   k0_values),
-                                                                   v0_values),
-                                                                   i_values),
-                                                                   t_values),
-shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value)
+namespace
+{
+const auto data_types = framework::dataset::make("DataType", { DataType::QASYMM8, DataType::F16, DataType::F32 });
+
+/** Batch size values to test */
+const auto b_values = framework::dataset::make("batchsize", 1, 3);
+
+/** M0 values to test - Precommit */
+const auto m0_values_precommit = framework::dataset::make("M0", { 2, 4, 5 });
+
+/** K0 values to test - Precommit */
+const auto k0_values_precommit = framework::dataset::make("K0", { 2, 4 });
+
+/** M0 values to test - Precommit */
+const auto m0_values_nightly = framework::dataset::make("M0", 2, 9);
+
+/** K0 values to test - Precommit */
+const auto k0_values_nightly = framework::dataset::make("K0", { 2, 4, 8, 16 });
+
+/** V0 values to test */
+const auto v0_values = framework::dataset::make("V0", 1, 4);
+
+/** Interleave values to test */
+const auto i_values = framework::dataset::make("interleave", { true, false });
+
+/** Transpose values to test */
+const auto t_values = framework::dataset::make("transpose", { true, false });
+
+/** Configuration test */
+void validate_configuration(TensorShape shape_in, unsigned int b_value, DataType data_type, unsigned int m0_value, unsigned int k0_value, unsigned int v0_value, bool i_value, bool t_value, bool reinterpret_input_as_3d)
 {
     GEMMLHSMatrixInfo lhs_info;
     lhs_info.m0         = m0_value;
@@ -100,8 +96,10 @@
     lhs_info.interleave = i_value;
     lhs_info.transpose  = t_value;
 
-    const TensorShape shape_src(shape_in[0], shape_in[1], b_value);
-    const TensorShape shape_dst = compute_lhs_reshaped_shape(TensorInfo(shape_src, 1, data_type), lhs_info, false);
+    TensorShape shape_src = shape_in;
+    shape_src.set(shape_src.num_dimensions(), b_value);
+
+    const TensorShape shape_dst = compute_lhs_reshaped_shape(TensorInfo(shape_src, 1, data_type), lhs_info, reinterpret_input_as_3d);
 
     // Create tensors
     CLTensor src = create_tensor<CLTensor>(shape_src, data_type);
@@ -112,7 +110,37 @@
 
     // Create and configure function
     CLGEMMReshapeLHSMatrixKernel reshape_lhs;
-    reshape_lhs.configure(&src, &dst, lhs_info, false);
+    reshape_lhs.configure(&src, &dst, lhs_info, reinterpret_input_as_3d);
+}
+} // namespace
+
+TEST_SUITE(CL)
+TEST_SUITE(GEMMReshapeLHSMatrix)
+
+DATA_TEST_CASE(ConfigurationSmall, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape2DShapes(),
+                                                                   b_values),
+                                                                   data_types),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
+                                                                   v0_values),
+                                                                   i_values),
+                                                                   t_values),
+shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value)
+{
+    validate_configuration(shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value, false);
+}
+
+DATA_TEST_CASE(ConfigurationLarge, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape2DShapes(),
+                                                                   b_values),
+                                                                   data_types),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
+                                                                   v0_values),
+                                                                   i_values),
+                                                                   t_values),
+shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value)
+{
+    validate_configuration(shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value, false);
 }
 
 TEST_SUITE(S32)
@@ -120,8 +148,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape2DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S32)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -134,8 +162,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape2DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S32)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -150,8 +178,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape2DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S16)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -164,8 +192,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape2DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S16)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -180,8 +208,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape2DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S8)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -194,8 +222,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape2DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S8)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -205,37 +233,31 @@
 }
 TEST_SUITE_END() // S8
 
-TEST_SUITE(REINTERPRET_INPUT_AS_3D)
-DATA_TEST_CASE(Configuration, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape3DShapes(),
+TEST_SUITE(ReinterpretInputAs3D)
+DATA_TEST_CASE(ConfigurationSmall, framework::DatasetMode::ALL, combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape3DShapes(),
                                                                    b_values),
                                                                    data_types),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values),
 shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value)
 {
-    GEMMLHSMatrixInfo lhs_info;
-    lhs_info.m0         = m0_value;
-    lhs_info.k0         = k0_value;
-    lhs_info.v0         = v0_value;
-    lhs_info.interleave = i_value;
-    lhs_info.transpose  = t_value;
+    validate_configuration(shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value, true);
+}
 
-    const TensorShape shape_src(shape_in[0], shape_in[1], shape_in[2], b_value);
-    const TensorShape shape_dst = compute_lhs_reshaped_shape(TensorInfo(shape_src, 1, data_type), lhs_info, true);
-
-    // Create tensors
-    CLTensor src = create_tensor<CLTensor>(shape_src, data_type);
-    CLTensor dst = create_tensor<CLTensor>(shape_dst, data_type);
-
-    ARM_COMPUTE_EXPECT(src.info()->is_resizable(), framework::LogLevel::ERRORS);
-    ARM_COMPUTE_EXPECT(dst.info()->is_resizable(), framework::LogLevel::ERRORS);
-
-    // Create and configure function
-    CLGEMMReshapeLHSMatrixKernel reshape_lhs;
-    reshape_lhs.configure(&src, &dst, lhs_info, true);
+DATA_TEST_CASE(ConfigurationLarge, framework::DatasetMode::NIGHTLY, combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape3DShapes(),
+                                                                   b_values),
+                                                                   data_types),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
+                                                                   v0_values),
+                                                                   i_values),
+                                                                   t_values),
+shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value)
+{
+    validate_configuration(shape_in, b_value, data_type, m0_value, k0_value, v0_value, i_value, t_value, true);
 }
 
 TEST_SUITE(S32)
@@ -243,8 +265,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape3DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S32)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -257,8 +279,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape3DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S32)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -273,8 +295,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape3DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S16)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -287,8 +309,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape3DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S16)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -303,8 +325,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::SmallGEMMReshape3DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S8)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_precommit),
+                                                                   k0_values_precommit),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -317,8 +339,8 @@
                 combine(combine(combine(combine(combine(combine(combine(datasets::LargeGEMMReshape3DShapes(),
                                                                    b_values),
                                                                    framework::dataset::make("DataType", DataType::S8)),
-                                                                   m0_values),
-                                                                   k0_values),
+                                                                   m0_values_nightly),
+                                                                   k0_values_nightly),
                                                                    v0_values),
                                                                    i_values),
                                                                    t_values))
@@ -327,7 +349,7 @@
     validate(CLAccessor(_target), _reference);
 }
 TEST_SUITE_END() // S8
-TEST_SUITE_END() // REINTERPRET_INPUT_AS_3D
+TEST_SUITE_END() // ReinterpretInputAs3D
 TEST_SUITE_END() // GEMMReshapeLHSMatrix
 TEST_SUITE_END() // CL
 } // namespace validation