1; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s 2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %} 3 4; CHECK-DAG: OpName %[[#GetScope:]] "_Z8getScopev" 5; CHECK-DAG: %[[#Long:]] = OpTypeInt 32 0 6; CHECK-DAG: %[[#WrkGrpConst2:]] = OpConstant %[[#Long]] 2 7; CHECK-DAG: %[[#ScopeAllSvmDevices:]] = OpConstantNull %[[#Long]] 8; CHECK-DAG: %[[#InvocationConst4:]] = OpConstant %[[#Long]] 4 9; CHECK-DAG: %[[#Const8:]] = OpConstant %[[#Long]] 8 10; CHECK-DAG: %[[#Const16:]] = OpConstant %[[#Long]] 16 11; CHECK-DAG: %[[#Const3:]] = OpConstant %[[#Long]] 3 12; CHECK-DAG: %[[#Const912:]] = OpConstant %[[#Long]] 912 13; CHECK: OpMemoryBarrier %[[#ScopeAllSvmDevices]] %[[#WrkGrpConst2]] 14; CHECK: OpMemoryBarrier %[[#ScopeAllSvmDevices]] %[[#InvocationConst4]] 15; CHECK: OpMemoryBarrier %[[#ScopeAllSvmDevices]] %[[#Const8]] 16; CHECK: OpMemoryBarrier %[[#InvocationConst4]] %[[#Const16]] 17; CHECK: OpMemoryBarrier %[[#WrkGrpConst2]] %[[#InvocationConst4]] 18; CHECK: OpFunctionEnd 19; CHECK: %[[#ScopeId:]] = OpFunctionCall %[[#Long]] %[[#GetScope]] 20; CHECK: OpControlBarrier %[[#Const3]] %[[#ScopeId:]] %[[#Const912]] 21 22define spir_kernel void @fence_test_kernel1(ptr addrspace(1) noalias %s.ascast) { 23 fence acquire 24 ret void 25} 26 27define spir_kernel void @fence_test_kernel2(ptr addrspace(1) noalias %s.ascast) { 28 fence release 29 ret void 30} 31 32define spir_kernel void @fence_test_kernel3(ptr addrspace(1) noalias %s.ascast) { 33 fence acq_rel 34 ret void 35} 36 37define spir_kernel void @fence_test_kernel4(ptr addrspace(1) noalias %s.ascast) { 38 fence syncscope("singlethread") seq_cst 39 ret void 40} 41 42define spir_kernel void @fence_test_kernel5(ptr addrspace(1) noalias %s.ascast) { 43 fence syncscope("workgroup") release 44 ret void 45} 46 47define spir_func void @barrier_test1() { 48 %scope = call noundef i32 @_Z8getScopev() 49 call void @_Z22__spirv_ControlBarrieriii(i32 noundef 3, i32 noundef %scope, i32 noundef 912) 50 ret void 51} 52 53declare spir_func void @_Z22__spirv_ControlBarrieriii(i32 noundef, i32 noundef, i32 noundef) 54declare spir_func i32 @_Z8getScopev() 55