[Frontend] Remove unused includes (NFC) (#116927)
[llvm-project.git] / llvm / test / CodeGen / SPIRV / transcoding / sub_group_non_uniform_arithmetic.ll
blobadf73fe153dea2bf9c064026f1ad20498d2fd9b4
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
4 ;;
5 ;; kernel void testNonUniformArithmeticChar(global char* dst)
6 ;; {
7 ;;     char v = 0;
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);
20 ;; }
22 ;; kernel void testNonUniformArithmeticUChar(global uchar* dst)
23 ;; {
24 ;;     uchar v = 0;
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);
37 ;; }
39 ;; kernel void testNonUniformArithmeticShort(global short* dst)
40 ;; {
41 ;;     short v = 0;
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);
54 ;; }
56 ;; kernel void testNonUniformArithmeticUShort(global ushort* dst)
57 ;; {
58 ;;     ushort v = 0;
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);
71 ;; }
73 ;; kernel void testNonUniformArithmeticInt(global int* dst)
74 ;; {
75 ;;     int v = 0;
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);
88 ;; }
90 ;; kernel void testNonUniformArithmeticUInt(global uint* dst)
91 ;; {
92 ;;     uint v = 0;
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);
105 ;; }
107 ;; kernel void testNonUniformArithmeticLong(global long* dst)
108 ;; {
109 ;;     long v = 0;
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);
122 ;; }
124 ;; kernel void testNonUniformArithmeticULong(global ulong* dst)
125 ;; {
126 ;;     ulong v = 0;
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);
139 ;; }
141 ;; kernel void testNonUniformArithmeticFloat(global float* dst)
142 ;; {
143 ;;     float v = 0;
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);
156 ;; }
158 ;; kernel void testNonUniformArithmeticHalf(global half* dst)
159 ;; {
160 ;;     half v = 0;
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);
173 ;; }
175 ;; kernel void testNonUniformArithmeticDouble(global double* dst)
176 ;; {
177 ;;     double v = 0;
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);
190 ;; }
192 ;; kernel void testNonUniformBitwiseChar(global char* dst)
193 ;; {
194 ;;     char v = 0;
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);
204 ;; }
206 ;; kernel void testNonUniformBitwiseUChar(global uchar* dst)
207 ;; {
208 ;;     uchar v = 0;
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);
218 ;; }
220 ;; kernel void testNonUniformBitwiseShort(global short* dst)
221 ;; {
222 ;;     short v = 0;
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);
232 ;; }
234 ;; kernel void testNonUniformBitwiseUShort(global ushort* dst)
235 ;; {
236 ;;     ushort v = 0;
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);
246 ;; }
248 ;; kernel void testNonUniformBitwiseInt(global int* dst)
249 ;; {
250 ;;     int v = 0;
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);
260 ;; }
262 ;; kernel void testNonUniformBitwiseUInt(global uint* dst)
263 ;; {
264 ;;     uint v = 0;
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);
274 ;; }
276 ;; kernel void testNonUniformBitwiseLong(global long* dst)
277 ;; {
278 ;;     long v = 0;
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);
288 ;; }
290 ;; kernel void testNonUniformBitwiseULong(global ulong* dst)
291 ;; {
292 ;;     ulong v = 0;
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);
302 ;; }
304 ;; kernel void testNonUniformLogical(global int* dst)
305 ;; {
306 ;;     int v = 0;
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);
316 ;; }
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
402   ret void
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
484   ret void
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
562   ret void
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
644   ret void
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
724   ret void
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
802   ret void
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
880   ret void
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
958   ret void
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
1040   ret void
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
1122   ret void
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
1200   ret void
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
1272   ret void
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
1335   ret void
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
1395   ret void
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
1455   ret void
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
1515   ret void
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
1575   ret void
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
1635   ret void
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
1695   ret void
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
1758   ret void
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