[llvm] [SPIR-V] Add missing Int64Atomics requirement for OpAtomicCompareExchangeWeak (PR #207965)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 7 03:41:43 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/207965.diff
2 Files Affected:
- (modified) llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp (+1)
- (added) llvm/test/CodeGen/SPIRV/capability-Int64Atomics-weak-cmpxchg.ll (+20)
``````````diff
diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
index d98e115df4a2c..a0aa13ea572c3 100644
--- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
@@ -1737,6 +1737,7 @@ void addInstrRequirements(const MachineInstr &MI,
case SPIRV::OpAtomicStore:
case SPIRV::OpAtomicExchange:
case SPIRV::OpAtomicCompareExchange:
+ case SPIRV::OpAtomicCompareExchangeWeak:
case SPIRV::OpAtomicIIncrement:
case SPIRV::OpAtomicIDecrement:
case SPIRV::OpAtomicIAdd:
diff --git a/llvm/test/CodeGen/SPIRV/capability-Int64Atomics-weak-cmpxchg.ll b/llvm/test/CodeGen/SPIRV/capability-Int64Atomics-weak-cmpxchg.ll
new file mode 100644
index 0000000000000..8832775e94d10
--- /dev/null
+++ b/llvm/test/CodeGen/SPIRV/capability-Int64Atomics-weak-cmpxchg.ll
@@ -0,0 +1,20 @@
+;; OpenCL C source:
+;; #pragma OPENCL EXTENSION cl_khr_int64_base_atomics : enable
+;; #pragma OPENCL EXTENSION cl_khr_int64_extended_atomics : enable
+;;
+;; void foo (volatile atomic_long *object, long *expected, long desired) {
+;; atomic_compare_exchange_weak(object, expected, desired);
+;; }
+
+; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
+; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64v1.2-unknown-unknown %s -o - -filetype=obj | spirv-val %}
+
+; CHECK: OpCapability Int64Atomics
+
+define spir_func void @foo(ptr addrspace(4) %object, ptr addrspace(4) %expected, i64 %desired) {
+entry:
+ %call = tail call spir_func zeroext i1 @_Z28atomic_compare_exchange_weakPVU3AS4U7_AtomiclPU3AS4ll(ptr addrspace(4) %object, ptr addrspace(4) %expected, i64 %desired)
+ ret void
+}
+
+declare spir_func zeroext i1 @_Z28atomic_compare_exchange_weakPVU3AS4U7_AtomiclPU3AS4ll(ptr addrspace(4), ptr addrspace(4), i64)
``````````
</details>
https://github.com/llvm/llvm-project/pull/207965
More information about the llvm-commits
mailing list