From eb57524609acd41988eabad8cf670ac8e5b16584 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Thu, 20 Nov 2025 12:22:07 +0100 Subject: [PATCH 01/13] [libclc][Cmake] Change libclc library output library to clang resource dir Restore pulldown omissions: * Restore output layout from df7473673214: build/lib/clc -> build/lib/clang//lib/libclc * Restore standalone build LIBCLC_INSTALL_DIR from b9e2f7ac0489. Additional changes: * Remove repeated directory creation for LIBCLC_OUTPUT_LIBRARY_DIR. * Install libspirv remangled-* bitcodes into LIBCLC_INSTALL_DIR. * SYCLInstallationDetector findLibspirvPath is now simplifed. --- clang/lib/Driver/ToolChains/SYCL.cpp | 9 +-- ...-signed_char.libspirv-amdgcn-amd-amdhsa.bc | 0 ...igned_char.libspirv-nvptx64-nvidia-cuda.bc | 0 ...-signed_char.libspirv-amdgcn-amd-amdhsa.bc | 0 ...igned_char.libspirv-nvptx64-nvidia-cuda.bc | 0 clang/test/Driver/sycl-cuda-rdc.cpp | 3 +- clang/test/Driver/sycl-device-obj-asm.cpp | 4 +- clang/test/Driver/sycl-libspirv-toolchain.cpp | 57 +++++++++---------- clang/test/Driver/sycl-nvptx-link.cpp | 12 ++-- clang/test/Driver/sycl-offload-nvptx.cpp | 4 +- clang/test/Driver/sycl-offload-old-model.c | 8 +-- .../sycl-offload-static-lib-2-old-model.cpp | 4 +- clang/test/Driver/sycl-oneapi-gpu-nvidia.cpp | 2 +- libclc/CMakeLists.txt | 38 +++++-------- libclc/cmake/modules/AddLibclc.cmake | 24 +++----- 15 files changed, 70 insertions(+), 95 deletions(-) rename clang/test/Driver/Inputs/SYCL/{share/clc => lib/clang/resource_dir/lib/libclc}/remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc (100%) rename clang/test/Driver/Inputs/SYCL/{share/clc => lib/clang/resource_dir/lib/libclc}/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc (100%) rename clang/test/Driver/Inputs/SYCL/{share/clc => lib/clang/resource_dir/lib/libclc}/remangled-l64-signed_char.libspirv-amdgcn-amd-amdhsa.bc (100%) rename clang/test/Driver/Inputs/SYCL/{share/clc => lib/clang/resource_dir/lib/libclc}/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc (100%) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index c051255ab7f9c..207ee454cb42c 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -75,15 +75,8 @@ const char *SYCLInstallationDetector::findLibspirvPath( return nullptr; }; - for (const auto &IC : InstallationCandidates) { - // Expected path w/out install. - if (const char *R = searchAt(IC, "lib", "clc")) - return R; - - // Expected path w/ install. - if (const char *R = searchAt(IC, "share", "clc")) + if (const char *R = searchAt(D.ResourceDir, "lib", "libclc")) return R; - } return nullptr; } diff --git a/clang/test/Driver/Inputs/SYCL/share/clc/remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc b/clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc similarity index 100% rename from clang/test/Driver/Inputs/SYCL/share/clc/remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc rename to clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc diff --git a/clang/test/Driver/Inputs/SYCL/share/clc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc b/clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc similarity index 100% rename from clang/test/Driver/Inputs/SYCL/share/clc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc rename to clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc diff --git a/clang/test/Driver/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-amdgcn-amd-amdhsa.bc b/clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-amdgcn-amd-amdhsa.bc similarity index 100% rename from clang/test/Driver/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-amdgcn-amd-amdhsa.bc rename to clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-amdgcn-amd-amdhsa.bc diff --git a/clang/test/Driver/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc b/clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc similarity index 100% rename from clang/test/Driver/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc rename to clang/test/Driver/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc diff --git a/clang/test/Driver/sycl-cuda-rdc.cpp b/clang/test/Driver/sycl-cuda-rdc.cpp index 79072a5babbfa..3e0411f7cd8f4 100644 --- a/clang/test/Driver/sycl-cuda-rdc.cpp +++ b/clang/test/Driver/sycl-cuda-rdc.cpp @@ -4,7 +4,8 @@ // UNSUPPORTED: system-windows -// RUN: %clangxx -### -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend --cuda-gpu-arch=sm_61 -fgpu-rdc -nocudalib -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc %s 2>&1 \ +// RUN: %clangxx -### -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend --cuda-gpu-arch=sm_61 -fgpu-rdc -nocudalib \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc %s 2>&1 \ // RUN: | FileCheck %s -check-prefix=CHECK-SYCL_RDC_NVPTX // Verify that ptxas does not pass "-c" diff --git a/clang/test/Driver/sycl-device-obj-asm.cpp b/clang/test/Driver/sycl-device-obj-asm.cpp index 6a4090672db92..a23e994fba845 100644 --- a/clang/test/Driver/sycl-device-obj-asm.cpp +++ b/clang/test/Driver/sycl-device-obj-asm.cpp @@ -30,10 +30,10 @@ /// -fsycl-device-obj=asm should always be accompanied by -fsycl-device-only /// and -S, check that the compiler issues a correct warning message: -// RUN: %clang -### -nocudalib -fsycl-device-only -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --cuda-gpu-arch=sm_50 -fsycl-device-obj=asm %s 2>&1 -o - -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc | FileCheck %s --check-prefix=CHECK-NO-DEV-ONLY-NO-S +// RUN: %clang -### -nocudalib -fsycl-device-only -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --cuda-gpu-arch=sm_50 -fsycl-device-obj=asm %s 2>&1 -o - -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc | FileCheck %s --check-prefix=CHECK-NO-DEV-ONLY-NO-S // CHECK-NO-DEV-ONLY-NO-S: warning: -fsycl-device-obj=asm flag has an effect only when compiling device code and emitting assembly, make sure both -fsycl-device-only and -S flags are present; will be ignored [-Wunused-command-line-argument] /// -fsycl-device-obj=asm will finish at generating assembly stage, hence /// inform users that generating library will not be possible (ignore -c) -// RUN: %clang -### -nocudalib -fsycl-device-only -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --cuda-gpu-arch=sm_50 -fsycl-device-obj=asm %s 2>&1 -fsycl-device-only -S -c -o - -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc | FileCheck %s --check-prefix=CHECK-DASH-C-IGNORE +// RUN: %clang -### -nocudalib -fsycl-device-only -fsycl -fsycl-targets=nvptx64-nvidia-cuda -Xsycl-target-backend=nvptx64-nvidia-cuda --cuda-gpu-arch=sm_50 -fsycl-device-obj=asm %s 2>&1 -fsycl-device-only -S -c -o - -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc | FileCheck %s --check-prefix=CHECK-DASH-C-IGNORE // CHECK-DASH-C-IGNORE: warning: argument unused during compilation: '-c' [-Wunused-command-line-argument] diff --git a/clang/test/Driver/sycl-libspirv-toolchain.cpp b/clang/test/Driver/sycl-libspirv-toolchain.cpp index 64f64d7f2260f..15ed431b4734c 100644 --- a/clang/test/Driver/sycl-libspirv-toolchain.cpp +++ b/clang/test/Driver/sycl-libspirv-toolchain.cpp @@ -1,27 +1,26 @@ // Test the search logic for the libspirv bitcode library in the offloading toolchains that need it. -// DEFINE: %{install_dir} = %/S/Inputs/SYCL/bin // DEFINE: %{resource_dir} = %/S/Inputs/SYCL/lib/clang/resource_dir -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-msvc %s 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=CHECK-WINDOWS -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-gnu %s 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=CHECK-WINDOWS -// CHECK-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc" -// -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-linux-gnu %s 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=CHECK-LINUX -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-cygnus %s 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=CHECK-LINUX -// CHECK-LINUX: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc" -// -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=gfx908 -nogpulib -target x86_64-unknown-windows-msvc %s 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=CHECK-AMDGCN-WINDOWS -// CHECK-AMDGCN-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc" -// -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-device-only -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ -// RUN: | FileCheck %s --check-prefixes=CHECK-DEVICE-ONLY -// CHECK-DEVICE-ONLY: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc" +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-msvc %s 2>&1 \ +// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-WINDOWS +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-gnu %s 2>&1 \ +// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-WINDOWS +// CHECK-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc" +// +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-linux-gnu %s 2>&1 \ +// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-LINUX +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-cygnus %s 2>&1 \ +// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-LINUX +// CHECK-LINUX: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc" +// +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=gfx908 -nogpulib -target x86_64-unknown-windows-msvc %s 2>&1 \ +// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-AMDGCN-WINDOWS +// CHECK-AMDGCN-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc" +// +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-device-only -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ +// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-DEVICE-ONLY +// CHECK-DEVICE-ONLY: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc" // // Only link libspirv in SYCL language mode, `-fno-sycl-libspirv` should result in a warning // RUN: %clang -### -x cu -fno-sycl-libspirv -nocudainc -nocudalib %s 2>&1 | FileCheck %s --check-prefixes=CHECK-CUDA @@ -30,20 +29,20 @@ // CHECK-CUDA-NOT: "-mlink-builtin-bitcode" "{{.*}}.libspirv-{{.*}}.bc" // // The path to the remangled libspirv bitcode file is determined by the installation directory -// RUN: %clang -### -ccc-install-dir %{install_dir} -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ -// RUN: | FileCheck %s -DINSTALL_DIR=%{install_dir} -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-DIR -// CHECK-DIR: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[INSTALL_DIR]]{{.*[\\/]}}remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc" +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ +// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-DIR +// CHECK-DIR: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc" // // If libspirv path doesn't exist, error is reported. // DEFINE: %{nonexistent_dir} = %/S/Inputs/SYCL/does_not_exist/lib/clang/resource_dir -// RUN: not %clang -### -ccc-install-dir %{nonexistent_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ -// RUN: | FileCheck %s -DDIR=%{nonexistent_dir} --check-prefixes=CHECK-HHH-NONEXISTENT +// RUN: not %clang -### -resource-dir %{nonexistent_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ +// RUN: | FileCheck %s -DDIR=%{nonexistent_dir} --check-prefixes=CHECK-HHH-NONEXISTENT // CHECK-HHH-NONEXISTENT: error: cannot find 'remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc'; provide path to libspirv library via '-fsycl-libspirv-path', or pass '-fno-sycl-libspirv' to build without linking with libspirv // -// RUN: not %clang -### -ccc-install-dir %{nonexistent_dir} -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=gfx908 -nogpulib %s 2>&1 \ -// RUN: | FileCheck %s -DDIR=%{nonexistent_dir} --check-prefixes=CHECK-AMDGCN-HHH-NONEXISTENT +// RUN: not %clang -### -resource-dir %{nonexistent_dir} -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=gfx908 -nogpulib %s 2>&1 \ +// RUN: | FileCheck %s -DDIR=%{nonexistent_dir} --check-prefixes=CHECK-AMDGCN-HHH-NONEXISTENT // CHECK-AMDGCN-HHH-NONEXISTENT: clang: error: cannot find 'remangled-{{.*}}.libspirv-amdgcn-amd-amdhsa.bc'; provide path to libspirv library via '-fsycl-libspirv-path', or pass '-fno-sycl-libspirv' to build without linking with libspirv // -// RUN: not %clang -fdriver-only -ccc-install-dir %{nonexistent_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ -// RUN: | FileCheck %s -DDIR=%{nonexistent_dir} --check-prefixes=CHECK-DO-NONEXISTENT +// RUN: not %clang -fdriver-only -resource-dir %{nonexistent_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ +// RUN: | FileCheck %s -DDIR=%{nonexistent_dir} --check-prefixes=CHECK-DO-NONEXISTENT // CHECK-DO-NONEXISTENT: error: cannot find 'remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc'; provide path to libspirv library via '-fsycl-libspirv-path', or pass '-fno-sycl-libspirv' to build without linking with libspirv diff --git a/clang/test/Driver/sycl-nvptx-link.cpp b/clang/test/Driver/sycl-nvptx-link.cpp index 9220f7171e5ea..9f3d0bf554d6d 100644 --- a/clang/test/Driver/sycl-nvptx-link.cpp +++ b/clang/test/Driver/sycl-nvptx-link.cpp @@ -10,29 +10,29 @@ // correctly versioned libdevice. We use Inputs/CUDA_80 which has a full set of // libdevice files. -// DEFINE: %{install_dir} = %/S/Inputs/SYCL/bin +// DEFINE: %{resource_dir} = %/S/Inputs/SYCL/lib/clang/resource_dir -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ // RUN: -Xsycl-target-backend --cuda-gpu-arch=sm_30 \ // RUN: --sysroot=%S/Inputs/SYCL --cuda-path=%S/Inputs/CUDA_80/usr/local/cuda %s 2>&1 \ // RUN: | FileCheck %s --check-prefixes=CHECK,LIBDEVICE30 -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ // RUN: -Xsycl-target-backend --cuda-gpu-arch=sm_35 \ // RUN: --sysroot=%S/Inputs/SYCL --cuda-path=%S/Inputs/CUDA_80/usr/local/cuda %s 2>&1 \ // RUN: | FileCheck %s --check-prefixes=CHECK,LIBDEVICE35 -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ // RUN: -Xsycl-target-backend --cuda-gpu-arch=sm_50 \ // RUN: --sysroot=%S/Inputs/SYCL --cuda-path=%S/Inputs/CUDA_80/usr/local/cuda %s 2>&1 \ // RUN: | FileCheck %s --check-prefixes=CHECK,LIBDEVICE50 // CUDA-9+ uses the same libdevice for all GPU variants -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda \ // RUN: -Xsycl-target-backend --cuda-gpu-arch=sm_35 \ // RUN: --sysroot=%S/Inputs/SYCL --cuda-path=%S/Inputs/CUDA_90/usr/local/cuda %s 2>&1 \ // RUN: | FileCheck %s --check-prefixes=CHECK,LIBDEVICE10 // Check also that -nocudalib is obeyed -// RUN: %clang -### -ccc-install-dir %{install_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib \ +// RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib \ // RUN: -Xsycl-target-backend --cuda-gpu-arch=sm_35 \ // RUN: --sysroot=%S/Inputs/SYCL --cuda-path=%S/Inputs/CUDA_90/usr/local/cuda %s 2>&1 \ // RUN: | FileCheck %s --check-prefixes=CHECK,NOLIBDEVICE diff --git a/clang/test/Driver/sycl-offload-nvptx.cpp b/clang/test/Driver/sycl-offload-nvptx.cpp index c20273fed071b..d2dcbada56def 100644 --- a/clang/test/Driver/sycl-offload-nvptx.cpp +++ b/clang/test/Driver/sycl-offload-nvptx.cpp @@ -38,7 +38,7 @@ // RUN: %clangxx -ccc-print-phases --sysroot=%S/Inputs/SYCL -std=c++11 \ // RUN: -target x86_64-unknown-linux-gnu -fsycl --no-offloadlib \ // RUN: -fsycl-targets=nvptx64-nvidia-cuda %s 2>&1 \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ // RUN: | FileCheck -check-prefix=CHK-PHASES-NO-CC %s // @@ -71,7 +71,7 @@ // RUN: %clangxx -ccc-print-phases --sysroot=%S/Inputs/SYCL -std=c++11 \ // RUN: -target x86_64-unknown-linux-gnu -fsycl --no-offloadlib \ // RUN: -fsycl-targets=nvptx64-nvidia-cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ // RUN: -Xsycl-target-backend "--cuda-gpu-arch=sm_35" %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-PHASES %s diff --git a/clang/test/Driver/sycl-offload-old-model.c b/clang/test/Driver/sycl-offload-old-model.c index c19e909452ddf..c3c980ee6c885 100644 --- a/clang/test/Driver/sycl-offload-old-model.c +++ b/clang/test/Driver/sycl-offload-old-model.c @@ -605,7 +605,7 @@ /// Verify that triple-boundarch pairs are correct with multi-targetting // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl --no-offload-new-driver -fno-sycl-instrument-device-code --no-offloadlib \ // RUN: -fsycl-targets=nvptx64-nvidia-cuda,spir64 -ccc-print-phases --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc %s 2>&1 \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-PHASE-MULTI-TARG-BOUND-ARCH %s // CHK-PHASE-MULTI-TARG-BOUND-ARCH: 0: input, "[[INPUT:.+\.c]]", c++, (host-sycl) // CHK-PHASE-MULTI-TARG-BOUND-ARCH: 1: preprocessor, {0}, c++-cpp-output, (host-sycl) @@ -644,7 +644,7 @@ // RUN: -fno-sycl-instrument-device-code --no-offloadlib \ // RUN: -fsycl-targets=nvptx64-nvidia-cuda,spir64_gen \ // RUN: --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: -Xsycl-target-backend=spir64_gen "-device skl" \ // RUN: -ccc-print-phases %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-PHASE-MULTI-TARG-BOUND-ARCH2 %s @@ -686,7 +686,7 @@ // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl --no-offload-new-driver \ // RUN: -fno-sycl-instrument-device-code --no-offloadlib \ // RUN: --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: -fsycl-targets=spir64,nvptx64-nvidia-cuda -ccc-print-phases %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHK-PHASE-MULTI-TARG-BOUND-ARCH-FLIPPED %s // CHK-PHASE-MULTI-TARG-BOUND-ARCH-FLIPPED: 0: input, "[[INPUT:.+\.c]]", c++, (host-sycl) @@ -728,7 +728,7 @@ // RUN: %clang -target x86_64-unknown-linux-gnu -fsycl --no-offload-new-driver \ // RUN: -fno-sycl-instrument-device-code --no-offloadlib \ // RUN: --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: -fsycl-targets=spir64,nvptx64-nvidia-cuda,amdgcn-amd-amdhsa \ // RUN: -Xsycl-target-backend=nvptx64-nvidia-cuda --offload-arch=sm_75 \ // RUN: -Xsycl-target-backend=amdgcn-amd-amdhsa --offload-arch=gfx908 -ccc-print-phases %s 2>&1 \ diff --git a/clang/test/Driver/sycl-offload-static-lib-2-old-model.cpp b/clang/test/Driver/sycl-offload-static-lib-2-old-model.cpp index 3ba847a3872a5..69c8ffd1d0abc 100644 --- a/clang/test/Driver/sycl-offload-static-lib-2-old-model.cpp +++ b/clang/test/Driver/sycl-offload-static-lib-2-old-model.cpp @@ -88,12 +88,12 @@ // RUN: touch %t_lib.a // RUN: %clangxx -target x86_64-unknown-linux-gnu -fno-sycl-instrument-device-code \ // RUN: --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: --no-offloadlib -fsycl --no-offload-new-driver %t_lib.a -ccc-print-phases %s 2>&1 \ // RUN: | FileCheck %s -check-prefix=STATIC_LIB_SRC -DBUNDLE_TRIPLE=sycl-spir64-unknown-unknown // RUN: %clangxx -target x86_64-unknown-linux-gnu -fno-sycl-instrument-device-code --no-offloadlib \ // RUN: --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: -fsycl-targets=nvptx64-nvidia-cuda -fsycl --no-offload-new-driver %t_lib.a -ccc-print-phases %s 2>&1 \ // RUN: | FileCheck %s -check-prefix=STATIC_LIB_SRC-CUDA // STATIC_LIB_SRC: 0: input, "[[INPUTA:.+\.a]]", object, (host-sycl) diff --git a/clang/test/Driver/sycl-oneapi-gpu-nvidia.cpp b/clang/test/Driver/sycl-oneapi-gpu-nvidia.cpp index 0925795e00c2b..5c422801cb98b 100644 --- a/clang/test/Driver/sycl-oneapi-gpu-nvidia.cpp +++ b/clang/test/Driver/sycl-oneapi-gpu-nvidia.cpp @@ -84,7 +84,7 @@ /// offload action used for compilation and backend compilation. // RUN: %clangxx -fsycl -fsycl-targets=nvidia_gpu_sm_50 --no-offloadlib \ // RUN: -fno-sycl-instrument-device-code --cuda-path=%S/Inputs/CUDA_111/usr/local/cuda \ -// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/share/clc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ +// RUN: -fsycl-libspirv-path=%S/Inputs/SYCL/lib/clang/resource_dir/lib/libclc/remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc \ // RUN: -target x86_64-unknown-linux-gnu -ccc-print-phases %s 2>&1 | \ // RUN: FileCheck %s --check-prefix=NVIDIA_CHECK_PHASES // NVIDIA_CHECK_PHASES: 0: input, "[[INPUT:.+\.cpp]]", c++, (host-sycl) diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt index 297fbb50de655..e5855e5b982cd 100644 --- a/libclc/CMakeLists.txt +++ b/libclc/CMakeLists.txt @@ -84,6 +84,10 @@ if( LIBCLC_STANDALONE_BUILD OR CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DI set( ${tool}_target ) endforeach() endif() + + # Setup the paths where libclc runtimes should be stored. + set( LIBCLC_OUTPUT_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR} ) + set( LIBCLC_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/clc ) else() # In-tree configuration set( LIBCLC_STANDALONE_BUILD FALSE ) @@ -104,7 +108,17 @@ else() get_host_tool_path( llvm-spirv LLVM_SPIRV llvm-spirv_exe llvm-spirv_target ) get_host_tool_path( opt OPT opt_exe opt_target ) endif() + + # Setup the paths where libclc runtimes should be stored. By default, in an + # in-tree build we place the libraries in clang's resource driectory. + include(GetClangResourceDir) + get_clang_resource_dir( LIBCLC_INSTALL_DIR ) cmake_path( APPEND LIBCLC_INSTALL_DIR "lib" "libclc" ) + + # Note we do not adhere to LLVM_ENABLE_PER_TARGET_RUNTIME_DIR. + cmake_path( GET LLVM_LIBRARY_OUTPUT_INTDIR PARENT_PATH LIBCLC_OUTPUT_LIBRARY_DIR ) + cmake_path( APPEND LIBCLC_OUTPUT_LIBRARY_DIR ${LIBCLC_INSTALL_DIR} ) + file( MAKE_DIRECTORY ${LIBCLC_OUTPUT_LIBRARY_DIR} ) endif() if( EXISTS ${LIBCLC_CUSTOM_LLVM_TOOLS_BINARY_DIR} ) @@ -351,18 +365,6 @@ set_source_files_properties( enable_testing() -if (LIBCLC_STANDALONE_BUILD) - set(LIBCLC_LIBRARY_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}) -else(LIBCLC_STANDALONE_BUILD) - set(LIBCLC_LIBRARY_OUTPUT_INTDIR ${LLVM_LIBRARY_OUTPUT_INTDIR}) -endif(LIBCLC_STANDALONE_BUILD) -file( TO_CMAKE_PATH ${LIBCLC_LIBRARY_OUTPUT_INTDIR}/clc LIBCLC_LIBRARY_OUTPUT_INTDIR ) - -# Setup the paths where libclc runtimes should be stored. -# FIXME: Align with upstream -set( LIBCLC_OUTPUT_LIBRARY_DIR ${LIBCLC_LIBRARY_OUTPUT_INTDIR} ) -file( MAKE_DIRECTORY ${LIBCLC_OUTPUT_LIBRARY_DIR} ) - foreach( t ${LIBCLC_TARGETS_TO_BUILD} ) message( STATUS "libclc target '${t}' is enabled" ) string( REPLACE "-" ";" TRIPLE ${t}-- ) @@ -630,16 +632,4 @@ foreach( t ${LIBCLC_TARGETS_TO_BUILD} ) endforeach( d ) endforeach( t ) -install(DIRECTORY ${LIBCLC_LIBRARY_OUTPUT_INTDIR} - DESTINATION lib${LLVM_LIBDIR_SUFFIX} - COMPONENT libspirv-builtins - FILES_MATCHING PATTERN "libspirv-*") - -if( LIBCLC_GENERATE_REMANGLED_VARIANTS ) - install(DIRECTORY ${LIBCLC_LIBRARY_OUTPUT_INTDIR} - DESTINATION lib${LLVM_LIBDIR_SUFFIX} - COMPONENT libspirv-builtins - FILES_MATCHING PATTERN "remangled-*libspirv-*") -endif() - add_subdirectory(test) diff --git a/libclc/cmake/modules/AddLibclc.cmake b/libclc/cmake/modules/AddLibclc.cmake index 91ba847a15a7f..c26b78fea7223 100644 --- a/libclc/cmake/modules/AddLibclc.cmake +++ b/libclc/cmake/modules/AddLibclc.cmake @@ -448,10 +448,6 @@ function(add_libclc_builtin_set) set( builtins_link_lib $ ) - add_custom_command( OUTPUT ${LIBCLC_OUTPUT_LIBRARY_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBCLC_OUTPUT_LIBRARY_DIR} - DEPENDS ${builtins_link_lib} prepare_builtins ) - # For SPIR-V targets we diverage at this point and generate SPIR-V using the # llvm-spirv tool. if( ARG_ARCH STREQUAL spirv OR ARG_ARCH STREQUAL spirv64 ) @@ -524,7 +520,6 @@ function(add_libclc_builtin_set) if( ARG_REMANGLE ) set( dummy_in ${LIBCLC_OUTPUT_LIBRARY_DIR}/libclc_dummy_in.cc ) add_custom_command( OUTPUT ${dummy_in} - COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBCLC_OUTPUT_LIBRARY_DIR} COMMAND ${CMAKE_COMMAND} -E touch ${dummy_in} ) set(long_widths l32 l64) @@ -540,10 +535,9 @@ function(add_libclc_builtin_set) foreach(long_width ${long_widths}) foreach(signedness ${char_signedness}) # Remangle - set( builtins_remangle_path - "${LIBCLC_OUTPUT_LIBRARY_DIR}/remangled-${long_width}-${signedness}_char.${obj_suffix_mangled}" ) + set( remangled_filename remangled-${long_width}-${signedness}_char.${obj_suffix_mangled} ) + set( builtins_remangle_path "${LIBCLC_OUTPUT_LIBRARY_DIR}/${remangled_filename}" ) add_custom_command( OUTPUT "${builtins_remangle_path}" - COMMAND ${CMAKE_COMMAND} -E make_directory ${LIBCLC_OUTPUT_LIBRARY_DIR} COMMAND ${libclc-remangler_exe} -o "${builtins_remangle_path}" --triple=${ARG_TRIPLE} @@ -552,19 +546,17 @@ function(add_libclc_builtin_set) --input-ir=${libclc_builtins_lib} ${dummy_in} DEPENDS prepare-${obj_suffix} ${libclc_builtins_lib} ${libclc-remangler_target} ${dummy_in}) - add_custom_target( "remangled-${long_width}-${signedness}_char.${obj_suffix_mangled}" ALL - DEPENDS "${builtins_remangle_path}" "${dummy_in}") - set_target_properties("remangled-${long_width}-${signedness}_char.${obj_suffix_mangled}" - PROPERTIES TARGET_FILE "${builtins_remangle_path}") + add_custom_target( ${remangled_filename} ALL + DEPENDS "${builtins_remangle_path}" "${dummy_in}" ) + set_target_properties( ${remangled_filename} + PROPERTIES TARGET_FILE "${builtins_remangle_path}" ) # Add dependency to top-level pseudo target to ease making other # targets dependent on libclc. - add_dependencies(${ARG_PARENT_TARGET} "remangled-${long_width}-${signedness}_char.${obj_suffix_mangled}") + add_dependencies( ${ARG_PARENT_TARGET} ${remangled_filename} ) # Keep remangled variants - install( - FILES ${builtins_remangle_path} - DESTINATION ${CMAKE_INSTALL_DATADIR}/clc ) + libclc_install( FILES ${builtins_remangle_path} ) endforeach() endforeach() From 2631041a683c66f77bcee048b1813a2dff724825 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Thu, 20 Nov 2025 12:47:26 +0100 Subject: [PATCH 02/13] clang-format --- clang/lib/Driver/ToolChains/SYCL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 207ee454cb42c..dc189e2b3be7e 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -76,7 +76,7 @@ const char *SYCLInstallationDetector::findLibspirvPath( }; if (const char *R = searchAt(D.ResourceDir, "lib", "libclc")) - return R; + return R; return nullptr; } From f21453f2829ba661aa845ffd7f6f5dfdd8b6b43c Mon Sep 17 00:00:00 2001 From: Wenju He Date: Fri, 21 Nov 2025 13:17:50 +0100 Subject: [PATCH 03/13] fix check-libclc --- libclc/test/lit.cfg.py | 2 +- libclc/test/lit.site.cfg.py.in | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libclc/test/lit.cfg.py b/libclc/test/lit.cfg.py index 048565af0dc30..b5fb01be7ebc2 100644 --- a/libclc/test/lit.cfg.py +++ b/libclc/test/lit.cfg.py @@ -63,7 +63,7 @@ def quote(s): "-Xclang", "-mlink-builtin-bitcode", "-Xclang", - os.path.join(config.llvm_libs_dir, "clc", f"libspirv-{config.libclc_target}.bc"), + os.path.join(config.libclc_output_dir, f"libspirv-{config.libclc_target}.bc"), "-nogpulib", ] diff --git a/libclc/test/lit.site.cfg.py.in b/libclc/test/lit.site.cfg.py.in index b6614c8e62f83..4aed88868c9d4 100644 --- a/libclc/test/lit.site.cfg.py.in +++ b/libclc/test/lit.site.cfg.py.in @@ -6,7 +6,6 @@ import sys config.llvm_src_root = "@LLVM_SOURCE_DIR@" config.llvm_obj_root = "@LLVM_BINARY_DIR@" config.llvm_tools_dir = "@LLVM_TOOLS_DIR@" -config.llvm_libs_dir = "@LLVM_LIBS_DIR@" config.llvm_shlib_dir = "@SHLIBDIR@" config.llvm_plugin_ext = "@LLVM_PLUGIN_EXT@" config.lit_tools_dir = "@LLVM_LIT_TOOLS_DIR@" @@ -15,8 +14,8 @@ config.target_triple = "@LLVM_TARGET_TRIPLE@" config.host_arch = "@HOST_ARCH@" config.python_executable = "@PYTHON_EXECUTABLE@" config.libclc_root = "@LIBCLC_SOURCE_DIR@" -config.libclc_binary_dir = "@LIBCLC_BINARY_DIR@" config.libclc_targets_to_test = "@LIBCLC_TARGET_TO_TEST@".split(";") +config.libclc_output_dir = "@LIBCLC_OUTPUT_LIBRARY_DIR@" config.libclc_pertarget_test_dir = "@LIBCLC_PERTARGET_TEST_DIR@" import lit.llvm From db7fc8aac0620c5b2fcc012cf622dbd2ce924261 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Mon, 24 Nov 2025 13:47:47 +0100 Subject: [PATCH 04/13] restore libspirv install component --- libclc/cmake/modules/AddLibclc.cmake | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libclc/cmake/modules/AddLibclc.cmake b/libclc/cmake/modules/AddLibclc.cmake index c26b78fea7223..be9294eb59a06 100644 --- a/libclc/cmake/modules/AddLibclc.cmake +++ b/libclc/cmake/modules/AddLibclc.cmake @@ -253,10 +253,12 @@ endfunction() # Install libclc artifacts. # # Arguments: +# * COMPONENT +# Installation component name. # * FILES ... # List of libclc artifact files to be installed. function(libclc_install) - cmake_parse_arguments(ARG "" "" "FILES" ${ARGN}) + cmake_parse_arguments(ARG "" "COMPONENT" "FILES" ${ARGN}) if( NOT ARG_FILES ) message( FATAL_ERROR "Must provide FILES" ) @@ -274,6 +276,7 @@ function(libclc_install) install( FILES ${files} DESTINATION ${LIBCLC_INSTALL_DIR} + COMPONENT ${ARG_COMPONENT} ) endfunction() @@ -509,7 +512,7 @@ function(add_libclc_builtin_set) # targets dependent on libclc. add_dependencies( ${ARG_PARENT_TARGET} prepare-${ARG_TRIPLE} ) - libclc_install(FILES ${libclc_builtins_lib}) + libclc_install( COMPONENT ${ARG_PARENT_TARGET} FILES ${libclc_builtins_lib} ) # SPIR-V targets can exit early here if( ARG_ARCH STREQUAL spirv OR ARG_ARCH STREQUAL spirv64 ) @@ -556,7 +559,7 @@ function(add_libclc_builtin_set) add_dependencies( ${ARG_PARENT_TARGET} ${remangled_filename} ) # Keep remangled variants - libclc_install( FILES ${builtins_remangle_path} ) + libclc_install( COMPONENT ${ARG_PARENT_TARGET} FILES ${builtins_remangle_path} ) endforeach() endforeach() @@ -615,7 +618,9 @@ function(add_libclc_builtin_set) set_target_properties( alias-${alias_suffix} PROPERTIES FOLDER "libclc/Device IR/Aliases" ) - libclc_install(FILES ${LIBCLC_OUTPUT_LIBRARY_DIR}/${alias_suffix}) + libclc_install( COMPONENT ${ARG_PARENT_TARGET} + FILES ${LIBCLC_OUTPUT_LIBRARY_DIR}/${alias_suffix} + ) endforeach( a ) endfunction(add_libclc_builtin_set) From 8da81b7ab15fa5219acf33ae612f93ecc9d3fdc4 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Nov 2025 04:02:21 +0100 Subject: [PATCH 05/13] add search path for sycl-jit-toolchain --- clang/lib/Driver/ToolChains/SYCL.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index dc189e2b3be7e..45f55d050c311 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -64,20 +64,26 @@ const char *SYCLInstallationDetector::findLibspirvPath( const SmallString<64> Basename = getLibSpirvBasename(DeviceTriple, HostTriple); - auto searchAt = [&](StringRef Path, const Twine &a = "", const Twine &b = "", - const Twine &c = "") -> const char * { - SmallString<128> LibraryPath(Path); - llvm::sys::path::append(LibraryPath, a, b, c, Basename); - + auto searchAt = [&](StringRef Path) -> const char * { + SmallString<256> LibraryPath(Path); + llvm::sys::path::append(LibraryPath, "lib", "libclc", Basename); if (D.getVFS().exists(LibraryPath)) return Args.MakeArgString(LibraryPath); return nullptr; }; - if (const char *R = searchAt(D.ResourceDir, "lib", "libclc")) + if (const char *R = searchAt(D.ResourceDir)) return R; + // For sycl-jit + for (const auto &IC : InstallationCandidates) { + SmallString<256> ICPath(IC); + llvm::sys::path::append(ICPath, "dummy", "dummy"); + if (const char *R = searchAt(D.GetResourcesPath(ICPath))) + return R; + } + return nullptr; } From b2ef5a2d950c6d167a5cb0c6194a51ad583e6b6b Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Nov 2025 06:58:21 +0100 Subject: [PATCH 06/13] Revert "add search path for sycl-jit-toolchain" This reverts commit 8da81b7ab15fa5219acf33ae612f93ecc9d3fdc4. --- clang/lib/Driver/ToolChains/SYCL.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index 45f55d050c311..dc189e2b3be7e 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -64,26 +64,20 @@ const char *SYCLInstallationDetector::findLibspirvPath( const SmallString<64> Basename = getLibSpirvBasename(DeviceTriple, HostTriple); - auto searchAt = [&](StringRef Path) -> const char * { - SmallString<256> LibraryPath(Path); - llvm::sys::path::append(LibraryPath, "lib", "libclc", Basename); + auto searchAt = [&](StringRef Path, const Twine &a = "", const Twine &b = "", + const Twine &c = "") -> const char * { + SmallString<128> LibraryPath(Path); + llvm::sys::path::append(LibraryPath, a, b, c, Basename); + if (D.getVFS().exists(LibraryPath)) return Args.MakeArgString(LibraryPath); return nullptr; }; - if (const char *R = searchAt(D.ResourceDir)) + if (const char *R = searchAt(D.ResourceDir, "lib", "libclc")) return R; - // For sycl-jit - for (const auto &IC : InstallationCandidates) { - SmallString<256> ICPath(IC); - llvm::sys::path::append(ICPath, "dummy", "dummy"); - if (const char *R = searchAt(D.GetResourcesPath(ICPath))) - return R; - } - return nullptr; } From 7bfffff6b38ef56239d074a3f3bd36b7ae1aaec8 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Nov 2025 07:18:00 +0100 Subject: [PATCH 07/13] fix search path for sycl-jit-toolchain --- .../lib/rtc/DeviceCompilation.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp index a3277d58dbd27..62f38190b192a 100644 --- a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp +++ b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp @@ -831,6 +831,10 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, DiagnosticsEngine Diags(DiagID, DiagOpts, Wrapper.consumer(), /* ShouldOwnClient=*/false); + Triple T{Module.getTargetTriple()}; + Driver D{(SYCLToolchain::instance().getPrefix() + "/bin/clang++").str(), + T.getTriple(), Diags}; + SmallVector LibNames; getDeviceLibraries(UserArgList, LibNames, Format); const bool IsCudaHIP = @@ -838,14 +842,11 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, if (IsCudaHIP) { // Based on the OS and the format decide on the version of libspirv. // NOTE: this will be problematic if cross-compiling between OSes. - std::string Libclc{"clc/"}; - Libclc.append( #ifdef _WIN32 - "remangled-l32-signed_char.libspirv-" + std::string Libclc = "remangled-l32-signed_char.libspirv-"; #else - "remangled-l64-signed_char.libspirv-" + std::string Libclc = "remangled-l64-signed_char.libspirv-"; #endif - ); Libclc.append(Format == BinaryFormat::PTX ? "nvptx64-nvidia-cuda.bc" : "amdgcn-amd-amdhsa.bc"); LibNames.push_back(Libclc); @@ -855,6 +856,11 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, for (const std::string &LibName : LibNames) { std::string LibPath = (SYCLToolchain::instance().getPrefix() + "/lib/" + LibName).str(); + if (LibName.find("libspirv") != std::string::npos) { + SmallString<256> LibraryPath(D.GetResourcesPath(LibPath)); + sys::path::append(LibraryPath, "lib", "libclc", LibName); + LibPath = LibraryPath.str().str(); + } ModuleUPtr LibModule; if (auto Error = SYCLToolchain::instance() @@ -872,9 +878,6 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, // For GPU targets we need to link against vendor provided libdevice. if (IsCudaHIP) { - Triple T{Module.getTargetTriple()}; - Driver D{(SYCLToolchain::instance().getPrefix() + "/bin/clang++").str(), - T.getTriple(), Diags}; auto [CPU, Features] = Translator::getTargetCPUAndFeatureAttrs(&Module, "", Format); (void)Features; From 4f560f891a862cdfb005c8db6ae1b4ff2ef63e07 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Nov 2025 08:25:49 +0100 Subject: [PATCH 08/13] update per review comments --- clang/lib/Driver/ToolChains/SYCL.cpp | 17 ++++------------- clang/test/Driver/Inputs/SYCL/bin/.gitkeep | 0 clang/test/Driver/sycl-libspirv-toolchain.cpp | 6 +++--- 3 files changed, 7 insertions(+), 16 deletions(-) delete mode 100644 clang/test/Driver/Inputs/SYCL/bin/.gitkeep diff --git a/clang/lib/Driver/ToolChains/SYCL.cpp b/clang/lib/Driver/ToolChains/SYCL.cpp index dc189e2b3be7e..3a0dd9a5c9750 100644 --- a/clang/lib/Driver/ToolChains/SYCL.cpp +++ b/clang/lib/Driver/ToolChains/SYCL.cpp @@ -64,19 +64,10 @@ const char *SYCLInstallationDetector::findLibspirvPath( const SmallString<64> Basename = getLibSpirvBasename(DeviceTriple, HostTriple); - auto searchAt = [&](StringRef Path, const Twine &a = "", const Twine &b = "", - const Twine &c = "") -> const char * { - SmallString<128> LibraryPath(Path); - llvm::sys::path::append(LibraryPath, a, b, c, Basename); - - if (D.getVFS().exists(LibraryPath)) - return Args.MakeArgString(LibraryPath); - - return nullptr; - }; - - if (const char *R = searchAt(D.ResourceDir, "lib", "libclc")) - return R; + SmallString<256> LibclcPath(D.ResourceDir); + llvm::sys::path::append(LibclcPath, "lib", "libclc", Basename); + if (D.getVFS().exists(LibclcPath)) + return Args.MakeArgString(LibclcPath); return nullptr; } diff --git a/clang/test/Driver/Inputs/SYCL/bin/.gitkeep b/clang/test/Driver/Inputs/SYCL/bin/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/clang/test/Driver/sycl-libspirv-toolchain.cpp b/clang/test/Driver/sycl-libspirv-toolchain.cpp index 15ed431b4734c..58ac93c4fa61b 100644 --- a/clang/test/Driver/sycl-libspirv-toolchain.cpp +++ b/clang/test/Driver/sycl-libspirv-toolchain.cpp @@ -3,10 +3,10 @@ // DEFINE: %{resource_dir} = %/S/Inputs/SYCL/lib/clang/resource_dir // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-msvc %s 2>&1 \ -// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-WINDOWS +// RUN: | FileCheck %s --check-prefixes=CHECK-WINDOWS // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-gnu %s 2>&1 \ -// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-WINDOWS -// CHECK-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc" +// RUN: | FileCheck %s --check-prefixes=CHECK-WINDOWS +// CHECK-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc" // // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-linux-gnu %s 2>&1 \ // RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-LINUX From 7693b2312b99bc130bb11b87e9f01945fe17ba5a Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Nov 2025 15:48:35 +0800 Subject: [PATCH 09/13] Update clang/test/Driver/sycl-libspirv-toolchain.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Mészáros Gergely --- clang/test/Driver/sycl-libspirv-toolchain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/test/Driver/sycl-libspirv-toolchain.cpp b/clang/test/Driver/sycl-libspirv-toolchain.cpp index 58ac93c4fa61b..be0d5bd3753e3 100644 --- a/clang/test/Driver/sycl-libspirv-toolchain.cpp +++ b/clang/test/Driver/sycl-libspirv-toolchain.cpp @@ -28,7 +28,7 @@ // CHECK-CUDA: "-cc1"{{.*}} "-fcuda-is-device" // CHECK-CUDA-NOT: "-mlink-builtin-bitcode" "{{.*}}.libspirv-{{.*}}.bc" // -// The path to the remangled libspirv bitcode file is determined by the installation directory +// The path to the remangled libspirv bitcode file is determined by the resource directory // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ // RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-DIR // CHECK-DIR: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc" From 5a5755d8ceb4fb6872a2157df327abc8d1af1479 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Tue, 25 Nov 2025 13:06:08 +0100 Subject: [PATCH 10/13] use D.ResourceDir in jit_compiler::linkDeviceLibraries --- sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp index 62f38190b192a..111442f75fd69 100644 --- a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp +++ b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp @@ -854,12 +854,14 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, LLVMContext &Context = Module.getContext(); for (const std::string &LibName : LibNames) { - std::string LibPath = - (SYCLToolchain::instance().getPrefix() + "/lib/" + LibName).str(); + std::string LibPath; if (LibName.find("libspirv") != std::string::npos) { - SmallString<256> LibraryPath(D.GetResourcesPath(LibPath)); + SmallString<256> LibraryPath(D.ResourceDir); sys::path::append(LibraryPath, "lib", "libclc", LibName); - LibPath = LibraryPath.str().str(); + LibPath = LibraryPath.str(); + } else { + LibPath = + (SYCLToolchain::instance().getPrefix() + "/lib/" + LibName).str(); } ModuleUPtr LibModule; From 1f1379a8acfb1e9f325eb238c623598cf61fc787 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 26 Nov 2025 00:15:09 +0100 Subject: [PATCH 11/13] remove -DRESOURCE_DIR per review comment --- clang/test/Driver/sycl-libspirv-toolchain.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/clang/test/Driver/sycl-libspirv-toolchain.cpp b/clang/test/Driver/sycl-libspirv-toolchain.cpp index be0d5bd3753e3..ed1fd824f1583 100644 --- a/clang/test/Driver/sycl-libspirv-toolchain.cpp +++ b/clang/test/Driver/sycl-libspirv-toolchain.cpp @@ -9,18 +9,18 @@ // CHECK-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-l32-signed_char.libspirv-nvptx64-nvidia-cuda.bc" // // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-linux-gnu %s 2>&1 \ -// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-LINUX +// RUN: | FileCheck %s --check-prefixes=CHECK-LINUX // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=nvptx64-nvidia-cuda -nocudalib -target x86_64-unknown-windows-cygnus %s 2>&1 \ -// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-LINUX -// CHECK-LINUX: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc" +// RUN: | FileCheck %s --check-prefixes=CHECK-LINUX +// CHECK-LINUX: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-l64-signed_char.libspirv-nvptx64-nvidia-cuda.bc" // // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-targets=amdgcn-amd-amdhsa -Xsycl-target-backend --offload-arch=gfx908 -nogpulib -target x86_64-unknown-windows-msvc %s 2>&1 \ -// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-AMDGCN-WINDOWS -// CHECK-AMDGCN-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc" +// RUN: | FileCheck %s --check-prefixes=CHECK-AMDGCN-WINDOWS +// CHECK-AMDGCN-WINDOWS: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-l32-signed_char.libspirv-amdgcn-amd-amdhsa.bc" // // RUN: %clang -### -resource-dir %{resource_dir} -fsycl -fsycl-device-only -fsycl-targets=nvptx64-nvidia-cuda -nocudalib %s 2>&1 \ -// RUN: | FileCheck %s -DRESOURCE_DIR=%{resource_dir} --check-prefixes=CHECK-DEVICE-ONLY -// CHECK-DEVICE-ONLY: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "[[RESOURCE_DIR]]{{.*[\\/]}}remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc" +// RUN: | FileCheck %s --check-prefixes=CHECK-DEVICE-ONLY +// CHECK-DEVICE-ONLY: "-cc1"{{.*}} "-fsycl-is-device"{{.*}} "-mlink-builtin-bitcode" "{{.*[\\/]}}remangled-{{.*}}.libspirv-nvptx64-nvidia-cuda.bc" // // Only link libspirv in SYCL language mode, `-fno-sycl-libspirv` should result in a warning // RUN: %clang -### -x cu -fno-sycl-libspirv -nocudainc -nocudalib %s 2>&1 | FileCheck %s --check-prefixes=CHECK-CUDA From fee3a1ae5ba1b138ffd9b17e55a3e76f77e1a5d9 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 26 Nov 2025 01:17:54 +0100 Subject: [PATCH 12/13] cache LibspirvDir in SYCLToolchain, use getClangXXExe() --- .../lib/rtc/DeviceCompilation.cpp | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp index 111442f75fd69..ec5d752283bf9 100644 --- a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp +++ b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp @@ -615,12 +615,14 @@ class SYCLToolchain { std::string_view getPrefix() const { return Prefix; } std::string_view getClangXXExe() const { return ClangXXExe; } + std::string_view getLibclcDir() const { return LibclcDir; } private: clang::IgnoringDiagConsumer IgnoreDiag; std::string_view Prefix{jit_compiler::resource::ToolchainPrefix.S, jit_compiler::resource::ToolchainPrefix.Size}; std::string ClangXXExe = (Prefix + "/bin/clang++").str(); + std::string LibclcDir = Driver::GetResourcesPath(ClangXXExe) + "/lib/libclc/"; PrecompiledPreambles Preambles; }; @@ -831,10 +833,6 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, DiagnosticsEngine Diags(DiagID, DiagOpts, Wrapper.consumer(), /* ShouldOwnClient=*/false); - Triple T{Module.getTargetTriple()}; - Driver D{(SYCLToolchain::instance().getPrefix() + "/bin/clang++").str(), - T.getTriple(), Diags}; - SmallVector LibNames; getDeviceLibraries(UserArgList, LibNames, Format); const bool IsCudaHIP = @@ -853,21 +851,18 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, } LLVMContext &Context = Module.getContext(); + SYCLToolchain &TC = SYCLToolchain::instance(); for (const std::string &LibName : LibNames) { std::string LibPath; if (LibName.find("libspirv") != std::string::npos) { - SmallString<256> LibraryPath(D.ResourceDir); - sys::path::append(LibraryPath, "lib", "libclc", LibName); - LibPath = LibraryPath.str(); + LibPath = (TC.getLibclcDir() + LibName).str(); } else { - LibPath = - (SYCLToolchain::instance().getPrefix() + "/lib/" + LibName).str(); + LibPath = (TC.getPrefix() + "/lib/" + LibName).str(); } ModuleUPtr LibModule; - if (auto Error = SYCLToolchain::instance() - .loadBitcodeLibrary(LibPath, Context) - .moveInto(LibModule)) { + if (auto Error = + TC.loadBitcodeLibrary(LibPath, Context).moveInto(LibModule)) { return Error; } @@ -880,14 +875,15 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, // For GPU targets we need to link against vendor provided libdevice. if (IsCudaHIP) { + Triple T{Module.getTargetTriple()}; + Driver D{TC.getClangXXExe(), T.getTriple(), Diags}; auto [CPU, Features] = Translator::getTargetCPUAndFeatureAttrs(&Module, "", Format); (void)Features; // Helper lambda to link modules. auto LinkInLib = [&](const StringRef LibDevice) -> Error { ModuleUPtr LibDeviceModule; - if (auto Error = SYCLToolchain::instance() - .loadBitcodeLibrary(LibDevice, Context) + if (auto Error = TC.loadBitcodeLibrary(LibDevice, Context) .moveInto(LibDeviceModule)) { return Error; } From d808e0d13ea2ba8615eb60d0acd6664448122c71 Mon Sep 17 00:00:00 2001 From: Wenju He Date: Wed, 26 Nov 2025 01:27:41 +0100 Subject: [PATCH 13/13] remove if else --- sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp index ec5d752283bf9..1b71b9756cda0 100644 --- a/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp +++ b/sycl-jit/jit-compiler/lib/rtc/DeviceCompilation.cpp @@ -853,12 +853,9 @@ Error jit_compiler::linkDeviceLibraries(llvm::Module &Module, LLVMContext &Context = Module.getContext(); SYCLToolchain &TC = SYCLToolchain::instance(); for (const std::string &LibName : LibNames) { - std::string LibPath; - if (LibName.find("libspirv") != std::string::npos) { - LibPath = (TC.getLibclcDir() + LibName).str(); - } else { - LibPath = (TC.getPrefix() + "/lib/" + LibName).str(); - } + std::string LibPath = (LibName.find("libspirv") != std::string::npos) + ? (TC.getLibclcDir() + LibName).str() + : (TC.getPrefix() + "/lib/" + LibName).str(); ModuleUPtr LibModule; if (auto Error =