375 lines · plain
1; Generated with:2; source.cl:3; void foo(int x, int2 coord, uint c, short s, float f, size_t n,4; __global uint* p, read_write image2d_t image, uint4 v) {5; work_group_all(x);6; work_group_any(x);7; work_group_broadcast(x, n);8; sub_group_barrier(CLK_LOCAL_MEM_FENCE, memory_scope_sub_group);9; sub_group_all(x);10; sub_group_any(x);11; sub_group_broadcast(x, c);12; sub_group_reduce_add(x);13; sub_group_reduce_add(f);14; sub_group_reduce_min(x);15; sub_group_reduce_min(c);16; sub_group_reduce_min(f);17; sub_group_reduce_max(x);18; sub_group_reduce_max(c);19; sub_group_reduce_max(f);20; intel_sub_group_shuffle(x, c);21; intel_sub_group_shuffle_down(x, x, c);22; intel_sub_group_shuffle_up(x, x, c);23; intel_sub_group_shuffle_xor(x, c);24; intel_sub_group_block_read(p);25; intel_sub_group_block_write(p, c);26; intel_sub_group_block_read(image, coord);27; intel_sub_group_block_write(image, coord, c);28; sub_group_elect();29; sub_group_non_uniform_all(x);30; sub_group_non_uniform_any(x);31; sub_group_non_uniform_all_equal(x);32; sub_group_non_uniform_broadcast(x, c);33; sub_group_broadcast_first(x);34; sub_group_ballot(x);35; sub_group_inverse_ballot(v);36; sub_group_ballot_bit_extract(v, c);37; sub_group_ballot_bit_count(v);38; sub_group_ballot_inclusive_scan(v);39; sub_group_ballot_exclusive_scan(v);40; sub_group_ballot_find_lsb(v);41; sub_group_ballot_find_msb(v);42; sub_group_non_uniform_reduce_add(x);43; sub_group_non_uniform_reduce_add(f);44; sub_group_non_uniform_scan_inclusive_min(x);45; sub_group_non_uniform_scan_inclusive_min(c);46; sub_group_non_uniform_scan_inclusive_min(f);47; sub_group_non_uniform_scan_exclusive_max(x);48; sub_group_non_uniform_scan_exclusive_max(c);49; sub_group_non_uniform_scan_exclusive_max(f);50; sub_group_non_uniform_reduce_mul(x);51; sub_group_non_uniform_reduce_mul(f);52; sub_group_non_uniform_reduce_and(x);53; sub_group_non_uniform_scan_inclusive_or(x);54; sub_group_non_uniform_scan_exclusive_xor(x);55; sub_group_non_uniform_reduce_logical_and(x);56; sub_group_non_uniform_scan_inclusive_logical_or(x);57; sub_group_non_uniform_scan_exclusive_logical_xor(x);58; sub_group_rotate(c, x);59; }60 61; REQUIRES: spirv-dis62; clang -cc1 -O2 -triple spir -cl-std=cl2.0 -finclude-default-header -cl-ext=+all source.cl -emit-llvm-bc -o tmp.bc63; llvm-spirv tmp.bc --spirv-ext=+all,-SPV_KHR_untyped_pointers -o tmp.spv64; spirv-dis tmp.spv -o llvm-spirv/test/GroupAndSubgroupInstructions.spvasm65 66; REQUIRES: spirv-as67; RUN: spirv-as %s --target-env spv1.3 -o %t.spv68; RUN: spirv-val %t.spv69; RUN: llvm-spirv -r %t.spv --spirv-target-env=CL1.2 -o %t.bc70; RUN: llvm-dis %t.bc -o %t.ll71; RUN: FileCheck < %t.ll %s --check-prefixes=CHECK-COMMON,CHECK-CL,CHECK-CL1272 73; RUN: llvm-spirv -r %t.spv --spirv-target-env=CL2.0 -o %t.bc74; RUN: llvm-dis %t.bc -o %t.ll75; RUN: FileCheck < %t.ll %s --check-prefixes=CHECK-COMMON,CHECK-CL,CHECK-CL2076 77; RUN: llvm-spirv -r %t.spv --spirv-target-env=SPV-IR -o %t.bc78; RUN: llvm-dis %t.bc -o %t.ll79; RUN: FileCheck < %t.ll %s --check-prefixes=CHECK-COMMON,CHECK-SPV-IR80 81; RUN: llvm-spirv %t.bc --spirv-ext=+all,-SPV_KHR_untyped_pointers -o %t.rev.spv82; RUN: spirv-val %t.rev.spv83 84 85; CHECK-CL-DAG: declare spir_func i32 @_Z14work_group_alli(i32) #[[#Attrs:]]86; CHECK-CL-DAG: declare spir_func i32 @_Z14work_group_anyi(i32) #[[#Attrs]]87; CHECK-CL-DAG: declare spir_func i32 @_Z20work_group_broadcastjj(i32, i32) #[[#Attrs]]88; CHECK-CL12-DAG: declare spir_func void @_Z7barrierj(i32) #[[#Attrs]]89; CHECK-CL20-DAG: declare spir_func void @_Z17sub_group_barrierj12memory_scope(i32, i32) #[[#Attrs]]90; CHECK-CL-DAG: declare spir_func i32 @_Z13sub_group_alli(i32) #[[#Attrs]]91; CHECK-CL-DAG: declare spir_func i32 @_Z13sub_group_anyi(i32) #[[#Attrs]]92; CHECK-CL-DAG: declare spir_func i32 @_Z19sub_group_broadcastjj(i32, i32) #[[#Attrs]]93; CHECK-CL-DAG: declare spir_func i32 @_Z20sub_group_reduce_addi(i32) #[[#Attrs]]94; CHECK-CL-DAG: declare spir_func float @_Z20sub_group_reduce_addf(float) #[[#Attrs]]95; CHECK-CL-DAG: declare spir_func i32 @_Z20sub_group_reduce_mini(i32) #[[#Attrs]]96; CHECK-CL-DAG: declare spir_func i32 @_Z20sub_group_reduce_minj(i32) #[[#Attrs]]97; CHECK-CL-DAG: declare spir_func float @_Z20sub_group_reduce_minf(float) #[[#Attrs]]98; CHECK-CL-DAG: declare spir_func i32 @_Z20sub_group_reduce_maxi(i32) #[[#Attrs]]99; CHECK-CL-DAG: declare spir_func i32 @_Z20sub_group_reduce_maxj(i32) #[[#Attrs]]100; CHECK-CL-DAG: declare spir_func float @_Z20sub_group_reduce_maxf(float) #[[#Attrs]]101; CHECK-CL-DAG: declare spir_func i32 @_Z23intel_sub_group_shuffleij(i32, i32) #[[#Attrs]]102; CHECK-CL-DAG: declare spir_func i32 @_Z28intel_sub_group_shuffle_downiij(i32, i32, i32) #[[#Attrs]]103; CHECK-CL-DAG: declare spir_func i32 @_Z26intel_sub_group_shuffle_upiij(i32, i32, i32) #[[#Attrs]]104; CHECK-CL-DAG: declare spir_func i32 @_Z27intel_sub_group_shuffle_xorij(i32, i32) #[[#Attrs]]105; CHECK-CL-DAG: declare spir_func i32 @_Z26intel_sub_group_block_readPU3AS1Kj(ptr addrspace(1)) #[[#Attrs]]106; CHECK-CL-DAG: declare spir_func void @_Z27intel_sub_group_block_writePU3AS1jj(ptr addrspace(1), i32) #[[#Attrs]]107; CHECK-CL-DAG: declare spir_func i32 @_Z26intel_sub_group_block_read14ocl_image2d_rwDv2_i(ptr addrspace(1), <2 x i32>) #[[#Attrs]]108; CHECK-CL-DAG: declare spir_func void @_Z27intel_sub_group_block_write14ocl_image2d_rwDv2_ij(ptr addrspace(1), <2 x i32>, i32) #[[#Attrs]]109; CHECK-CL-DAG: declare spir_func i32 @_Z15sub_group_electv() #[[#Attrs]]110; CHECK-CL-DAG: declare spir_func i32 @_Z25sub_group_non_uniform_alli(i32) #[[#Attrs]]111; CHECK-CL-DAG: declare spir_func i32 @_Z25sub_group_non_uniform_anyi(i32) #[[#Attrs]]112; CHECK-CL-DAG: declare spir_func i32 @_Z31sub_group_non_uniform_all_equali(i32) #[[#Attrs]]113; CHECK-CL-DAG: declare spir_func i32 @_Z31sub_group_non_uniform_broadcastjj(i32, i32) #[[#Attrs]]114; CHECK-CL-DAG: declare spir_func i32 @_Z25sub_group_broadcast_firstj(i32) #[[#Attrs]]115; CHECK-CL-DAG: declare spir_func <4 x i32> @_Z16sub_group_balloti(i32) #[[#Attrs]]116; CHECK-CL-DAG: declare spir_func i32 @_Z31sub_group_ballot_inclusive_scanDv4_j(<4 x i32>) #[[#Attrs]]117; CHECK-CL-DAG: declare spir_func i32 @_Z31sub_group_ballot_exclusive_scanDv4_j(<4 x i32>) #[[#Attrs]]118; CHECK-CL-DAG: declare spir_func i32 @_Z25sub_group_ballot_find_lsbDv4_j(<4 x i32>) #[[#Attrs]]119; CHECK-CL-DAG: declare spir_func i32 @_Z25sub_group_ballot_find_msbDv4_j(<4 x i32>) #[[#Attrs]]120; CHECK-CL-DAG: declare spir_func i32 @_Z32sub_group_non_uniform_reduce_addi(i32) #[[#Attrs]]121; CHECK-CL-DAG: declare spir_func float @_Z32sub_group_non_uniform_reduce_addf(float) #[[#Attrs]]122; CHECK-CL-DAG: declare spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_mini(i32) #[[#Attrs]]123; CHECK-CL-DAG: declare spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_minj(i32) #[[#Attrs]]124; CHECK-CL-DAG: declare spir_func float @_Z40sub_group_non_uniform_scan_inclusive_minf(float) #[[#Attrs]]125; CHECK-CL-DAG: declare spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_maxi(i32) #[[#Attrs]]126; CHECK-CL-DAG: declare spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_maxj(i32) #[[#Attrs]]127; CHECK-CL-DAG: declare spir_func float @_Z40sub_group_non_uniform_scan_exclusive_maxf(float) #[[#Attrs]]128; CHECK-CL-DAG: declare spir_func i32 @_Z32sub_group_non_uniform_reduce_muli(i32) #[[#Attrs]]129; CHECK-CL-DAG: declare spir_func float @_Z32sub_group_non_uniform_reduce_mulf(float) #[[#Attrs]]130; CHECK-CL-DAG: declare spir_func i32 @_Z32sub_group_non_uniform_reduce_andi(i32) #[[#Attrs]]131; CHECK-CL-DAG: declare spir_func i32 @_Z39sub_group_non_uniform_scan_inclusive_ori(i32) #[[#Attrs]]132; CHECK-CL-DAG: declare spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_xori(i32) #[[#Attrs]]133; CHECK-CL-DAG: declare spir_func i32 @_Z40sub_group_non_uniform_reduce_logical_andi(i32) #[[#Attrs]]134; CHECK-CL-DAG: declare spir_func i32 @_Z47sub_group_non_uniform_scan_inclusive_logical_ori(i32) #[[#Attrs]]135; CHECK-CL-DAG: declare spir_func i32 @_Z48sub_group_non_uniform_scan_exclusive_logical_xori(i32) #[[#Attrs]]136; CHECK-CL-DAG: declare spir_func i32 @_Z16sub_group_rotateii(i32, i32) #[[#Attrs]]137 138; CHECK-SPV-IR: declare spir_func i1 @_Z16__spirv_GroupAllib(i32, i1) #[[#Attrs:]]139; CHECK-SPV-IR: declare spir_func i1 @_Z16__spirv_GroupAnyib(i32, i1) #[[#Attrs]]140; CHECK-SPV-IR: declare spir_func i32 @_Z22__spirv_GroupBroadcastiii(i32, i32, i32) #[[#Attrs]]141; CHECK-SPV-IR: declare spir_func void @_Z22__spirv_ControlBarrieriii(i32, i32, i32) #[[#Attrs]]142; CHECK-SPV-IR: declare spir_func i32 @_Z17__spirv_GroupIAddiii(i32, i32, i32) #[[#Attrs]]143; CHECK-SPV-IR: declare spir_func float @_Z17__spirv_GroupFAddiif(i32, i32, float) #[[#Attrs]]144; CHECK-SPV-IR: declare spir_func i32 @_Z17__spirv_GroupSMiniii(i32, i32, i32) #[[#Attrs]]145; CHECK-SPV-IR: declare spir_func i32 @_Z17__spirv_GroupUMiniij(i32, i32, i32) #[[#Attrs]]146; CHECK-SPV-IR: declare spir_func float @_Z17__spirv_GroupFMiniif(i32, i32, float) #[[#Attrs]]147; CHECK-SPV-IR: declare spir_func i32 @_Z17__spirv_GroupSMaxiii(i32, i32, i32) #[[#Attrs]]148; CHECK-SPV-IR: declare spir_func i32 @_Z17__spirv_GroupUMaxiij(i32, i32, i32) #[[#Attrs]]149; CHECK-SPV-IR: declare spir_func float @_Z17__spirv_GroupFMaxiif(i32, i32, float) #[[#Attrs]]150; CHECK-SPV-IR: declare spir_func i32 @_Z28__spirv_SubgroupShuffleINTELij(i32, i32) #[[#Attrs]]151; CHECK-SPV-IR: declare spir_func i32 @_Z32__spirv_SubgroupShuffleDownINTELiij(i32, i32, i32) #[[#Attrs]]152; CHECK-SPV-IR: declare spir_func i32 @_Z30__spirv_SubgroupShuffleUpINTELiij(i32, i32, i32) #[[#Attrs]]153; CHECK-SPV-IR: declare spir_func i32 @_Z31__spirv_SubgroupShuffleXorINTELij(i32, i32) #[[#Attrs]]154; CHECK-SPV-IR: declare spir_func i32 @_Z35__spirv_SubgroupBlockReadINTEL_RintPU3AS1Kj(ptr addrspace(1)) #[[#Attrs]]155; CHECK-SPV-IR: declare spir_func void @_Z31__spirv_SubgroupBlockWriteINTELPU3AS1jj(ptr addrspace(1), i32) #[[#Attrs]]156; CHECK-SPV-IR: declare spir_func i32 @_Z40__spirv_SubgroupImageBlockReadINTEL_RintPU3AS133__spirv_Image__void_1_0_0_0_0_0_2Dv2_i(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 2), <2 x i32>) #[[#Attrs]]157; CHECK-SPV-IR: declare spir_func void @_Z36__spirv_SubgroupImageBlockWriteINTELPU3AS133__spirv_Image__void_1_0_0_0_0_0_2Dv2_ij(target("spirv.Image", void, 1, 0, 0, 0, 0, 0, 2), <2 x i32>, i32) #[[#Attrs]]158; CHECK-SPV-IR: declare spir_func i1 @_Z28__spirv_GroupNonUniformElecti(i32) #[[#Attrs]]159; CHECK-SPV-IR: declare spir_func i1 @_Z26__spirv_GroupNonUniformAllib(i32, i1) #[[#Attrs]]160; CHECK-SPV-IR: declare spir_func i1 @_Z26__spirv_GroupNonUniformAnyib(i32, i1) #[[#Attrs]]161; CHECK-SPV-IR: declare spir_func i1 @_Z31__spirv_GroupNonUniformAllEqualii(i32, i32) #[[#Attrs]]162; CHECK-SPV-IR: declare spir_func i32 @_Z32__spirv_GroupNonUniformBroadcastiij(i32, i32, i32) #[[#Attrs]]163; CHECK-SPV-IR: declare spir_func i32 @_Z37__spirv_GroupNonUniformBroadcastFirstii(i32, i32) #[[#Attrs]]164; CHECK-SPV-IR: declare spir_func <4 x i32> @_Z29__spirv_GroupNonUniformBallotib(i32, i1) #[[#Attrs]]165; CHECK-SPV-IR: declare spir_func i32 @_Z37__spirv_GroupNonUniformBallotBitCountiiDv4_j(i32, i32, <4 x i32>) #[[#Attrs]]166; CHECK-SPV-IR: declare spir_func i32 @_Z36__spirv_GroupNonUniformBallotFindLSBiDv4_j(i32, <4 x i32>) #[[#Attrs]]167; CHECK-SPV-IR: declare spir_func i32 @_Z36__spirv_GroupNonUniformBallotFindMSBiDv4_j(i32, <4 x i32>) #[[#Attrs]]168; CHECK-SPV-IR: declare spir_func i32 @_Z27__spirv_GroupNonUniformIAddiii(i32, i32, i32) #[[#Attrs]]169; CHECK-SPV-IR: declare spir_func float @_Z27__spirv_GroupNonUniformFAddiif(i32, i32, float) #[[#Attrs]]170; CHECK-SPV-IR: declare spir_func i32 @_Z27__spirv_GroupNonUniformSMiniii(i32, i32, i32) #[[#Attrs]]171; CHECK-SPV-IR: declare spir_func i32 @_Z27__spirv_GroupNonUniformUMiniij(i32, i32, i32) #[[#Attrs]]172; CHECK-SPV-IR: declare spir_func float @_Z27__spirv_GroupNonUniformFMiniif(i32, i32, float) #[[#Attrs]]173; CHECK-SPV-IR: declare spir_func i32 @_Z27__spirv_GroupNonUniformSMaxiii(i32, i32, i32) #[[#Attrs]]174; CHECK-SPV-IR: declare spir_func i32 @_Z27__spirv_GroupNonUniformUMaxiij(i32, i32, i32) #[[#Attrs]]175; CHECK-SPV-IR: declare spir_func float @_Z27__spirv_GroupNonUniformFMaxiif(i32, i32, float) #[[#Attrs]]176; CHECK-SPV-IR: declare spir_func i32 @_Z27__spirv_GroupNonUniformIMuliii(i32, i32, i32) #[[#Attrs]]177; CHECK-SPV-IR: declare spir_func float @_Z27__spirv_GroupNonUniformFMuliif(i32, i32, float) #[[#Attrs]]178; CHECK-SPV-IR: declare spir_func i32 @_Z33__spirv_GroupNonUniformBitwiseAndiii(i32, i32, i32) #[[#Attrs]]179; CHECK-SPV-IR: declare spir_func i32 @_Z32__spirv_GroupNonUniformBitwiseOriii(i32, i32, i32) #[[#Attrs]]180; CHECK-SPV-IR: declare spir_func i32 @_Z33__spirv_GroupNonUniformBitwiseXoriii(i32, i32, i32) #[[#Attrs]]181; CHECK-SPV-IR: declare spir_func i1 @_Z33__spirv_GroupNonUniformLogicalAndiib(i32, i32, i1) #[[#Attrs]]182; CHECK-SPV-IR: declare spir_func i1 @_Z32__spirv_GroupNonUniformLogicalOriib(i32, i32, i1) #[[#Attrs]]183; CHECK-SPV-IR: declare spir_func i1 @_Z33__spirv_GroupNonUniformLogicalXoriib(i32, i32, i1) #[[#Attrs]]184; CHECK-SPV-IR: declare spir_func i32 @_Z32__spirv_GroupNonUniformRotateKHRiii(i32, i32, i32) #[[#Attrs]]185 186; CHECK-COMMON: attributes #[[#Attrs]] =187; CHECK-COMMON-SAME: convergent188 189; SPIR-V190; Version: 1.3191; Generator: Khronos LLVM/SPIR-V Translator; 14192; Bound: 97193; Schema: 0194 OpCapability Addresses195 OpCapability Linkage196 OpCapability Kernel197 OpCapability ImageBasic198 OpCapability ImageReadWrite199 OpCapability Groups200 OpCapability Int16201 OpCapability GroupNonUniform202 OpCapability GroupNonUniformVote203 OpCapability GroupNonUniformArithmetic204 OpCapability GroupNonUniformBallot205 OpCapability SubgroupShuffleINTEL206 OpCapability SubgroupBufferBlockIOINTEL207 OpCapability SubgroupImageBlockIOINTEL208 OpCapability GroupNonUniformRotateKHR209 OpExtension "SPV_INTEL_subgroups"210 OpExtension "SPV_KHR_subgroup_rotate"211 %1 = OpExtInstImport "OpenCL.std"212 OpMemoryModel Physical32 OpenCL213 OpSource OpenCL_C 200000214 OpName %foo "foo"215 OpName %x "x"216 OpName %coord "coord"217 OpName %c "c"218 OpName %s "s"219 OpName %f "f"220 OpName %n "n"221 OpName %p "p"222 OpName %image "image"223 OpName %v "v"224 OpName %entry "entry"225 OpName %call "call"226 OpName %call1 "call1"227 OpName %call2 "call2"228 OpName %call3 "call3"229 OpName %call4 "call4"230 OpName %call5 "call5"231 OpName %call6 "call6"232 OpName %call7 "call7"233 OpName %call8 "call8"234 OpName %call9 "call9"235 OpName %call10 "call10"236 OpName %call11 "call11"237 OpName %call12 "call12"238 OpName %call13 "call13"239 OpName %call14 "call14"240 OpName %call15 "call15"241 OpName %call16 "call16"242 OpName %call17 "call17"243 OpName %call18 "call18"244 OpName %call19 "call19"245 OpName %call20 "call20"246 OpName %call21 "call21"247 OpName %call22 "call22"248 OpName %call23 "call23"249 OpName %call24 "call24"250 OpName %call25 "call25"251 OpName %call26 "call26"252 OpName %call30 "call30"253 OpName %call31 "call31"254 OpName %call32 "call32"255 OpName %call33 "call33"256 OpName %call34 "call34"257 OpName %call35 "call35"258 OpName %call36 "call36"259 OpName %call37 "call37"260 OpName %call38 "call38"261 OpName %call39 "call39"262 OpName %call40 "call40"263 OpName %call41 "call41"264 OpName %call42 "call42"265 OpName %call43 "call43"266 OpName %call44 "call44"267 OpName %call45 "call45"268 OpName %call46 "call46"269 OpName %call47 "call47"270 OpName %call48 "call48"271 OpName %call49 "call49"272 OpName %call50 "call50"273 OpDecorate %foo LinkageAttributes "foo" Export274 OpDecorate %s FuncParamAttr Sext275 %uint = OpTypeInt 32 0276 %ushort = OpTypeInt 16 0277 %uint_0 = OpConstant %uint 0278 %uint_2 = OpConstant %uint 2279 %uint_1 = OpConstant %uint 1280 %uint_3 = OpConstant %uint 3281 %uint_272 = OpConstant %uint 272282 %void = OpTypeVoid283 %v2uint = OpTypeVector %uint 2284 %float = OpTypeFloat 32285%_ptr_CrossWorkgroup_uint = OpTypePointer CrossWorkgroup %uint286 %8 = OpTypeImage %void 2D 0 0 0 0 Unknown ReadWrite287 %v4uint = OpTypeVector %uint 4288 %10 = OpTypeFunction %void %uint %v2uint %uint %ushort %float %uint %_ptr_CrossWorkgroup_uint %8 %v4uint289 %bool = OpTypeBool290 %foo = OpFunction %void None %10291 %x = OpFunctionParameter %uint292 %coord = OpFunctionParameter %v2uint293 %c = OpFunctionParameter %uint294 %s = OpFunctionParameter %ushort295 %f = OpFunctionParameter %float296 %n = OpFunctionParameter %uint297 %p = OpFunctionParameter %_ptr_CrossWorkgroup_uint298 %image = OpFunctionParameter %8299 %v = OpFunctionParameter %v4uint300 %entry = OpLabel301 %24 = OpINotEqual %bool %x %uint_0302 %26 = OpGroupAll %bool %uint_2 %24303 %call = OpSelect %uint %26 %uint_1 %uint_0304 %29 = OpINotEqual %bool %x %uint_0305 %30 = OpGroupAny %bool %uint_2 %29306 %call1 = OpSelect %uint %30 %uint_1 %uint_0307 %call2 = OpGroupBroadcast %uint %uint_2 %x %n308 OpControlBarrier %uint_3 %uint_3 %uint_272309 %35 = OpINotEqual %bool %x %uint_0310 %36 = OpGroupAll %bool %uint_3 %35311 %call3 = OpSelect %uint %36 %uint_1 %uint_0312 %38 = OpINotEqual %bool %x %uint_0313 %39 = OpGroupAny %bool %uint_3 %38314 %call4 = OpSelect %uint %39 %uint_1 %uint_0315 %call5 = OpGroupBroadcast %uint %uint_3 %x %c316 %call6 = OpGroupIAdd %uint %uint_3 Reduce %x317 %call7 = OpGroupFAdd %float %uint_3 Reduce %f318 %call8 = OpGroupSMin %uint %uint_3 Reduce %x319 %call9 = OpGroupUMin %uint %uint_3 Reduce %c320 %call10 = OpGroupFMin %float %uint_3 Reduce %f321 %call11 = OpGroupSMax %uint %uint_3 Reduce %x322 %call12 = OpGroupUMax %uint %uint_3 Reduce %c323 %call13 = OpGroupFMax %float %uint_3 Reduce %f324 %call14 = OpSubgroupShuffleINTEL %uint %x %c325 %call15 = OpSubgroupShuffleDownINTEL %uint %x %x %c326 %call16 = OpSubgroupShuffleUpINTEL %uint %x %x %c327 %call17 = OpSubgroupShuffleXorINTEL %uint %x %c328 %call18 = OpSubgroupBlockReadINTEL %uint %p329 OpSubgroupBlockWriteINTEL %p %c330 %call19 = OpSubgroupImageBlockReadINTEL %uint %image %coord331 OpSubgroupImageBlockWriteINTEL %image %coord %c332 %56 = OpGroupNonUniformElect %bool %uint_3333 %call20 = OpSelect %uint %56 %uint_1 %uint_0334 %58 = OpINotEqual %bool %x %uint_0335 %59 = OpGroupNonUniformAll %bool %uint_3 %58336 %call21 = OpSelect %uint %59 %uint_1 %uint_0337 %61 = OpINotEqual %bool %x %uint_0338 %62 = OpGroupNonUniformAny %bool %uint_3 %61339 %call22 = OpSelect %uint %62 %uint_1 %uint_0340 %64 = OpGroupNonUniformAllEqual %bool %uint_3 %x341 %call23 = OpSelect %uint %64 %uint_1 %uint_0342 %call24 = OpGroupNonUniformBroadcast %uint %uint_3 %x %uint_1343 %call25 = OpGroupNonUniformBroadcastFirst %uint %uint_3 %x344 %68 = OpINotEqual %bool %x %uint_0345 %call26 = OpGroupNonUniformBallot %v4uint %uint_3 %68346 %call30 = OpGroupNonUniformBallotBitCount %uint %uint_3 InclusiveScan %v347 %call31 = OpGroupNonUniformBallotBitCount %uint %uint_3 ExclusiveScan %v348 %call32 = OpGroupNonUniformBallotFindLSB %uint %uint_3 %v349 %call33 = OpGroupNonUniformBallotFindMSB %uint %uint_3 %v350 %call34 = OpGroupNonUniformIAdd %uint %uint_3 Reduce %x351 %call35 = OpGroupNonUniformFAdd %float %uint_3 Reduce %f352 %call36 = OpGroupNonUniformSMin %uint %uint_3 InclusiveScan %x353 %call37 = OpGroupNonUniformUMin %uint %uint_3 InclusiveScan %c354 %call38 = OpGroupNonUniformFMin %float %uint_3 InclusiveScan %f355 %call39 = OpGroupNonUniformSMax %uint %uint_3 ExclusiveScan %x356 %call40 = OpGroupNonUniformUMax %uint %uint_3 ExclusiveScan %c357 %call41 = OpGroupNonUniformFMax %float %uint_3 ExclusiveScan %f358 %call42 = OpGroupNonUniformIMul %uint %uint_3 Reduce %x359 %call43 = OpGroupNonUniformFMul %float %uint_3 Reduce %f360 %call44 = OpGroupNonUniformBitwiseAnd %uint %uint_3 Reduce %x361 %call45 = OpGroupNonUniformBitwiseOr %uint %uint_3 InclusiveScan %x362 %call46 = OpGroupNonUniformBitwiseXor %uint %uint_3 ExclusiveScan %x363 %87 = OpINotEqual %bool %x %uint_0364 %88 = OpGroupNonUniformLogicalAnd %bool %uint_3 Reduce %87365 %call47 = OpSelect %uint %88 %uint_1 %uint_0366 %90 = OpINotEqual %bool %x %uint_0367 %91 = OpGroupNonUniformLogicalOr %bool %uint_3 InclusiveScan %90368 %call48 = OpSelect %uint %91 %uint_1 %uint_0369 %93 = OpINotEqual %bool %x %uint_0370 %94 = OpGroupNonUniformLogicalXor %bool %uint_3 ExclusiveScan %93371 %call49 = OpSelect %uint %94 %uint_1 %uint_0372 %call50 = OpGroupNonUniformRotateKHR %uint %uint_3 %c %x373 OpReturn374 OpFunctionEnd375