Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / WebAssembly / simd-vecreduce-bool.ll
blobe6497bca98dc27536113217f24907ebed88cefab
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc < %s -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 | FileCheck %s
4 ; Tests that bool vecreduce produces anytrue and alltrue instructions
6 target triple = "wasm32-unknown-unknown"
8 declare i1 @llvm.vector.reduce.or.v2i1(<2 x i1>)
9 declare i1 @llvm.vector.reduce.or.v4i1(<4 x i1>)
10 declare i1 @llvm.vector.reduce.or.v7i1(<7 x i1>)
11 declare i1 @llvm.vector.reduce.or.v8i1(<8 x i1>)
12 declare i1 @llvm.vector.reduce.or.v16i1(<16 x i1>)
13 declare i1 @llvm.vector.reduce.or.v64i1(<64 x i1>)
14 declare i1 @llvm.vector.reduce.and.v2i1(<2 x i1>)
15 declare i1 @llvm.vector.reduce.and.v4i1(<4 x i1>)
16 declare i1 @llvm.vector.reduce.and.v7i1(<7 x i1>)
17 declare i1 @llvm.vector.reduce.and.v8i1(<8 x i1>)
18 declare i1 @llvm.vector.reduce.and.v16i1(<16 x i1>)
19 declare i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %x)
21 ; =====================
22 ; Regular vectors of i1
23 ; =====================
25 define i1 @test_any_v8i1(<8 x i1> %x) {
26 ; CHECK-LABEL: test_any_v8i1:
27 ; CHECK:         .functype test_any_v8i1 (v128) -> (i32)
28 ; CHECK-NEXT:  # %bb.0:
29 ; CHECK-NEXT:    i32.const $push0=, 15
30 ; CHECK-NEXT:    i16x8.shl $push1=, $0, $pop0
31 ; CHECK-NEXT:    i32.const $push4=, 15
32 ; CHECK-NEXT:    i16x8.shr_s $push2=, $pop1, $pop4
33 ; CHECK-NEXT:    v128.any_true $push3=, $pop2
34 ; CHECK-NEXT:    return $pop3
35   %ret = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %x)
36   ret i1 %ret
39 define i1 @test_all_v8i1(<8 x i1> %x) {
40 ; CHECK-LABEL: test_all_v8i1:
41 ; CHECK:         .functype test_all_v8i1 (v128) -> (i32)
42 ; CHECK-NEXT:  # %bb.0:
43 ; CHECK-NEXT:    i32.const $push0=, 15
44 ; CHECK-NEXT:    i16x8.shl $push1=, $0, $pop0
45 ; CHECK-NEXT:    i32.const $push4=, 15
46 ; CHECK-NEXT:    i16x8.shr_s $push2=, $pop1, $pop4
47 ; CHECK-NEXT:    i16x8.all_true $push3=, $pop2
48 ; CHECK-NEXT:    return $pop3
49   %ret = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %x)
50   ret i1 %ret
53 define i1 @test_none_v8i1(<8 x i1> %x) {
54 ; CHECK-LABEL: test_none_v8i1:
55 ; CHECK:         .functype test_none_v8i1 (v128) -> (i32)
56 ; CHECK-NEXT:  # %bb.0:
57 ; CHECK-NEXT:    i32.const $push0=, 15
58 ; CHECK-NEXT:    i16x8.shl $push1=, $0, $pop0
59 ; CHECK-NEXT:    i32.const $push6=, 15
60 ; CHECK-NEXT:    i16x8.shr_s $push2=, $pop1, $pop6
61 ; CHECK-NEXT:    v128.any_true $push3=, $pop2
62 ; CHECK-NEXT:    i32.const $push4=, 1
63 ; CHECK-NEXT:    i32.xor $push5=, $pop3, $pop4
64 ; CHECK-NEXT:    return $pop5
65   %any = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %x)
66   %none = xor i1 %any, 1
67   ret i1 %none
70 define i1 @test_not_all_v8i1(<8 x i1> %x) {
71 ; CHECK-LABEL: test_not_all_v8i1:
72 ; CHECK:         .functype test_not_all_v8i1 (v128) -> (i32)
73 ; CHECK-NEXT:  # %bb.0:
74 ; CHECK-NEXT:    i32.const $push0=, 15
75 ; CHECK-NEXT:    i16x8.shl $push1=, $0, $pop0
76 ; CHECK-NEXT:    i32.const $push6=, 15
77 ; CHECK-NEXT:    i16x8.shr_s $push2=, $pop1, $pop6
78 ; CHECK-NEXT:    i16x8.all_true $push3=, $pop2
79 ; CHECK-NEXT:    i32.const $push4=, 1
80 ; CHECK-NEXT:    i32.xor $push5=, $pop3, $pop4
81 ; CHECK-NEXT:    return $pop5
82   %all = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %x)
83   %notall = xor i1 %all, 1
84   ret i1 %notall
87 define i1 @test_any_v16i1(<16 x i1> %x) {
88 ; CHECK-LABEL: test_any_v16i1:
89 ; CHECK:         .functype test_any_v16i1 (v128) -> (i32)
90 ; CHECK-NEXT:  # %bb.0:
91 ; CHECK-NEXT:    i32.const $push0=, 7
92 ; CHECK-NEXT:    i8x16.shl $push1=, $0, $pop0
93 ; CHECK-NEXT:    i32.const $push4=, 7
94 ; CHECK-NEXT:    i8x16.shr_s $push2=, $pop1, $pop4
95 ; CHECK-NEXT:    v128.any_true $push3=, $pop2
96 ; CHECK-NEXT:    return $pop3
97   %ret = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> %x)
98   ret i1 %ret
101 define i1 @test_all_v16i1(<16 x i1> %x) {
102 ; CHECK-LABEL: test_all_v16i1:
103 ; CHECK:         .functype test_all_v16i1 (v128) -> (i32)
104 ; CHECK-NEXT:  # %bb.0:
105 ; CHECK-NEXT:    i32.const $push0=, 7
106 ; CHECK-NEXT:    i8x16.shl $push1=, $0, $pop0
107 ; CHECK-NEXT:    i32.const $push4=, 7
108 ; CHECK-NEXT:    i8x16.shr_s $push2=, $pop1, $pop4
109 ; CHECK-NEXT:    i8x16.all_true $push3=, $pop2
110 ; CHECK-NEXT:    return $pop3
111   %ret = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %x)
112   ret i1 %ret
115 ; ==================================
116 ; Regular vectors of larger integers
117 ; ==================================
119 define i1 @test_any_v16i8(<16 x i8> %x) {
120 ; CHECK-LABEL: test_any_v16i8:
121 ; CHECK:         .functype test_any_v16i8 (v128) -> (i32)
122 ; CHECK-NEXT:  # %bb.0:
123 ; CHECK-NEXT:    i32.const $push0=, 7
124 ; CHECK-NEXT:    i8x16.shl $push1=, $0, $pop0
125 ; CHECK-NEXT:    i32.const $push4=, 7
126 ; CHECK-NEXT:    i8x16.shr_s $push2=, $pop1, $pop4
127 ; CHECK-NEXT:    v128.any_true $push3=, $pop2
128 ; CHECK-NEXT:    return $pop3
129   %bits = trunc <16 x i8> %x to <16 x i1>
130   %ret = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> %bits)
131   ret i1 %ret
134 define i1 @test_all_v16i8(<16 x i8> %x) {
135 ; CHECK-LABEL: test_all_v16i8:
136 ; CHECK:         .functype test_all_v16i8 (v128) -> (i32)
137 ; CHECK-NEXT:  # %bb.0:
138 ; CHECK-NEXT:    i32.const $push0=, 7
139 ; CHECK-NEXT:    i8x16.shl $push1=, $0, $pop0
140 ; CHECK-NEXT:    i32.const $push4=, 7
141 ; CHECK-NEXT:    i8x16.shr_s $push2=, $pop1, $pop4
142 ; CHECK-NEXT:    i8x16.all_true $push3=, $pop2
143 ; CHECK-NEXT:    return $pop3
144   %bits = trunc <16 x i8> %x to <16 x i1>
145   %ret = call i1 @llvm.vector.reduce.and.v16i1(<16 x i1> %bits)
146   ret i1 %ret
149 define i1 @test_any_v8i16(<8 x i16> %x) {
150 ; CHECK-LABEL: test_any_v8i16:
151 ; CHECK:         .functype test_any_v8i16 (v128) -> (i32)
152 ; CHECK-NEXT:  # %bb.0:
153 ; CHECK-NEXT:    i32.const $push0=, 15
154 ; CHECK-NEXT:    i16x8.shl $push1=, $0, $pop0
155 ; CHECK-NEXT:    i32.const $push4=, 15
156 ; CHECK-NEXT:    i16x8.shr_s $push2=, $pop1, $pop4
157 ; CHECK-NEXT:    v128.any_true $push3=, $pop2
158 ; CHECK-NEXT:    return $pop3
159   %bits = trunc <8 x i16> %x to <8 x i1>
160   %ret = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %bits)
161   ret i1 %ret
164 define i1 @test_all_v8i16(<8 x i16> %x) {
165 ; CHECK-LABEL: test_all_v8i16:
166 ; CHECK:         .functype test_all_v8i16 (v128) -> (i32)
167 ; CHECK-NEXT:  # %bb.0:
168 ; CHECK-NEXT:    i32.const $push0=, 15
169 ; CHECK-NEXT:    i16x8.shl $push1=, $0, $pop0
170 ; CHECK-NEXT:    i32.const $push4=, 15
171 ; CHECK-NEXT:    i16x8.shr_s $push2=, $pop1, $pop4
172 ; CHECK-NEXT:    i16x8.all_true $push3=, $pop2
173 ; CHECK-NEXT:    return $pop3
174   %bits = trunc <8 x i16> %x to <8 x i1>
175   %ret = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %bits)
176   ret i1 %ret
179 define i1 @test_any_v4i32(<4 x i32> %x) {
180 ; CHECK-LABEL: test_any_v4i32:
181 ; CHECK:         .functype test_any_v4i32 (v128) -> (i32)
182 ; CHECK-NEXT:  # %bb.0:
183 ; CHECK-NEXT:    i32.const $push0=, 31
184 ; CHECK-NEXT:    i32x4.shl $push1=, $0, $pop0
185 ; CHECK-NEXT:    i32.const $push4=, 31
186 ; CHECK-NEXT:    i32x4.shr_s $push2=, $pop1, $pop4
187 ; CHECK-NEXT:    v128.any_true $push3=, $pop2
188 ; CHECK-NEXT:    return $pop3
189   %bits = trunc <4 x i32> %x to <4 x i1>
190   %ret = call i1 @llvm.vector.reduce.or.v4i1(<4 x i1> %bits)
191   ret i1 %ret
194 define i1 @test_all_v4i32(<4 x i32> %x) {
195 ; CHECK-LABEL: test_all_v4i32:
196 ; CHECK:         .functype test_all_v4i32 (v128) -> (i32)
197 ; CHECK-NEXT:  # %bb.0:
198 ; CHECK-NEXT:    i32.const $push0=, 31
199 ; CHECK-NEXT:    i32x4.shl $push1=, $0, $pop0
200 ; CHECK-NEXT:    i32.const $push4=, 31
201 ; CHECK-NEXT:    i32x4.shr_s $push2=, $pop1, $pop4
202 ; CHECK-NEXT:    i32x4.all_true $push3=, $pop2
203 ; CHECK-NEXT:    return $pop3
204   %bits = trunc <4 x i32> %x to <4 x i1>
205   %ret = call i1 @llvm.vector.reduce.and.v4i1(<4 x i1> %bits)
206   ret i1 %ret
209 define i1 @test_any_v2i64(<2 x i64> %x) {
210 ; CHECK-LABEL: test_any_v2i64:
211 ; CHECK:         .functype test_any_v2i64 (v128) -> (i32)
212 ; CHECK-NEXT:  # %bb.0:
213 ; CHECK-NEXT:    i32.const $push0=, 63
214 ; CHECK-NEXT:    i64x2.shl $push1=, $0, $pop0
215 ; CHECK-NEXT:    i32.const $push4=, 63
216 ; CHECK-NEXT:    i64x2.shr_s $push2=, $pop1, $pop4
217 ; CHECK-NEXT:    v128.any_true $push3=, $pop2
218 ; CHECK-NEXT:    return $pop3
219   %bits = trunc <2 x i64> %x to <2 x i1>
220   %ret = call i1 @llvm.vector.reduce.or.v2i1(<2 x i1> %bits)
221   ret i1 %ret
224 define i1 @test_all_v2i64(<2 x i64> %x) {
225 ; CHECK-LABEL: test_all_v2i64:
226 ; CHECK:         .functype test_all_v2i64 (v128) -> (i32)
227 ; CHECK-NEXT:  # %bb.0:
228 ; CHECK-NEXT:    i32.const $push0=, 63
229 ; CHECK-NEXT:    i64x2.shl $push1=, $0, $pop0
230 ; CHECK-NEXT:    i32.const $push4=, 63
231 ; CHECK-NEXT:    i64x2.shr_s $push2=, $pop1, $pop4
232 ; CHECK-NEXT:    i64x2.all_true $push3=, $pop2
233 ; CHECK-NEXT:    return $pop3
234   %bits = trunc <2 x i64> %x to <2 x i1>
235   %ret = call i1 @llvm.vector.reduce.and.v2i1(<2 x i1> %bits)
236   ret i1 %ret
239 ; ====================
240 ; Unusual vector sizes
241 ; ====================
243 define i1 @test_any_v7i1(<7 x i1> %x) {
244 ; CHECK-LABEL: test_any_v7i1:
245 ; CHECK:         .functype test_any_v7i1 (i32, i32, i32, i32, i32, i32, i32) -> (i32)
246 ; CHECK-NEXT:  # %bb.0:
247 ; CHECK-NEXT:    i32.or $push0=, $0, $1
248 ; CHECK-NEXT:    i32.or $push1=, $pop0, $2
249 ; CHECK-NEXT:    i32.or $push2=, $pop1, $3
250 ; CHECK-NEXT:    i32.or $push3=, $pop2, $4
251 ; CHECK-NEXT:    i32.or $push4=, $pop3, $5
252 ; CHECK-NEXT:    i32.or $push5=, $pop4, $6
253 ; CHECK-NEXT:    return $pop5
254   %ret = call i1 @llvm.vector.reduce.or.v7i1(<7 x i1> %x)
255   ret i1 %ret
258 define i1 @test_all_v7i1(<7 x i1> %x) {
259 ; CHECK-LABEL: test_all_v7i1:
260 ; CHECK:         .functype test_all_v7i1 (i32, i32, i32, i32, i32, i32, i32) -> (i32)
261 ; CHECK-NEXT:  # %bb.0:
262 ; CHECK-NEXT:    i32.and $push0=, $0, $1
263 ; CHECK-NEXT:    i32.and $push1=, $pop0, $2
264 ; CHECK-NEXT:    i32.and $push2=, $pop1, $3
265 ; CHECK-NEXT:    i32.and $push3=, $pop2, $4
266 ; CHECK-NEXT:    i32.and $push4=, $pop3, $5
267 ; CHECK-NEXT:    i32.and $push5=, $pop4, $6
268 ; CHECK-NEXT:    i32.const $push6=, 1
269 ; CHECK-NEXT:    i32.and $push7=, $pop5, $pop6
270 ; CHECK-NEXT:    return $pop7
271   %ret = call i1 @llvm.vector.reduce.and.v7i1(<7 x i1> %x)
272   ret i1 %ret
275 define i1 @test_any_v8i8(<8 x i8> %x) {
276 ; CHECK-LABEL: test_any_v8i8:
277 ; CHECK:         .functype test_any_v8i8 (v128) -> (i32)
278 ; CHECK-NEXT:  # %bb.0:
279 ; CHECK-NEXT:    i8x16.shuffle $push0=, $0, $0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0
280 ; CHECK-NEXT:    i32.const $push1=, 15
281 ; CHECK-NEXT:    i16x8.shl $push2=, $pop0, $pop1
282 ; CHECK-NEXT:    i32.const $push5=, 15
283 ; CHECK-NEXT:    i16x8.shr_s $push3=, $pop2, $pop5
284 ; CHECK-NEXT:    v128.any_true $push4=, $pop3
285 ; CHECK-NEXT:    return $pop4
286   %bits = trunc <8 x i8> %x to <8 x i1>
287   %ret = call i1 @llvm.vector.reduce.or.v8i1(<8 x i1> %bits)
288   ret i1 %ret
291 define i1 @test_all_v8i8(<8 x i8> %x) {
292 ; CHECK-LABEL: test_all_v8i8:
293 ; CHECK:         .functype test_all_v8i8 (v128) -> (i32)
294 ; CHECK-NEXT:  # %bb.0:
295 ; CHECK-NEXT:    i8x16.shuffle $push0=, $0, $0, 0, 0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0
296 ; CHECK-NEXT:    i32.const $push1=, 15
297 ; CHECK-NEXT:    i16x8.shl $push2=, $pop0, $pop1
298 ; CHECK-NEXT:    i32.const $push5=, 15
299 ; CHECK-NEXT:    i16x8.shr_s $push3=, $pop2, $pop5
300 ; CHECK-NEXT:    i16x8.all_true $push4=, $pop3
301 ; CHECK-NEXT:    return $pop4
302   %bits = trunc <8 x i8> %x to <8 x i1>
303   %ret = call i1 @llvm.vector.reduce.and.v8i1(<8 x i1> %bits)
304   ret i1 %ret
307 ;; TODO: Improve this codegen.
308 define i1 @test_any_v64i8(<64 x i8> %x) {
309 ; CHECK-LABEL: test_any_v64i8:
310 ; CHECK:         .functype test_any_v64i8 (v128, v128, v128, v128) -> (i32)
311 ; CHECK-NEXT:  # %bb.0:
312 ; CHECK-NEXT:    global.get $push264=, __stack_pointer
313 ; CHECK-NEXT:    i32.const $push265=, 16
314 ; CHECK-NEXT:    i32.sub $drop=, $pop264, $pop265
315 ; CHECK-NEXT:    i8x16.extract_lane_u $push254=, $0, 15
316 ; CHECK-NEXT:    i8x16.extract_lane_u $push253=, $2, 15
317 ; CHECK-NEXT:    i32.or $push255=, $pop254, $pop253
318 ; CHECK-NEXT:    i32.const $push133=, 15
319 ; CHECK-NEXT:    i32.shl $push256=, $pop255, $pop133
320 ; CHECK-NEXT:    i8x16.extract_lane_u $push195=, $0, 0
321 ; CHECK-NEXT:    i32.const $push1=, 1
322 ; CHECK-NEXT:    i32.and $push196=, $pop195, $pop1
323 ; CHECK-NEXT:    i8x16.extract_lane_u $push197=, $0, 1
324 ; CHECK-NEXT:    i32.const $push368=, 1
325 ; CHECK-NEXT:    i32.and $push198=, $pop197, $pop368
326 ; CHECK-NEXT:    i32.const $push367=, 1
327 ; CHECK-NEXT:    i32.shl $push199=, $pop198, $pop367
328 ; CHECK-NEXT:    i32.or $push200=, $pop196, $pop199
329 ; CHECK-NEXT:    i8x16.extract_lane_u $push201=, $0, 2
330 ; CHECK-NEXT:    i32.const $push366=, 1
331 ; CHECK-NEXT:    i32.and $push202=, $pop201, $pop366
332 ; CHECK-NEXT:    i32.const $push9=, 2
333 ; CHECK-NEXT:    i32.shl $push203=, $pop202, $pop9
334 ; CHECK-NEXT:    i32.or $push204=, $pop200, $pop203
335 ; CHECK-NEXT:    i8x16.extract_lane_u $push205=, $0, 3
336 ; CHECK-NEXT:    i32.const $push365=, 1
337 ; CHECK-NEXT:    i32.and $push206=, $pop205, $pop365
338 ; CHECK-NEXT:    i32.const $push14=, 3
339 ; CHECK-NEXT:    i32.shl $push207=, $pop206, $pop14
340 ; CHECK-NEXT:    i32.or $push208=, $pop204, $pop207
341 ; CHECK-NEXT:    i8x16.extract_lane_u $push209=, $0, 4
342 ; CHECK-NEXT:    i32.const $push364=, 1
343 ; CHECK-NEXT:    i32.and $push210=, $pop209, $pop364
344 ; CHECK-NEXT:    i32.const $push19=, 4
345 ; CHECK-NEXT:    i32.shl $push211=, $pop210, $pop19
346 ; CHECK-NEXT:    i32.or $push212=, $pop208, $pop211
347 ; CHECK-NEXT:    i8x16.extract_lane_u $push213=, $0, 5
348 ; CHECK-NEXT:    i32.const $push363=, 1
349 ; CHECK-NEXT:    i32.and $push214=, $pop213, $pop363
350 ; CHECK-NEXT:    i32.const $push24=, 5
351 ; CHECK-NEXT:    i32.shl $push215=, $pop214, $pop24
352 ; CHECK-NEXT:    i32.or $push216=, $pop212, $pop215
353 ; CHECK-NEXT:    i8x16.extract_lane_u $push217=, $0, 6
354 ; CHECK-NEXT:    i32.const $push362=, 1
355 ; CHECK-NEXT:    i32.and $push218=, $pop217, $pop362
356 ; CHECK-NEXT:    i32.const $push29=, 6
357 ; CHECK-NEXT:    i32.shl $push219=, $pop218, $pop29
358 ; CHECK-NEXT:    i32.or $push220=, $pop216, $pop219
359 ; CHECK-NEXT:    i8x16.extract_lane_u $push221=, $0, 7
360 ; CHECK-NEXT:    i32.const $push361=, 1
361 ; CHECK-NEXT:    i32.and $push222=, $pop221, $pop361
362 ; CHECK-NEXT:    i32.const $push34=, 7
363 ; CHECK-NEXT:    i32.shl $push223=, $pop222, $pop34
364 ; CHECK-NEXT:    i32.or $push224=, $pop220, $pop223
365 ; CHECK-NEXT:    i8x16.extract_lane_u $push225=, $0, 8
366 ; CHECK-NEXT:    i32.const $push360=, 1
367 ; CHECK-NEXT:    i32.and $push226=, $pop225, $pop360
368 ; CHECK-NEXT:    i32.const $push39=, 8
369 ; CHECK-NEXT:    i32.shl $push227=, $pop226, $pop39
370 ; CHECK-NEXT:    i32.or $push228=, $pop224, $pop227
371 ; CHECK-NEXT:    i8x16.extract_lane_u $push229=, $0, 9
372 ; CHECK-NEXT:    i32.const $push359=, 1
373 ; CHECK-NEXT:    i32.and $push230=, $pop229, $pop359
374 ; CHECK-NEXT:    i32.const $push44=, 9
375 ; CHECK-NEXT:    i32.shl $push231=, $pop230, $pop44
376 ; CHECK-NEXT:    i32.or $push232=, $pop228, $pop231
377 ; CHECK-NEXT:    i8x16.extract_lane_u $push233=, $0, 10
378 ; CHECK-NEXT:    i32.const $push358=, 1
379 ; CHECK-NEXT:    i32.and $push234=, $pop233, $pop358
380 ; CHECK-NEXT:    i32.const $push49=, 10
381 ; CHECK-NEXT:    i32.shl $push235=, $pop234, $pop49
382 ; CHECK-NEXT:    i32.or $push236=, $pop232, $pop235
383 ; CHECK-NEXT:    i8x16.extract_lane_u $push237=, $0, 11
384 ; CHECK-NEXT:    i32.const $push357=, 1
385 ; CHECK-NEXT:    i32.and $push238=, $pop237, $pop357
386 ; CHECK-NEXT:    i32.const $push54=, 11
387 ; CHECK-NEXT:    i32.shl $push239=, $pop238, $pop54
388 ; CHECK-NEXT:    i32.or $push240=, $pop236, $pop239
389 ; CHECK-NEXT:    i8x16.extract_lane_u $push241=, $0, 12
390 ; CHECK-NEXT:    i32.const $push356=, 1
391 ; CHECK-NEXT:    i32.and $push242=, $pop241, $pop356
392 ; CHECK-NEXT:    i32.const $push59=, 12
393 ; CHECK-NEXT:    i32.shl $push243=, $pop242, $pop59
394 ; CHECK-NEXT:    i32.or $push244=, $pop240, $pop243
395 ; CHECK-NEXT:    i8x16.extract_lane_u $push245=, $0, 13
396 ; CHECK-NEXT:    i32.const $push355=, 1
397 ; CHECK-NEXT:    i32.and $push246=, $pop245, $pop355
398 ; CHECK-NEXT:    i32.const $push64=, 13
399 ; CHECK-NEXT:    i32.shl $push247=, $pop246, $pop64
400 ; CHECK-NEXT:    i32.or $push248=, $pop244, $pop247
401 ; CHECK-NEXT:    i8x16.extract_lane_u $push249=, $0, 14
402 ; CHECK-NEXT:    i32.const $push354=, 1
403 ; CHECK-NEXT:    i32.and $push250=, $pop249, $pop354
404 ; CHECK-NEXT:    i32.const $push69=, 14
405 ; CHECK-NEXT:    i32.shl $push251=, $pop250, $pop69
406 ; CHECK-NEXT:    i32.or $push252=, $pop248, $pop251
407 ; CHECK-NEXT:    i32.or $push257=, $pop256, $pop252
408 ; CHECK-NEXT:    i8x16.extract_lane_u $push137=, $2, 0
409 ; CHECK-NEXT:    i32.const $push353=, 1
410 ; CHECK-NEXT:    i32.and $push138=, $pop137, $pop353
411 ; CHECK-NEXT:    i8x16.extract_lane_u $push139=, $2, 1
412 ; CHECK-NEXT:    i32.const $push352=, 1
413 ; CHECK-NEXT:    i32.and $push140=, $pop139, $pop352
414 ; CHECK-NEXT:    i32.const $push351=, 1
415 ; CHECK-NEXT:    i32.shl $push141=, $pop140, $pop351
416 ; CHECK-NEXT:    i32.or $push142=, $pop138, $pop141
417 ; CHECK-NEXT:    i8x16.extract_lane_u $push143=, $2, 2
418 ; CHECK-NEXT:    i32.const $push350=, 1
419 ; CHECK-NEXT:    i32.and $push144=, $pop143, $pop350
420 ; CHECK-NEXT:    i32.const $push349=, 2
421 ; CHECK-NEXT:    i32.shl $push145=, $pop144, $pop349
422 ; CHECK-NEXT:    i32.or $push146=, $pop142, $pop145
423 ; CHECK-NEXT:    i8x16.extract_lane_u $push147=, $2, 3
424 ; CHECK-NEXT:    i32.const $push348=, 1
425 ; CHECK-NEXT:    i32.and $push148=, $pop147, $pop348
426 ; CHECK-NEXT:    i32.const $push347=, 3
427 ; CHECK-NEXT:    i32.shl $push149=, $pop148, $pop347
428 ; CHECK-NEXT:    i32.or $push150=, $pop146, $pop149
429 ; CHECK-NEXT:    i8x16.extract_lane_u $push151=, $2, 4
430 ; CHECK-NEXT:    i32.const $push346=, 1
431 ; CHECK-NEXT:    i32.and $push152=, $pop151, $pop346
432 ; CHECK-NEXT:    i32.const $push345=, 4
433 ; CHECK-NEXT:    i32.shl $push153=, $pop152, $pop345
434 ; CHECK-NEXT:    i32.or $push154=, $pop150, $pop153
435 ; CHECK-NEXT:    i8x16.extract_lane_u $push155=, $2, 5
436 ; CHECK-NEXT:    i32.const $push344=, 1
437 ; CHECK-NEXT:    i32.and $push156=, $pop155, $pop344
438 ; CHECK-NEXT:    i32.const $push343=, 5
439 ; CHECK-NEXT:    i32.shl $push157=, $pop156, $pop343
440 ; CHECK-NEXT:    i32.or $push158=, $pop154, $pop157
441 ; CHECK-NEXT:    i8x16.extract_lane_u $push159=, $2, 6
442 ; CHECK-NEXT:    i32.const $push342=, 1
443 ; CHECK-NEXT:    i32.and $push160=, $pop159, $pop342
444 ; CHECK-NEXT:    i32.const $push341=, 6
445 ; CHECK-NEXT:    i32.shl $push161=, $pop160, $pop341
446 ; CHECK-NEXT:    i32.or $push162=, $pop158, $pop161
447 ; CHECK-NEXT:    i8x16.extract_lane_u $push163=, $2, 7
448 ; CHECK-NEXT:    i32.const $push340=, 1
449 ; CHECK-NEXT:    i32.and $push164=, $pop163, $pop340
450 ; CHECK-NEXT:    i32.const $push339=, 7
451 ; CHECK-NEXT:    i32.shl $push165=, $pop164, $pop339
452 ; CHECK-NEXT:    i32.or $push166=, $pop162, $pop165
453 ; CHECK-NEXT:    i8x16.extract_lane_u $push167=, $2, 8
454 ; CHECK-NEXT:    i32.const $push338=, 1
455 ; CHECK-NEXT:    i32.and $push168=, $pop167, $pop338
456 ; CHECK-NEXT:    i32.const $push337=, 8
457 ; CHECK-NEXT:    i32.shl $push169=, $pop168, $pop337
458 ; CHECK-NEXT:    i32.or $push170=, $pop166, $pop169
459 ; CHECK-NEXT:    i8x16.extract_lane_u $push171=, $2, 9
460 ; CHECK-NEXT:    i32.const $push336=, 1
461 ; CHECK-NEXT:    i32.and $push172=, $pop171, $pop336
462 ; CHECK-NEXT:    i32.const $push335=, 9
463 ; CHECK-NEXT:    i32.shl $push173=, $pop172, $pop335
464 ; CHECK-NEXT:    i32.or $push174=, $pop170, $pop173
465 ; CHECK-NEXT:    i8x16.extract_lane_u $push175=, $2, 10
466 ; CHECK-NEXT:    i32.const $push334=, 1
467 ; CHECK-NEXT:    i32.and $push176=, $pop175, $pop334
468 ; CHECK-NEXT:    i32.const $push333=, 10
469 ; CHECK-NEXT:    i32.shl $push177=, $pop176, $pop333
470 ; CHECK-NEXT:    i32.or $push178=, $pop174, $pop177
471 ; CHECK-NEXT:    i8x16.extract_lane_u $push179=, $2, 11
472 ; CHECK-NEXT:    i32.const $push332=, 1
473 ; CHECK-NEXT:    i32.and $push180=, $pop179, $pop332
474 ; CHECK-NEXT:    i32.const $push331=, 11
475 ; CHECK-NEXT:    i32.shl $push181=, $pop180, $pop331
476 ; CHECK-NEXT:    i32.or $push182=, $pop178, $pop181
477 ; CHECK-NEXT:    i8x16.extract_lane_u $push183=, $2, 12
478 ; CHECK-NEXT:    i32.const $push330=, 1
479 ; CHECK-NEXT:    i32.and $push184=, $pop183, $pop330
480 ; CHECK-NEXT:    i32.const $push329=, 12
481 ; CHECK-NEXT:    i32.shl $push185=, $pop184, $pop329
482 ; CHECK-NEXT:    i32.or $push186=, $pop182, $pop185
483 ; CHECK-NEXT:    i8x16.extract_lane_u $push187=, $2, 13
484 ; CHECK-NEXT:    i32.const $push328=, 1
485 ; CHECK-NEXT:    i32.and $push188=, $pop187, $pop328
486 ; CHECK-NEXT:    i32.const $push327=, 13
487 ; CHECK-NEXT:    i32.shl $push189=, $pop188, $pop327
488 ; CHECK-NEXT:    i32.or $push190=, $pop186, $pop189
489 ; CHECK-NEXT:    i8x16.extract_lane_u $push191=, $2, 14
490 ; CHECK-NEXT:    i32.const $push326=, 1
491 ; CHECK-NEXT:    i32.and $push192=, $pop191, $pop326
492 ; CHECK-NEXT:    i32.const $push325=, 14
493 ; CHECK-NEXT:    i32.shl $push193=, $pop192, $pop325
494 ; CHECK-NEXT:    i32.or $push194=, $pop190, $pop193
495 ; CHECK-NEXT:    i32.or $push258=, $pop257, $pop194
496 ; CHECK-NEXT:    i8x16.extract_lane_u $push131=, $1, 15
497 ; CHECK-NEXT:    i8x16.extract_lane_u $push130=, $3, 15
498 ; CHECK-NEXT:    i32.or $push132=, $pop131, $pop130
499 ; CHECK-NEXT:    i32.const $push324=, 15
500 ; CHECK-NEXT:    i32.shl $push134=, $pop132, $pop324
501 ; CHECK-NEXT:    i8x16.extract_lane_u $push72=, $1, 0
502 ; CHECK-NEXT:    i32.const $push323=, 1
503 ; CHECK-NEXT:    i32.and $push73=, $pop72, $pop323
504 ; CHECK-NEXT:    i8x16.extract_lane_u $push74=, $1, 1
505 ; CHECK-NEXT:    i32.const $push322=, 1
506 ; CHECK-NEXT:    i32.and $push75=, $pop74, $pop322
507 ; CHECK-NEXT:    i32.const $push321=, 1
508 ; CHECK-NEXT:    i32.shl $push76=, $pop75, $pop321
509 ; CHECK-NEXT:    i32.or $push77=, $pop73, $pop76
510 ; CHECK-NEXT:    i8x16.extract_lane_u $push78=, $1, 2
511 ; CHECK-NEXT:    i32.const $push320=, 1
512 ; CHECK-NEXT:    i32.and $push79=, $pop78, $pop320
513 ; CHECK-NEXT:    i32.const $push319=, 2
514 ; CHECK-NEXT:    i32.shl $push80=, $pop79, $pop319
515 ; CHECK-NEXT:    i32.or $push81=, $pop77, $pop80
516 ; CHECK-NEXT:    i8x16.extract_lane_u $push82=, $1, 3
517 ; CHECK-NEXT:    i32.const $push318=, 1
518 ; CHECK-NEXT:    i32.and $push83=, $pop82, $pop318
519 ; CHECK-NEXT:    i32.const $push317=, 3
520 ; CHECK-NEXT:    i32.shl $push84=, $pop83, $pop317
521 ; CHECK-NEXT:    i32.or $push85=, $pop81, $pop84
522 ; CHECK-NEXT:    i8x16.extract_lane_u $push86=, $1, 4
523 ; CHECK-NEXT:    i32.const $push316=, 1
524 ; CHECK-NEXT:    i32.and $push87=, $pop86, $pop316
525 ; CHECK-NEXT:    i32.const $push315=, 4
526 ; CHECK-NEXT:    i32.shl $push88=, $pop87, $pop315
527 ; CHECK-NEXT:    i32.or $push89=, $pop85, $pop88
528 ; CHECK-NEXT:    i8x16.extract_lane_u $push90=, $1, 5
529 ; CHECK-NEXT:    i32.const $push314=, 1
530 ; CHECK-NEXT:    i32.and $push91=, $pop90, $pop314
531 ; CHECK-NEXT:    i32.const $push313=, 5
532 ; CHECK-NEXT:    i32.shl $push92=, $pop91, $pop313
533 ; CHECK-NEXT:    i32.or $push93=, $pop89, $pop92
534 ; CHECK-NEXT:    i8x16.extract_lane_u $push94=, $1, 6
535 ; CHECK-NEXT:    i32.const $push312=, 1
536 ; CHECK-NEXT:    i32.and $push95=, $pop94, $pop312
537 ; CHECK-NEXT:    i32.const $push311=, 6
538 ; CHECK-NEXT:    i32.shl $push96=, $pop95, $pop311
539 ; CHECK-NEXT:    i32.or $push97=, $pop93, $pop96
540 ; CHECK-NEXT:    i8x16.extract_lane_u $push98=, $1, 7
541 ; CHECK-NEXT:    i32.const $push310=, 1
542 ; CHECK-NEXT:    i32.and $push99=, $pop98, $pop310
543 ; CHECK-NEXT:    i32.const $push309=, 7
544 ; CHECK-NEXT:    i32.shl $push100=, $pop99, $pop309
545 ; CHECK-NEXT:    i32.or $push101=, $pop97, $pop100
546 ; CHECK-NEXT:    i8x16.extract_lane_u $push102=, $1, 8
547 ; CHECK-NEXT:    i32.const $push308=, 1
548 ; CHECK-NEXT:    i32.and $push103=, $pop102, $pop308
549 ; CHECK-NEXT:    i32.const $push307=, 8
550 ; CHECK-NEXT:    i32.shl $push104=, $pop103, $pop307
551 ; CHECK-NEXT:    i32.or $push105=, $pop101, $pop104
552 ; CHECK-NEXT:    i8x16.extract_lane_u $push106=, $1, 9
553 ; CHECK-NEXT:    i32.const $push306=, 1
554 ; CHECK-NEXT:    i32.and $push107=, $pop106, $pop306
555 ; CHECK-NEXT:    i32.const $push305=, 9
556 ; CHECK-NEXT:    i32.shl $push108=, $pop107, $pop305
557 ; CHECK-NEXT:    i32.or $push109=, $pop105, $pop108
558 ; CHECK-NEXT:    i8x16.extract_lane_u $push110=, $1, 10
559 ; CHECK-NEXT:    i32.const $push304=, 1
560 ; CHECK-NEXT:    i32.and $push111=, $pop110, $pop304
561 ; CHECK-NEXT:    i32.const $push303=, 10
562 ; CHECK-NEXT:    i32.shl $push112=, $pop111, $pop303
563 ; CHECK-NEXT:    i32.or $push113=, $pop109, $pop112
564 ; CHECK-NEXT:    i8x16.extract_lane_u $push114=, $1, 11
565 ; CHECK-NEXT:    i32.const $push302=, 1
566 ; CHECK-NEXT:    i32.and $push115=, $pop114, $pop302
567 ; CHECK-NEXT:    i32.const $push301=, 11
568 ; CHECK-NEXT:    i32.shl $push116=, $pop115, $pop301
569 ; CHECK-NEXT:    i32.or $push117=, $pop113, $pop116
570 ; CHECK-NEXT:    i8x16.extract_lane_u $push118=, $1, 12
571 ; CHECK-NEXT:    i32.const $push300=, 1
572 ; CHECK-NEXT:    i32.and $push119=, $pop118, $pop300
573 ; CHECK-NEXT:    i32.const $push299=, 12
574 ; CHECK-NEXT:    i32.shl $push120=, $pop119, $pop299
575 ; CHECK-NEXT:    i32.or $push121=, $pop117, $pop120
576 ; CHECK-NEXT:    i8x16.extract_lane_u $push122=, $1, 13
577 ; CHECK-NEXT:    i32.const $push298=, 1
578 ; CHECK-NEXT:    i32.and $push123=, $pop122, $pop298
579 ; CHECK-NEXT:    i32.const $push297=, 13
580 ; CHECK-NEXT:    i32.shl $push124=, $pop123, $pop297
581 ; CHECK-NEXT:    i32.or $push125=, $pop121, $pop124
582 ; CHECK-NEXT:    i8x16.extract_lane_u $push126=, $1, 14
583 ; CHECK-NEXT:    i32.const $push296=, 1
584 ; CHECK-NEXT:    i32.and $push127=, $pop126, $pop296
585 ; CHECK-NEXT:    i32.const $push295=, 14
586 ; CHECK-NEXT:    i32.shl $push128=, $pop127, $pop295
587 ; CHECK-NEXT:    i32.or $push129=, $pop125, $pop128
588 ; CHECK-NEXT:    i32.or $push135=, $pop134, $pop129
589 ; CHECK-NEXT:    i8x16.extract_lane_u $push0=, $3, 0
590 ; CHECK-NEXT:    i32.const $push294=, 1
591 ; CHECK-NEXT:    i32.and $push2=, $pop0, $pop294
592 ; CHECK-NEXT:    i8x16.extract_lane_u $push3=, $3, 1
593 ; CHECK-NEXT:    i32.const $push293=, 1
594 ; CHECK-NEXT:    i32.and $push4=, $pop3, $pop293
595 ; CHECK-NEXT:    i32.const $push292=, 1
596 ; CHECK-NEXT:    i32.shl $push5=, $pop4, $pop292
597 ; CHECK-NEXT:    i32.or $push6=, $pop2, $pop5
598 ; CHECK-NEXT:    i8x16.extract_lane_u $push7=, $3, 2
599 ; CHECK-NEXT:    i32.const $push291=, 1
600 ; CHECK-NEXT:    i32.and $push8=, $pop7, $pop291
601 ; CHECK-NEXT:    i32.const $push290=, 2
602 ; CHECK-NEXT:    i32.shl $push10=, $pop8, $pop290
603 ; CHECK-NEXT:    i32.or $push11=, $pop6, $pop10
604 ; CHECK-NEXT:    i8x16.extract_lane_u $push12=, $3, 3
605 ; CHECK-NEXT:    i32.const $push289=, 1
606 ; CHECK-NEXT:    i32.and $push13=, $pop12, $pop289
607 ; CHECK-NEXT:    i32.const $push288=, 3
608 ; CHECK-NEXT:    i32.shl $push15=, $pop13, $pop288
609 ; CHECK-NEXT:    i32.or $push16=, $pop11, $pop15
610 ; CHECK-NEXT:    i8x16.extract_lane_u $push17=, $3, 4
611 ; CHECK-NEXT:    i32.const $push287=, 1
612 ; CHECK-NEXT:    i32.and $push18=, $pop17, $pop287
613 ; CHECK-NEXT:    i32.const $push286=, 4
614 ; CHECK-NEXT:    i32.shl $push20=, $pop18, $pop286
615 ; CHECK-NEXT:    i32.or $push21=, $pop16, $pop20
616 ; CHECK-NEXT:    i8x16.extract_lane_u $push22=, $3, 5
617 ; CHECK-NEXT:    i32.const $push285=, 1
618 ; CHECK-NEXT:    i32.and $push23=, $pop22, $pop285
619 ; CHECK-NEXT:    i32.const $push284=, 5
620 ; CHECK-NEXT:    i32.shl $push25=, $pop23, $pop284
621 ; CHECK-NEXT:    i32.or $push26=, $pop21, $pop25
622 ; CHECK-NEXT:    i8x16.extract_lane_u $push27=, $3, 6
623 ; CHECK-NEXT:    i32.const $push283=, 1
624 ; CHECK-NEXT:    i32.and $push28=, $pop27, $pop283
625 ; CHECK-NEXT:    i32.const $push282=, 6
626 ; CHECK-NEXT:    i32.shl $push30=, $pop28, $pop282
627 ; CHECK-NEXT:    i32.or $push31=, $pop26, $pop30
628 ; CHECK-NEXT:    i8x16.extract_lane_u $push32=, $3, 7
629 ; CHECK-NEXT:    i32.const $push281=, 1
630 ; CHECK-NEXT:    i32.and $push33=, $pop32, $pop281
631 ; CHECK-NEXT:    i32.const $push280=, 7
632 ; CHECK-NEXT:    i32.shl $push35=, $pop33, $pop280
633 ; CHECK-NEXT:    i32.or $push36=, $pop31, $pop35
634 ; CHECK-NEXT:    i8x16.extract_lane_u $push37=, $3, 8
635 ; CHECK-NEXT:    i32.const $push279=, 1
636 ; CHECK-NEXT:    i32.and $push38=, $pop37, $pop279
637 ; CHECK-NEXT:    i32.const $push278=, 8
638 ; CHECK-NEXT:    i32.shl $push40=, $pop38, $pop278
639 ; CHECK-NEXT:    i32.or $push41=, $pop36, $pop40
640 ; CHECK-NEXT:    i8x16.extract_lane_u $push42=, $3, 9
641 ; CHECK-NEXT:    i32.const $push277=, 1
642 ; CHECK-NEXT:    i32.and $push43=, $pop42, $pop277
643 ; CHECK-NEXT:    i32.const $push276=, 9
644 ; CHECK-NEXT:    i32.shl $push45=, $pop43, $pop276
645 ; CHECK-NEXT:    i32.or $push46=, $pop41, $pop45
646 ; CHECK-NEXT:    i8x16.extract_lane_u $push47=, $3, 10
647 ; CHECK-NEXT:    i32.const $push275=, 1
648 ; CHECK-NEXT:    i32.and $push48=, $pop47, $pop275
649 ; CHECK-NEXT:    i32.const $push274=, 10
650 ; CHECK-NEXT:    i32.shl $push50=, $pop48, $pop274
651 ; CHECK-NEXT:    i32.or $push51=, $pop46, $pop50
652 ; CHECK-NEXT:    i8x16.extract_lane_u $push52=, $3, 11
653 ; CHECK-NEXT:    i32.const $push273=, 1
654 ; CHECK-NEXT:    i32.and $push53=, $pop52, $pop273
655 ; CHECK-NEXT:    i32.const $push272=, 11
656 ; CHECK-NEXT:    i32.shl $push55=, $pop53, $pop272
657 ; CHECK-NEXT:    i32.or $push56=, $pop51, $pop55
658 ; CHECK-NEXT:    i8x16.extract_lane_u $push57=, $3, 12
659 ; CHECK-NEXT:    i32.const $push271=, 1
660 ; CHECK-NEXT:    i32.and $push58=, $pop57, $pop271
661 ; CHECK-NEXT:    i32.const $push270=, 12
662 ; CHECK-NEXT:    i32.shl $push60=, $pop58, $pop270
663 ; CHECK-NEXT:    i32.or $push61=, $pop56, $pop60
664 ; CHECK-NEXT:    i8x16.extract_lane_u $push62=, $3, 13
665 ; CHECK-NEXT:    i32.const $push269=, 1
666 ; CHECK-NEXT:    i32.and $push63=, $pop62, $pop269
667 ; CHECK-NEXT:    i32.const $push268=, 13
668 ; CHECK-NEXT:    i32.shl $push65=, $pop63, $pop268
669 ; CHECK-NEXT:    i32.or $push66=, $pop61, $pop65
670 ; CHECK-NEXT:    i8x16.extract_lane_u $push67=, $3, 14
671 ; CHECK-NEXT:    i32.const $push267=, 1
672 ; CHECK-NEXT:    i32.and $push68=, $pop67, $pop267
673 ; CHECK-NEXT:    i32.const $push266=, 14
674 ; CHECK-NEXT:    i32.shl $push70=, $pop68, $pop266
675 ; CHECK-NEXT:    i32.or $push71=, $pop66, $pop70
676 ; CHECK-NEXT:    i32.or $push136=, $pop135, $pop71
677 ; CHECK-NEXT:    i32.or $push259=, $pop258, $pop136
678 ; CHECK-NEXT:    i32.const $push260=, 65535
679 ; CHECK-NEXT:    i32.and $push261=, $pop259, $pop260
680 ; CHECK-NEXT:    i32.const $push262=, 0
681 ; CHECK-NEXT:    i32.ne $push263=, $pop261, $pop262
682 ; CHECK-NEXT:    return $pop263
683   %bits = trunc <64 x i8> %x to <64 x i1>
684   %ret = call i1 @llvm.vector.reduce.or.v64i1(<64 x i1> %bits)
685   ret i1 %ret
688 ;; TODO: Improve this codegen.
689 define i1 @test_all_v64i8(<64 x i8> %x) {
690 ; CHECK-LABEL: test_all_v64i8:
691 ; CHECK:         .functype test_all_v64i8 (v128, v128, v128, v128) -> (i32)
692 ; CHECK-NEXT:  # %bb.0:
693 ; CHECK-NEXT:    global.get $push287=, __stack_pointer
694 ; CHECK-NEXT:    i32.const $push288=, 16
695 ; CHECK-NEXT:    i32.sub $drop=, $pop287, $pop288
696 ; CHECK-NEXT:    i8x16.extract_lane_u $push220=, $2, 0
697 ; CHECK-NEXT:    i32.const $push1=, 1
698 ; CHECK-NEXT:    i32.and $push221=, $pop220, $pop1
699 ; CHECK-NEXT:    i8x16.extract_lane_u $push222=, $2, 1
700 ; CHECK-NEXT:    i32.const $push380=, 1
701 ; CHECK-NEXT:    i32.and $push223=, $pop222, $pop380
702 ; CHECK-NEXT:    i32.const $push379=, 1
703 ; CHECK-NEXT:    i32.shl $push224=, $pop223, $pop379
704 ; CHECK-NEXT:    i32.or $push225=, $pop221, $pop224
705 ; CHECK-NEXT:    i8x16.extract_lane_u $push226=, $2, 2
706 ; CHECK-NEXT:    i32.const $push378=, 1
707 ; CHECK-NEXT:    i32.and $push227=, $pop226, $pop378
708 ; CHECK-NEXT:    i32.const $push87=, 2
709 ; CHECK-NEXT:    i32.shl $push228=, $pop227, $pop87
710 ; CHECK-NEXT:    i32.or $push229=, $pop225, $pop228
711 ; CHECK-NEXT:    i8x16.extract_lane_u $push230=, $2, 3
712 ; CHECK-NEXT:    i32.const $push377=, 1
713 ; CHECK-NEXT:    i32.and $push231=, $pop230, $pop377
714 ; CHECK-NEXT:    i32.const $push92=, 3
715 ; CHECK-NEXT:    i32.shl $push232=, $pop231, $pop92
716 ; CHECK-NEXT:    i32.or $push233=, $pop229, $pop232
717 ; CHECK-NEXT:    i8x16.extract_lane_u $push234=, $2, 4
718 ; CHECK-NEXT:    i32.const $push376=, 1
719 ; CHECK-NEXT:    i32.and $push235=, $pop234, $pop376
720 ; CHECK-NEXT:    i32.const $push97=, 4
721 ; CHECK-NEXT:    i32.shl $push236=, $pop235, $pop97
722 ; CHECK-NEXT:    i32.or $push237=, $pop233, $pop236
723 ; CHECK-NEXT:    i8x16.extract_lane_u $push238=, $2, 5
724 ; CHECK-NEXT:    i32.const $push375=, 1
725 ; CHECK-NEXT:    i32.and $push239=, $pop238, $pop375
726 ; CHECK-NEXT:    i32.const $push102=, 5
727 ; CHECK-NEXT:    i32.shl $push240=, $pop239, $pop102
728 ; CHECK-NEXT:    i32.or $push241=, $pop237, $pop240
729 ; CHECK-NEXT:    i8x16.extract_lane_u $push242=, $2, 6
730 ; CHECK-NEXT:    i32.const $push374=, 1
731 ; CHECK-NEXT:    i32.and $push243=, $pop242, $pop374
732 ; CHECK-NEXT:    i32.const $push107=, 6
733 ; CHECK-NEXT:    i32.shl $push244=, $pop243, $pop107
734 ; CHECK-NEXT:    i32.or $push245=, $pop241, $pop244
735 ; CHECK-NEXT:    i8x16.extract_lane_u $push246=, $2, 7
736 ; CHECK-NEXT:    i32.const $push373=, 1
737 ; CHECK-NEXT:    i32.and $push247=, $pop246, $pop373
738 ; CHECK-NEXT:    i32.const $push112=, 7
739 ; CHECK-NEXT:    i32.shl $push248=, $pop247, $pop112
740 ; CHECK-NEXT:    i32.or $push249=, $pop245, $pop248
741 ; CHECK-NEXT:    i8x16.extract_lane_u $push250=, $2, 8
742 ; CHECK-NEXT:    i32.const $push372=, 1
743 ; CHECK-NEXT:    i32.and $push251=, $pop250, $pop372
744 ; CHECK-NEXT:    i32.const $push117=, 8
745 ; CHECK-NEXT:    i32.shl $push252=, $pop251, $pop117
746 ; CHECK-NEXT:    i32.or $push253=, $pop249, $pop252
747 ; CHECK-NEXT:    i8x16.extract_lane_u $push254=, $2, 9
748 ; CHECK-NEXT:    i32.const $push371=, 1
749 ; CHECK-NEXT:    i32.and $push255=, $pop254, $pop371
750 ; CHECK-NEXT:    i32.const $push122=, 9
751 ; CHECK-NEXT:    i32.shl $push256=, $pop255, $pop122
752 ; CHECK-NEXT:    i32.or $push257=, $pop253, $pop256
753 ; CHECK-NEXT:    i8x16.extract_lane_u $push258=, $2, 10
754 ; CHECK-NEXT:    i32.const $push370=, 1
755 ; CHECK-NEXT:    i32.and $push259=, $pop258, $pop370
756 ; CHECK-NEXT:    i32.const $push127=, 10
757 ; CHECK-NEXT:    i32.shl $push260=, $pop259, $pop127
758 ; CHECK-NEXT:    i32.or $push261=, $pop257, $pop260
759 ; CHECK-NEXT:    i8x16.extract_lane_u $push262=, $2, 11
760 ; CHECK-NEXT:    i32.const $push369=, 1
761 ; CHECK-NEXT:    i32.and $push263=, $pop262, $pop369
762 ; CHECK-NEXT:    i32.const $push132=, 11
763 ; CHECK-NEXT:    i32.shl $push264=, $pop263, $pop132
764 ; CHECK-NEXT:    i32.or $push265=, $pop261, $pop264
765 ; CHECK-NEXT:    i8x16.extract_lane_u $push266=, $2, 12
766 ; CHECK-NEXT:    i32.const $push368=, 1
767 ; CHECK-NEXT:    i32.and $push267=, $pop266, $pop368
768 ; CHECK-NEXT:    i32.const $push137=, 12
769 ; CHECK-NEXT:    i32.shl $push268=, $pop267, $pop137
770 ; CHECK-NEXT:    i32.or $push269=, $pop265, $pop268
771 ; CHECK-NEXT:    i8x16.extract_lane_u $push270=, $2, 13
772 ; CHECK-NEXT:    i32.const $push367=, 1
773 ; CHECK-NEXT:    i32.and $push271=, $pop270, $pop367
774 ; CHECK-NEXT:    i32.const $push142=, 13
775 ; CHECK-NEXT:    i32.shl $push272=, $pop271, $pop142
776 ; CHECK-NEXT:    i32.or $push273=, $pop269, $pop272
777 ; CHECK-NEXT:    i8x16.extract_lane_u $push274=, $2, 14
778 ; CHECK-NEXT:    i32.const $push366=, 1
779 ; CHECK-NEXT:    i32.and $push275=, $pop274, $pop366
780 ; CHECK-NEXT:    i32.const $push147=, 14
781 ; CHECK-NEXT:    i32.shl $push276=, $pop275, $pop147
782 ; CHECK-NEXT:    i32.or $push277=, $pop273, $pop276
783 ; CHECK-NEXT:    i8x16.extract_lane_u $push278=, $2, 15
784 ; CHECK-NEXT:    i32.const $push151=, 15
785 ; CHECK-NEXT:    i32.shl $push279=, $pop278, $pop151
786 ; CHECK-NEXT:    i32.or $push280=, $pop277, $pop279
787 ; CHECK-NEXT:    i32.const $push154=, 65535
788 ; CHECK-NEXT:    i32.and $push281=, $pop280, $pop154
789 ; CHECK-NEXT:    i8x16.extract_lane_u $push217=, $3, 15
790 ; CHECK-NEXT:    i32.const $push76=, 31
791 ; CHECK-NEXT:    i32.shl $push218=, $pop217, $pop76
792 ; CHECK-NEXT:    i8x16.extract_lane_u $push213=, $3, 14
793 ; CHECK-NEXT:    i32.const $push365=, 1
794 ; CHECK-NEXT:    i32.and $push214=, $pop213, $pop365
795 ; CHECK-NEXT:    i32.const $push72=, 30
796 ; CHECK-NEXT:    i32.shl $push215=, $pop214, $pop72
797 ; CHECK-NEXT:    i8x16.extract_lane_u $push209=, $3, 13
798 ; CHECK-NEXT:    i32.const $push364=, 1
799 ; CHECK-NEXT:    i32.and $push210=, $pop209, $pop364
800 ; CHECK-NEXT:    i32.const $push67=, 29
801 ; CHECK-NEXT:    i32.shl $push211=, $pop210, $pop67
802 ; CHECK-NEXT:    i8x16.extract_lane_u $push205=, $3, 12
803 ; CHECK-NEXT:    i32.const $push363=, 1
804 ; CHECK-NEXT:    i32.and $push206=, $pop205, $pop363
805 ; CHECK-NEXT:    i32.const $push62=, 28
806 ; CHECK-NEXT:    i32.shl $push207=, $pop206, $pop62
807 ; CHECK-NEXT:    i8x16.extract_lane_u $push201=, $3, 11
808 ; CHECK-NEXT:    i32.const $push362=, 1
809 ; CHECK-NEXT:    i32.and $push202=, $pop201, $pop362
810 ; CHECK-NEXT:    i32.const $push57=, 27
811 ; CHECK-NEXT:    i32.shl $push203=, $pop202, $pop57
812 ; CHECK-NEXT:    i8x16.extract_lane_u $push197=, $3, 10
813 ; CHECK-NEXT:    i32.const $push361=, 1
814 ; CHECK-NEXT:    i32.and $push198=, $pop197, $pop361
815 ; CHECK-NEXT:    i32.const $push52=, 26
816 ; CHECK-NEXT:    i32.shl $push199=, $pop198, $pop52
817 ; CHECK-NEXT:    i8x16.extract_lane_u $push193=, $3, 9
818 ; CHECK-NEXT:    i32.const $push360=, 1
819 ; CHECK-NEXT:    i32.and $push194=, $pop193, $pop360
820 ; CHECK-NEXT:    i32.const $push47=, 25
821 ; CHECK-NEXT:    i32.shl $push195=, $pop194, $pop47
822 ; CHECK-NEXT:    i8x16.extract_lane_u $push189=, $3, 8
823 ; CHECK-NEXT:    i32.const $push359=, 1
824 ; CHECK-NEXT:    i32.and $push190=, $pop189, $pop359
825 ; CHECK-NEXT:    i32.const $push42=, 24
826 ; CHECK-NEXT:    i32.shl $push191=, $pop190, $pop42
827 ; CHECK-NEXT:    i8x16.extract_lane_u $push185=, $3, 7
828 ; CHECK-NEXT:    i32.const $push358=, 1
829 ; CHECK-NEXT:    i32.and $push186=, $pop185, $pop358
830 ; CHECK-NEXT:    i32.const $push37=, 23
831 ; CHECK-NEXT:    i32.shl $push187=, $pop186, $pop37
832 ; CHECK-NEXT:    i8x16.extract_lane_u $push181=, $3, 6
833 ; CHECK-NEXT:    i32.const $push357=, 1
834 ; CHECK-NEXT:    i32.and $push182=, $pop181, $pop357
835 ; CHECK-NEXT:    i32.const $push32=, 22
836 ; CHECK-NEXT:    i32.shl $push183=, $pop182, $pop32
837 ; CHECK-NEXT:    i8x16.extract_lane_u $push177=, $3, 5
838 ; CHECK-NEXT:    i32.const $push356=, 1
839 ; CHECK-NEXT:    i32.and $push178=, $pop177, $pop356
840 ; CHECK-NEXT:    i32.const $push27=, 21
841 ; CHECK-NEXT:    i32.shl $push179=, $pop178, $pop27
842 ; CHECK-NEXT:    i8x16.extract_lane_u $push173=, $3, 4
843 ; CHECK-NEXT:    i32.const $push355=, 1
844 ; CHECK-NEXT:    i32.and $push174=, $pop173, $pop355
845 ; CHECK-NEXT:    i32.const $push22=, 20
846 ; CHECK-NEXT:    i32.shl $push175=, $pop174, $pop22
847 ; CHECK-NEXT:    i8x16.extract_lane_u $push169=, $3, 3
848 ; CHECK-NEXT:    i32.const $push354=, 1
849 ; CHECK-NEXT:    i32.and $push170=, $pop169, $pop354
850 ; CHECK-NEXT:    i32.const $push17=, 19
851 ; CHECK-NEXT:    i32.shl $push171=, $pop170, $pop17
852 ; CHECK-NEXT:    i8x16.extract_lane_u $push165=, $3, 2
853 ; CHECK-NEXT:    i32.const $push353=, 1
854 ; CHECK-NEXT:    i32.and $push166=, $pop165, $pop353
855 ; CHECK-NEXT:    i32.const $push12=, 18
856 ; CHECK-NEXT:    i32.shl $push167=, $pop166, $pop12
857 ; CHECK-NEXT:    i8x16.extract_lane_u $push161=, $3, 1
858 ; CHECK-NEXT:    i32.const $push352=, 1
859 ; CHECK-NEXT:    i32.and $push162=, $pop161, $pop352
860 ; CHECK-NEXT:    i32.const $push7=, 17
861 ; CHECK-NEXT:    i32.shl $push163=, $pop162, $pop7
862 ; CHECK-NEXT:    i8x16.extract_lane_u $push158=, $3, 0
863 ; CHECK-NEXT:    i32.const $push351=, 1
864 ; CHECK-NEXT:    i32.and $push159=, $pop158, $pop351
865 ; CHECK-NEXT:    i32.const $push3=, 16
866 ; CHECK-NEXT:    i32.shl $push160=, $pop159, $pop3
867 ; CHECK-NEXT:    i32.or $push164=, $pop163, $pop160
868 ; CHECK-NEXT:    i32.or $push168=, $pop167, $pop164
869 ; CHECK-NEXT:    i32.or $push172=, $pop171, $pop168
870 ; CHECK-NEXT:    i32.or $push176=, $pop175, $pop172
871 ; CHECK-NEXT:    i32.or $push180=, $pop179, $pop176
872 ; CHECK-NEXT:    i32.or $push184=, $pop183, $pop180
873 ; CHECK-NEXT:    i32.or $push188=, $pop187, $pop184
874 ; CHECK-NEXT:    i32.or $push192=, $pop191, $pop188
875 ; CHECK-NEXT:    i32.or $push196=, $pop195, $pop192
876 ; CHECK-NEXT:    i32.or $push200=, $pop199, $pop196
877 ; CHECK-NEXT:    i32.or $push204=, $pop203, $pop200
878 ; CHECK-NEXT:    i32.or $push208=, $pop207, $pop204
879 ; CHECK-NEXT:    i32.or $push212=, $pop211, $pop208
880 ; CHECK-NEXT:    i32.or $push216=, $pop215, $pop212
881 ; CHECK-NEXT:    i32.or $push219=, $pop218, $pop216
882 ; CHECK-NEXT:    i32.or $push282=, $pop281, $pop219
883 ; CHECK-NEXT:    i64.extend_i32_u $push283=, $pop282
884 ; CHECK-NEXT:    i8x16.extract_lane_u $push79=, $0, 0
885 ; CHECK-NEXT:    i32.const $push350=, 1
886 ; CHECK-NEXT:    i32.and $push80=, $pop79, $pop350
887 ; CHECK-NEXT:    i8x16.extract_lane_u $push81=, $0, 1
888 ; CHECK-NEXT:    i32.const $push349=, 1
889 ; CHECK-NEXT:    i32.and $push82=, $pop81, $pop349
890 ; CHECK-NEXT:    i32.const $push348=, 1
891 ; CHECK-NEXT:    i32.shl $push83=, $pop82, $pop348
892 ; CHECK-NEXT:    i32.or $push84=, $pop80, $pop83
893 ; CHECK-NEXT:    i8x16.extract_lane_u $push85=, $0, 2
894 ; CHECK-NEXT:    i32.const $push347=, 1
895 ; CHECK-NEXT:    i32.and $push86=, $pop85, $pop347
896 ; CHECK-NEXT:    i32.const $push346=, 2
897 ; CHECK-NEXT:    i32.shl $push88=, $pop86, $pop346
898 ; CHECK-NEXT:    i32.or $push89=, $pop84, $pop88
899 ; CHECK-NEXT:    i8x16.extract_lane_u $push90=, $0, 3
900 ; CHECK-NEXT:    i32.const $push345=, 1
901 ; CHECK-NEXT:    i32.and $push91=, $pop90, $pop345
902 ; CHECK-NEXT:    i32.const $push344=, 3
903 ; CHECK-NEXT:    i32.shl $push93=, $pop91, $pop344
904 ; CHECK-NEXT:    i32.or $push94=, $pop89, $pop93
905 ; CHECK-NEXT:    i8x16.extract_lane_u $push95=, $0, 4
906 ; CHECK-NEXT:    i32.const $push343=, 1
907 ; CHECK-NEXT:    i32.and $push96=, $pop95, $pop343
908 ; CHECK-NEXT:    i32.const $push342=, 4
909 ; CHECK-NEXT:    i32.shl $push98=, $pop96, $pop342
910 ; CHECK-NEXT:    i32.or $push99=, $pop94, $pop98
911 ; CHECK-NEXT:    i8x16.extract_lane_u $push100=, $0, 5
912 ; CHECK-NEXT:    i32.const $push341=, 1
913 ; CHECK-NEXT:    i32.and $push101=, $pop100, $pop341
914 ; CHECK-NEXT:    i32.const $push340=, 5
915 ; CHECK-NEXT:    i32.shl $push103=, $pop101, $pop340
916 ; CHECK-NEXT:    i32.or $push104=, $pop99, $pop103
917 ; CHECK-NEXT:    i8x16.extract_lane_u $push105=, $0, 6
918 ; CHECK-NEXT:    i32.const $push339=, 1
919 ; CHECK-NEXT:    i32.and $push106=, $pop105, $pop339
920 ; CHECK-NEXT:    i32.const $push338=, 6
921 ; CHECK-NEXT:    i32.shl $push108=, $pop106, $pop338
922 ; CHECK-NEXT:    i32.or $push109=, $pop104, $pop108
923 ; CHECK-NEXT:    i8x16.extract_lane_u $push110=, $0, 7
924 ; CHECK-NEXT:    i32.const $push337=, 1
925 ; CHECK-NEXT:    i32.and $push111=, $pop110, $pop337
926 ; CHECK-NEXT:    i32.const $push336=, 7
927 ; CHECK-NEXT:    i32.shl $push113=, $pop111, $pop336
928 ; CHECK-NEXT:    i32.or $push114=, $pop109, $pop113
929 ; CHECK-NEXT:    i8x16.extract_lane_u $push115=, $0, 8
930 ; CHECK-NEXT:    i32.const $push335=, 1
931 ; CHECK-NEXT:    i32.and $push116=, $pop115, $pop335
932 ; CHECK-NEXT:    i32.const $push334=, 8
933 ; CHECK-NEXT:    i32.shl $push118=, $pop116, $pop334
934 ; CHECK-NEXT:    i32.or $push119=, $pop114, $pop118
935 ; CHECK-NEXT:    i8x16.extract_lane_u $push120=, $0, 9
936 ; CHECK-NEXT:    i32.const $push333=, 1
937 ; CHECK-NEXT:    i32.and $push121=, $pop120, $pop333
938 ; CHECK-NEXT:    i32.const $push332=, 9
939 ; CHECK-NEXT:    i32.shl $push123=, $pop121, $pop332
940 ; CHECK-NEXT:    i32.or $push124=, $pop119, $pop123
941 ; CHECK-NEXT:    i8x16.extract_lane_u $push125=, $0, 10
942 ; CHECK-NEXT:    i32.const $push331=, 1
943 ; CHECK-NEXT:    i32.and $push126=, $pop125, $pop331
944 ; CHECK-NEXT:    i32.const $push330=, 10
945 ; CHECK-NEXT:    i32.shl $push128=, $pop126, $pop330
946 ; CHECK-NEXT:    i32.or $push129=, $pop124, $pop128
947 ; CHECK-NEXT:    i8x16.extract_lane_u $push130=, $0, 11
948 ; CHECK-NEXT:    i32.const $push329=, 1
949 ; CHECK-NEXT:    i32.and $push131=, $pop130, $pop329
950 ; CHECK-NEXT:    i32.const $push328=, 11
951 ; CHECK-NEXT:    i32.shl $push133=, $pop131, $pop328
952 ; CHECK-NEXT:    i32.or $push134=, $pop129, $pop133
953 ; CHECK-NEXT:    i8x16.extract_lane_u $push135=, $0, 12
954 ; CHECK-NEXT:    i32.const $push327=, 1
955 ; CHECK-NEXT:    i32.and $push136=, $pop135, $pop327
956 ; CHECK-NEXT:    i32.const $push326=, 12
957 ; CHECK-NEXT:    i32.shl $push138=, $pop136, $pop326
958 ; CHECK-NEXT:    i32.or $push139=, $pop134, $pop138
959 ; CHECK-NEXT:    i8x16.extract_lane_u $push140=, $0, 13
960 ; CHECK-NEXT:    i32.const $push325=, 1
961 ; CHECK-NEXT:    i32.and $push141=, $pop140, $pop325
962 ; CHECK-NEXT:    i32.const $push324=, 13
963 ; CHECK-NEXT:    i32.shl $push143=, $pop141, $pop324
964 ; CHECK-NEXT:    i32.or $push144=, $pop139, $pop143
965 ; CHECK-NEXT:    i8x16.extract_lane_u $push145=, $0, 14
966 ; CHECK-NEXT:    i32.const $push323=, 1
967 ; CHECK-NEXT:    i32.and $push146=, $pop145, $pop323
968 ; CHECK-NEXT:    i32.const $push322=, 14
969 ; CHECK-NEXT:    i32.shl $push148=, $pop146, $pop322
970 ; CHECK-NEXT:    i32.or $push149=, $pop144, $pop148
971 ; CHECK-NEXT:    i8x16.extract_lane_u $push150=, $0, 15
972 ; CHECK-NEXT:    i32.const $push321=, 15
973 ; CHECK-NEXT:    i32.shl $push152=, $pop150, $pop321
974 ; CHECK-NEXT:    i32.or $push153=, $pop149, $pop152
975 ; CHECK-NEXT:    i32.const $push320=, 65535
976 ; CHECK-NEXT:    i32.and $push155=, $pop153, $pop320
977 ; CHECK-NEXT:    i8x16.extract_lane_u $push75=, $1, 15
978 ; CHECK-NEXT:    i32.const $push319=, 31
979 ; CHECK-NEXT:    i32.shl $push77=, $pop75, $pop319
980 ; CHECK-NEXT:    i8x16.extract_lane_u $push70=, $1, 14
981 ; CHECK-NEXT:    i32.const $push318=, 1
982 ; CHECK-NEXT:    i32.and $push71=, $pop70, $pop318
983 ; CHECK-NEXT:    i32.const $push317=, 30
984 ; CHECK-NEXT:    i32.shl $push73=, $pop71, $pop317
985 ; CHECK-NEXT:    i8x16.extract_lane_u $push65=, $1, 13
986 ; CHECK-NEXT:    i32.const $push316=, 1
987 ; CHECK-NEXT:    i32.and $push66=, $pop65, $pop316
988 ; CHECK-NEXT:    i32.const $push315=, 29
989 ; CHECK-NEXT:    i32.shl $push68=, $pop66, $pop315
990 ; CHECK-NEXT:    i8x16.extract_lane_u $push60=, $1, 12
991 ; CHECK-NEXT:    i32.const $push314=, 1
992 ; CHECK-NEXT:    i32.and $push61=, $pop60, $pop314
993 ; CHECK-NEXT:    i32.const $push313=, 28
994 ; CHECK-NEXT:    i32.shl $push63=, $pop61, $pop313
995 ; CHECK-NEXT:    i8x16.extract_lane_u $push55=, $1, 11
996 ; CHECK-NEXT:    i32.const $push312=, 1
997 ; CHECK-NEXT:    i32.and $push56=, $pop55, $pop312
998 ; CHECK-NEXT:    i32.const $push311=, 27
999 ; CHECK-NEXT:    i32.shl $push58=, $pop56, $pop311
1000 ; CHECK-NEXT:    i8x16.extract_lane_u $push50=, $1, 10
1001 ; CHECK-NEXT:    i32.const $push310=, 1
1002 ; CHECK-NEXT:    i32.and $push51=, $pop50, $pop310
1003 ; CHECK-NEXT:    i32.const $push309=, 26
1004 ; CHECK-NEXT:    i32.shl $push53=, $pop51, $pop309
1005 ; CHECK-NEXT:    i8x16.extract_lane_u $push45=, $1, 9
1006 ; CHECK-NEXT:    i32.const $push308=, 1
1007 ; CHECK-NEXT:    i32.and $push46=, $pop45, $pop308
1008 ; CHECK-NEXT:    i32.const $push307=, 25
1009 ; CHECK-NEXT:    i32.shl $push48=, $pop46, $pop307
1010 ; CHECK-NEXT:    i8x16.extract_lane_u $push40=, $1, 8
1011 ; CHECK-NEXT:    i32.const $push306=, 1
1012 ; CHECK-NEXT:    i32.and $push41=, $pop40, $pop306
1013 ; CHECK-NEXT:    i32.const $push305=, 24
1014 ; CHECK-NEXT:    i32.shl $push43=, $pop41, $pop305
1015 ; CHECK-NEXT:    i8x16.extract_lane_u $push35=, $1, 7
1016 ; CHECK-NEXT:    i32.const $push304=, 1
1017 ; CHECK-NEXT:    i32.and $push36=, $pop35, $pop304
1018 ; CHECK-NEXT:    i32.const $push303=, 23
1019 ; CHECK-NEXT:    i32.shl $push38=, $pop36, $pop303
1020 ; CHECK-NEXT:    i8x16.extract_lane_u $push30=, $1, 6
1021 ; CHECK-NEXT:    i32.const $push302=, 1
1022 ; CHECK-NEXT:    i32.and $push31=, $pop30, $pop302
1023 ; CHECK-NEXT:    i32.const $push301=, 22
1024 ; CHECK-NEXT:    i32.shl $push33=, $pop31, $pop301
1025 ; CHECK-NEXT:    i8x16.extract_lane_u $push25=, $1, 5
1026 ; CHECK-NEXT:    i32.const $push300=, 1
1027 ; CHECK-NEXT:    i32.and $push26=, $pop25, $pop300
1028 ; CHECK-NEXT:    i32.const $push299=, 21
1029 ; CHECK-NEXT:    i32.shl $push28=, $pop26, $pop299
1030 ; CHECK-NEXT:    i8x16.extract_lane_u $push20=, $1, 4
1031 ; CHECK-NEXT:    i32.const $push298=, 1
1032 ; CHECK-NEXT:    i32.and $push21=, $pop20, $pop298
1033 ; CHECK-NEXT:    i32.const $push297=, 20
1034 ; CHECK-NEXT:    i32.shl $push23=, $pop21, $pop297
1035 ; CHECK-NEXT:    i8x16.extract_lane_u $push15=, $1, 3
1036 ; CHECK-NEXT:    i32.const $push296=, 1
1037 ; CHECK-NEXT:    i32.and $push16=, $pop15, $pop296
1038 ; CHECK-NEXT:    i32.const $push295=, 19
1039 ; CHECK-NEXT:    i32.shl $push18=, $pop16, $pop295
1040 ; CHECK-NEXT:    i8x16.extract_lane_u $push10=, $1, 2
1041 ; CHECK-NEXT:    i32.const $push294=, 1
1042 ; CHECK-NEXT:    i32.and $push11=, $pop10, $pop294
1043 ; CHECK-NEXT:    i32.const $push293=, 18
1044 ; CHECK-NEXT:    i32.shl $push13=, $pop11, $pop293
1045 ; CHECK-NEXT:    i8x16.extract_lane_u $push5=, $1, 1
1046 ; CHECK-NEXT:    i32.const $push292=, 1
1047 ; CHECK-NEXT:    i32.and $push6=, $pop5, $pop292
1048 ; CHECK-NEXT:    i32.const $push291=, 17
1049 ; CHECK-NEXT:    i32.shl $push8=, $pop6, $pop291
1050 ; CHECK-NEXT:    i8x16.extract_lane_u $push0=, $1, 0
1051 ; CHECK-NEXT:    i32.const $push290=, 1
1052 ; CHECK-NEXT:    i32.and $push2=, $pop0, $pop290
1053 ; CHECK-NEXT:    i32.const $push289=, 16
1054 ; CHECK-NEXT:    i32.shl $push4=, $pop2, $pop289
1055 ; CHECK-NEXT:    i32.or $push9=, $pop8, $pop4
1056 ; CHECK-NEXT:    i32.or $push14=, $pop13, $pop9
1057 ; CHECK-NEXT:    i32.or $push19=, $pop18, $pop14
1058 ; CHECK-NEXT:    i32.or $push24=, $pop23, $pop19
1059 ; CHECK-NEXT:    i32.or $push29=, $pop28, $pop24
1060 ; CHECK-NEXT:    i32.or $push34=, $pop33, $pop29
1061 ; CHECK-NEXT:    i32.or $push39=, $pop38, $pop34
1062 ; CHECK-NEXT:    i32.or $push44=, $pop43, $pop39
1063 ; CHECK-NEXT:    i32.or $push49=, $pop48, $pop44
1064 ; CHECK-NEXT:    i32.or $push54=, $pop53, $pop49
1065 ; CHECK-NEXT:    i32.or $push59=, $pop58, $pop54
1066 ; CHECK-NEXT:    i32.or $push64=, $pop63, $pop59
1067 ; CHECK-NEXT:    i32.or $push69=, $pop68, $pop64
1068 ; CHECK-NEXT:    i32.or $push74=, $pop73, $pop69
1069 ; CHECK-NEXT:    i32.or $push78=, $pop77, $pop74
1070 ; CHECK-NEXT:    i32.or $push156=, $pop155, $pop78
1071 ; CHECK-NEXT:    i64.extend_i32_u $push157=, $pop156
1072 ; CHECK-NEXT:    i64.and $push284=, $pop283, $pop157
1073 ; CHECK-NEXT:    i64.const $push285=, 4294967295
1074 ; CHECK-NEXT:    i64.eq $push286=, $pop284, $pop285
1075 ; CHECK-NEXT:    return $pop286
1076   %bits = trunc <64 x i8> %x to <64 x i1>
1077   %ret = call i1 @llvm.vector.reduce.and.v64i1(<64 x i1> %bits)
1078   ret i1 %ret
1081 ;; =====================
1082 ;; Test reduce after cmp
1083 ;; =====================
1085 define i1 @test_cmp_v16i8(<16 x i8> %x) {
1086 ; CHECK-LABEL: test_cmp_v16i8:
1087 ; CHECK:         .functype test_cmp_v16i8 (v128) -> (i32)
1088 ; CHECK-NEXT:  # %bb.0:
1089 ; CHECK-NEXT:    v128.const $push0=, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
1090 ; CHECK-NEXT:    i8x16.eq $push1=, $0, $pop0
1091 ; CHECK-NEXT:    v128.any_true $push2=, $pop1
1092 ; CHECK-NEXT:    return $pop2
1093   %zero = icmp eq <16 x i8> %x, zeroinitializer
1094   %ret = call i1 @llvm.vector.reduce.or.v16i1(<16 x i1> %zero)
1095   ret i1 %ret