brintos

brintos / llvm-project-archived public Read only

0
0
Text · 38.9 KiB · ccfd810 Raw
745 lines · plain
1;; #pragma OPENCL EXTENSION cl_khr_subgroup_clustered_reduce : enable2;; #pragma OPENCL EXTENSION cl_khr_fp16 : enable3;; #pragma OPENCL EXTENSION cl_khr_fp64 : enable4;;5;; kernel void testClusteredArithmeticChar(global char* dst)6;; {7;;     char v = 0;8;;     dst[0] = sub_group_clustered_reduce_add(v, 2);9;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);10;;     dst[2] = sub_group_clustered_reduce_min(v, 2);11;;     dst[3] = sub_group_clustered_reduce_max(v, 2);12;; }13;;14;; kernel void testClusteredArithmeticUChar(global uchar* dst)15;; {16;;     uchar v = 0;17;;     dst[0] = sub_group_clustered_reduce_add(v, 2);18;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);19;;     dst[2] = sub_group_clustered_reduce_min(v, 2);20;;     dst[3] = sub_group_clustered_reduce_max(v, 2);21;; }22;;23;; kernel void testClusteredArithmeticShort(global short* dst)24;; {25;;     short v = 0;26;;     dst[0] = sub_group_clustered_reduce_add(v, 2);27;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);28;;     dst[2] = sub_group_clustered_reduce_min(v, 2);29;;     dst[3] = sub_group_clustered_reduce_max(v, 2);30;; }31;;32;; kernel void testClusteredArithmeticUShort(global ushort* dst)33;; {34;;     ushort v = 0;35;;     dst[0] = sub_group_clustered_reduce_add(v, 2);36;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);37;;     dst[2] = sub_group_clustered_reduce_min(v, 2);38;;     dst[3] = sub_group_clustered_reduce_max(v, 2);39;; }40;;41;; kernel void testClusteredArithmeticInt(global int* dst)42;; {43;;     int v = 0;44;;     dst[0] = sub_group_clustered_reduce_add(v, 2);45;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);46;;     dst[2] = sub_group_clustered_reduce_min(v, 2);47;;     dst[3] = sub_group_clustered_reduce_max(v, 2);48;; }49;;50;; kernel void testClusteredArithmeticUInt(global uint* dst)51;; {52;;     uint v = 0;53;;     dst[0] = sub_group_clustered_reduce_add(v, 2);54;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);55;;     dst[2] = sub_group_clustered_reduce_min(v, 2);56;;     dst[3] = sub_group_clustered_reduce_max(v, 2);57;; }58;;59;; kernel void testClusteredArithmeticLong(global long* dst)60;; {61;;     long v = 0;62;;     dst[0] = sub_group_clustered_reduce_add(v, 2);63;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);64;;     dst[2] = sub_group_clustered_reduce_min(v, 2);65;;     dst[3] = sub_group_clustered_reduce_max(v, 2);66;; }67;;68;; kernel void testClusteredArithmeticULong(global ulong* dst)69;; {70;;     ulong v = 0;71;;     dst[0] = sub_group_clustered_reduce_add(v, 2);72;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);73;;     dst[2] = sub_group_clustered_reduce_min(v, 2);74;;     dst[3] = sub_group_clustered_reduce_max(v, 2);75;; }76;;77;; kernel void testClusteredArithmeticFloat(global float* dst)78;; {79;;     float v = 0;80;;     dst[0] = sub_group_clustered_reduce_add(v, 2);81;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);82;;     dst[2] = sub_group_clustered_reduce_min(v, 2);83;;     dst[3] = sub_group_clustered_reduce_max(v, 2);84;; }85;;86;; kernel void testClusteredArithmeticHalf(global half* dst)87;; {88;;     half v = 0;89;;     dst[0] = sub_group_clustered_reduce_add(v, 2);90;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);91;;     dst[2] = sub_group_clustered_reduce_min(v, 2);92;;     dst[3] = sub_group_clustered_reduce_max(v, 2);93;; }94;;95;; kernel void testClusteredArithmeticDouble(global double* dst)96;; {97;;     double v = 0;98;;     dst[0] = sub_group_clustered_reduce_add(v, 2);99;;     dst[1] = sub_group_clustered_reduce_mul(v, 2);100;;     dst[2] = sub_group_clustered_reduce_min(v, 2);101;;     dst[3] = sub_group_clustered_reduce_max(v, 2);102;; }103;;104;; kernel void testClusteredBitwiseChar(global char* dst)105;; {106;;     char v = 0;107;;     dst[0] = sub_group_clustered_reduce_and(v, 2);108;;     dst[1] = sub_group_clustered_reduce_or(v, 2);109;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);110;; }111;;112;; kernel void testClusteredBitwiseUChar(global uchar* dst)113;; {114;;     uchar v = 0;115;;     dst[0] = sub_group_clustered_reduce_and(v, 2);116;;     dst[1] = sub_group_clustered_reduce_or(v, 2);117;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);118;; }119;;120;; kernel void testClusteredBitwiseShort(global short* dst)121;; {122;;     short v = 0;123;;     dst[0] = sub_group_clustered_reduce_and(v, 2);124;;     dst[1] = sub_group_clustered_reduce_or(v, 2);125;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);126;; }127;;128;; kernel void testClusteredBitwiseUShort(global ushort* dst)129;; {130;;     ushort v = 0;131;;     dst[0] = sub_group_clustered_reduce_and(v, 2);132;;     dst[1] = sub_group_clustered_reduce_or(v, 2);133;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);134;; }135;;136;; kernel void testClusteredBitwiseInt(global int* dst)137;; {138;;     int v = 0;139;;     dst[0] = sub_group_clustered_reduce_and(v, 2);140;;     dst[1] = sub_group_clustered_reduce_or(v, 2);141;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);142;; }143;;144;; kernel void testClusteredBitwiseUInt(global uint* dst)145;; {146;;     uint v = 0;147;;     dst[0] = sub_group_clustered_reduce_and(v, 2);148;;     dst[1] = sub_group_clustered_reduce_or(v, 2);149;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);150;; }151;;152;; kernel void testClusteredBitwiseLong(global long* dst)153;; {154;;     long v = 0;155;;     dst[0] = sub_group_clustered_reduce_and(v, 2);156;;     dst[1] = sub_group_clustered_reduce_or(v, 2);157;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);158;; }159;;160;; kernel void testClusteredBitwiseULong(global ulong* dst)161;; {162;;     ulong v = 0;163;;     dst[0] = sub_group_clustered_reduce_and(v, 2);164;;     dst[1] = sub_group_clustered_reduce_or(v, 2);165;;     dst[2] = sub_group_clustered_reduce_xor(v, 2);166;; }167;;168;; kernel void testClusteredLogical(global int* dst)169;; {170;;     int v = 0;171;;     dst[0] = sub_group_clustered_reduce_logical_and(v, 2);172;;     dst[1] = sub_group_clustered_reduce_logical_or(v, 2);173;;     dst[2] = sub_group_clustered_reduce_logical_xor(v, 2);174;; }175 176; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV177 178; CHECK-SPIRV-DAG: OpCapability GroupNonUniformClustered179 180; CHECK-SPIRV-DAG: %[[#bool:]] = OpTypeBool181; CHECK-SPIRV-DAG: %[[#char:]] = OpTypeInt 8 0182; CHECK-SPIRV-DAG: %[[#short:]] = OpTypeInt 16 0183; CHECK-SPIRV-DAG: %[[#int:]] = OpTypeInt 32 0184; CHECK-SPIRV-DAG: %[[#long:]] = OpTypeInt 64 0185; CHECK-SPIRV-DAG: %[[#half:]] = OpTypeFloat 16186; CHECK-SPIRV-DAG: %[[#float:]] = OpTypeFloat 32187; CHECK-SPIRV-DAG: %[[#double:]] = OpTypeFloat 64188 189; CHECK-SPIRV-DAG: %[[#false:]] = OpConstantFalse %[[#bool]]190; CHECK-SPIRV-DAG: %[[#ScopeSubgroup:]] = OpConstant %[[#int]] 3{{$}}191; CHECK-SPIRV-DAG: %[[#char_0:]] = OpConstantNull %[[#char]]192; CHECK-SPIRV-DAG: %[[#short_0:]] = OpConstantNull %[[#short]]193; CHECK-SPIRV-DAG: %[[#int_0:]] = OpConstantNull %[[#int]]194; CHECK-SPIRV-DAG: %[[#int_2:]] = OpConstant %[[#int]] 2{{$}}195; CHECK-SPIRV-DAG: %[[#long_0:]] = OpConstantNull %[[#long]]196; CHECK-SPIRV-DAG: %[[#half_0:]] = OpConstantNull %[[#half]]197; CHECK-SPIRV-DAG: %[[#float_0:]] = OpConstantNull %[[#float]]198; CHECK-SPIRV-DAG: %[[#double_0:]] = OpConstantNull %[[#double]]199 200; CHECK-SPIRV: OpFunction201; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]202; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]203; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]204; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]205; CHECK-SPIRV: OpFunctionEnd206 207define dso_local spir_kernel void @testClusteredArithmeticChar(i8 addrspace(1)* nocapture) local_unnamed_addr {208  %2 = tail call spir_func signext i8 @_Z30sub_group_clustered_reduce_addcj(i8 signext 0, i32 2)209  store i8 %2, i8 addrspace(1)* %0, align 1210  %3 = tail call spir_func signext i8 @_Z30sub_group_clustered_reduce_mulcj(i8 signext 0, i32 2)211  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1212  store i8 %3, i8 addrspace(1)* %4, align 1213  %5 = tail call spir_func signext i8 @_Z30sub_group_clustered_reduce_mincj(i8 signext 0, i32 2)214  %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2215  store i8 %5, i8 addrspace(1)* %6, align 1216  %7 = tail call spir_func signext i8 @_Z30sub_group_clustered_reduce_maxcj(i8 signext 0, i32 2)217  %8 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 3218  store i8 %7, i8 addrspace(1)* %8, align 1219  ret void220}221 222declare dso_local spir_func signext i8 @_Z30sub_group_clustered_reduce_addcj(i8 signext, i32) local_unnamed_addr223 224declare dso_local spir_func signext i8 @_Z30sub_group_clustered_reduce_mulcj(i8 signext, i32) local_unnamed_addr225 226declare dso_local spir_func signext i8 @_Z30sub_group_clustered_reduce_mincj(i8 signext, i32) local_unnamed_addr227 228declare dso_local spir_func signext i8 @_Z30sub_group_clustered_reduce_maxcj(i8 signext, i32) local_unnamed_addr229 230; CHECK-SPIRV: OpFunction231; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]232; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]233; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]234; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]235; CHECK-SPIRV: OpFunctionEnd236 237define dso_local spir_kernel void @testClusteredArithmeticUChar(i8 addrspace(1)* nocapture) local_unnamed_addr {238  %2 = tail call spir_func zeroext i8 @_Z30sub_group_clustered_reduce_addhj(i8 zeroext 0, i32 2)239  store i8 %2, i8 addrspace(1)* %0, align 1240  %3 = tail call spir_func zeroext i8 @_Z30sub_group_clustered_reduce_mulhj(i8 zeroext 0, i32 2)241  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1242  store i8 %3, i8 addrspace(1)* %4, align 1243  %5 = tail call spir_func zeroext i8 @_Z30sub_group_clustered_reduce_minhj(i8 zeroext 0, i32 2)244  %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2245  store i8 %5, i8 addrspace(1)* %6, align 1246  %7 = tail call spir_func zeroext i8 @_Z30sub_group_clustered_reduce_maxhj(i8 zeroext 0, i32 2)247  %8 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 3248  store i8 %7, i8 addrspace(1)* %8, align 1249  ret void250}251 252declare dso_local spir_func zeroext i8 @_Z30sub_group_clustered_reduce_addhj(i8 zeroext, i32) local_unnamed_addr253 254declare dso_local spir_func zeroext i8 @_Z30sub_group_clustered_reduce_mulhj(i8 zeroext, i32) local_unnamed_addr255 256declare dso_local spir_func zeroext i8 @_Z30sub_group_clustered_reduce_minhj(i8 zeroext, i32) local_unnamed_addr257 258declare dso_local spir_func zeroext i8 @_Z30sub_group_clustered_reduce_maxhj(i8 zeroext, i32) local_unnamed_addr259 260; CHECK-SPIRV: OpFunction261; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]262; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]263; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]264; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]265; CHECK-SPIRV: OpFunctionEnd266 267define dso_local spir_kernel void @testClusteredArithmeticShort(i16 addrspace(1)* nocapture) local_unnamed_addr {268  %2 = tail call spir_func signext i16 @_Z30sub_group_clustered_reduce_addsj(i16 signext 0, i32 2)269  store i16 %2, i16 addrspace(1)* %0, align 2270  %3 = tail call spir_func signext i16 @_Z30sub_group_clustered_reduce_mulsj(i16 signext 0, i32 2)271  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1272  store i16 %3, i16 addrspace(1)* %4, align 2273  %5 = tail call spir_func signext i16 @_Z30sub_group_clustered_reduce_minsj(i16 signext 0, i32 2)274  %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2275  store i16 %5, i16 addrspace(1)* %6, align 2276  %7 = tail call spir_func signext i16 @_Z30sub_group_clustered_reduce_maxsj(i16 signext 0, i32 2)277  %8 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 3278  store i16 %7, i16 addrspace(1)* %8, align 2279  ret void280}281 282declare dso_local spir_func signext i16 @_Z30sub_group_clustered_reduce_addsj(i16 signext, i32) local_unnamed_addr283 284declare dso_local spir_func signext i16 @_Z30sub_group_clustered_reduce_mulsj(i16 signext, i32) local_unnamed_addr285 286declare dso_local spir_func signext i16 @_Z30sub_group_clustered_reduce_minsj(i16 signext, i32) local_unnamed_addr287 288declare dso_local spir_func signext i16 @_Z30sub_group_clustered_reduce_maxsj(i16 signext, i32) local_unnamed_addr289 290; CHECK-SPIRV: OpFunction291; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]292; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]293; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]294; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]295; CHECK-SPIRV: OpFunctionEnd296 297define dso_local spir_kernel void @testClusteredArithmeticUShort(i16 addrspace(1)* nocapture) local_unnamed_addr {298  %2 = tail call spir_func zeroext i16 @_Z30sub_group_clustered_reduce_addtj(i16 zeroext 0, i32 2)299  store i16 %2, i16 addrspace(1)* %0, align 2300  %3 = tail call spir_func zeroext i16 @_Z30sub_group_clustered_reduce_multj(i16 zeroext 0, i32 2)301  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1302  store i16 %3, i16 addrspace(1)* %4, align 2303  %5 = tail call spir_func zeroext i16 @_Z30sub_group_clustered_reduce_mintj(i16 zeroext 0, i32 2)304  %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2305  store i16 %5, i16 addrspace(1)* %6, align 2306  %7 = tail call spir_func zeroext i16 @_Z30sub_group_clustered_reduce_maxtj(i16 zeroext 0, i32 2)307  %8 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 3308  store i16 %7, i16 addrspace(1)* %8, align 2309  ret void310}311 312declare dso_local spir_func zeroext i16 @_Z30sub_group_clustered_reduce_addtj(i16 zeroext, i32) local_unnamed_addr313 314declare dso_local spir_func zeroext i16 @_Z30sub_group_clustered_reduce_multj(i16 zeroext, i32) local_unnamed_addr315 316declare dso_local spir_func zeroext i16 @_Z30sub_group_clustered_reduce_mintj(i16 zeroext, i32) local_unnamed_addr317 318declare dso_local spir_func zeroext i16 @_Z30sub_group_clustered_reduce_maxtj(i16 zeroext, i32) local_unnamed_addr319 320; CHECK-SPIRV: OpFunction321; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]322; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]323; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]324; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]325; CHECK-SPIRV: OpFunctionEnd326 327define dso_local spir_kernel void @testClusteredArithmeticInt(i32 addrspace(1)* nocapture) local_unnamed_addr {328  %2 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_addij(i32 0, i32 2)329  store i32 %2, i32 addrspace(1)* %0, align 4330  %3 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_mulij(i32 0, i32 2)331  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1332  store i32 %3, i32 addrspace(1)* %4, align 4333  %5 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_minij(i32 0, i32 2)334  %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2335  store i32 %5, i32 addrspace(1)* %6, align 4336  %7 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_maxij(i32 0, i32 2)337  %8 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 3338  store i32 %7, i32 addrspace(1)* %8, align 4339  ret void340}341 342declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_addij(i32, i32) local_unnamed_addr343 344declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_mulij(i32, i32) local_unnamed_addr345 346declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_minij(i32, i32) local_unnamed_addr347 348declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_maxij(i32, i32) local_unnamed_addr349 350; CHECK-SPIRV: OpFunction351; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]352; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]353; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]354; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]355; CHECK-SPIRV: OpFunctionEnd356 357define dso_local spir_kernel void @testClusteredArithmeticUInt(i32 addrspace(1)* nocapture) local_unnamed_addr {358  %2 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_addjj(i32 0, i32 2)359  store i32 %2, i32 addrspace(1)* %0, align 4360  %3 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_muljj(i32 0, i32 2)361  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1362  store i32 %3, i32 addrspace(1)* %4, align 4363  %5 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_minjj(i32 0, i32 2)364  %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2365  store i32 %5, i32 addrspace(1)* %6, align 4366  %7 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_maxjj(i32 0, i32 2)367  %8 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 3368  store i32 %7, i32 addrspace(1)* %8, align 4369  ret void370}371 372declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_addjj(i32, i32) local_unnamed_addr373 374declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_muljj(i32, i32) local_unnamed_addr375 376declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_minjj(i32, i32) local_unnamed_addr377 378declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_maxjj(i32, i32) local_unnamed_addr379 380; CHECK-SPIRV: OpFunction381; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]382; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]383; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]384; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]385; CHECK-SPIRV: OpFunctionEnd386 387define dso_local spir_kernel void @testClusteredArithmeticLong(i64 addrspace(1)* nocapture) local_unnamed_addr {388  %2 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_addlj(i64 0, i32 2)389  store i64 %2, i64 addrspace(1)* %0, align 8390  %3 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_mullj(i64 0, i32 2)391  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1392  store i64 %3, i64 addrspace(1)* %4, align 8393  %5 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_minlj(i64 0, i32 2)394  %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2395  store i64 %5, i64 addrspace(1)* %6, align 8396  %7 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_maxlj(i64 0, i32 2)397  %8 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 3398  store i64 %7, i64 addrspace(1)* %8, align 8399  ret void400}401 402declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_addlj(i64, i32) local_unnamed_addr403 404declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_mullj(i64, i32) local_unnamed_addr405 406declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_minlj(i64, i32) local_unnamed_addr407 408declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_maxlj(i64, i32) local_unnamed_addr409 410; CHECK-SPIRV: OpFunction411; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]412; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]413; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]414; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]415; CHECK-SPIRV: OpFunctionEnd416 417define dso_local spir_kernel void @testClusteredArithmeticULong(i64 addrspace(1)* nocapture) local_unnamed_addr {418  %2 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_addmj(i64 0, i32 2)419  store i64 %2, i64 addrspace(1)* %0, align 8420  %3 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_mulmj(i64 0, i32 2)421  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1422  store i64 %3, i64 addrspace(1)* %4, align 8423  %5 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_minmj(i64 0, i32 2)424  %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2425  store i64 %5, i64 addrspace(1)* %6, align 8426  %7 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_maxmj(i64 0, i32 2)427  %8 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 3428  store i64 %7, i64 addrspace(1)* %8, align 8429  ret void430}431 432declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_addmj(i64, i32) local_unnamed_addr433 434declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_mulmj(i64, i32) local_unnamed_addr435 436declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_minmj(i64, i32) local_unnamed_addr437 438declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_maxmj(i64, i32) local_unnamed_addr439 440; CHECK-SPIRV: OpFunction441; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#float]] %[[#ScopeSubgroup]] ClusteredReduce %[[#float_0]] %[[#int_2]]442; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#float]] %[[#ScopeSubgroup]] ClusteredReduce %[[#float_0]] %[[#int_2]]443; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#float]] %[[#ScopeSubgroup]] ClusteredReduce %[[#float_0]] %[[#int_2]]444; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#float]] %[[#ScopeSubgroup]] ClusteredReduce %[[#float_0]] %[[#int_2]]445; CHECK-SPIRV: OpFunctionEnd446 447define dso_local spir_kernel void @testClusteredArithmeticFloat(float addrspace(1)* nocapture) local_unnamed_addr {448  %2 = tail call spir_func float @_Z30sub_group_clustered_reduce_addfj(float 0.000000e+00, i32 2)449  store float %2, float addrspace(1)* %0, align 4450  %3 = tail call spir_func float @_Z30sub_group_clustered_reduce_mulfj(float 0.000000e+00, i32 2)451  %4 = getelementptr inbounds float, float addrspace(1)* %0, i64 1452  store float %3, float addrspace(1)* %4, align 4453  %5 = tail call spir_func float @_Z30sub_group_clustered_reduce_minfj(float 0.000000e+00, i32 2)454  %6 = getelementptr inbounds float, float addrspace(1)* %0, i64 2455  store float %5, float addrspace(1)* %6, align 4456  %7 = tail call spir_func float @_Z30sub_group_clustered_reduce_maxfj(float 0.000000e+00, i32 2)457  %8 = getelementptr inbounds float, float addrspace(1)* %0, i64 3458  store float %7, float addrspace(1)* %8, align 4459  ret void460}461 462declare dso_local spir_func float @_Z30sub_group_clustered_reduce_addfj(float, i32) local_unnamed_addr463 464declare dso_local spir_func float @_Z30sub_group_clustered_reduce_mulfj(float, i32) local_unnamed_addr465 466declare dso_local spir_func float @_Z30sub_group_clustered_reduce_minfj(float, i32) local_unnamed_addr467 468declare dso_local spir_func float @_Z30sub_group_clustered_reduce_maxfj(float, i32) local_unnamed_addr469 470; CHECK-SPIRV: OpFunction471; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#half]] %[[#ScopeSubgroup]] ClusteredReduce %[[#half_0]] %[[#int_2]]472; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#half]] %[[#ScopeSubgroup]] ClusteredReduce %[[#half_0]] %[[#int_2]]473; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#half]] %[[#ScopeSubgroup]] ClusteredReduce %[[#half_0]] %[[#int_2]]474; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#half]] %[[#ScopeSubgroup]] ClusteredReduce %[[#half_0]] %[[#int_2]]475; CHECK-SPIRV: OpFunctionEnd476 477define dso_local spir_kernel void @testClusteredArithmeticHalf(half addrspace(1)* nocapture) local_unnamed_addr {478  %2 = tail call spir_func half @_Z30sub_group_clustered_reduce_addDhj(half 0xH0000, i32 2)479  store half %2, half addrspace(1)* %0, align 2480  %3 = tail call spir_func half @_Z30sub_group_clustered_reduce_mulDhj(half 0xH0000, i32 2)481  %4 = getelementptr inbounds half, half addrspace(1)* %0, i64 1482  store half %3, half addrspace(1)* %4, align 2483  %5 = tail call spir_func half @_Z30sub_group_clustered_reduce_minDhj(half 0xH0000, i32 2)484  %6 = getelementptr inbounds half, half addrspace(1)* %0, i64 2485  store half %5, half addrspace(1)* %6, align 2486  %7 = tail call spir_func half @_Z30sub_group_clustered_reduce_maxDhj(half 0xH0000, i32 2)487  %8 = getelementptr inbounds half, half addrspace(1)* %0, i64 3488  store half %7, half addrspace(1)* %8, align 2489  ret void490}491 492declare dso_local spir_func half @_Z30sub_group_clustered_reduce_addDhj(half, i32) local_unnamed_addr493 494declare dso_local spir_func half @_Z30sub_group_clustered_reduce_mulDhj(half, i32) local_unnamed_addr495 496declare dso_local spir_func half @_Z30sub_group_clustered_reduce_minDhj(half, i32) local_unnamed_addr497 498declare dso_local spir_func half @_Z30sub_group_clustered_reduce_maxDhj(half, i32) local_unnamed_addr499 500; CHECK-SPIRV: OpFunction501; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#double]] %[[#ScopeSubgroup]] ClusteredReduce %[[#double_0]] %[[#int_2]]502; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#double]] %[[#ScopeSubgroup]] ClusteredReduce %[[#double_0]] %[[#int_2]]503; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#double]] %[[#ScopeSubgroup]] ClusteredReduce %[[#double_0]] %[[#int_2]]504; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#double]] %[[#ScopeSubgroup]] ClusteredReduce %[[#double_0]] %[[#int_2]]505; CHECK-SPIRV: OpFunctionEnd506 507define dso_local spir_kernel void @testClusteredArithmeticDouble(double addrspace(1)* nocapture) local_unnamed_addr {508  %2 = tail call spir_func double @_Z30sub_group_clustered_reduce_adddj(double 0.000000e+00, i32 2)509  store double %2, double addrspace(1)* %0, align 8510  %3 = tail call spir_func double @_Z30sub_group_clustered_reduce_muldj(double 0.000000e+00, i32 2)511  %4 = getelementptr inbounds double, double addrspace(1)* %0, i64 1512  store double %3, double addrspace(1)* %4, align 8513  %5 = tail call spir_func double @_Z30sub_group_clustered_reduce_mindj(double 0.000000e+00, i32 2)514  %6 = getelementptr inbounds double, double addrspace(1)* %0, i64 2515  store double %5, double addrspace(1)* %6, align 8516  %7 = tail call spir_func double @_Z30sub_group_clustered_reduce_maxdj(double 0.000000e+00, i32 2)517  %8 = getelementptr inbounds double, double addrspace(1)* %0, i64 3518  store double %7, double addrspace(1)* %8, align 8519  ret void520}521 522declare dso_local spir_func double @_Z30sub_group_clustered_reduce_adddj(double, i32) local_unnamed_addr523 524declare dso_local spir_func double @_Z30sub_group_clustered_reduce_muldj(double, i32) local_unnamed_addr525 526declare dso_local spir_func double @_Z30sub_group_clustered_reduce_mindj(double, i32) local_unnamed_addr527 528declare dso_local spir_func double @_Z30sub_group_clustered_reduce_maxdj(double, i32) local_unnamed_addr529 530; CHECK-SPIRV: OpFunction531; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]532; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]533; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]534; CHECK-SPIRV: OpFunctionEnd535 536define dso_local spir_kernel void @testClusteredBitwiseChar(i8 addrspace(1)* nocapture) local_unnamed_addr {537  %2 = tail call spir_func signext i8 @_Z30sub_group_clustered_reduce_andcj(i8 signext 0, i32 2)538  store i8 %2, i8 addrspace(1)* %0, align 1539  %3 = tail call spir_func signext i8 @_Z29sub_group_clustered_reduce_orcj(i8 signext 0, i32 2)540  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1541  store i8 %3, i8 addrspace(1)* %4, align 1542  %5 = tail call spir_func signext i8 @_Z30sub_group_clustered_reduce_xorcj(i8 signext 0, i32 2)543  %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2544  store i8 %5, i8 addrspace(1)* %6, align 1545  ret void546}547 548declare dso_local spir_func signext i8 @_Z30sub_group_clustered_reduce_andcj(i8 signext, i32) local_unnamed_addr549 550declare dso_local spir_func signext i8 @_Z29sub_group_clustered_reduce_orcj(i8 signext, i32) local_unnamed_addr551 552declare dso_local spir_func signext i8 @_Z30sub_group_clustered_reduce_xorcj(i8 signext, i32) local_unnamed_addr553 554; CHECK-SPIRV: OpFunction555; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]556; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]557; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] ClusteredReduce %[[#char_0]] %[[#int_2]]558; CHECK-SPIRV: OpFunctionEnd559 560define dso_local spir_kernel void @testClusteredBitwiseUChar(i8 addrspace(1)* nocapture) local_unnamed_addr {561  %2 = tail call spir_func zeroext i8 @_Z30sub_group_clustered_reduce_andhj(i8 zeroext 0, i32 2)562  store i8 %2, i8 addrspace(1)* %0, align 1563  %3 = tail call spir_func zeroext i8 @_Z29sub_group_clustered_reduce_orhj(i8 zeroext 0, i32 2)564  %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1565  store i8 %3, i8 addrspace(1)* %4, align 1566  %5 = tail call spir_func zeroext i8 @_Z30sub_group_clustered_reduce_xorhj(i8 zeroext 0, i32 2)567  %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2568  store i8 %5, i8 addrspace(1)* %6, align 1569  ret void570}571 572declare dso_local spir_func zeroext i8 @_Z30sub_group_clustered_reduce_andhj(i8 zeroext, i32) local_unnamed_addr573 574declare dso_local spir_func zeroext i8 @_Z29sub_group_clustered_reduce_orhj(i8 zeroext, i32) local_unnamed_addr575 576declare dso_local spir_func zeroext i8 @_Z30sub_group_clustered_reduce_xorhj(i8 zeroext, i32) local_unnamed_addr577 578; CHECK-SPIRV: OpFunction579; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]580; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]581; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]582; CHECK-SPIRV: OpFunctionEnd583 584define dso_local spir_kernel void @testClusteredBitwiseShort(i16 addrspace(1)* nocapture) local_unnamed_addr {585  %2 = tail call spir_func signext i16 @_Z30sub_group_clustered_reduce_andsj(i16 signext 0, i32 2)586  store i16 %2, i16 addrspace(1)* %0, align 2587  %3 = tail call spir_func signext i16 @_Z29sub_group_clustered_reduce_orsj(i16 signext 0, i32 2)588  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1589  store i16 %3, i16 addrspace(1)* %4, align 2590  %5 = tail call spir_func signext i16 @_Z30sub_group_clustered_reduce_xorsj(i16 signext 0, i32 2)591  %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2592  store i16 %5, i16 addrspace(1)* %6, align 2593  ret void594}595 596declare dso_local spir_func signext i16 @_Z30sub_group_clustered_reduce_andsj(i16 signext, i32) local_unnamed_addr597 598declare dso_local spir_func signext i16 @_Z29sub_group_clustered_reduce_orsj(i16 signext, i32) local_unnamed_addr599 600declare dso_local spir_func signext i16 @_Z30sub_group_clustered_reduce_xorsj(i16 signext, i32) local_unnamed_addr601 602; CHECK-SPIRV: OpFunction603; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]604; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]605; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] ClusteredReduce %[[#short_0]] %[[#int_2]]606; CHECK-SPIRV: OpFunctionEnd607 608define dso_local spir_kernel void @testClusteredBitwiseUShort(i16 addrspace(1)* nocapture) local_unnamed_addr {609  %2 = tail call spir_func zeroext i16 @_Z30sub_group_clustered_reduce_andtj(i16 zeroext 0, i32 2)610  store i16 %2, i16 addrspace(1)* %0, align 2611  %3 = tail call spir_func zeroext i16 @_Z29sub_group_clustered_reduce_ortj(i16 zeroext 0, i32 2)612  %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1613  store i16 %3, i16 addrspace(1)* %4, align 2614  %5 = tail call spir_func zeroext i16 @_Z30sub_group_clustered_reduce_xortj(i16 zeroext 0, i32 2)615  %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2616  store i16 %5, i16 addrspace(1)* %6, align 2617  ret void618}619 620declare dso_local spir_func zeroext i16 @_Z30sub_group_clustered_reduce_andtj(i16 zeroext, i32) local_unnamed_addr621 622declare dso_local spir_func zeroext i16 @_Z29sub_group_clustered_reduce_ortj(i16 zeroext, i32) local_unnamed_addr623 624declare dso_local spir_func zeroext i16 @_Z30sub_group_clustered_reduce_xortj(i16 zeroext, i32) local_unnamed_addr625 626; CHECK-SPIRV: OpFunction627; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]628; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]629; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]630; CHECK-SPIRV: OpFunctionEnd631 632define dso_local spir_kernel void @testClusteredBitwiseInt(i32 addrspace(1)* nocapture) local_unnamed_addr {633  %2 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_andij(i32 0, i32 2)634  store i32 %2, i32 addrspace(1)* %0, align 4635  %3 = tail call spir_func i32 @_Z29sub_group_clustered_reduce_orij(i32 0, i32 2)636  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1637  store i32 %3, i32 addrspace(1)* %4, align 4638  %5 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_xorij(i32 0, i32 2)639  %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2640  store i32 %5, i32 addrspace(1)* %6, align 4641  ret void642}643 644declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_andij(i32, i32) local_unnamed_addr645 646declare dso_local spir_func i32 @_Z29sub_group_clustered_reduce_orij(i32, i32) local_unnamed_addr647 648declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_xorij(i32, i32) local_unnamed_addr649 650; CHECK-SPIRV: OpFunction651; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]652; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]653; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] ClusteredReduce %[[#int_0]] %[[#int_2]]654; CHECK-SPIRV: OpFunctionEnd655 656define dso_local spir_kernel void @testClusteredBitwiseUInt(i32 addrspace(1)* nocapture) local_unnamed_addr {657  %2 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_andjj(i32 0, i32 2)658  store i32 %2, i32 addrspace(1)* %0, align 4659  %3 = tail call spir_func i32 @_Z29sub_group_clustered_reduce_orjj(i32 0, i32 2)660  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1661  store i32 %3, i32 addrspace(1)* %4, align 4662  %5 = tail call spir_func i32 @_Z30sub_group_clustered_reduce_xorjj(i32 0, i32 2)663  %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2664  store i32 %5, i32 addrspace(1)* %6, align 4665  ret void666}667 668declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_andjj(i32, i32) local_unnamed_addr669 670declare dso_local spir_func i32 @_Z29sub_group_clustered_reduce_orjj(i32, i32) local_unnamed_addr671 672declare dso_local spir_func i32 @_Z30sub_group_clustered_reduce_xorjj(i32, i32) local_unnamed_addr673 674; CHECK-SPIRV: OpFunction675; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]676; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]677; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]678; CHECK-SPIRV: OpFunctionEnd679 680define dso_local spir_kernel void @testClusteredBitwiseLong(i64 addrspace(1)* nocapture) local_unnamed_addr {681  %2 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_andlj(i64 0, i32 2)682  store i64 %2, i64 addrspace(1)* %0, align 8683  %3 = tail call spir_func i64 @_Z29sub_group_clustered_reduce_orlj(i64 0, i32 2)684  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1685  store i64 %3, i64 addrspace(1)* %4, align 8686  %5 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_xorlj(i64 0, i32 2)687  %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2688  store i64 %5, i64 addrspace(1)* %6, align 8689  ret void690}691 692declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_andlj(i64, i32) local_unnamed_addr693 694declare dso_local spir_func i64 @_Z29sub_group_clustered_reduce_orlj(i64, i32) local_unnamed_addr695 696declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_xorlj(i64, i32) local_unnamed_addr697 698; CHECK-SPIRV: OpFunction699; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]700; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr  %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]701; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] ClusteredReduce %[[#long_0]] %[[#int_2]]702; CHECK-SPIRV: OpFunctionEnd703 704define dso_local spir_kernel void @testClusteredBitwiseULong(i64 addrspace(1)* nocapture) local_unnamed_addr {705  %2 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_andmj(i64 0, i32 2)706  store i64 %2, i64 addrspace(1)* %0, align 8707  %3 = tail call spir_func i64 @_Z29sub_group_clustered_reduce_ormj(i64 0, i32 2)708  %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1709  store i64 %3, i64 addrspace(1)* %4, align 8710  %5 = tail call spir_func i64 @_Z30sub_group_clustered_reduce_xormj(i64 0, i32 2)711  %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2712  store i64 %5, i64 addrspace(1)* %6, align 8713  ret void714}715 716declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_andmj(i64, i32) local_unnamed_addr717 718declare dso_local spir_func i64 @_Z29sub_group_clustered_reduce_ormj(i64, i32) local_unnamed_addr719 720declare dso_local spir_func i64 @_Z30sub_group_clustered_reduce_xormj(i64, i32) local_unnamed_addr721 722; CHECK-SPIRV: OpFunction723; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalAnd %[[#bool]] %[[#ScopeSubgroup]] ClusteredReduce %[[#false]] %[[#int_2]]724; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalOr  %[[#bool]] %[[#ScopeSubgroup]] ClusteredReduce %[[#false]] %[[#int_2]]725; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalXor %[[#bool]] %[[#ScopeSubgroup]] ClusteredReduce %[[#false]] %[[#int_2]]726; CHECK-SPIRV: OpFunctionEnd727 728define dso_local spir_kernel void @testClusteredLogical(i32 addrspace(1)* nocapture) local_unnamed_addr {729  %2 = tail call spir_func i32 @_Z38sub_group_clustered_reduce_logical_andij(i32 0, i32 2)730  store i32 %2, i32 addrspace(1)* %0, align 4731  %3 = tail call spir_func i32 @_Z37sub_group_clustered_reduce_logical_orij(i32 0, i32 2)732  %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1733  store i32 %3, i32 addrspace(1)* %4, align 4734  %5 = tail call spir_func i32 @_Z38sub_group_clustered_reduce_logical_xorij(i32 0, i32 2)735  %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2736  store i32 %5, i32 addrspace(1)* %6, align 4737  ret void738}739 740declare dso_local spir_func i32 @_Z38sub_group_clustered_reduce_logical_andij(i32, i32) local_unnamed_addr741 742declare dso_local spir_func i32 @_Z37sub_group_clustered_reduce_logical_orij(i32, i32) local_unnamed_addr743 744declare dso_local spir_func i32 @_Z38sub_group_clustered_reduce_logical_xorij(i32, i32) local_unnamed_addr745