|
| 1 | +; Check OpAtomicCompareExchangeWeak is treated as OpAtomicCompareExchange |
| 2 | + |
| 3 | +; REQUIRES: spirv-as |
| 4 | +; RUN: spirv-as --target-env spv1.3 -o %t.spv %s |
| 5 | +; RUN: spirv-val %t.spv |
| 6 | +; RUN: llvm-spirv -r --spirv-target-env=CL2.0 --spirv-target-env="SPV-IR" -o - %t.spv | llvm-dis | FileCheck %s |
| 7 | + |
| 8 | + OpCapability Addresses |
| 9 | + OpCapability Linkage |
| 10 | + OpCapability Kernel |
| 11 | + OpCapability Int8 |
| 12 | + %1 = OpExtInstImport "OpenCL.std" |
| 13 | + OpMemoryModel Physical64 OpenCL |
| 14 | + OpEntryPoint Kernel %19 "test_atomic_global" |
| 15 | + OpSource OpenCL_C 200000 |
| 16 | + OpName %test_atomic_global "test_atomic_global" |
| 17 | + OpName %dst "dst" |
| 18 | + OpName %object "object" |
| 19 | + OpName %expected "expected" |
| 20 | + OpName %desired "desired" |
| 21 | + OpName %dst_0 "dst" |
| 22 | + OpName %object_0 "object" |
| 23 | + OpName %expected_0 "expected" |
| 24 | + OpName %desired_0 "desired" |
| 25 | + OpDecorate %test_atomic_global LinkageAttributes "test_atomic_global" Export |
| 26 | + OpDecorate %dst_0 Volatile |
| 27 | + %uint = OpTypeInt 32 0 |
| 28 | + %uchar = OpTypeInt 8 0 |
| 29 | + %uint_1 = OpConstant %uint 1 |
| 30 | + %uint_16 = OpConstant %uint 16 |
| 31 | + %uint_0 = OpConstant %uint 0 |
| 32 | + %void = OpTypeVoid |
| 33 | +%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint |
| 34 | +%_ptr_CrossWorkgroup_uchar = OpTypePointer CrossWorkgroup %uchar |
| 35 | + %7 = OpTypeFunction %void %_ptr_CrossWorkgroup_uint %_ptr_CrossWorkgroup_uchar %_ptr_CrossWorkgroup_uchar %uint |
| 36 | +%test_atomic_global = OpFunction %void None %7 |
| 37 | + %dst = OpFunctionParameter %_ptr_CrossWorkgroup_uint |
| 38 | + %object = OpFunctionParameter %_ptr_CrossWorkgroup_uchar |
| 39 | + %expected = OpFunctionParameter %_ptr_CrossWorkgroup_uchar |
| 40 | + %desired = OpFunctionParameter %uint |
| 41 | + %13 = OpLabel |
| 42 | + %17 = OpAtomicCompareExchange %uint %dst %uint_1 %uint_16 %uint_16 %uint_1 %uint_0 |
| 43 | + %18 = OpAtomicCompareExchangeWeak %uint %dst %uint_1 %uint_16 %uint_16 %uint_1 %uint_0 |
| 44 | + OpReturn |
| 45 | + OpFunctionEnd |
| 46 | + %19 = OpFunction %void None %7 |
| 47 | + %dst_0 = OpFunctionParameter %_ptr_CrossWorkgroup_uint |
| 48 | + %object_0 = OpFunctionParameter %_ptr_CrossWorkgroup_uchar |
| 49 | + %expected_0 = OpFunctionParameter %_ptr_CrossWorkgroup_uchar |
| 50 | + %desired_0 = OpFunctionParameter %uint |
| 51 | + %24 = OpLabel |
| 52 | + %25 = OpFunctionCall %void %test_atomic_global %dst_0 %object_0 %expected_0 %desired_0 |
| 53 | + OpReturn |
| 54 | + OpFunctionEnd |
| 55 | + |
| 56 | +; CHECK: call spir_func i32 @_Z29__spirv_AtomicCompareExchangePU3AS1iiiiii( |
| 57 | +; CHECK-NOT: call spir_func i32 @_Z33__spirv_AtomicCompareExchangeWeakPU3AS1iiiiii( |
0 commit comments