COMPMID-3202: Add support for Valhall architecture in GEMM

Change-Id: I2cd0b5ee0ae2e3c65a04c7be70478b0452e55132
Signed-off-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/2730
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
diff --git a/arm_compute/core/CL/gemm/native/CLGEMMNativeKernelConfiguration.h b/arm_compute/core/CL/gemm/native/CLGEMMNativeKernelConfiguration.h
index 834afa3..fced41b 100644
--- a/arm_compute/core/CL/gemm/native/CLGEMMNativeKernelConfiguration.h
+++ b/arm_compute/core/CL/gemm/native/CLGEMMNativeKernelConfiguration.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 ARM Limited.
+ * Copyright (c) 2019-2020 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -26,6 +26,7 @@
 
 #include "arm_compute/core/CL/ICLGEMMKernelConfiguration.h"
 #include "arm_compute/core/CL/gemm/native/CLGEMMNativeKernelConfigurationBifrost.h"
+#include "arm_compute/core/CL/gemm/native/CLGEMMNativeKernelConfigurationValhall.h"
 
 #include <memory>
 
@@ -37,17 +38,26 @@
 class CLGEMMNativeKernelConfigurationFactory final
 {
 public:
-    /** Static method to construct CLGEMMNative kernel object accordingly with the GPU architecture
+    /** Static method to construct CLGEMMNative kernel object accordingly with the GPU target
      *
-     * @param[in] arch GPU target
+     * @param[in] gpu GPU target
      *
      * @return CLGEMMNative kernel configuration class
      */
-    static std::unique_ptr<ICLGEMMKernelConfiguration> create(GPUTarget arch)
+    static std::unique_ptr<ICLGEMMKernelConfiguration> create(GPUTarget gpu)
     {
-        // Note: At the moment we only support Bifrost architecture. However, we should have a dedicated path for each GPU architecture
-        // using get_arch_from_target(arch)
-        return support::cpp14::make_unique<CLGEMMNativeKernelConfigurationBifrost>(arch);
+        switch(get_arch_from_target(gpu))
+        {
+            case GPUTarget::MIDGARD:
+            case GPUTarget::BIFROST:
+                return support::cpp14::make_unique<CLGEMMNativeKernelConfigurationBifrost>(gpu);
+                break;
+            case GPUTarget::VALHALL:
+                return support::cpp14::make_unique<CLGEMMNativeKernelConfigurationValhall>(gpu);
+                break;
+            default:
+                ARM_COMPUTE_ERROR("Not supported GPU target");
+        }
     }
 };
 } // namespace cl_gemm