Enable unroll through pragma based on DDK version

Change-Id: Id98a107d512369d3799961011a84e9cc4d99e775
Signed-off-by: Giorgio Arena <giorgio.arena@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5679
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
diff --git a/src/core/CL/CLCompileContext.cpp b/src/core/CL/CLCompileContext.cpp
index 3db0fe5..bf3a866 100644
--- a/src/core/CL/CLCompileContext.cpp
+++ b/src/core/CL/CLCompileContext.cpp
@@ -29,6 +29,8 @@
 #include "arm_compute/core/Utils.h"
 #include "support/StringSupport.h"
 
+#include <regex>
+
 namespace arm_compute
 {
 CLBuildOptions::CLBuildOptions()
@@ -263,6 +265,19 @@
         ARM_COMPUTE_ERROR("Non uniform workgroup size is not supported!!");
     }
 
+    const GPUTarget arch = get_arch_from_target(_device.target());
+    if(arch != GPUTarget::UNKNOWN && arch != GPUTarget::MIDGARD)
+    {
+        const std::string device_vers = _device.device_version();
+        const std::regex  ddk_regex("r([0-9]*)p[0-9]");
+        std::smatch       ddk_match;
+
+        if(std::regex_search(device_vers, ddk_match, ddk_regex) && std::stoi(ddk_match[1]) >= 9)
+        {
+            concat_str += " -DUNROLL_WITH_PRAGMA ";
+        }
+    }
+
     std::string build_options = stringify_set(build_options_set, kernel_path) + concat_str;
 
     return build_options;