Updated cpu detection

* Added the case in the cpu detection code for Klein cores
* Added has_sve() and set_sve() methods in CpuInfo
* Detection code checks for presence of SVE via HWCAP_SVE
* Updated the heuristic in sve kernels to check for the absence of Klein
* Resolves: COMPMID-4085

Change-Id: I0b8c72ff19dc5a3a81628d121a1afa836e724b4f
Signed-off-by: Pablo Marquez Tello <pablo.tello@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5257
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
diff --git a/arm_compute/core/CPP/CPPTypes.h b/arm_compute/core/CPP/CPPTypes.h
index fd6bfc3..2de73ac 100644
--- a/arm_compute/core/CPP/CPPTypes.h
+++ b/arm_compute/core/CPP/CPPTypes.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2020 Arm Limited.
+ * Copyright (c) 2017-2021 Arm Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -45,6 +45,7 @@
     A53,
     A55r0,
     A55r1,
+    KLEIN,
     X1,
     A73
 };
@@ -76,6 +77,10 @@
         {
             return std::string("GENERIC");
         }
+        case CPUModel::KLEIN:
+        {
+            return std::string("KLEIN");
+        }
         case CPUModel::GENERIC_FP16:
         {
             return std::string("GENERIC_FP16");
@@ -136,6 +141,11 @@
      * @return true of the cpu supports dot product, false otherwise
      */
     bool has_dotprod() const;
+    /** Checks if the cpu model supports sve.
+     *
+     * @return true of the cpu supports sve, false otherwise
+     */
+    bool has_sve() const;
     /** Gets the cpu model for a given cpuid.
      *
      * @param[in] cpuid the id of the cpu core to be retrieved,
@@ -178,6 +188,11 @@
      * @param[in] dotprod whether the cpu supports dot product.
      */
     void set_dotprod(const bool dotprod);
+    /** Set sve support
+     *
+     * @param[in] sve whether the cpu supports sve.
+     */
+    void set_sve(const bool sve);
     /** Set the cpumodel for a given cpu core
      *
      * @param[in] cpuid the id of the core to be set.
@@ -200,6 +215,7 @@
     std::vector<CPUModel> _percpu        = {};
     bool                  _fp16          = false;
     bool                  _dotprod       = false;
+    bool                  _sve           = false;
     unsigned int          _L1_cache_size = 32768;
     unsigned int          _L2_cache_size = 262144;
 };