brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · b92c90c Raw
51 lines · plain
1; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; CHECK-SPIRV-DAG:  %[[#Int:]] = OpTypeInt 32 05; CHECK-SPIRV-DAG:  %[[#MemScope_CrossDevice:]] = OpConstantNull %[[#Int]]6; CHECK-SPIRV-DAG:  %[[#MemSemEqual_SeqCst:]] = OpConstant %[[#Int]] 16{{$}}7; CHECK-SPIRV-DAG:  %[[#MemSemUnequal_Acquire:]] = OpConstant %[[#Int]] 2{{$}}8; CHECK-SPIRV-DAG:  %[[#Constant_456:]] = OpConstant %[[#Int]] 456{{$}}9; CHECK-SPIRV-DAG:  %[[#Constant_128:]] = OpConstant %[[#Int]] 128{{$}}10; CHECK-SPIRV-DAG:  %[[#Bool:]] = OpTypeBool11; CHECK-SPIRV-DAG:  %[[#Struct:]] = OpTypeStruct %[[#Int]] %[[#Bool]]12; CHECK-SPIRV-DAG:  %[[#UndefStruct:]] = OpUndef %[[#Struct]]13 14; CHECK-SPIRV:      %[[#Value:]] = OpLoad %[[#Int]] %[[#Value_ptr:]]15; CHECK-SPIRV:      %[[#Res:]] = OpAtomicCompareExchange %[[#Int]] %[[#Pointer:]] %[[#MemScope_CrossDevice]]16; CHECK-SPIRV-SAME: %[[#MemSemEqual_SeqCst]] %[[#MemSemUnequal_Acquire]] %[[#Value]] %[[#Comparator:]]17; CHECK-SPIRV:      %[[#Success:]] = OpIEqual %[[#]] %[[#Res]] %[[#Comparator]]18; CHECK-SPIRV:      %[[#Composite_0:]] = OpCompositeInsert %[[#Struct]] %[[#Res]] %[[#UndefStruct]] 019; CHECK-SPIRV:      %[[#Composite_1:]] = OpCompositeInsert %[[#Struct]] %[[#Success]] %[[#Composite_0]] 120; CHECK-SPIRV:      %[[#]] = OpCompositeExtract %[[#Bool]] %[[#Composite_1]] 121 22define dso_local spir_func void @test(ptr %ptr, ptr %value_ptr, i32 %comparator) local_unnamed_addr {23entry:24  %0 = load i32, ptr %value_ptr, align 425  %1 = cmpxchg ptr %ptr, i32 %comparator, i32 %0 seq_cst acquire26  %2 = extractvalue { i32, i1 } %1, 127  br i1 %2, label %cmpxchg.continue, label %cmpxchg.store_expected28 29cmpxchg.store_expected:                           ; preds = %entry30  %3 = extractvalue { i32, i1 } %1, 031  store i32 %3, ptr %value_ptr, align 432  br label %cmpxchg.continue33 34cmpxchg.continue:                                 ; preds = %cmpxchg.store_expected, %entry35  ret void36}37 38; CHECK-SPIRV:      %[[#Res_1:]] = OpAtomicCompareExchange %[[#Int]] %[[#Ptr:]] %[[#MemScope_CrossDevice]]39; CHECK-SPIRV-SAME: %[[#MemSemEqual_SeqCst]] %[[#MemSemUnequal_Acquire]] %[[#Constant_456]] %[[#Constant_128]]40; CHECK-SPIRV:      %[[#Success_1:]] = OpIEqual %[[#]] %[[#Res_1]] %[[#Constant_128]]41; CHECK-SPIRV:      %[[#Composite:]] = OpCompositeInsert %[[#Struct]] %[[#Res_1]] %[[#UndefStruct]] 042; CHECK-SPIRV:      %[[#Composite_1:]] = OpCompositeInsert %[[#Struct]] %[[#Success_1]] %[[#Composite]] 143; CHECK-SPIRV:      OpStore %[[#Store_ptr:]] %[[#Composite_1]]44 45define dso_local spir_func void @test2(ptr %ptr, ptr %store_ptr) local_unnamed_addr {46entry:47  %0 = cmpxchg ptr %ptr, i32 128, i32 456 seq_cst acquire48  store { i32, i1 } %0, ptr %store_ptr, align 449  ret void50}51