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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits