add support for a GENERIC cpu type that uses llvm defaults
authorAndreas Beckmann <anbe@debian.org>
Tue, 12 Dec 2023 15:33:19 +0000 (16:33 +0100)
committerAndreas Beckmann <anbe@debian.org>
Tue, 12 Dec 2023 15:33:19 +0000 (16:33 +0100)
Forwarded: not-needed

Gbp-Pq: Name generic-cpu.patch

cmake/LLVM.cmake
lib/CL/devices/common.c
lib/CL/pocl_llvm_build.cc
lib/kernel/host/CMakeLists.txt

index eef103992bb08184b46a67ae1cd320998535547e..e0260ae5e0580ebc701a3ff9daa415e2b8d9dbe8 100644 (file)
@@ -695,17 +695,25 @@ endif()
 # Some architectures have -march and -mcpu reversed
 if(NOT DEFINED CLANG_MARCH_FLAG)
   message(STATUS "Checking clang -march vs. -mcpu flag")
-  custom_try_compile_clang_silent("" "return 0;" RES ${CLANG_TARGET_OPTION}${LLC_TRIPLE} -march=${SELECTED_HOST_CPU})
+ if(LLC_HOST_CPU STREQUAL "GENERIC" AND NOT KERNELLIB_HOST_CPU_VARIANTS STREQUAL "distro")
+  set(CLANG_MARCH_FLAG "-None=")
+ else()
+  set(LLC_HOST_CPU_TEST "${SELECTED_HOST_CPU}")
+  if(LLC_HOST_CPU STREQUAL "GENERIC")
+    set(LLC_HOST_CPU_TEST "${LLC_HOST_CPU_AUTO}")
+  endif()
+  custom_try_compile_clang_silent("" "return 0;" RES ${CLANG_TARGET_OPTION}${LLC_TRIPLE} -march=${LLC_HOST_CPU_TEST})
   if(NOT RES)
     set(CLANG_MARCH_FLAG "-march=")
   else()
-    custom_try_compile_clang_silent("" "return 0;" RES ${CLANG_TARGET_OPTION}${LLC_TRIPLE} -mcpu=${SELECTED_HOST_CPU})
+    custom_try_compile_clang_silent("" "return 0;" RES ${CLANG_TARGET_OPTION}${LLC_TRIPLE} -mcpu=${LLC_HOST_CPU_TEST})
     if(NOT RES)
       set(CLANG_MARCH_FLAG "-mcpu=")
     else()
       message(FATAL_ERROR "Could not determine whether to use -march or -mcpu with clang")
     endif()
   endif()
+ endif()
   message(STATUS "  Using ${CLANG_MARCH_FLAG}")
 
   set(CLANG_MARCH_FLAG ${CLANG_MARCH_FLAG} CACHE INTERNAL "Clang option used to specify the target cpu")
index 01803a5e4a58c470cd7b2f61132d0ffea757c239..ac8f9231fd437722b3489cb65adc0c961ebecd50 100644 (file)
@@ -1673,6 +1673,9 @@ pocl_init_default_device_infos (cl_device_id dev)
   dev->llvm_cpu = pocl_get_llvm_cpu_name ();
 #endif
 
+  if(dev->llvm_cpu && (!strcmp(dev->llvm_cpu, "GENERIC")))
+    dev->llvm_cpu = NULL;
+
 #else /* No compiler, no CPU info */
   dev->kernellib_name = NULL;
   dev->llvm_cpu = NULL;
index 59e5780b718c35211001ac38d05b1dc8fbc856cb..302bfef914f312daaeb8653ded63b9ae3430b502 100644 (file)
@@ -1012,8 +1012,7 @@ static llvm::Module *getKernelLibrary(cl_device_id device,
     kernellib_fallback = kernellib;
     kernellib_fallback += OCL_KERNEL_TARGET_CPU;
     kernellib_fallback += ".bc";
-    if (device->llvm_cpu)
-      kernellib += device->llvm_cpu;
+    kernellib += device->llvm_cpu ? device->llvm_cpu : "GENERIC";
 #endif
   }
   kernellib += ".bc";
index c14ec6d38cc50baf6a0c87b776b546e781af3f2a..ed1f98997388d1a72ffa384f4cf010c244e882c1 100644 (file)
@@ -587,6 +587,11 @@ else()
   set(LLC_CPUFLAGS "-mcpu=${VARIANT}")
 endif()
 
+if("${VARIANT}" STREQUAL "GENERIC")
+  set(CLANG_CPUFLAGS "")
+  set(LLC_CPUFLAGS "")
+endif()
+
 separate_arguments(CLANG_CPUFLAGS)
 separate_arguments(LLC_CPUFLAGS)
 set(CLANG_FLAGS ${HOST_CLANG_FLAGS} ${CLANG_CPUFLAGS}