[libclc] [libclc] Restore always_inline for SPIR-V targets (PR #202891)
Wenju He via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 11 03:22:09 PDT 2026
wenju-he wrote:
> I tried `-disable-llvm-passes` as suggested, but it does not work for SPIR-V targets.
>
> While it does preserve function bodies, running no passes means the libclc helpers keep their `Import` LinkageAttributes unresolved. `llvm-spirv` then emits functions that have a body and are decorated with `Import`, which fails SPIR-V validation:
>
> ```
> A function definition (an OpFunction with basic blocks) cannot be
> decorated with the Import Linkage Type.
> ```
Could you share your validation step?
Below validation steps have no error.
libclc diff is
```
diff --git a/libclc/CMakeLists.txt b/libclc/CMakeLists.txt
index bc3624688a08..d3de149d10b8 100644
--- a/libclc/CMakeLists.txt
+++ b/libclc/CMakeLists.txt
@@ -145,7 +145,7 @@ if(LIBCLC_TARGET_ARCH IN_LIST LIBCLC_ARCHS_SPIRV)
if(LIBCLC_TARGET_OS STREQUAL vulkan)
list(APPEND target_compile_flags -Wno-unknown-assumption -U__opencl_c_int64)
else()
- list(APPEND target_compile_flags -O0 -finline-hint-functions)
+ list(APPEND target_compile_flags "SHELL:-Xclang -disable-llvm-passes" -finline-hint-functions)
list(APPEND target_extra_defines CLC_SPIRV)
set(opt_flags)
endif()
```
Build command:
```
CC=clang CXX=clang++ cmake -GNinja -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_INCLUDE_TESTS=ON -DLLVM_BUILD_TESTS=ON -DLLVM_ENABLE_ASSERTIONS=ON ../llvm -DLLVM_TARGETS_TO_BUILD="X86;SPIRV;NVPTX;AMDGPU" -DLLVM_EXTERNAL_PROJECTS="llvm-spirv" -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release -DRUNTIMES_amdgcn-amd-amdhsa-llvm_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_nvptx64-nvidia-cuda_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv32-unknown-vulkan_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv64-unknown-vulkan_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv32-unknown-unknown_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv64-unknown-unknown_LLVM_ENABLE_RUNTIMES=libclc -DLLVM_RUNTIME_TARGETS="amdgcn-amd-amdhsa-llvm;nvptx64-nvidia-cuda;spirv32-unknown-vulkan;spirv64-unknown-vulkan;spirv32-unknown-unknown;spirv64-unknown-unknown" -DRUNTIMES_spirv32-unknown-unknown_LIBCLC_USE_SPIRV_BACKEND=ON -DRUNTIMES_spirv64-unknown-unknown_LIBCLC_USE_SPIRV_BACKEND=ON && ninja
```
or use SPIRV backend:
```
CC=clang CXX=clang++ cmake -GNinja -DLLVM_USE_LINKER=lld -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_INCLUDE_TESTS=ON -DLLVM_BUILD_TESTS=ON -DLLVM_ENABLE_ASSERTIONS=ON ../llvm -DLLVM_TARGETS_TO_BUILD="X86;SPIRV;NVPTX;AMDGPU" -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release -DRUNTIMES_amdgcn-amd-amdhsa-llvm_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_nvptx64-nvidia-cuda_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv32-unknown-vulkan_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv64-unknown-vulkan_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv32-unknown-unknown_LLVM_ENABLE_RUNTIMES=libclc -DRUNTIMES_spirv64-unknown-unknown_LLVM_ENABLE_RUNTIMES=libclc -DLLVM_RUNTIME_TARGETS="amdgcn-amd-amdhsa-llvm;nvptx64-nvidia-cuda;spirv32-unknown-vulkan;spirv64-unknown-vulkan;spirv32-unknown-unknown;spirv64-unknown-unknown" -DRUNTIMES_spirv32-unknown-unknown_LIBCLC_USE_SPIRV_BACKEND=ON -DRUNTIMES_spirv64-unknown-unknown_LIBCLC_USE_SPIRV_BACKEND=ON && ninja
```
```
cd lib/clang/23/lib/spirv64-unknown-unknown
spirv-val --version
SPIRV-Tools v2026.2 v2026.2.rc2-23-g5418da08
Targets:
SPIR-V 1.0
SPIR-V 1.1
SPIR-V 1.2
SPIR-V 1.3
SPIR-V 1.4
SPIR-V 1.5
SPIR-V 1.6
SPIR-V 1.2 (under OpenCL 2.2 Full Profile semantics)
SPIR-V 1.0 (under Vulkan 1.0 semantics)
SPIR-V 1.3 (under Vulkan 1.1 semantics)
SPIR-V 1.4 (under Vulkan 1.1 semantics)
SPIR-V 1.5 (under Vulkan 1.2 semantics)
SPIR-V 1.6 (under Vulkan 1.3 semantics) SPIR-V 1.6 (under Vulkan 1.4 semantics)
spirv-val libclc.spv
llvm-spirv -r libclc.spv -o libclc.spv.bc
llvm-dis libclc.spv.bc
```
https://github.com/llvm/llvm-project/pull/202891
More information about the cfe-commits
mailing list