1 ;; #pragma OPENCL EXTENSION cl_khr_subgroup_non_uniform_arithmetic : enable
2 ;; #pragma OPENCL EXTENSION cl_khr_fp16 : enable
3 ;; #pragma OPENCL EXTENSION cl_khr_fp64 : enable
5 ;; kernel void testNonUniformArithmeticChar(global char* dst)
8 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
9 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
10 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
11 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
12 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
13 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
14 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
15 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
16 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
17 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
18 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
19 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
22 ;; kernel void testNonUniformArithmeticUChar(global uchar* dst)
25 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
26 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
27 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
28 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
29 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
30 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
31 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
32 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
33 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
34 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
35 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
36 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
39 ;; kernel void testNonUniformArithmeticShort(global short* dst)
42 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
43 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
44 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
45 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
46 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
47 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
48 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
49 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
50 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
51 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
52 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
53 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
56 ;; kernel void testNonUniformArithmeticUShort(global ushort* dst)
59 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
60 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
61 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
62 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
63 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
64 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
65 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
66 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
67 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
68 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
69 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
70 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
73 ;; kernel void testNonUniformArithmeticInt(global int* dst)
76 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
77 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
78 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
79 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
80 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
81 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
82 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
83 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
84 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
85 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
86 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
87 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
90 ;; kernel void testNonUniformArithmeticUInt(global uint* dst)
93 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
94 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
95 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
96 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
97 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
98 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
99 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
100 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
101 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
102 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
103 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
104 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
107 ;; kernel void testNonUniformArithmeticLong(global long* dst)
110 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
111 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
112 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
113 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
114 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
115 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
116 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
117 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
118 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
119 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
120 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
121 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
124 ;; kernel void testNonUniformArithmeticULong(global ulong* dst)
127 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
128 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
129 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
130 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
131 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
132 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
133 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
134 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
135 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
136 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
137 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
138 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
141 ;; kernel void testNonUniformArithmeticFloat(global float* dst)
144 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
145 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
146 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
147 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
148 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
149 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
150 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
151 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
152 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
153 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
154 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
155 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
158 ;; kernel void testNonUniformArithmeticHalf(global half* dst)
161 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
162 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
163 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
164 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
165 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
166 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
167 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
168 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
169 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
170 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
171 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
172 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
175 ;; kernel void testNonUniformArithmeticDouble(global double* dst)
178 ;; dst[0] = sub_group_non_uniform_reduce_add(v);
179 ;; dst[1] = sub_group_non_uniform_reduce_mul(v);
180 ;; dst[2] = sub_group_non_uniform_reduce_min(v);
181 ;; dst[3] = sub_group_non_uniform_reduce_max(v);
182 ;; dst[4] = sub_group_non_uniform_scan_inclusive_add(v);
183 ;; dst[5] = sub_group_non_uniform_scan_inclusive_mul(v);
184 ;; dst[6] = sub_group_non_uniform_scan_inclusive_min(v);
185 ;; dst[7] = sub_group_non_uniform_scan_inclusive_max(v);
186 ;; dst[8] = sub_group_non_uniform_scan_exclusive_add(v);
187 ;; dst[9] = sub_group_non_uniform_scan_exclusive_mul(v);
188 ;; dst[10] = sub_group_non_uniform_scan_exclusive_min(v);
189 ;; dst[11] = sub_group_non_uniform_scan_exclusive_max(v);
192 ;; kernel void testNonUniformBitwiseChar(global char* dst)
195 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
196 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
197 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
198 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
199 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
200 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
201 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
202 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
203 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
206 ;; kernel void testNonUniformBitwiseUChar(global uchar* dst)
209 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
210 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
211 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
212 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
213 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
214 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
215 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
216 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
217 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
220 ;; kernel void testNonUniformBitwiseShort(global short* dst)
223 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
224 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
225 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
226 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
227 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
228 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
229 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
230 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
231 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
234 ;; kernel void testNonUniformBitwiseUShort(global ushort* dst)
237 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
238 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
239 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
240 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
241 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
242 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
243 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
244 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
245 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
248 ;; kernel void testNonUniformBitwiseInt(global int* dst)
251 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
252 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
253 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
254 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
255 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
256 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
257 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
258 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
259 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
262 ;; kernel void testNonUniformBitwiseUInt(global uint* dst)
265 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
266 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
267 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
268 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
269 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
270 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
271 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
272 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
273 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
276 ;; kernel void testNonUniformBitwiseLong(global long* dst)
279 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
280 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
281 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
282 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
283 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
284 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
285 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
286 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
287 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
290 ;; kernel void testNonUniformBitwiseULong(global ulong* dst)
293 ;; dst[0] = sub_group_non_uniform_reduce_and(v);
294 ;; dst[1] = sub_group_non_uniform_reduce_or(v);
295 ;; dst[2] = sub_group_non_uniform_reduce_xor(v);
296 ;; dst[3] = sub_group_non_uniform_scan_inclusive_and(v);
297 ;; dst[4] = sub_group_non_uniform_scan_inclusive_or(v);
298 ;; dst[5] = sub_group_non_uniform_scan_inclusive_xor(v);
299 ;; dst[6] = sub_group_non_uniform_scan_exclusive_and(v);
300 ;; dst[7] = sub_group_non_uniform_scan_exclusive_or(v);
301 ;; dst[8] = sub_group_non_uniform_scan_exclusive_xor(v);
304 ;; kernel void testNonUniformLogical(global int* dst)
307 ;; dst[0] = sub_group_non_uniform_reduce_logical_and(v);
308 ;; dst[1] = sub_group_non_uniform_reduce_logical_or(v);
309 ;; dst[2] = sub_group_non_uniform_reduce_logical_xor(v);
310 ;; dst[3] = sub_group_non_uniform_scan_inclusive_logical_and(v);
311 ;; dst[4] = sub_group_non_uniform_scan_inclusive_logical_or(v);
312 ;; dst[5] = sub_group_non_uniform_scan_inclusive_logical_xor(v);
313 ;; dst[6] = sub_group_non_uniform_scan_exclusive_logical_and(v);
314 ;; dst[7] = sub_group_non_uniform_scan_exclusive_logical_or(v);
315 ;; dst[8] = sub_group_non_uniform_scan_exclusive_logical_xor(v);
318 ; RUN: llc -O0 -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
320 ; CHECK-SPIRV-DAG: OpCapability GroupNonUniformArithmetic
322 ; CHECK-SPIRV-DAG: %[[#bool:]] = OpTypeBool
323 ; CHECK-SPIRV-DAG: %[[#char:]] = OpTypeInt 8 0
324 ; CHECK-SPIRV-DAG: %[[#short:]] = OpTypeInt 16 0
325 ; CHECK-SPIRV-DAG: %[[#int:]] = OpTypeInt 32 0
326 ; CHECK-SPIRV-DAG: %[[#long:]] = OpTypeInt 64 0
327 ; CHECK-SPIRV-DAG: %[[#half:]] = OpTypeFloat 16
328 ; CHECK-SPIRV-DAG: %[[#float:]] = OpTypeFloat 32
329 ; CHECK-SPIRV-DAG: %[[#double:]] = OpTypeFloat 64
331 ; CHECK-SPIRV-DAG: %[[#false:]] = OpConstantFalse %[[#bool]]
332 ; CHECK-SPIRV-DAG: %[[#ScopeSubgroup:]] = OpConstant %[[#int]] 3
333 ; CHECK-SPIRV-DAG: %[[#char_0:]] = OpConstant %[[#char]] 0
334 ; CHECK-SPIRV-DAG: %[[#char_10:]] = OpConstant %[[#char]] 10
335 ; CHECK-SPIRV-DAG: %[[#short_0:]] = OpConstant %[[#short]] 0
336 ; CHECK-SPIRV-DAG: %[[#int_0:]] = OpConstant %[[#int]] 0
337 ; CHECK-SPIRV-DAG: %[[#int_32:]] = OpConstant %[[#int]] 32
338 ; CHECK-SPIRV-DAG: %[[#long_0:]] = OpConstantNull %[[#long]]
339 ; CHECK-SPIRV-DAG: %[[#half_0:]] = OpConstant %[[#half]] 0
340 ; CHECK-SPIRV-DAG: %[[#float_0:]] = OpConstant %[[#float]] 0
341 ; CHECK-SPIRV-DAG: %[[#double_0:]] = OpConstant %[[#double]] 0
343 ; CHECK-SPIRV: OpFunction
344 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
345 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_10]]
346 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
347 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_10]]
348 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
349 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_10]] %[[#int_32]]
350 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
351 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_10]] %[[#int_32]]
352 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
353 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
354 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
355 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
356 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
357 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
358 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
359 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
360 ; CHECK-SPIRV: OpFunctionEnd
362 define dso_local spir_kernel void @testNonUniformArithmeticChar(i8 addrspace(1)* nocapture) local_unnamed_addr {
363 %2 = tail call spir_func signext i8 @_Z32sub_group_non_uniform_reduce_addc(i8 signext 0)
364 %r2 = tail call spir_func signext i8 @__spirv_GroupNonUniformIAdd(i32 3, i32 0, i8 signext 10)
365 store i8 %2, i8 addrspace(1)* %0, align 1
366 %3 = tail call spir_func signext i8 @_Z32sub_group_non_uniform_reduce_mulc(i8 signext 0)
367 %r3 = tail call spir_func signext i8 @__spirv_GroupNonUniformIMul(i32 3, i32 1, i8 signext 10)
368 %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1
369 store i8 %3, i8 addrspace(1)* %4, align 1
370 %5 = tail call spir_func signext i8 @_Z32sub_group_non_uniform_reduce_minc(i8 signext 0)
371 %r5 = tail call spir_func signext i8 @__spirv_GroupNonUniformSMin(i32 3, i32 0, i8 signext 10, i32 32)
372 %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2
373 store i8 %5, i8 addrspace(1)* %6, align 1
374 %7 = tail call spir_func signext i8 @_Z32sub_group_non_uniform_reduce_maxc(i8 signext 0)
375 %r7 = tail call spir_func signext i8 @__spirv_GroupNonUniformSMax(i32 3, i32 0, i8 signext 10, i32 32)
376 %8 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 3
377 store i8 %7, i8 addrspace(1)* %8, align 1
378 %9 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_addc(i8 signext 0)
379 %10 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 4
380 store i8 %9, i8 addrspace(1)* %10, align 1
381 %11 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_mulc(i8 signext 0)
382 %12 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 5
383 store i8 %11, i8 addrspace(1)* %12, align 1
384 %13 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_minc(i8 signext 0)
385 %14 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 6
386 store i8 %13, i8 addrspace(1)* %14, align 1
387 %15 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_maxc(i8 signext 0)
388 %16 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 7
389 store i8 %15, i8 addrspace(1)* %16, align 1
390 %17 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_addc(i8 signext 0)
391 %18 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 8
392 store i8 %17, i8 addrspace(1)* %18, align 1
393 %19 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_mulc(i8 signext 0)
394 %20 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 9
395 store i8 %19, i8 addrspace(1)* %20, align 1
396 %21 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_minc(i8 signext 0)
397 %22 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 10
398 store i8 %21, i8 addrspace(1)* %22, align 1
399 %23 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_maxc(i8 signext 0)
400 %24 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 11
401 store i8 %23, i8 addrspace(1)* %24, align 1
405 declare dso_local spir_func signext i8 @_Z32sub_group_non_uniform_reduce_addc(i8 signext) local_unnamed_addr
406 declare dso_local spir_func signext i8 @__spirv_GroupNonUniformIAdd(i32, i32, i8)
408 declare dso_local spir_func signext i8 @_Z32sub_group_non_uniform_reduce_mulc(i8 signext) local_unnamed_addr
409 declare dso_local spir_func signext i8 @__spirv_GroupNonUniformIMul(i32, i32, i8)
411 declare dso_local spir_func signext i8 @_Z32sub_group_non_uniform_reduce_minc(i8 signext) local_unnamed_addr
412 declare dso_local spir_func signext i8 @__spirv_GroupNonUniformSMin(i32, i32, i8, i32)
414 declare dso_local spir_func signext i8 @_Z32sub_group_non_uniform_reduce_maxc(i8 signext) local_unnamed_addr
415 declare dso_local spir_func signext i8 @__spirv_GroupNonUniformSMax(i32, i32, i8, i32)
417 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_addc(i8 signext) local_unnamed_addr
419 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_mulc(i8 signext) local_unnamed_addr
421 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_minc(i8 signext) local_unnamed_addr
423 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_maxc(i8 signext) local_unnamed_addr
425 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_addc(i8 signext) local_unnamed_addr
427 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_mulc(i8 signext) local_unnamed_addr
429 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_minc(i8 signext) local_unnamed_addr
431 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_maxc(i8 signext) local_unnamed_addr
433 ; CHECK-SPIRV: OpFunction
434 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
435 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
436 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
437 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
438 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
439 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
440 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
441 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
442 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
443 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
444 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
445 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
446 ; CHECK-SPIRV: OpFunctionEnd
448 define dso_local spir_kernel void @testNonUniformArithmeticUChar(i8 addrspace(1)* nocapture) local_unnamed_addr {
449 %2 = tail call spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_addh(i8 zeroext 0)
450 store i8 %2, i8 addrspace(1)* %0, align 1
451 %3 = tail call spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_mulh(i8 zeroext 0)
452 %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1
453 store i8 %3, i8 addrspace(1)* %4, align 1
454 %5 = tail call spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_minh(i8 zeroext 0)
455 %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2
456 store i8 %5, i8 addrspace(1)* %6, align 1
457 %7 = tail call spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_maxh(i8 zeroext 0)
458 %8 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 3
459 store i8 %7, i8 addrspace(1)* %8, align 1
460 %9 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_addh(i8 zeroext 0)
461 %10 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 4
462 store i8 %9, i8 addrspace(1)* %10, align 1
463 %11 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_mulh(i8 zeroext 0)
464 %12 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 5
465 store i8 %11, i8 addrspace(1)* %12, align 1
466 %13 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_minh(i8 zeroext 0)
467 %14 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 6
468 store i8 %13, i8 addrspace(1)* %14, align 1
469 %15 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_maxh(i8 zeroext 0)
470 %16 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 7
471 store i8 %15, i8 addrspace(1)* %16, align 1
472 %17 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_addh(i8 zeroext 0)
473 %18 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 8
474 store i8 %17, i8 addrspace(1)* %18, align 1
475 %19 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_mulh(i8 zeroext 0)
476 %20 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 9
477 store i8 %19, i8 addrspace(1)* %20, align 1
478 %21 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_minh(i8 zeroext 0)
479 %22 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 10
480 store i8 %21, i8 addrspace(1)* %22, align 1
481 %23 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_maxh(i8 zeroext 0)
482 %24 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 11
483 store i8 %23, i8 addrspace(1)* %24, align 1
487 declare dso_local spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_addh(i8 zeroext) local_unnamed_addr
489 declare dso_local spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_mulh(i8 zeroext) local_unnamed_addr
491 declare dso_local spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_minh(i8 zeroext) local_unnamed_addr
493 declare dso_local spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_maxh(i8 zeroext) local_unnamed_addr
495 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_addh(i8 zeroext) local_unnamed_addr
497 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_mulh(i8 zeroext) local_unnamed_addr
499 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_minh(i8 zeroext) local_unnamed_addr
501 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_maxh(i8 zeroext) local_unnamed_addr
503 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_addh(i8 zeroext) local_unnamed_addr
505 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_mulh(i8 zeroext) local_unnamed_addr
507 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_minh(i8 zeroext) local_unnamed_addr
509 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_maxh(i8 zeroext) local_unnamed_addr
511 ; CHECK-SPIRV: OpFunction
512 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
513 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
514 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
515 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
516 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
517 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
518 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
519 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
520 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
521 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
522 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
523 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
524 ; CHECK-SPIRV: OpFunctionEnd
526 define dso_local spir_kernel void @testNonUniformArithmeticShort(i16 addrspace(1)* nocapture) local_unnamed_addr {
527 %2 = tail call spir_func signext i16 @_Z32sub_group_non_uniform_reduce_adds(i16 signext 0)
528 store i16 %2, i16 addrspace(1)* %0, align 2
529 %3 = tail call spir_func signext i16 @_Z32sub_group_non_uniform_reduce_muls(i16 signext 0)
530 %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1
531 store i16 %3, i16 addrspace(1)* %4, align 2
532 %5 = tail call spir_func signext i16 @_Z32sub_group_non_uniform_reduce_mins(i16 signext 0)
533 %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2
534 store i16 %5, i16 addrspace(1)* %6, align 2
535 %7 = tail call spir_func signext i16 @_Z32sub_group_non_uniform_reduce_maxs(i16 signext 0)
536 %8 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 3
537 store i16 %7, i16 addrspace(1)* %8, align 2
538 %9 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_adds(i16 signext 0)
539 %10 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 4
540 store i16 %9, i16 addrspace(1)* %10, align 2
541 %11 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_muls(i16 signext 0)
542 %12 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 5
543 store i16 %11, i16 addrspace(1)* %12, align 2
544 %13 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_mins(i16 signext 0)
545 %14 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 6
546 store i16 %13, i16 addrspace(1)* %14, align 2
547 %15 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_maxs(i16 signext 0)
548 %16 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 7
549 store i16 %15, i16 addrspace(1)* %16, align 2
550 %17 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_adds(i16 signext 0)
551 %18 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 8
552 store i16 %17, i16 addrspace(1)* %18, align 2
553 %19 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_muls(i16 signext 0)
554 %20 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 9
555 store i16 %19, i16 addrspace(1)* %20, align 2
556 %21 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_mins(i16 signext 0)
557 %22 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 10
558 store i16 %21, i16 addrspace(1)* %22, align 2
559 %23 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_maxs(i16 signext 0)
560 %24 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 11
561 store i16 %23, i16 addrspace(1)* %24, align 2
565 declare dso_local spir_func signext i16 @_Z32sub_group_non_uniform_reduce_adds(i16 signext) local_unnamed_addr
567 declare dso_local spir_func signext i16 @_Z32sub_group_non_uniform_reduce_muls(i16 signext) local_unnamed_addr
569 declare dso_local spir_func signext i16 @_Z32sub_group_non_uniform_reduce_mins(i16 signext) local_unnamed_addr
571 declare dso_local spir_func signext i16 @_Z32sub_group_non_uniform_reduce_maxs(i16 signext) local_unnamed_addr
573 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_adds(i16 signext) local_unnamed_addr
575 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_muls(i16 signext) local_unnamed_addr
577 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_mins(i16 signext) local_unnamed_addr
579 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_maxs(i16 signext) local_unnamed_addr
581 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_adds(i16 signext) local_unnamed_addr
583 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_muls(i16 signext) local_unnamed_addr
585 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_mins(i16 signext) local_unnamed_addr
587 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_maxs(i16 signext) local_unnamed_addr
589 ; CHECK-SPIRV: OpFunction
590 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
591 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
592 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
593 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]] %[[#int_32]]
594 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
595 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]] %[[#int_32]]
596 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
597 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
598 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
599 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
600 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
601 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
602 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
603 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
604 ; CHECK-SPIRV: OpFunctionEnd
606 define dso_local spir_kernel void @testNonUniformArithmeticUShort(i16 addrspace(1)* nocapture) local_unnamed_addr {
607 %2 = tail call spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_addt(i16 zeroext 0)
608 store i16 %2, i16 addrspace(1)* %0, align 2
609 %3 = tail call spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_mult(i16 zeroext 0)
610 %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1
611 store i16 %3, i16 addrspace(1)* %4, align 2
612 %5 = tail call spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_mint(i16 zeroext 0)
613 %r5 = tail call spir_func signext i16 @__spirv_GroupNonUniformUMin(i32 3, i32 0, i16 signext 0, i32 32)
614 %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2
615 store i16 %5, i16 addrspace(1)* %6, align 2
616 %7 = tail call spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_maxt(i16 zeroext 0)
617 %r7 = tail call spir_func signext i16 @__spirv_GroupNonUniformUMax(i32 3, i32 0, i16 signext 0, i32 32)
618 %8 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 3
619 store i16 %7, i16 addrspace(1)* %8, align 2
620 %9 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_addt(i16 zeroext 0)
621 %10 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 4
622 store i16 %9, i16 addrspace(1)* %10, align 2
623 %11 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_mult(i16 zeroext 0)
624 %12 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 5
625 store i16 %11, i16 addrspace(1)* %12, align 2
626 %13 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_mint(i16 zeroext 0)
627 %14 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 6
628 store i16 %13, i16 addrspace(1)* %14, align 2
629 %15 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_maxt(i16 zeroext 0)
630 %16 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 7
631 store i16 %15, i16 addrspace(1)* %16, align 2
632 %17 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_addt(i16 zeroext 0)
633 %18 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 8
634 store i16 %17, i16 addrspace(1)* %18, align 2
635 %19 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_mult(i16 zeroext 0)
636 %20 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 9
637 store i16 %19, i16 addrspace(1)* %20, align 2
638 %21 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_mint(i16 zeroext 0)
639 %22 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 10
640 store i16 %21, i16 addrspace(1)* %22, align 2
641 %23 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_maxt(i16 zeroext 0)
642 %24 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 11
643 store i16 %23, i16 addrspace(1)* %24, align 2
647 declare dso_local spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_addt(i16 zeroext) local_unnamed_addr
649 declare dso_local spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_mult(i16 zeroext) local_unnamed_addr
651 declare dso_local spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_mint(i16 zeroext) local_unnamed_addr
652 declare dso_local spir_func zeroext i16 @__spirv_GroupNonUniformUMin(i32, i32, i16 signext, i32)
654 declare dso_local spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_maxt(i16 zeroext) local_unnamed_addr
655 declare dso_local spir_func zeroext i16 @__spirv_GroupNonUniformUMax(i32, i32, i16 signext, i32)
657 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_addt(i16 zeroext) local_unnamed_addr
659 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_mult(i16 zeroext) local_unnamed_addr
661 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_mint(i16 zeroext) local_unnamed_addr
663 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_maxt(i16 zeroext) local_unnamed_addr
665 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_addt(i16 zeroext) local_unnamed_addr
667 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_mult(i16 zeroext) local_unnamed_addr
669 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_mint(i16 zeroext) local_unnamed_addr
671 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_maxt(i16 zeroext) local_unnamed_addr
673 ; CHECK-SPIRV: OpFunction
674 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
675 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
676 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
677 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
678 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
679 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
680 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
681 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
682 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
683 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
684 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
685 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
686 ; CHECK-SPIRV: OpFunctionEnd
688 define dso_local spir_kernel void @testNonUniformArithmeticInt(i32 addrspace(1)* nocapture) local_unnamed_addr {
689 %2 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_addi(i32 0)
690 store i32 %2, i32 addrspace(1)* %0, align 4
691 %3 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_muli(i32 0)
692 %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1
693 store i32 %3, i32 addrspace(1)* %4, align 4
694 %5 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_mini(i32 0)
695 %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2
696 store i32 %5, i32 addrspace(1)* %6, align 4
697 %7 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_maxi(i32 0)
698 %8 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 3
699 store i32 %7, i32 addrspace(1)* %8, align 4
700 %9 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_addi(i32 0)
701 %10 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 4
702 store i32 %9, i32 addrspace(1)* %10, align 4
703 %11 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_muli(i32 0)
704 %12 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 5
705 store i32 %11, i32 addrspace(1)* %12, align 4
706 %13 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_mini(i32 0)
707 %14 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 6
708 store i32 %13, i32 addrspace(1)* %14, align 4
709 %15 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_maxi(i32 0)
710 %16 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 7
711 store i32 %15, i32 addrspace(1)* %16, align 4
712 %17 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_addi(i32 0)
713 %18 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 8
714 store i32 %17, i32 addrspace(1)* %18, align 4
715 %19 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_muli(i32 0)
716 %20 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 9
717 store i32 %19, i32 addrspace(1)* %20, align 4
718 %21 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_mini(i32 0)
719 %22 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 10
720 store i32 %21, i32 addrspace(1)* %22, align 4
721 %23 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_maxi(i32 0)
722 %24 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 11
723 store i32 %23, i32 addrspace(1)* %24, align 4
727 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_addi(i32) local_unnamed_addr
729 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_muli(i32) local_unnamed_addr
731 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_mini(i32) local_unnamed_addr
733 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_maxi(i32) local_unnamed_addr
735 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_addi(i32) local_unnamed_addr
737 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_muli(i32) local_unnamed_addr
739 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_mini(i32) local_unnamed_addr
741 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_maxi(i32) local_unnamed_addr
743 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_addi(i32) local_unnamed_addr
745 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_muli(i32) local_unnamed_addr
747 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_mini(i32) local_unnamed_addr
749 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_maxi(i32) local_unnamed_addr
751 ; CHECK-SPIRV: OpFunction
752 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
753 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
754 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
755 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
756 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
757 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
758 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
759 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
760 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
761 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
762 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
763 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
764 ; CHECK-SPIRV: OpFunctionEnd
766 define dso_local spir_kernel void @testNonUniformArithmeticUInt(i32 addrspace(1)* nocapture) local_unnamed_addr {
767 %2 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_addj(i32 0)
768 store i32 %2, i32 addrspace(1)* %0, align 4
769 %3 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_mulj(i32 0)
770 %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1
771 store i32 %3, i32 addrspace(1)* %4, align 4
772 %5 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_minj(i32 0)
773 %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2
774 store i32 %5, i32 addrspace(1)* %6, align 4
775 %7 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_maxj(i32 0)
776 %8 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 3
777 store i32 %7, i32 addrspace(1)* %8, align 4
778 %9 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_addj(i32 0)
779 %10 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 4
780 store i32 %9, i32 addrspace(1)* %10, align 4
781 %11 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_mulj(i32 0)
782 %12 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 5
783 store i32 %11, i32 addrspace(1)* %12, align 4
784 %13 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_minj(i32 0)
785 %14 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 6
786 store i32 %13, i32 addrspace(1)* %14, align 4
787 %15 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_maxj(i32 0)
788 %16 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 7
789 store i32 %15, i32 addrspace(1)* %16, align 4
790 %17 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_addj(i32 0)
791 %18 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 8
792 store i32 %17, i32 addrspace(1)* %18, align 4
793 %19 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_mulj(i32 0)
794 %20 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 9
795 store i32 %19, i32 addrspace(1)* %20, align 4
796 %21 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_minj(i32 0)
797 %22 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 10
798 store i32 %21, i32 addrspace(1)* %22, align 4
799 %23 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_maxj(i32 0)
800 %24 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 11
801 store i32 %23, i32 addrspace(1)* %24, align 4
805 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_addj(i32) local_unnamed_addr
807 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_mulj(i32) local_unnamed_addr
809 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_minj(i32) local_unnamed_addr
811 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_maxj(i32) local_unnamed_addr
813 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_addj(i32) local_unnamed_addr
815 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_mulj(i32) local_unnamed_addr
817 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_minj(i32) local_unnamed_addr
819 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_maxj(i32) local_unnamed_addr
821 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_addj(i32) local_unnamed_addr
823 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_mulj(i32) local_unnamed_addr
825 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_minj(i32) local_unnamed_addr
827 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_maxj(i32) local_unnamed_addr
829 ; CHECK-SPIRV: OpFunction
830 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
831 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
832 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
833 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
834 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
835 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
836 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
837 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
838 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
839 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
840 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMin %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
841 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformSMax %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
842 ; CHECK-SPIRV: OpFunctionEnd
844 define dso_local spir_kernel void @testNonUniformArithmeticLong(i64 addrspace(1)* nocapture) local_unnamed_addr {
845 %2 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_addl(i64 0)
846 store i64 %2, i64 addrspace(1)* %0, align 8
847 %3 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_mull(i64 0)
848 %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1
849 store i64 %3, i64 addrspace(1)* %4, align 8
850 %5 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_minl(i64 0)
851 %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2
852 store i64 %5, i64 addrspace(1)* %6, align 8
853 %7 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_maxl(i64 0)
854 %8 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 3
855 store i64 %7, i64 addrspace(1)* %8, align 8
856 %9 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_addl(i64 0)
857 %10 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 4
858 store i64 %9, i64 addrspace(1)* %10, align 8
859 %11 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_mull(i64 0)
860 %12 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 5
861 store i64 %11, i64 addrspace(1)* %12, align 8
862 %13 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_minl(i64 0)
863 %14 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 6
864 store i64 %13, i64 addrspace(1)* %14, align 8
865 %15 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_maxl(i64 0)
866 %16 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 7
867 store i64 %15, i64 addrspace(1)* %16, align 8
868 %17 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_addl(i64 0)
869 %18 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 8
870 store i64 %17, i64 addrspace(1)* %18, align 8
871 %19 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_mull(i64 0)
872 %20 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 9
873 store i64 %19, i64 addrspace(1)* %20, align 8
874 %21 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_minl(i64 0)
875 %22 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 10
876 store i64 %21, i64 addrspace(1)* %22, align 8
877 %23 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_maxl(i64 0)
878 %24 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 11
879 store i64 %23, i64 addrspace(1)* %24, align 8
883 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_addl(i64) local_unnamed_addr
885 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_mull(i64) local_unnamed_addr
887 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_minl(i64) local_unnamed_addr
889 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_maxl(i64) local_unnamed_addr
891 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_addl(i64) local_unnamed_addr
893 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_mull(i64) local_unnamed_addr
895 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_minl(i64) local_unnamed_addr
897 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_maxl(i64) local_unnamed_addr
899 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_addl(i64) local_unnamed_addr
901 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_mull(i64) local_unnamed_addr
903 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_minl(i64) local_unnamed_addr
905 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_maxl(i64) local_unnamed_addr
907 ; CHECK-SPIRV: OpFunction
908 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
909 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
910 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
911 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
912 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
913 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
914 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
915 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
916 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIAdd %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
917 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformIMul %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
918 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMin %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
919 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformUMax %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
920 ; CHECK-SPIRV: OpFunctionEnd
922 define dso_local spir_kernel void @testNonUniformArithmeticULong(i64 addrspace(1)* nocapture) local_unnamed_addr {
923 %2 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_addm(i64 0)
924 store i64 %2, i64 addrspace(1)* %0, align 8
925 %3 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_mulm(i64 0)
926 %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1
927 store i64 %3, i64 addrspace(1)* %4, align 8
928 %5 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_minm(i64 0)
929 %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2
930 store i64 %5, i64 addrspace(1)* %6, align 8
931 %7 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_maxm(i64 0)
932 %8 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 3
933 store i64 %7, i64 addrspace(1)* %8, align 8
934 %9 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_addm(i64 0)
935 %10 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 4
936 store i64 %9, i64 addrspace(1)* %10, align 8
937 %11 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_mulm(i64 0)
938 %12 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 5
939 store i64 %11, i64 addrspace(1)* %12, align 8
940 %13 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_minm(i64 0)
941 %14 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 6
942 store i64 %13, i64 addrspace(1)* %14, align 8
943 %15 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_maxm(i64 0)
944 %16 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 7
945 store i64 %15, i64 addrspace(1)* %16, align 8
946 %17 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_addm(i64 0)
947 %18 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 8
948 store i64 %17, i64 addrspace(1)* %18, align 8
949 %19 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_mulm(i64 0)
950 %20 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 9
951 store i64 %19, i64 addrspace(1)* %20, align 8
952 %21 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_minm(i64 0)
953 %22 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 10
954 store i64 %21, i64 addrspace(1)* %22, align 8
955 %23 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_maxm(i64 0)
956 %24 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 11
957 store i64 %23, i64 addrspace(1)* %24, align 8
961 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_addm(i64) local_unnamed_addr
963 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_mulm(i64) local_unnamed_addr
965 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_minm(i64) local_unnamed_addr
967 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_maxm(i64) local_unnamed_addr
969 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_addm(i64) local_unnamed_addr
971 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_mulm(i64) local_unnamed_addr
973 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_minm(i64) local_unnamed_addr
975 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_maxm(i64) local_unnamed_addr
977 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_addm(i64) local_unnamed_addr
979 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_mulm(i64) local_unnamed_addr
981 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_minm(i64) local_unnamed_addr
983 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_maxm(i64) local_unnamed_addr
985 ; CHECK-SPIRV: OpFunction
986 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformFAdd %[[#float]] %[[#ScopeSubgroup]] Reduce %[[#float_0]]
987 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformFMul %[[#float]] %[[#ScopeSubgroup]] Reduce %[[#float_0]]
988 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformFMin %[[#float]] %[[#ScopeSubgroup]] Reduce %[[#float_0]]
989 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformFMax %[[#float]] %[[#ScopeSubgroup]] Reduce %[[#float_0]]
990 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#float]] %[[#ScopeSubgroup]] InclusiveScan %[[#float_0]]
991 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#float]] %[[#ScopeSubgroup]] InclusiveScan %[[#float_0]]
992 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#float]] %[[#ScopeSubgroup]] InclusiveScan %[[#float_0]]
993 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#float]] %[[#ScopeSubgroup]] InclusiveScan %[[#float_0]]
994 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#float]] %[[#ScopeSubgroup]] ExclusiveScan %[[#float_0]]
995 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#float]] %[[#ScopeSubgroup]] ExclusiveScan %[[#float_0]]
996 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#float]] %[[#ScopeSubgroup]] ExclusiveScan %[[#float_0]]
997 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#float]] %[[#ScopeSubgroup]] ExclusiveScan %[[#float_0]]
998 ; CHECK-SPIRV: OpFunctionEnd
1000 define dso_local spir_kernel void @testNonUniformArithmeticFloat(float addrspace(1)* nocapture) local_unnamed_addr {
1001 %2 = tail call spir_func float @_Z32sub_group_non_uniform_reduce_addf(float 0.000000e+00)
1002 %r2 = tail call spir_func float @__spirv_GroupNonUniformFAdd(i32 3, i32 0, float 0.000000e+00)
1003 store float %2, float addrspace(1)* %0, align 4
1004 %3 = tail call spir_func float @_Z32sub_group_non_uniform_reduce_mulf(float 0.000000e+00)
1005 %r3 = tail call spir_func float @__spirv_GroupNonUniformFMul(i32 3, i32 0, float 0.000000e+00)
1006 %4 = getelementptr inbounds float, float addrspace(1)* %0, i64 1
1007 store float %3, float addrspace(1)* %4, align 4
1008 %5 = tail call spir_func float @_Z32sub_group_non_uniform_reduce_minf(float 0.000000e+00)
1009 %r5 = tail call spir_func float @__spirv_GroupNonUniformFMin(i32 3, i32 0, float 0.000000e+00)
1010 %6 = getelementptr inbounds float, float addrspace(1)* %0, i64 2
1011 store float %5, float addrspace(1)* %6, align 4
1012 %7 = tail call spir_func float @_Z32sub_group_non_uniform_reduce_maxf(float 0.000000e+00)
1013 %r7 = tail call spir_func float @__spirv_GroupNonUniformFMax(i32 3, i32 0, float 0.000000e+00)
1014 %8 = getelementptr inbounds float, float addrspace(1)* %0, i64 3
1015 store float %7, float addrspace(1)* %8, align 4
1016 %9 = tail call spir_func float @_Z40sub_group_non_uniform_scan_inclusive_addf(float 0.000000e+00)
1017 %10 = getelementptr inbounds float, float addrspace(1)* %0, i64 4
1018 store float %9, float addrspace(1)* %10, align 4
1019 %11 = tail call spir_func float @_Z40sub_group_non_uniform_scan_inclusive_mulf(float 0.000000e+00)
1020 %12 = getelementptr inbounds float, float addrspace(1)* %0, i64 5
1021 store float %11, float addrspace(1)* %12, align 4
1022 %13 = tail call spir_func float @_Z40sub_group_non_uniform_scan_inclusive_minf(float 0.000000e+00)
1023 %14 = getelementptr inbounds float, float addrspace(1)* %0, i64 6
1024 store float %13, float addrspace(1)* %14, align 4
1025 %15 = tail call spir_func float @_Z40sub_group_non_uniform_scan_inclusive_maxf(float 0.000000e+00)
1026 %16 = getelementptr inbounds float, float addrspace(1)* %0, i64 7
1027 store float %15, float addrspace(1)* %16, align 4
1028 %17 = tail call spir_func float @_Z40sub_group_non_uniform_scan_exclusive_addf(float 0.000000e+00)
1029 %18 = getelementptr inbounds float, float addrspace(1)* %0, i64 8
1030 store float %17, float addrspace(1)* %18, align 4
1031 %19 = tail call spir_func float @_Z40sub_group_non_uniform_scan_exclusive_mulf(float 0.000000e+00)
1032 %20 = getelementptr inbounds float, float addrspace(1)* %0, i64 9
1033 store float %19, float addrspace(1)* %20, align 4
1034 %21 = tail call spir_func float @_Z40sub_group_non_uniform_scan_exclusive_minf(float 0.000000e+00)
1035 %22 = getelementptr inbounds float, float addrspace(1)* %0, i64 10
1036 store float %21, float addrspace(1)* %22, align 4
1037 %23 = tail call spir_func float @_Z40sub_group_non_uniform_scan_exclusive_maxf(float 0.000000e+00)
1038 %24 = getelementptr inbounds float, float addrspace(1)* %0, i64 11
1039 store float %23, float addrspace(1)* %24, align 4
1043 declare dso_local spir_func float @_Z32sub_group_non_uniform_reduce_addf(float) local_unnamed_addr
1044 declare dso_local spir_func float @__spirv_GroupNonUniformFAdd(i32, i32, float)
1046 declare dso_local spir_func float @_Z32sub_group_non_uniform_reduce_mulf(float) local_unnamed_addr
1047 declare dso_local spir_func float @__spirv_GroupNonUniformFMul(i32, i32, float)
1049 declare dso_local spir_func float @_Z32sub_group_non_uniform_reduce_minf(float) local_unnamed_addr
1050 declare dso_local spir_func float @__spirv_GroupNonUniformFMin(i32, i32, float)
1052 declare dso_local spir_func float @_Z32sub_group_non_uniform_reduce_maxf(float) local_unnamed_addr
1053 declare dso_local spir_func float @__spirv_GroupNonUniformFMax(i32, i32, float)
1055 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_inclusive_addf(float) local_unnamed_addr
1057 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_inclusive_mulf(float) local_unnamed_addr
1059 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_inclusive_minf(float) local_unnamed_addr
1061 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_inclusive_maxf(float) local_unnamed_addr
1063 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_exclusive_addf(float) local_unnamed_addr
1065 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_exclusive_mulf(float) local_unnamed_addr
1067 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_exclusive_minf(float) local_unnamed_addr
1069 declare dso_local spir_func float @_Z40sub_group_non_uniform_scan_exclusive_maxf(float) local_unnamed_addr
1071 ; CHECK-SPIRV: OpFunction
1072 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#half]] %[[#ScopeSubgroup]] Reduce %[[#half_0]]
1073 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#half]] %[[#ScopeSubgroup]] Reduce %[[#half_0]]
1074 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#half]] %[[#ScopeSubgroup]] Reduce %[[#half_0]]
1075 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#half]] %[[#ScopeSubgroup]] Reduce %[[#half_0]]
1076 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#half]] %[[#ScopeSubgroup]] InclusiveScan %[[#half_0]]
1077 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#half]] %[[#ScopeSubgroup]] InclusiveScan %[[#half_0]]
1078 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#half]] %[[#ScopeSubgroup]] InclusiveScan %[[#half_0]]
1079 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#half]] %[[#ScopeSubgroup]] InclusiveScan %[[#half_0]]
1080 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#half]] %[[#ScopeSubgroup]] ExclusiveScan %[[#half_0]]
1081 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#half]] %[[#ScopeSubgroup]] ExclusiveScan %[[#half_0]]
1082 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#half]] %[[#ScopeSubgroup]] ExclusiveScan %[[#half_0]]
1083 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#half]] %[[#ScopeSubgroup]] ExclusiveScan %[[#half_0]]
1084 ; CHECK-SPIRV: OpFunctionEnd
1086 define dso_local spir_kernel void @testNonUniformArithmeticHalf(half addrspace(1)* nocapture) local_unnamed_addr {
1087 %2 = tail call spir_func half @_Z32sub_group_non_uniform_reduce_addDh(half 0xH0000)
1088 store half %2, half addrspace(1)* %0, align 2
1089 %3 = tail call spir_func half @_Z32sub_group_non_uniform_reduce_mulDh(half 0xH0000)
1090 %4 = getelementptr inbounds half, half addrspace(1)* %0, i64 1
1091 store half %3, half addrspace(1)* %4, align 2
1092 %5 = tail call spir_func half @_Z32sub_group_non_uniform_reduce_minDh(half 0xH0000)
1093 %6 = getelementptr inbounds half, half addrspace(1)* %0, i64 2
1094 store half %5, half addrspace(1)* %6, align 2
1095 %7 = tail call spir_func half @_Z32sub_group_non_uniform_reduce_maxDh(half 0xH0000)
1096 %8 = getelementptr inbounds half, half addrspace(1)* %0, i64 3
1097 store half %7, half addrspace(1)* %8, align 2
1098 %9 = tail call spir_func half @_Z40sub_group_non_uniform_scan_inclusive_addDh(half 0xH0000)
1099 %10 = getelementptr inbounds half, half addrspace(1)* %0, i64 4
1100 store half %9, half addrspace(1)* %10, align 2
1101 %11 = tail call spir_func half @_Z40sub_group_non_uniform_scan_inclusive_mulDh(half 0xH0000)
1102 %12 = getelementptr inbounds half, half addrspace(1)* %0, i64 5
1103 store half %11, half addrspace(1)* %12, align 2
1104 %13 = tail call spir_func half @_Z40sub_group_non_uniform_scan_inclusive_minDh(half 0xH0000)
1105 %14 = getelementptr inbounds half, half addrspace(1)* %0, i64 6
1106 store half %13, half addrspace(1)* %14, align 2
1107 %15 = tail call spir_func half @_Z40sub_group_non_uniform_scan_inclusive_maxDh(half 0xH0000)
1108 %16 = getelementptr inbounds half, half addrspace(1)* %0, i64 7
1109 store half %15, half addrspace(1)* %16, align 2
1110 %17 = tail call spir_func half @_Z40sub_group_non_uniform_scan_exclusive_addDh(half 0xH0000)
1111 %18 = getelementptr inbounds half, half addrspace(1)* %0, i64 8
1112 store half %17, half addrspace(1)* %18, align 2
1113 %19 = tail call spir_func half @_Z40sub_group_non_uniform_scan_exclusive_mulDh(half 0xH0000)
1114 %20 = getelementptr inbounds half, half addrspace(1)* %0, i64 9
1115 store half %19, half addrspace(1)* %20, align 2
1116 %21 = tail call spir_func half @_Z40sub_group_non_uniform_scan_exclusive_minDh(half 0xH0000)
1117 %22 = getelementptr inbounds half, half addrspace(1)* %0, i64 10
1118 store half %21, half addrspace(1)* %22, align 2
1119 %23 = tail call spir_func half @_Z40sub_group_non_uniform_scan_exclusive_maxDh(half 0xH0000)
1120 %24 = getelementptr inbounds half, half addrspace(1)* %0, i64 11
1121 store half %23, half addrspace(1)* %24, align 2
1125 declare dso_local spir_func half @_Z32sub_group_non_uniform_reduce_addDh(half) local_unnamed_addr
1127 declare dso_local spir_func half @_Z32sub_group_non_uniform_reduce_mulDh(half) local_unnamed_addr
1129 declare dso_local spir_func half @_Z32sub_group_non_uniform_reduce_minDh(half) local_unnamed_addr
1131 declare dso_local spir_func half @_Z32sub_group_non_uniform_reduce_maxDh(half) local_unnamed_addr
1133 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_inclusive_addDh(half) local_unnamed_addr
1135 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_inclusive_mulDh(half) local_unnamed_addr
1137 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_inclusive_minDh(half) local_unnamed_addr
1139 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_inclusive_maxDh(half) local_unnamed_addr
1141 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_exclusive_addDh(half) local_unnamed_addr
1143 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_exclusive_mulDh(half) local_unnamed_addr
1145 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_exclusive_minDh(half) local_unnamed_addr
1147 declare dso_local spir_func half @_Z40sub_group_non_uniform_scan_exclusive_maxDh(half) local_unnamed_addr
1149 ; CHECK-SPIRV: OpFunction
1150 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#double]] %[[#ScopeSubgroup]] Reduce %[[#double_0]]
1151 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#double]] %[[#ScopeSubgroup]] Reduce %[[#double_0]]
1152 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#double]] %[[#ScopeSubgroup]] Reduce %[[#double_0]]
1153 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#double]] %[[#ScopeSubgroup]] Reduce %[[#double_0]]
1154 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#double]] %[[#ScopeSubgroup]] InclusiveScan %[[#double_0]]
1155 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#double]] %[[#ScopeSubgroup]] InclusiveScan %[[#double_0]]
1156 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#double]] %[[#ScopeSubgroup]] InclusiveScan %[[#double_0]]
1157 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#double]] %[[#ScopeSubgroup]] InclusiveScan %[[#double_0]]
1158 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFAdd %[[#double]] %[[#ScopeSubgroup]] ExclusiveScan %[[#double_0]]
1159 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMul %[[#double]] %[[#ScopeSubgroup]] ExclusiveScan %[[#double_0]]
1160 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMin %[[#double]] %[[#ScopeSubgroup]] ExclusiveScan %[[#double_0]]
1161 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformFMax %[[#double]] %[[#ScopeSubgroup]] ExclusiveScan %[[#double_0]]
1162 ; CHECK-SPIRV: OpFunctionEnd
1164 define dso_local spir_kernel void @testNonUniformArithmeticDouble(double addrspace(1)* nocapture) local_unnamed_addr {
1165 %2 = tail call spir_func double @_Z32sub_group_non_uniform_reduce_addd(double 0.000000e+00)
1166 store double %2, double addrspace(1)* %0, align 8
1167 %3 = tail call spir_func double @_Z32sub_group_non_uniform_reduce_muld(double 0.000000e+00)
1168 %4 = getelementptr inbounds double, double addrspace(1)* %0, i64 1
1169 store double %3, double addrspace(1)* %4, align 8
1170 %5 = tail call spir_func double @_Z32sub_group_non_uniform_reduce_mind(double 0.000000e+00)
1171 %6 = getelementptr inbounds double, double addrspace(1)* %0, i64 2
1172 store double %5, double addrspace(1)* %6, align 8
1173 %7 = tail call spir_func double @_Z32sub_group_non_uniform_reduce_maxd(double 0.000000e+00)
1174 %8 = getelementptr inbounds double, double addrspace(1)* %0, i64 3
1175 store double %7, double addrspace(1)* %8, align 8
1176 %9 = tail call spir_func double @_Z40sub_group_non_uniform_scan_inclusive_addd(double 0.000000e+00)
1177 %10 = getelementptr inbounds double, double addrspace(1)* %0, i64 4
1178 store double %9, double addrspace(1)* %10, align 8
1179 %11 = tail call spir_func double @_Z40sub_group_non_uniform_scan_inclusive_muld(double 0.000000e+00)
1180 %12 = getelementptr inbounds double, double addrspace(1)* %0, i64 5
1181 store double %11, double addrspace(1)* %12, align 8
1182 %13 = tail call spir_func double @_Z40sub_group_non_uniform_scan_inclusive_mind(double 0.000000e+00)
1183 %14 = getelementptr inbounds double, double addrspace(1)* %0, i64 6
1184 store double %13, double addrspace(1)* %14, align 8
1185 %15 = tail call spir_func double @_Z40sub_group_non_uniform_scan_inclusive_maxd(double 0.000000e+00)
1186 %16 = getelementptr inbounds double, double addrspace(1)* %0, i64 7
1187 store double %15, double addrspace(1)* %16, align 8
1188 %17 = tail call spir_func double @_Z40sub_group_non_uniform_scan_exclusive_addd(double 0.000000e+00)
1189 %18 = getelementptr inbounds double, double addrspace(1)* %0, i64 8
1190 store double %17, double addrspace(1)* %18, align 8
1191 %19 = tail call spir_func double @_Z40sub_group_non_uniform_scan_exclusive_muld(double 0.000000e+00)
1192 %20 = getelementptr inbounds double, double addrspace(1)* %0, i64 9
1193 store double %19, double addrspace(1)* %20, align 8
1194 %21 = tail call spir_func double @_Z40sub_group_non_uniform_scan_exclusive_mind(double 0.000000e+00)
1195 %22 = getelementptr inbounds double, double addrspace(1)* %0, i64 10
1196 store double %21, double addrspace(1)* %22, align 8
1197 %23 = tail call spir_func double @_Z40sub_group_non_uniform_scan_exclusive_maxd(double 0.000000e+00)
1198 %24 = getelementptr inbounds double, double addrspace(1)* %0, i64 11
1199 store double %23, double addrspace(1)* %24, align 8
1203 declare dso_local spir_func double @_Z32sub_group_non_uniform_reduce_addd(double) local_unnamed_addr
1205 declare dso_local spir_func double @_Z32sub_group_non_uniform_reduce_muld(double) local_unnamed_addr
1207 declare dso_local spir_func double @_Z32sub_group_non_uniform_reduce_mind(double) local_unnamed_addr
1209 declare dso_local spir_func double @_Z32sub_group_non_uniform_reduce_maxd(double) local_unnamed_addr
1211 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_inclusive_addd(double) local_unnamed_addr
1213 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_inclusive_muld(double) local_unnamed_addr
1215 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_inclusive_mind(double) local_unnamed_addr
1217 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_inclusive_maxd(double) local_unnamed_addr
1219 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_exclusive_addd(double) local_unnamed_addr
1221 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_exclusive_muld(double) local_unnamed_addr
1223 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_exclusive_mind(double) local_unnamed_addr
1225 declare dso_local spir_func double @_Z40sub_group_non_uniform_scan_exclusive_maxd(double) local_unnamed_addr
1227 ; CHECK-SPIRV: OpFunction
1228 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
1229 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformBitwiseOr %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
1230 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
1231 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
1232 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformBitwiseOr %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
1233 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
1234 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
1235 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
1236 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
1237 ; CHECK-SPIRV: OpFunctionEnd
1239 define dso_local spir_kernel void @testNonUniformBitwiseChar(i8 addrspace(1)* nocapture) local_unnamed_addr {
1240 %2 = tail call spir_func signext i8 @_Z32sub_group_non_uniform_reduce_andc(i8 signext 0)
1241 %r2 = tail call spir_func signext i8 @__spirv_GroupNonUniformBitwiseAnd(i32 3, i32 0, i8 signext 0)
1242 store i8 %2, i8 addrspace(1)* %0, align 1
1243 %3 = tail call spir_func signext i8 @_Z31sub_group_non_uniform_reduce_orc(i8 signext 0)
1244 %r3 = tail call spir_func signext i8 @__spirv_GroupNonUniformBitwiseOr(i32 3, i32 0, i8 signext 0)
1245 %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1
1246 store i8 %3, i8 addrspace(1)* %4, align 1
1247 %5 = tail call spir_func signext i8 @_Z32sub_group_non_uniform_reduce_xorc(i8 signext 0)
1248 %r5 = tail call spir_func signext i8 @__spirv_GroupNonUniformBitwiseXor(i32 3, i32 0, i8 signext 0)
1249 %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2
1250 store i8 %5, i8 addrspace(1)* %6, align 1
1251 %7 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_andc(i8 signext 0)
1252 %r7 = tail call spir_func signext i8 @__spirv_GroupNonUniformBitwiseAnd(i32 3, i32 1, i8 signext 0)
1253 %8 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 3
1254 store i8 %7, i8 addrspace(1)* %8, align 1
1255 %9 = tail call spir_func signext i8 @_Z39sub_group_non_uniform_scan_inclusive_orc(i8 signext 0)
1256 %r9 = tail call spir_func signext i8 @__spirv_GroupNonUniformBitwiseOr(i32 3, i32 1, i8 signext 0)
1257 %10 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 4
1258 store i8 %9, i8 addrspace(1)* %10, align 1
1259 %11 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_xorc(i8 signext 0)
1260 %r11 = tail call spir_func signext i8 @__spirv_GroupNonUniformBitwiseXor(i32 3, i32 1, i8 signext 0)
1261 %12 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 5
1262 store i8 %11, i8 addrspace(1)* %12, align 1
1263 %13 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_andc(i8 signext 0)
1264 %14 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 6
1265 store i8 %13, i8 addrspace(1)* %14, align 1
1266 %15 = tail call spir_func signext i8 @_Z39sub_group_non_uniform_scan_exclusive_orc(i8 signext 0)
1267 %16 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 7
1268 store i8 %15, i8 addrspace(1)* %16, align 1
1269 %17 = tail call spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_xorc(i8 signext 0)
1270 %18 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 8
1271 store i8 %17, i8 addrspace(1)* %18, align 1
1275 declare dso_local spir_func signext i8 @_Z32sub_group_non_uniform_reduce_andc(i8 signext) local_unnamed_addr
1276 declare dso_local spir_func signext i8 @__spirv_GroupNonUniformBitwiseAnd(i32, i32, i8 signext)
1278 declare dso_local spir_func signext i8 @_Z31sub_group_non_uniform_reduce_orc(i8 signext) local_unnamed_addr
1279 declare dso_local spir_func signext i8 @__spirv_GroupNonUniformBitwiseOr(i32, i32, i8 signext)
1281 declare dso_local spir_func signext i8 @_Z32sub_group_non_uniform_reduce_xorc(i8 signext) local_unnamed_addr
1282 declare dso_local spir_func signext i8 @__spirv_GroupNonUniformBitwiseXor(i32, i32, i8 signext)
1284 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_andc(i8 signext) local_unnamed_addr
1286 declare dso_local spir_func signext i8 @_Z39sub_group_non_uniform_scan_inclusive_orc(i8 signext) local_unnamed_addr
1288 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_inclusive_xorc(i8 signext) local_unnamed_addr
1290 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_andc(i8 signext) local_unnamed_addr
1292 declare dso_local spir_func signext i8 @_Z39sub_group_non_uniform_scan_exclusive_orc(i8 signext) local_unnamed_addr
1294 declare dso_local spir_func signext i8 @_Z40sub_group_non_uniform_scan_exclusive_xorc(i8 signext) local_unnamed_addr
1296 ; CHECK-SPIRV: OpFunction
1297 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
1298 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
1299 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] Reduce %[[#char_0]]
1300 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
1301 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
1302 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] InclusiveScan %[[#char_0]]
1303 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
1304 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
1305 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#char]] %[[#ScopeSubgroup]] ExclusiveScan %[[#char_0]]
1306 ; CHECK-SPIRV: OpFunctionEnd
1308 define dso_local spir_kernel void @testNonUniformBitwiseUChar(i8 addrspace(1)* nocapture) local_unnamed_addr {
1309 %2 = tail call spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_andh(i8 zeroext 0)
1310 store i8 %2, i8 addrspace(1)* %0, align 1
1311 %3 = tail call spir_func zeroext i8 @_Z31sub_group_non_uniform_reduce_orh(i8 zeroext 0)
1312 %4 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 1
1313 store i8 %3, i8 addrspace(1)* %4, align 1
1314 %5 = tail call spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_xorh(i8 zeroext 0)
1315 %6 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 2
1316 store i8 %5, i8 addrspace(1)* %6, align 1
1317 %7 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_andh(i8 zeroext 0)
1318 %8 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 3
1319 store i8 %7, i8 addrspace(1)* %8, align 1
1320 %9 = tail call spir_func zeroext i8 @_Z39sub_group_non_uniform_scan_inclusive_orh(i8 zeroext 0)
1321 %10 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 4
1322 store i8 %9, i8 addrspace(1)* %10, align 1
1323 %11 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_xorh(i8 zeroext 0)
1324 %12 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 5
1325 store i8 %11, i8 addrspace(1)* %12, align 1
1326 %13 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_andh(i8 zeroext 0)
1327 %14 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 6
1328 store i8 %13, i8 addrspace(1)* %14, align 1
1329 %15 = tail call spir_func zeroext i8 @_Z39sub_group_non_uniform_scan_exclusive_orh(i8 zeroext 0)
1330 %16 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 7
1331 store i8 %15, i8 addrspace(1)* %16, align 1
1332 %17 = tail call spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_xorh(i8 zeroext 0)
1333 %18 = getelementptr inbounds i8, i8 addrspace(1)* %0, i64 8
1334 store i8 %17, i8 addrspace(1)* %18, align 1
1338 declare dso_local spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_andh(i8 zeroext) local_unnamed_addr
1340 declare dso_local spir_func zeroext i8 @_Z31sub_group_non_uniform_reduce_orh(i8 zeroext) local_unnamed_addr
1342 declare dso_local spir_func zeroext i8 @_Z32sub_group_non_uniform_reduce_xorh(i8 zeroext) local_unnamed_addr
1344 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_andh(i8 zeroext) local_unnamed_addr
1346 declare dso_local spir_func zeroext i8 @_Z39sub_group_non_uniform_scan_inclusive_orh(i8 zeroext) local_unnamed_addr
1348 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_inclusive_xorh(i8 zeroext) local_unnamed_addr
1350 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_andh(i8 zeroext) local_unnamed_addr
1352 declare dso_local spir_func zeroext i8 @_Z39sub_group_non_uniform_scan_exclusive_orh(i8 zeroext) local_unnamed_addr
1354 declare dso_local spir_func zeroext i8 @_Z40sub_group_non_uniform_scan_exclusive_xorh(i8 zeroext) local_unnamed_addr
1356 ; CHECK-SPIRV: OpFunction
1357 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
1358 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
1359 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
1360 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
1361 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
1362 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
1363 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
1364 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
1365 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
1366 ; CHECK-SPIRV: OpFunctionEnd
1368 define dso_local spir_kernel void @testNonUniformBitwiseShort(i16 addrspace(1)* nocapture) local_unnamed_addr {
1369 %2 = tail call spir_func signext i16 @_Z32sub_group_non_uniform_reduce_ands(i16 signext 0)
1370 store i16 %2, i16 addrspace(1)* %0, align 2
1371 %3 = tail call spir_func signext i16 @_Z31sub_group_non_uniform_reduce_ors(i16 signext 0)
1372 %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1
1373 store i16 %3, i16 addrspace(1)* %4, align 2
1374 %5 = tail call spir_func signext i16 @_Z32sub_group_non_uniform_reduce_xors(i16 signext 0)
1375 %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2
1376 store i16 %5, i16 addrspace(1)* %6, align 2
1377 %7 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_ands(i16 signext 0)
1378 %8 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 3
1379 store i16 %7, i16 addrspace(1)* %8, align 2
1380 %9 = tail call spir_func signext i16 @_Z39sub_group_non_uniform_scan_inclusive_ors(i16 signext 0)
1381 %10 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 4
1382 store i16 %9, i16 addrspace(1)* %10, align 2
1383 %11 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_xors(i16 signext 0)
1384 %12 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 5
1385 store i16 %11, i16 addrspace(1)* %12, align 2
1386 %13 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_ands(i16 signext 0)
1387 %14 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 6
1388 store i16 %13, i16 addrspace(1)* %14, align 2
1389 %15 = tail call spir_func signext i16 @_Z39sub_group_non_uniform_scan_exclusive_ors(i16 signext 0)
1390 %16 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 7
1391 store i16 %15, i16 addrspace(1)* %16, align 2
1392 %17 = tail call spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_xors(i16 signext 0)
1393 %18 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 8
1394 store i16 %17, i16 addrspace(1)* %18, align 2
1398 declare dso_local spir_func signext i16 @_Z32sub_group_non_uniform_reduce_ands(i16 signext) local_unnamed_addr
1400 declare dso_local spir_func signext i16 @_Z31sub_group_non_uniform_reduce_ors(i16 signext) local_unnamed_addr
1402 declare dso_local spir_func signext i16 @_Z32sub_group_non_uniform_reduce_xors(i16 signext) local_unnamed_addr
1404 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_ands(i16 signext) local_unnamed_addr
1406 declare dso_local spir_func signext i16 @_Z39sub_group_non_uniform_scan_inclusive_ors(i16 signext) local_unnamed_addr
1408 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_inclusive_xors(i16 signext) local_unnamed_addr
1410 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_ands(i16 signext) local_unnamed_addr
1412 declare dso_local spir_func signext i16 @_Z39sub_group_non_uniform_scan_exclusive_ors(i16 signext) local_unnamed_addr
1414 declare dso_local spir_func signext i16 @_Z40sub_group_non_uniform_scan_exclusive_xors(i16 signext) local_unnamed_addr
1416 ; CHECK-SPIRV: OpFunction
1417 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
1418 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
1419 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] Reduce %[[#short_0]]
1420 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
1421 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
1422 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] InclusiveScan %[[#short_0]]
1423 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
1424 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
1425 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#short]] %[[#ScopeSubgroup]] ExclusiveScan %[[#short_0]]
1426 ; CHECK-SPIRV: OpFunctionEnd
1428 define dso_local spir_kernel void @testNonUniformBitwiseUShort(i16 addrspace(1)* nocapture) local_unnamed_addr {
1429 %2 = tail call spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_andt(i16 zeroext 0)
1430 store i16 %2, i16 addrspace(1)* %0, align 2
1431 %3 = tail call spir_func zeroext i16 @_Z31sub_group_non_uniform_reduce_ort(i16 zeroext 0)
1432 %4 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 1
1433 store i16 %3, i16 addrspace(1)* %4, align 2
1434 %5 = tail call spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_xort(i16 zeroext 0)
1435 %6 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 2
1436 store i16 %5, i16 addrspace(1)* %6, align 2
1437 %7 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_andt(i16 zeroext 0)
1438 %8 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 3
1439 store i16 %7, i16 addrspace(1)* %8, align 2
1440 %9 = tail call spir_func zeroext i16 @_Z39sub_group_non_uniform_scan_inclusive_ort(i16 zeroext 0)
1441 %10 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 4
1442 store i16 %9, i16 addrspace(1)* %10, align 2
1443 %11 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_xort(i16 zeroext 0)
1444 %12 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 5
1445 store i16 %11, i16 addrspace(1)* %12, align 2
1446 %13 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_andt(i16 zeroext 0)
1447 %14 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 6
1448 store i16 %13, i16 addrspace(1)* %14, align 2
1449 %15 = tail call spir_func zeroext i16 @_Z39sub_group_non_uniform_scan_exclusive_ort(i16 zeroext 0)
1450 %16 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 7
1451 store i16 %15, i16 addrspace(1)* %16, align 2
1452 %17 = tail call spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_xort(i16 zeroext 0)
1453 %18 = getelementptr inbounds i16, i16 addrspace(1)* %0, i64 8
1454 store i16 %17, i16 addrspace(1)* %18, align 2
1458 declare dso_local spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_andt(i16 zeroext) local_unnamed_addr
1460 declare dso_local spir_func zeroext i16 @_Z31sub_group_non_uniform_reduce_ort(i16 zeroext) local_unnamed_addr
1462 declare dso_local spir_func zeroext i16 @_Z32sub_group_non_uniform_reduce_xort(i16 zeroext) local_unnamed_addr
1464 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_andt(i16 zeroext) local_unnamed_addr
1466 declare dso_local spir_func zeroext i16 @_Z39sub_group_non_uniform_scan_inclusive_ort(i16 zeroext) local_unnamed_addr
1468 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_inclusive_xort(i16 zeroext) local_unnamed_addr
1470 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_andt(i16 zeroext) local_unnamed_addr
1472 declare dso_local spir_func zeroext i16 @_Z39sub_group_non_uniform_scan_exclusive_ort(i16 zeroext) local_unnamed_addr
1474 declare dso_local spir_func zeroext i16 @_Z40sub_group_non_uniform_scan_exclusive_xort(i16 zeroext) local_unnamed_addr
1476 ; CHECK-SPIRV: OpFunction
1477 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
1478 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
1479 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
1480 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
1481 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
1482 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
1483 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
1484 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
1485 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
1486 ; CHECK-SPIRV: OpFunctionEnd
1488 define dso_local spir_kernel void @testNonUniformBitwiseInt(i32 addrspace(1)* nocapture) local_unnamed_addr {
1489 %2 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_andi(i32 0)
1490 store i32 %2, i32 addrspace(1)* %0, align 4
1491 %3 = tail call spir_func i32 @_Z31sub_group_non_uniform_reduce_ori(i32 0)
1492 %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1
1493 store i32 %3, i32 addrspace(1)* %4, align 4
1494 %5 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_xori(i32 0)
1495 %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2
1496 store i32 %5, i32 addrspace(1)* %6, align 4
1497 %7 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_andi(i32 0)
1498 %8 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 3
1499 store i32 %7, i32 addrspace(1)* %8, align 4
1500 %9 = tail call spir_func i32 @_Z39sub_group_non_uniform_scan_inclusive_ori(i32 0)
1501 %10 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 4
1502 store i32 %9, i32 addrspace(1)* %10, align 4
1503 %11 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_xori(i32 0)
1504 %12 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 5
1505 store i32 %11, i32 addrspace(1)* %12, align 4
1506 %13 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_andi(i32 0)
1507 %14 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 6
1508 store i32 %13, i32 addrspace(1)* %14, align 4
1509 %15 = tail call spir_func i32 @_Z39sub_group_non_uniform_scan_exclusive_ori(i32 0)
1510 %16 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 7
1511 store i32 %15, i32 addrspace(1)* %16, align 4
1512 %17 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_xori(i32 0)
1513 %18 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 8
1514 store i32 %17, i32 addrspace(1)* %18, align 4
1518 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_andi(i32) local_unnamed_addr
1520 declare dso_local spir_func i32 @_Z31sub_group_non_uniform_reduce_ori(i32) local_unnamed_addr
1522 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_xori(i32) local_unnamed_addr
1524 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_andi(i32) local_unnamed_addr
1526 declare dso_local spir_func i32 @_Z39sub_group_non_uniform_scan_inclusive_ori(i32) local_unnamed_addr
1528 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_xori(i32) local_unnamed_addr
1530 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_andi(i32) local_unnamed_addr
1532 declare dso_local spir_func i32 @_Z39sub_group_non_uniform_scan_exclusive_ori(i32) local_unnamed_addr
1534 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_xori(i32) local_unnamed_addr
1536 ; CHECK-SPIRV: OpFunction
1537 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
1538 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
1539 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] Reduce %[[#int_0]]
1540 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
1541 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
1542 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] InclusiveScan %[[#int_0]]
1543 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
1544 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
1545 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#int]] %[[#ScopeSubgroup]] ExclusiveScan %[[#int_0]]
1546 ; CHECK-SPIRV: OpFunctionEnd
1548 define dso_local spir_kernel void @testNonUniformBitwiseUInt(i32 addrspace(1)* nocapture) local_unnamed_addr {
1549 %2 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_andj(i32 0)
1550 store i32 %2, i32 addrspace(1)* %0, align 4
1551 %3 = tail call spir_func i32 @_Z31sub_group_non_uniform_reduce_orj(i32 0)
1552 %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1
1553 store i32 %3, i32 addrspace(1)* %4, align 4
1554 %5 = tail call spir_func i32 @_Z32sub_group_non_uniform_reduce_xorj(i32 0)
1555 %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2
1556 store i32 %5, i32 addrspace(1)* %6, align 4
1557 %7 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_andj(i32 0)
1558 %8 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 3
1559 store i32 %7, i32 addrspace(1)* %8, align 4
1560 %9 = tail call spir_func i32 @_Z39sub_group_non_uniform_scan_inclusive_orj(i32 0)
1561 %10 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 4
1562 store i32 %9, i32 addrspace(1)* %10, align 4
1563 %11 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_xorj(i32 0)
1564 %12 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 5
1565 store i32 %11, i32 addrspace(1)* %12, align 4
1566 %13 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_andj(i32 0)
1567 %14 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 6
1568 store i32 %13, i32 addrspace(1)* %14, align 4
1569 %15 = tail call spir_func i32 @_Z39sub_group_non_uniform_scan_exclusive_orj(i32 0)
1570 %16 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 7
1571 store i32 %15, i32 addrspace(1)* %16, align 4
1572 %17 = tail call spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_xorj(i32 0)
1573 %18 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 8
1574 store i32 %17, i32 addrspace(1)* %18, align 4
1578 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_andj(i32) local_unnamed_addr
1580 declare dso_local spir_func i32 @_Z31sub_group_non_uniform_reduce_orj(i32) local_unnamed_addr
1582 declare dso_local spir_func i32 @_Z32sub_group_non_uniform_reduce_xorj(i32) local_unnamed_addr
1584 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_andj(i32) local_unnamed_addr
1586 declare dso_local spir_func i32 @_Z39sub_group_non_uniform_scan_inclusive_orj(i32) local_unnamed_addr
1588 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_inclusive_xorj(i32) local_unnamed_addr
1590 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_andj(i32) local_unnamed_addr
1592 declare dso_local spir_func i32 @_Z39sub_group_non_uniform_scan_exclusive_orj(i32) local_unnamed_addr
1594 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_scan_exclusive_xorj(i32) local_unnamed_addr
1596 ; CHECK-SPIRV: OpFunction
1597 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
1598 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
1599 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
1600 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
1601 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
1602 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
1603 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
1604 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
1605 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
1606 ; CHECK-SPIRV: OpFunctionEnd
1608 define dso_local spir_kernel void @testNonUniformBitwiseLong(i64 addrspace(1)* nocapture) local_unnamed_addr {
1609 %2 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_andl(i64 0)
1610 store i64 %2, i64 addrspace(1)* %0, align 8
1611 %3 = tail call spir_func i64 @_Z31sub_group_non_uniform_reduce_orl(i64 0)
1612 %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1
1613 store i64 %3, i64 addrspace(1)* %4, align 8
1614 %5 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_xorl(i64 0)
1615 %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2
1616 store i64 %5, i64 addrspace(1)* %6, align 8
1617 %7 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_andl(i64 0)
1618 %8 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 3
1619 store i64 %7, i64 addrspace(1)* %8, align 8
1620 %9 = tail call spir_func i64 @_Z39sub_group_non_uniform_scan_inclusive_orl(i64 0)
1621 %10 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 4
1622 store i64 %9, i64 addrspace(1)* %10, align 8
1623 %11 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_xorl(i64 0)
1624 %12 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 5
1625 store i64 %11, i64 addrspace(1)* %12, align 8
1626 %13 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_andl(i64 0)
1627 %14 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 6
1628 store i64 %13, i64 addrspace(1)* %14, align 8
1629 %15 = tail call spir_func i64 @_Z39sub_group_non_uniform_scan_exclusive_orl(i64 0)
1630 %16 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 7
1631 store i64 %15, i64 addrspace(1)* %16, align 8
1632 %17 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_xorl(i64 0)
1633 %18 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 8
1634 store i64 %17, i64 addrspace(1)* %18, align 8
1638 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_andl(i64) local_unnamed_addr
1640 declare dso_local spir_func i64 @_Z31sub_group_non_uniform_reduce_orl(i64) local_unnamed_addr
1642 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_xorl(i64) local_unnamed_addr
1644 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_andl(i64) local_unnamed_addr
1646 declare dso_local spir_func i64 @_Z39sub_group_non_uniform_scan_inclusive_orl(i64) local_unnamed_addr
1648 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_xorl(i64) local_unnamed_addr
1650 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_andl(i64) local_unnamed_addr
1652 declare dso_local spir_func i64 @_Z39sub_group_non_uniform_scan_exclusive_orl(i64) local_unnamed_addr
1654 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_xorl(i64) local_unnamed_addr
1656 ; CHECK-SPIRV: OpFunction
1657 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
1658 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
1659 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] Reduce %[[#long_0]]
1660 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
1661 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
1662 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] InclusiveScan %[[#long_0]]
1663 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseAnd %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
1664 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseOr %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
1665 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformBitwiseXor %[[#long]] %[[#ScopeSubgroup]] ExclusiveScan %[[#long_0]]
1666 ; CHECK-SPIRV: OpFunctionEnd
1668 define dso_local spir_kernel void @testNonUniformBitwiseULong(i64 addrspace(1)* nocapture) local_unnamed_addr {
1669 %2 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_andm(i64 0)
1670 store i64 %2, i64 addrspace(1)* %0, align 8
1671 %3 = tail call spir_func i64 @_Z31sub_group_non_uniform_reduce_orm(i64 0)
1672 %4 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 1
1673 store i64 %3, i64 addrspace(1)* %4, align 8
1674 %5 = tail call spir_func i64 @_Z32sub_group_non_uniform_reduce_xorm(i64 0)
1675 %6 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 2
1676 store i64 %5, i64 addrspace(1)* %6, align 8
1677 %7 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_andm(i64 0)
1678 %8 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 3
1679 store i64 %7, i64 addrspace(1)* %8, align 8
1680 %9 = tail call spir_func i64 @_Z39sub_group_non_uniform_scan_inclusive_orm(i64 0)
1681 %10 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 4
1682 store i64 %9, i64 addrspace(1)* %10, align 8
1683 %11 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_xorm(i64 0)
1684 %12 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 5
1685 store i64 %11, i64 addrspace(1)* %12, align 8
1686 %13 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_andm(i64 0)
1687 %14 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 6
1688 store i64 %13, i64 addrspace(1)* %14, align 8
1689 %15 = tail call spir_func i64 @_Z39sub_group_non_uniform_scan_exclusive_orm(i64 0)
1690 %16 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 7
1691 store i64 %15, i64 addrspace(1)* %16, align 8
1692 %17 = tail call spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_xorm(i64 0)
1693 %18 = getelementptr inbounds i64, i64 addrspace(1)* %0, i64 8
1694 store i64 %17, i64 addrspace(1)* %18, align 8
1698 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_andm(i64) local_unnamed_addr
1700 declare dso_local spir_func i64 @_Z31sub_group_non_uniform_reduce_orm(i64) local_unnamed_addr
1702 declare dso_local spir_func i64 @_Z32sub_group_non_uniform_reduce_xorm(i64) local_unnamed_addr
1704 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_andm(i64) local_unnamed_addr
1706 declare dso_local spir_func i64 @_Z39sub_group_non_uniform_scan_inclusive_orm(i64) local_unnamed_addr
1708 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_inclusive_xorm(i64) local_unnamed_addr
1710 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_andm(i64) local_unnamed_addr
1712 declare dso_local spir_func i64 @_Z39sub_group_non_uniform_scan_exclusive_orm(i64) local_unnamed_addr
1714 declare dso_local spir_func i64 @_Z40sub_group_non_uniform_scan_exclusive_xorm(i64) local_unnamed_addr
1716 ; CHECK-SPIRV: OpFunction
1717 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformLogicalAnd %[[#bool]] %[[#ScopeSubgroup]] Reduce %[[#false]]
1718 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformLogicalOr %[[#bool]] %[[#ScopeSubgroup]] Reduce %[[#false]]
1719 ; CHECK-SPIRV-COUNT-2: %[[#]] = OpGroupNonUniformLogicalXor %[[#bool]] %[[#ScopeSubgroup]] Reduce %[[#false]]
1720 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalAnd %[[#bool]] %[[#ScopeSubgroup]] InclusiveScan %[[#false]]
1721 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalOr %[[#bool]] %[[#ScopeSubgroup]] InclusiveScan %[[#false]]
1722 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalXor %[[#bool]] %[[#ScopeSubgroup]] InclusiveScan %[[#false]]
1723 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalAnd %[[#bool]] %[[#ScopeSubgroup]] ExclusiveScan %[[#false]]
1724 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalOr %[[#bool]] %[[#ScopeSubgroup]] ExclusiveScan %[[#false]]
1725 ; CHECK-SPIRV: %[[#]] = OpGroupNonUniformLogicalXor %[[#bool]] %[[#ScopeSubgroup]] ExclusiveScan %[[#false]]
1726 ; CHECK-SPIRV: OpFunctionEnd
1728 define dso_local spir_kernel void @testNonUniformLogical(i32 addrspace(1)* nocapture) local_unnamed_addr {
1729 %2 = tail call spir_func i32 @_Z40sub_group_non_uniform_reduce_logical_andi(i32 0)
1730 %r2 = tail call spir_func i1 @__spirv_GroupNonUniformLogicalAnd(i32 3, i32 0, i1 false)
1731 store i32 %2, i32 addrspace(1)* %0, align 4
1732 %3 = tail call spir_func i32 @_Z39sub_group_non_uniform_reduce_logical_ori(i32 0)
1733 %r3 = tail call spir_func i1 @__spirv_GroupNonUniformLogicalOr(i32 3, i32 0, i1 false)
1734 %4 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 1
1735 store i32 %3, i32 addrspace(1)* %4, align 4
1736 %5 = tail call spir_func i32 @_Z40sub_group_non_uniform_reduce_logical_xori(i32 0)
1737 %r5 = tail call spir_func i1 @__spirv_GroupNonUniformLogicalXor(i32 3, i32 0, i1 false)
1738 %6 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 2
1739 store i32 %5, i32 addrspace(1)* %6, align 4
1740 %7 = tail call spir_func i32 @_Z48sub_group_non_uniform_scan_inclusive_logical_andi(i32 0)
1741 %8 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 3
1742 store i32 %7, i32 addrspace(1)* %8, align 4
1743 %9 = tail call spir_func i32 @_Z47sub_group_non_uniform_scan_inclusive_logical_ori(i32 0)
1744 %10 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 4
1745 store i32 %9, i32 addrspace(1)* %10, align 4
1746 %11 = tail call spir_func i32 @_Z48sub_group_non_uniform_scan_inclusive_logical_xori(i32 0)
1747 %12 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 5
1748 store i32 %11, i32 addrspace(1)* %12, align 4
1749 %13 = tail call spir_func i32 @_Z48sub_group_non_uniform_scan_exclusive_logical_andi(i32 0)
1750 %14 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 6
1751 store i32 %13, i32 addrspace(1)* %14, align 4
1752 %15 = tail call spir_func i32 @_Z47sub_group_non_uniform_scan_exclusive_logical_ori(i32 0)
1753 %16 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 7
1754 store i32 %15, i32 addrspace(1)* %16, align 4
1755 %17 = tail call spir_func i32 @_Z48sub_group_non_uniform_scan_exclusive_logical_xori(i32 0)
1756 %18 = getelementptr inbounds i32, i32 addrspace(1)* %0, i64 8
1757 store i32 %17, i32 addrspace(1)* %18, align 4
1761 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_reduce_logical_andi(i32) local_unnamed_addr
1762 declare dso_local spir_func i1 @__spirv_GroupNonUniformLogicalAnd(i32, i32, i1)
1764 declare dso_local spir_func i32 @_Z39sub_group_non_uniform_reduce_logical_ori(i32) local_unnamed_addr
1765 declare dso_local spir_func i1 @__spirv_GroupNonUniformLogicalOr(i32, i32, i1)
1767 declare dso_local spir_func i32 @_Z40sub_group_non_uniform_reduce_logical_xori(i32) local_unnamed_addr
1768 declare dso_local spir_func i1 @__spirv_GroupNonUniformLogicalXor(i32, i32, i1)
1770 declare dso_local spir_func i32 @_Z48sub_group_non_uniform_scan_inclusive_logical_andi(i32) local_unnamed_addr
1772 declare dso_local spir_func i32 @_Z47sub_group_non_uniform_scan_inclusive_logical_ori(i32) local_unnamed_addr
1774 declare dso_local spir_func i32 @_Z48sub_group_non_uniform_scan_inclusive_logical_xori(i32) local_unnamed_addr
1776 declare dso_local spir_func i32 @_Z48sub_group_non_uniform_scan_exclusive_logical_andi(i32) local_unnamed_addr
1778 declare dso_local spir_func i32 @_Z47sub_group_non_uniform_scan_exclusive_logical_ori(i32) local_unnamed_addr
1780 declare dso_local spir_func i32 @_Z48sub_group_non_uniform_scan_exclusive_logical_xori(i32) local_unnamed_addr