| ; Vulkan cmpxchg counterpart of atomicrmw-storage-class-semantics-vulkan.ll; |
| ; see that file for the VUID this fixes. |
| ; |
| ; TODO: a Workgroup-storage-class cmpxchg crossing a function boundary (call |
| ; arg or OpEntryPoint param) hits an unrelated crash in |
| ; SPIRVLegalizePointerCast. Once fixed, add: |
| ; RUNx: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan1.3-compute %s -o - -filetype=obj | spirv-val --target-env vulkan1.3 %} |
| |
| ; RUN: llc -O0 -mtriple=spirv-unknown-vulkan1.3-compute %s -o - | FileCheck %s |
| |
| ; CHECK-DAG: %[[#Int:]] = OpTypeInt 32 0 |
| ; CHECK-DAG: %[[#Workgroup:]] = OpConstant %[[#Int]] 2 |
| |
| define spir_func void @cmpxchg(ptr addrspace(3) %p) { |
| ; WorkgroupMemory bit (256) must not appear on either semantics operand. |
| ; CHECK: OpAtomicCompareExchange %[[#Int]] %[[#]] %[[#Workgroup]] %[[#]] %[[#]] %[[#]] %[[#]] |
| ; CHECK-NOT: OpConstant %[[#Int]] 256 |
| %pair = cmpxchg ptr addrspace(3) %p, i32 0, i32 1 syncscope("workgroup") monotonic monotonic |
| ret void |
| } |