From 9a5cd969bb16b2b74437040a736d07b28cdbde94 Mon Sep 17 00:00:00 2001 From: Andreas Beckmann Date: Mon, 14 Aug 2023 14:53:17 +0100 Subject: [PATCH] add support for a GENERIC cpu type that uses llvm defaults Forwarded: not-needed Gbp-Pq: Name generic-cpu.patch --- cmake/LLVM.cmake | 12 ++++++++++-- lib/CL/devices/common.c | 3 +++ lib/CL/pocl_llvm_build.cc | 3 +-- lib/kernel/host/CMakeLists.txt | 5 +++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/cmake/LLVM.cmake b/cmake/LLVM.cmake index eef1039..e0260ae 100644 --- a/cmake/LLVM.cmake +++ b/cmake/LLVM.cmake @@ -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") diff --git a/lib/CL/devices/common.c b/lib/CL/devices/common.c index 01803a5..ac8f923 100644 --- a/lib/CL/devices/common.c +++ b/lib/CL/devices/common.c @@ -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; diff --git a/lib/CL/pocl_llvm_build.cc b/lib/CL/pocl_llvm_build.cc index 59e5780..302bfef 100644 --- a/lib/CL/pocl_llvm_build.cc +++ b/lib/CL/pocl_llvm_build.cc @@ -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"; diff --git a/lib/kernel/host/CMakeLists.txt b/lib/kernel/host/CMakeLists.txt index 6caef5a..c5bbfc1 100644 --- a/lib/kernel/host/CMakeLists.txt +++ b/lib/kernel/host/CMakeLists.txt @@ -571,6 +571,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} -- 2.30.2