[llvm] [SPIR-V] Recognize volatile inside combined OpenCL kernel type qualifiers (PR #215790)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 12 07:40:51 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-spir-v
Author: Arseniy Obolenskiy (aobolensk)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/215790.diff
2 Files Affected:
- (modified) llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp (+5-1)
- (modified) llvm/test/CodeGen/SPIRV/spirv_param_decorations_quals.ll (+32-5)
``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
index b2b9c318cdd7e..1452df8c03350 100644
--- a/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVCallLowering.cpp
@@ -134,7 +134,11 @@ getArgAccessQual(const Function &F, unsigned ArgIdx) {
static std::vector<SPIRV::Decoration::Decoration>
getKernelArgTypeQual(const Function &F, unsigned ArgIdx) {
MDString *ArgAttribute = getOCLKernelArgTypeQual(F, ArgIdx);
- if (ArgAttribute && ArgAttribute->getString() == "volatile")
+ if (!ArgAttribute)
+ return {};
+ SmallVector<StringRef, 3> Tokens;
+ ArgAttribute->getString().split(Tokens, ' ', -1, /*KeepEmpty=*/false);
+ if (llvm::is_contained(Tokens, "volatile"))
return {SPIRV::Decoration::Volatile};
return {};
}
diff --git a/llvm/test/CodeGen/SPIRV/spirv_param_decorations_quals.ll b/llvm/test/CodeGen/SPIRV/spirv_param_decorations_quals.ll
index ca9a200e70097..8e48888908033 100644
--- a/llvm/test/CodeGen/SPIRV/spirv_param_decorations_quals.ll
+++ b/llvm/test/CodeGen/SPIRV/spirv_param_decorations_quals.ll
@@ -1,18 +1,45 @@
; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
+; CHECK-SPIRV-DAG: OpDecorate %[[#PId:]] Volatile
+; CHECK-SPIRV-DAG: OpDecorate %[[#PId]] FuncParamAttr NoAlias
+; CHECK-SPIRV-DAG: OpDecorate %[[#PId]] FuncParamAttr NoWrite
+; CHECK-SPIRV-DAG: OpDecorate %[[#PId2:]] Volatile
+; CHECK-SPIRV-DAG: OpDecorate %[[#PId3:]] Volatile
+; CHECK-SPIRV-DAG: OpDecorate %[[#PId4:]] Volatile
+
define spir_kernel void @k(ptr addrspace(1) %a) !kernel_arg_type_qual !7 !spirv.ParameterDecorations !10 {
+; CHECK-SPIRV: %[[#PId]] = OpFunctionParameter %[[#]]
entry:
ret void
}
-; CHECK-SPIRV: OpDecorate %[[#PId:]] Volatile
-; CHECK-SPIRV: OpDecorate %[[#PId]] FuncParamAttr NoAlias
-; CHECK-SPIRV: OpDecorate %[[#PId]] FuncParamAttr NoWrite
-; CHECK-SPIRV: %[[#PId]] = OpFunctionParameter %[[#]]
-
!7 = !{!"volatile"}
!8 = !{i32 38, i32 4} ; FuncParamAttr NoAlias
!11 = !{i32 38, i32 6} ; FuncParamAttr NoWrite
!9 = !{!8, !11}
!10 = !{!9}
+
+define spir_kernel void @k_const_volatile(ptr addrspace(1) %a) !kernel_arg_type_qual !20 {
+; CHECK-SPIRV: %[[#PId2]] = OpFunctionParameter %[[#]]
+entry:
+ ret void
+}
+
+!20 = !{!"const volatile"}
+
+define spir_kernel void @k_restrict_volatile(ptr addrspace(1) %a) !kernel_arg_type_qual !21 {
+; CHECK-SPIRV: %[[#PId3]] = OpFunctionParameter %[[#]]
+entry:
+ ret void
+}
+
+!21 = !{!"restrict volatile"}
+
+define spir_kernel void @k_restrict_const_volatile(ptr addrspace(1) %a) !kernel_arg_type_qual !22 {
+; CHECK-SPIRV: %[[#PId4]] = OpFunctionParameter %[[#]]
+entry:
+ ret void
+}
+
+!22 = !{!"restrict const volatile"}
``````````
</details>
https://github.com/llvm/llvm-project/pull/215790
More information about the llvm-commits
mailing list