[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