xref: /llvm-project/llvm/test/CodeGen/WebAssembly/simd-arith.ll (revision a3de21cac1fb8f1dd98cfe1d1443e2d3f0a97351)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 | FileCheck %s --check-prefix=SIMD128
3; RUN: llc < %s -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 -fast-isel | FileCheck %s --check-prefix=SIMD128-FAST
4; RUN: llc < %s -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s --check-prefix=NO-SIMD128
5; RUN: llc < %s -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -fast-isel | FileCheck %s --check-prefix=NO-SIMD128-FAST
6
7; check that a non-test run (including explicit locals pass) at least finishes
8; RUN: llc < %s -O0 -mattr=+simd128
9; RUN: llc < %s -O2 -mattr=+simd128
10
11; Test that basic SIMD128 arithmetic operations assemble as expected.
12
13target triple = "wasm32-unknown-unknown"
14
15; ==============================================================================
16; 16 x i8
17; ==============================================================================
18define <16 x i8> @add_v16i8(<16 x i8> %x, <16 x i8> %y) {
19; SIMD128-LABEL: add_v16i8:
20; SIMD128:         .functype add_v16i8 (v128, v128) -> (v128)
21; SIMD128-NEXT:  # %bb.0:
22; SIMD128-NEXT:    i8x16.add $push0=, $0, $1
23; SIMD128-NEXT:    return $pop0
24;
25; SIMD128-FAST-LABEL: add_v16i8:
26; SIMD128-FAST:         .functype add_v16i8 (v128, v128) -> (v128)
27; SIMD128-FAST-NEXT:  # %bb.0:
28; SIMD128-FAST-NEXT:    i8x16.add $push0=, $0, $1
29; SIMD128-FAST-NEXT:    return $pop0
30;
31; NO-SIMD128-LABEL: add_v16i8:
32; NO-SIMD128:         .functype add_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
33; NO-SIMD128-NEXT:  # %bb.0:
34; NO-SIMD128-NEXT:    i32.add $push0=, $16, $32
35; NO-SIMD128-NEXT:    i32.store8 15($0), $pop0
36; NO-SIMD128-NEXT:    i32.add $push1=, $15, $31
37; NO-SIMD128-NEXT:    i32.store8 14($0), $pop1
38; NO-SIMD128-NEXT:    i32.add $push2=, $14, $30
39; NO-SIMD128-NEXT:    i32.store8 13($0), $pop2
40; NO-SIMD128-NEXT:    i32.add $push3=, $13, $29
41; NO-SIMD128-NEXT:    i32.store8 12($0), $pop3
42; NO-SIMD128-NEXT:    i32.add $push4=, $12, $28
43; NO-SIMD128-NEXT:    i32.store8 11($0), $pop4
44; NO-SIMD128-NEXT:    i32.add $push5=, $11, $27
45; NO-SIMD128-NEXT:    i32.store8 10($0), $pop5
46; NO-SIMD128-NEXT:    i32.add $push6=, $10, $26
47; NO-SIMD128-NEXT:    i32.store8 9($0), $pop6
48; NO-SIMD128-NEXT:    i32.add $push7=, $9, $25
49; NO-SIMD128-NEXT:    i32.store8 8($0), $pop7
50; NO-SIMD128-NEXT:    i32.add $push8=, $8, $24
51; NO-SIMD128-NEXT:    i32.store8 7($0), $pop8
52; NO-SIMD128-NEXT:    i32.add $push9=, $7, $23
53; NO-SIMD128-NEXT:    i32.store8 6($0), $pop9
54; NO-SIMD128-NEXT:    i32.add $push10=, $6, $22
55; NO-SIMD128-NEXT:    i32.store8 5($0), $pop10
56; NO-SIMD128-NEXT:    i32.add $push11=, $5, $21
57; NO-SIMD128-NEXT:    i32.store8 4($0), $pop11
58; NO-SIMD128-NEXT:    i32.add $push12=, $4, $20
59; NO-SIMD128-NEXT:    i32.store8 3($0), $pop12
60; NO-SIMD128-NEXT:    i32.add $push13=, $3, $19
61; NO-SIMD128-NEXT:    i32.store8 2($0), $pop13
62; NO-SIMD128-NEXT:    i32.add $push14=, $2, $18
63; NO-SIMD128-NEXT:    i32.store8 1($0), $pop14
64; NO-SIMD128-NEXT:    i32.add $push15=, $1, $17
65; NO-SIMD128-NEXT:    i32.store8 0($0), $pop15
66; NO-SIMD128-NEXT:    return
67;
68; NO-SIMD128-FAST-LABEL: add_v16i8:
69; NO-SIMD128-FAST:         .functype add_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
70; NO-SIMD128-FAST-NEXT:  # %bb.0:
71; NO-SIMD128-FAST-NEXT:    i32.add $push0=, $1, $17
72; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop0
73; NO-SIMD128-FAST-NEXT:    i32.add $push1=, $2, $18
74; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop1
75; NO-SIMD128-FAST-NEXT:    i32.add $push2=, $3, $19
76; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop2
77; NO-SIMD128-FAST-NEXT:    i32.add $push3=, $4, $20
78; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop3
79; NO-SIMD128-FAST-NEXT:    i32.add $push4=, $5, $21
80; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop4
81; NO-SIMD128-FAST-NEXT:    i32.add $push5=, $6, $22
82; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop5
83; NO-SIMD128-FAST-NEXT:    i32.add $push6=, $7, $23
84; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop6
85; NO-SIMD128-FAST-NEXT:    i32.add $push7=, $8, $24
86; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop7
87; NO-SIMD128-FAST-NEXT:    i32.add $push8=, $9, $25
88; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop8
89; NO-SIMD128-FAST-NEXT:    i32.add $push9=, $10, $26
90; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop9
91; NO-SIMD128-FAST-NEXT:    i32.add $push10=, $11, $27
92; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop10
93; NO-SIMD128-FAST-NEXT:    i32.add $push11=, $12, $28
94; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop11
95; NO-SIMD128-FAST-NEXT:    i32.add $push12=, $13, $29
96; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop12
97; NO-SIMD128-FAST-NEXT:    i32.add $push13=, $14, $30
98; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop13
99; NO-SIMD128-FAST-NEXT:    i32.add $push14=, $15, $31
100; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop14
101; NO-SIMD128-FAST-NEXT:    i32.add $push15=, $16, $32
102; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop15
103; NO-SIMD128-FAST-NEXT:    return
104  %a = add <16 x i8> %x, %y
105  ret <16 x i8> %a
106}
107
108define <16 x i8> @sub_v16i8(<16 x i8> %x, <16 x i8> %y) {
109; SIMD128-LABEL: sub_v16i8:
110; SIMD128:         .functype sub_v16i8 (v128, v128) -> (v128)
111; SIMD128-NEXT:  # %bb.0:
112; SIMD128-NEXT:    i8x16.sub $push0=, $0, $1
113; SIMD128-NEXT:    return $pop0
114;
115; SIMD128-FAST-LABEL: sub_v16i8:
116; SIMD128-FAST:         .functype sub_v16i8 (v128, v128) -> (v128)
117; SIMD128-FAST-NEXT:  # %bb.0:
118; SIMD128-FAST-NEXT:    i8x16.sub $push0=, $0, $1
119; SIMD128-FAST-NEXT:    return $pop0
120;
121; NO-SIMD128-LABEL: sub_v16i8:
122; NO-SIMD128:         .functype sub_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
123; NO-SIMD128-NEXT:  # %bb.0:
124; NO-SIMD128-NEXT:    i32.sub $push0=, $16, $32
125; NO-SIMD128-NEXT:    i32.store8 15($0), $pop0
126; NO-SIMD128-NEXT:    i32.sub $push1=, $15, $31
127; NO-SIMD128-NEXT:    i32.store8 14($0), $pop1
128; NO-SIMD128-NEXT:    i32.sub $push2=, $14, $30
129; NO-SIMD128-NEXT:    i32.store8 13($0), $pop2
130; NO-SIMD128-NEXT:    i32.sub $push3=, $13, $29
131; NO-SIMD128-NEXT:    i32.store8 12($0), $pop3
132; NO-SIMD128-NEXT:    i32.sub $push4=, $12, $28
133; NO-SIMD128-NEXT:    i32.store8 11($0), $pop4
134; NO-SIMD128-NEXT:    i32.sub $push5=, $11, $27
135; NO-SIMD128-NEXT:    i32.store8 10($0), $pop5
136; NO-SIMD128-NEXT:    i32.sub $push6=, $10, $26
137; NO-SIMD128-NEXT:    i32.store8 9($0), $pop6
138; NO-SIMD128-NEXT:    i32.sub $push7=, $9, $25
139; NO-SIMD128-NEXT:    i32.store8 8($0), $pop7
140; NO-SIMD128-NEXT:    i32.sub $push8=, $8, $24
141; NO-SIMD128-NEXT:    i32.store8 7($0), $pop8
142; NO-SIMD128-NEXT:    i32.sub $push9=, $7, $23
143; NO-SIMD128-NEXT:    i32.store8 6($0), $pop9
144; NO-SIMD128-NEXT:    i32.sub $push10=, $6, $22
145; NO-SIMD128-NEXT:    i32.store8 5($0), $pop10
146; NO-SIMD128-NEXT:    i32.sub $push11=, $5, $21
147; NO-SIMD128-NEXT:    i32.store8 4($0), $pop11
148; NO-SIMD128-NEXT:    i32.sub $push12=, $4, $20
149; NO-SIMD128-NEXT:    i32.store8 3($0), $pop12
150; NO-SIMD128-NEXT:    i32.sub $push13=, $3, $19
151; NO-SIMD128-NEXT:    i32.store8 2($0), $pop13
152; NO-SIMD128-NEXT:    i32.sub $push14=, $2, $18
153; NO-SIMD128-NEXT:    i32.store8 1($0), $pop14
154; NO-SIMD128-NEXT:    i32.sub $push15=, $1, $17
155; NO-SIMD128-NEXT:    i32.store8 0($0), $pop15
156; NO-SIMD128-NEXT:    return
157;
158; NO-SIMD128-FAST-LABEL: sub_v16i8:
159; NO-SIMD128-FAST:         .functype sub_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
160; NO-SIMD128-FAST-NEXT:  # %bb.0:
161; NO-SIMD128-FAST-NEXT:    i32.sub $push0=, $1, $17
162; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop0
163; NO-SIMD128-FAST-NEXT:    i32.sub $push1=, $2, $18
164; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop1
165; NO-SIMD128-FAST-NEXT:    i32.sub $push2=, $3, $19
166; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop2
167; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $4, $20
168; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop3
169; NO-SIMD128-FAST-NEXT:    i32.sub $push4=, $5, $21
170; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop4
171; NO-SIMD128-FAST-NEXT:    i32.sub $push5=, $6, $22
172; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop5
173; NO-SIMD128-FAST-NEXT:    i32.sub $push6=, $7, $23
174; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop6
175; NO-SIMD128-FAST-NEXT:    i32.sub $push7=, $8, $24
176; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop7
177; NO-SIMD128-FAST-NEXT:    i32.sub $push8=, $9, $25
178; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop8
179; NO-SIMD128-FAST-NEXT:    i32.sub $push9=, $10, $26
180; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop9
181; NO-SIMD128-FAST-NEXT:    i32.sub $push10=, $11, $27
182; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop10
183; NO-SIMD128-FAST-NEXT:    i32.sub $push11=, $12, $28
184; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop11
185; NO-SIMD128-FAST-NEXT:    i32.sub $push12=, $13, $29
186; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop12
187; NO-SIMD128-FAST-NEXT:    i32.sub $push13=, $14, $30
188; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop13
189; NO-SIMD128-FAST-NEXT:    i32.sub $push14=, $15, $31
190; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop14
191; NO-SIMD128-FAST-NEXT:    i32.sub $push15=, $16, $32
192; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop15
193; NO-SIMD128-FAST-NEXT:    return
194  %a = sub <16 x i8> %x, %y
195  ret <16 x i8> %a
196}
197
198define <16 x i8> @mul_v16i8(<16 x i8> %x, <16 x i8> %y) {
199; SIMD128-LABEL: mul_v16i8:
200; SIMD128:         .functype mul_v16i8 (v128, v128) -> (v128)
201; SIMD128-NEXT:  # %bb.0:
202; SIMD128-NEXT:    i8x16.extract_lane_u $push4=, $0, 0
203; SIMD128-NEXT:    i8x16.extract_lane_u $push3=, $1, 0
204; SIMD128-NEXT:    i32.mul $push5=, $pop4, $pop3
205; SIMD128-NEXT:    i8x16.splat $push6=, $pop5
206; SIMD128-NEXT:    i8x16.extract_lane_u $push1=, $0, 1
207; SIMD128-NEXT:    i8x16.extract_lane_u $push0=, $1, 1
208; SIMD128-NEXT:    i32.mul $push2=, $pop1, $pop0
209; SIMD128-NEXT:    i8x16.replace_lane $push7=, $pop6, 1, $pop2
210; SIMD128-NEXT:    i8x16.extract_lane_u $push9=, $0, 2
211; SIMD128-NEXT:    i8x16.extract_lane_u $push8=, $1, 2
212; SIMD128-NEXT:    i32.mul $push10=, $pop9, $pop8
213; SIMD128-NEXT:    i8x16.replace_lane $push11=, $pop7, 2, $pop10
214; SIMD128-NEXT:    i8x16.extract_lane_u $push13=, $0, 3
215; SIMD128-NEXT:    i8x16.extract_lane_u $push12=, $1, 3
216; SIMD128-NEXT:    i32.mul $push14=, $pop13, $pop12
217; SIMD128-NEXT:    i8x16.replace_lane $push15=, $pop11, 3, $pop14
218; SIMD128-NEXT:    i8x16.extract_lane_u $push17=, $0, 4
219; SIMD128-NEXT:    i8x16.extract_lane_u $push16=, $1, 4
220; SIMD128-NEXT:    i32.mul $push18=, $pop17, $pop16
221; SIMD128-NEXT:    i8x16.replace_lane $push19=, $pop15, 4, $pop18
222; SIMD128-NEXT:    i8x16.extract_lane_u $push21=, $0, 5
223; SIMD128-NEXT:    i8x16.extract_lane_u $push20=, $1, 5
224; SIMD128-NEXT:    i32.mul $push22=, $pop21, $pop20
225; SIMD128-NEXT:    i8x16.replace_lane $push23=, $pop19, 5, $pop22
226; SIMD128-NEXT:    i8x16.extract_lane_u $push25=, $0, 6
227; SIMD128-NEXT:    i8x16.extract_lane_u $push24=, $1, 6
228; SIMD128-NEXT:    i32.mul $push26=, $pop25, $pop24
229; SIMD128-NEXT:    i8x16.replace_lane $push27=, $pop23, 6, $pop26
230; SIMD128-NEXT:    i8x16.extract_lane_u $push29=, $0, 7
231; SIMD128-NEXT:    i8x16.extract_lane_u $push28=, $1, 7
232; SIMD128-NEXT:    i32.mul $push30=, $pop29, $pop28
233; SIMD128-NEXT:    i8x16.replace_lane $push31=, $pop27, 7, $pop30
234; SIMD128-NEXT:    i8x16.extract_lane_u $push33=, $0, 8
235; SIMD128-NEXT:    i8x16.extract_lane_u $push32=, $1, 8
236; SIMD128-NEXT:    i32.mul $push34=, $pop33, $pop32
237; SIMD128-NEXT:    i8x16.replace_lane $push35=, $pop31, 8, $pop34
238; SIMD128-NEXT:    i8x16.extract_lane_u $push37=, $0, 9
239; SIMD128-NEXT:    i8x16.extract_lane_u $push36=, $1, 9
240; SIMD128-NEXT:    i32.mul $push38=, $pop37, $pop36
241; SIMD128-NEXT:    i8x16.replace_lane $push39=, $pop35, 9, $pop38
242; SIMD128-NEXT:    i8x16.extract_lane_u $push41=, $0, 10
243; SIMD128-NEXT:    i8x16.extract_lane_u $push40=, $1, 10
244; SIMD128-NEXT:    i32.mul $push42=, $pop41, $pop40
245; SIMD128-NEXT:    i8x16.replace_lane $push43=, $pop39, 10, $pop42
246; SIMD128-NEXT:    i8x16.extract_lane_u $push45=, $0, 11
247; SIMD128-NEXT:    i8x16.extract_lane_u $push44=, $1, 11
248; SIMD128-NEXT:    i32.mul $push46=, $pop45, $pop44
249; SIMD128-NEXT:    i8x16.replace_lane $push47=, $pop43, 11, $pop46
250; SIMD128-NEXT:    i8x16.extract_lane_u $push49=, $0, 12
251; SIMD128-NEXT:    i8x16.extract_lane_u $push48=, $1, 12
252; SIMD128-NEXT:    i32.mul $push50=, $pop49, $pop48
253; SIMD128-NEXT:    i8x16.replace_lane $push51=, $pop47, 12, $pop50
254; SIMD128-NEXT:    i8x16.extract_lane_u $push53=, $0, 13
255; SIMD128-NEXT:    i8x16.extract_lane_u $push52=, $1, 13
256; SIMD128-NEXT:    i32.mul $push54=, $pop53, $pop52
257; SIMD128-NEXT:    i8x16.replace_lane $push55=, $pop51, 13, $pop54
258; SIMD128-NEXT:    i8x16.extract_lane_u $push57=, $0, 14
259; SIMD128-NEXT:    i8x16.extract_lane_u $push56=, $1, 14
260; SIMD128-NEXT:    i32.mul $push58=, $pop57, $pop56
261; SIMD128-NEXT:    i8x16.replace_lane $push59=, $pop55, 14, $pop58
262; SIMD128-NEXT:    i8x16.extract_lane_u $push61=, $0, 15
263; SIMD128-NEXT:    i8x16.extract_lane_u $push60=, $1, 15
264; SIMD128-NEXT:    i32.mul $push62=, $pop61, $pop60
265; SIMD128-NEXT:    i8x16.replace_lane $push63=, $pop59, 15, $pop62
266; SIMD128-NEXT:    return $pop63
267;
268; SIMD128-FAST-LABEL: mul_v16i8:
269; SIMD128-FAST:         .functype mul_v16i8 (v128, v128) -> (v128)
270; SIMD128-FAST-NEXT:  # %bb.0:
271; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push5=, $0, 0
272; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push4=, $1, 0
273; SIMD128-FAST-NEXT:    i32.mul $push6=, $pop5, $pop4
274; SIMD128-FAST-NEXT:    i8x16.splat $push7=, $pop6
275; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push2=, $0, 1
276; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push1=, $1, 1
277; SIMD128-FAST-NEXT:    i32.mul $push3=, $pop2, $pop1
278; SIMD128-FAST-NEXT:    i8x16.replace_lane $push8=, $pop7, 1, $pop3
279; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push10=, $0, 2
280; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push9=, $1, 2
281; SIMD128-FAST-NEXT:    i32.mul $push11=, $pop10, $pop9
282; SIMD128-FAST-NEXT:    i8x16.replace_lane $push12=, $pop8, 2, $pop11
283; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push14=, $0, 3
284; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push13=, $1, 3
285; SIMD128-FAST-NEXT:    i32.mul $push15=, $pop14, $pop13
286; SIMD128-FAST-NEXT:    i8x16.replace_lane $push16=, $pop12, 3, $pop15
287; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push18=, $0, 4
288; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push17=, $1, 4
289; SIMD128-FAST-NEXT:    i32.mul $push19=, $pop18, $pop17
290; SIMD128-FAST-NEXT:    i8x16.replace_lane $push20=, $pop16, 4, $pop19
291; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push22=, $0, 5
292; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push21=, $1, 5
293; SIMD128-FAST-NEXT:    i32.mul $push23=, $pop22, $pop21
294; SIMD128-FAST-NEXT:    i8x16.replace_lane $push24=, $pop20, 5, $pop23
295; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push26=, $0, 6
296; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push25=, $1, 6
297; SIMD128-FAST-NEXT:    i32.mul $push27=, $pop26, $pop25
298; SIMD128-FAST-NEXT:    i8x16.replace_lane $push28=, $pop24, 6, $pop27
299; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push30=, $0, 7
300; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push29=, $1, 7
301; SIMD128-FAST-NEXT:    i32.mul $push31=, $pop30, $pop29
302; SIMD128-FAST-NEXT:    i8x16.replace_lane $push32=, $pop28, 7, $pop31
303; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push34=, $0, 8
304; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push33=, $1, 8
305; SIMD128-FAST-NEXT:    i32.mul $push35=, $pop34, $pop33
306; SIMD128-FAST-NEXT:    i8x16.replace_lane $push36=, $pop32, 8, $pop35
307; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push38=, $0, 9
308; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push37=, $1, 9
309; SIMD128-FAST-NEXT:    i32.mul $push39=, $pop38, $pop37
310; SIMD128-FAST-NEXT:    i8x16.replace_lane $push40=, $pop36, 9, $pop39
311; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push42=, $0, 10
312; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push41=, $1, 10
313; SIMD128-FAST-NEXT:    i32.mul $push43=, $pop42, $pop41
314; SIMD128-FAST-NEXT:    i8x16.replace_lane $push44=, $pop40, 10, $pop43
315; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push46=, $0, 11
316; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push45=, $1, 11
317; SIMD128-FAST-NEXT:    i32.mul $push47=, $pop46, $pop45
318; SIMD128-FAST-NEXT:    i8x16.replace_lane $push48=, $pop44, 11, $pop47
319; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push50=, $0, 12
320; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push49=, $1, 12
321; SIMD128-FAST-NEXT:    i32.mul $push51=, $pop50, $pop49
322; SIMD128-FAST-NEXT:    i8x16.replace_lane $push52=, $pop48, 12, $pop51
323; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push54=, $0, 13
324; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push53=, $1, 13
325; SIMD128-FAST-NEXT:    i32.mul $push55=, $pop54, $pop53
326; SIMD128-FAST-NEXT:    i8x16.replace_lane $push56=, $pop52, 13, $pop55
327; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push58=, $0, 14
328; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push57=, $1, 14
329; SIMD128-FAST-NEXT:    i32.mul $push59=, $pop58, $pop57
330; SIMD128-FAST-NEXT:    i8x16.replace_lane $push60=, $pop56, 14, $pop59
331; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push62=, $0, 15
332; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push61=, $1, 15
333; SIMD128-FAST-NEXT:    i32.mul $push63=, $pop62, $pop61
334; SIMD128-FAST-NEXT:    i8x16.replace_lane $push0=, $pop60, 15, $pop63
335; SIMD128-FAST-NEXT:    return $pop0
336;
337; NO-SIMD128-LABEL: mul_v16i8:
338; NO-SIMD128:         .functype mul_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
339; NO-SIMD128-NEXT:  # %bb.0:
340; NO-SIMD128-NEXT:    i32.mul $push0=, $16, $32
341; NO-SIMD128-NEXT:    i32.store8 15($0), $pop0
342; NO-SIMD128-NEXT:    i32.mul $push1=, $15, $31
343; NO-SIMD128-NEXT:    i32.store8 14($0), $pop1
344; NO-SIMD128-NEXT:    i32.mul $push2=, $14, $30
345; NO-SIMD128-NEXT:    i32.store8 13($0), $pop2
346; NO-SIMD128-NEXT:    i32.mul $push3=, $13, $29
347; NO-SIMD128-NEXT:    i32.store8 12($0), $pop3
348; NO-SIMD128-NEXT:    i32.mul $push4=, $12, $28
349; NO-SIMD128-NEXT:    i32.store8 11($0), $pop4
350; NO-SIMD128-NEXT:    i32.mul $push5=, $11, $27
351; NO-SIMD128-NEXT:    i32.store8 10($0), $pop5
352; NO-SIMD128-NEXT:    i32.mul $push6=, $10, $26
353; NO-SIMD128-NEXT:    i32.store8 9($0), $pop6
354; NO-SIMD128-NEXT:    i32.mul $push7=, $9, $25
355; NO-SIMD128-NEXT:    i32.store8 8($0), $pop7
356; NO-SIMD128-NEXT:    i32.mul $push8=, $8, $24
357; NO-SIMD128-NEXT:    i32.store8 7($0), $pop8
358; NO-SIMD128-NEXT:    i32.mul $push9=, $7, $23
359; NO-SIMD128-NEXT:    i32.store8 6($0), $pop9
360; NO-SIMD128-NEXT:    i32.mul $push10=, $6, $22
361; NO-SIMD128-NEXT:    i32.store8 5($0), $pop10
362; NO-SIMD128-NEXT:    i32.mul $push11=, $5, $21
363; NO-SIMD128-NEXT:    i32.store8 4($0), $pop11
364; NO-SIMD128-NEXT:    i32.mul $push12=, $4, $20
365; NO-SIMD128-NEXT:    i32.store8 3($0), $pop12
366; NO-SIMD128-NEXT:    i32.mul $push13=, $3, $19
367; NO-SIMD128-NEXT:    i32.store8 2($0), $pop13
368; NO-SIMD128-NEXT:    i32.mul $push14=, $2, $18
369; NO-SIMD128-NEXT:    i32.store8 1($0), $pop14
370; NO-SIMD128-NEXT:    i32.mul $push15=, $1, $17
371; NO-SIMD128-NEXT:    i32.store8 0($0), $pop15
372; NO-SIMD128-NEXT:    return
373;
374; NO-SIMD128-FAST-LABEL: mul_v16i8:
375; NO-SIMD128-FAST:         .functype mul_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
376; NO-SIMD128-FAST-NEXT:  # %bb.0:
377; NO-SIMD128-FAST-NEXT:    i32.mul $push0=, $1, $17
378; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop0
379; NO-SIMD128-FAST-NEXT:    i32.mul $push1=, $2, $18
380; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop1
381; NO-SIMD128-FAST-NEXT:    i32.mul $push2=, $3, $19
382; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop2
383; NO-SIMD128-FAST-NEXT:    i32.mul $push3=, $4, $20
384; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop3
385; NO-SIMD128-FAST-NEXT:    i32.mul $push4=, $5, $21
386; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop4
387; NO-SIMD128-FAST-NEXT:    i32.mul $push5=, $6, $22
388; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop5
389; NO-SIMD128-FAST-NEXT:    i32.mul $push6=, $7, $23
390; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop6
391; NO-SIMD128-FAST-NEXT:    i32.mul $push7=, $8, $24
392; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop7
393; NO-SIMD128-FAST-NEXT:    i32.mul $push8=, $9, $25
394; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop8
395; NO-SIMD128-FAST-NEXT:    i32.mul $push9=, $10, $26
396; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop9
397; NO-SIMD128-FAST-NEXT:    i32.mul $push10=, $11, $27
398; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop10
399; NO-SIMD128-FAST-NEXT:    i32.mul $push11=, $12, $28
400; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop11
401; NO-SIMD128-FAST-NEXT:    i32.mul $push12=, $13, $29
402; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop12
403; NO-SIMD128-FAST-NEXT:    i32.mul $push13=, $14, $30
404; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop13
405; NO-SIMD128-FAST-NEXT:    i32.mul $push14=, $15, $31
406; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop14
407; NO-SIMD128-FAST-NEXT:    i32.mul $push15=, $16, $32
408; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop15
409; NO-SIMD128-FAST-NEXT:    return
410  %a = mul <16 x i8> %x, %y
411  ret <16 x i8> %a
412}
413
414define <16 x i8> @min_s_v16i8(<16 x i8> %x, <16 x i8> %y) {
415; SIMD128-LABEL: min_s_v16i8:
416; SIMD128:         .functype min_s_v16i8 (v128, v128) -> (v128)
417; SIMD128-NEXT:  # %bb.0:
418; SIMD128-NEXT:    i8x16.min_s $push0=, $0, $1
419; SIMD128-NEXT:    return $pop0
420;
421; SIMD128-FAST-LABEL: min_s_v16i8:
422; SIMD128-FAST:         .functype min_s_v16i8 (v128, v128) -> (v128)
423; SIMD128-FAST-NEXT:  # %bb.0:
424; SIMD128-FAST-NEXT:    i8x16.min_s $push0=, $0, $1
425; SIMD128-FAST-NEXT:    return $pop0
426;
427; NO-SIMD128-LABEL: min_s_v16i8:
428; NO-SIMD128:         .functype min_s_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
429; NO-SIMD128-NEXT:  # %bb.0:
430; NO-SIMD128-NEXT:    i32.extend8_s $push1=, $16
431; NO-SIMD128-NEXT:    i32.extend8_s $push0=, $32
432; NO-SIMD128-NEXT:    i32.lt_s $push2=, $pop1, $pop0
433; NO-SIMD128-NEXT:    i32.select $push3=, $16, $32, $pop2
434; NO-SIMD128-NEXT:    i32.store8 15($0), $pop3
435; NO-SIMD128-NEXT:    i32.extend8_s $push5=, $15
436; NO-SIMD128-NEXT:    i32.extend8_s $push4=, $31
437; NO-SIMD128-NEXT:    i32.lt_s $push6=, $pop5, $pop4
438; NO-SIMD128-NEXT:    i32.select $push7=, $15, $31, $pop6
439; NO-SIMD128-NEXT:    i32.store8 14($0), $pop7
440; NO-SIMD128-NEXT:    i32.extend8_s $push9=, $14
441; NO-SIMD128-NEXT:    i32.extend8_s $push8=, $30
442; NO-SIMD128-NEXT:    i32.lt_s $push10=, $pop9, $pop8
443; NO-SIMD128-NEXT:    i32.select $push11=, $14, $30, $pop10
444; NO-SIMD128-NEXT:    i32.store8 13($0), $pop11
445; NO-SIMD128-NEXT:    i32.extend8_s $push13=, $13
446; NO-SIMD128-NEXT:    i32.extend8_s $push12=, $29
447; NO-SIMD128-NEXT:    i32.lt_s $push14=, $pop13, $pop12
448; NO-SIMD128-NEXT:    i32.select $push15=, $13, $29, $pop14
449; NO-SIMD128-NEXT:    i32.store8 12($0), $pop15
450; NO-SIMD128-NEXT:    i32.extend8_s $push17=, $12
451; NO-SIMD128-NEXT:    i32.extend8_s $push16=, $28
452; NO-SIMD128-NEXT:    i32.lt_s $push18=, $pop17, $pop16
453; NO-SIMD128-NEXT:    i32.select $push19=, $12, $28, $pop18
454; NO-SIMD128-NEXT:    i32.store8 11($0), $pop19
455; NO-SIMD128-NEXT:    i32.extend8_s $push21=, $11
456; NO-SIMD128-NEXT:    i32.extend8_s $push20=, $27
457; NO-SIMD128-NEXT:    i32.lt_s $push22=, $pop21, $pop20
458; NO-SIMD128-NEXT:    i32.select $push23=, $11, $27, $pop22
459; NO-SIMD128-NEXT:    i32.store8 10($0), $pop23
460; NO-SIMD128-NEXT:    i32.extend8_s $push25=, $10
461; NO-SIMD128-NEXT:    i32.extend8_s $push24=, $26
462; NO-SIMD128-NEXT:    i32.lt_s $push26=, $pop25, $pop24
463; NO-SIMD128-NEXT:    i32.select $push27=, $10, $26, $pop26
464; NO-SIMD128-NEXT:    i32.store8 9($0), $pop27
465; NO-SIMD128-NEXT:    i32.extend8_s $push29=, $9
466; NO-SIMD128-NEXT:    i32.extend8_s $push28=, $25
467; NO-SIMD128-NEXT:    i32.lt_s $push30=, $pop29, $pop28
468; NO-SIMD128-NEXT:    i32.select $push31=, $9, $25, $pop30
469; NO-SIMD128-NEXT:    i32.store8 8($0), $pop31
470; NO-SIMD128-NEXT:    i32.extend8_s $push33=, $8
471; NO-SIMD128-NEXT:    i32.extend8_s $push32=, $24
472; NO-SIMD128-NEXT:    i32.lt_s $push34=, $pop33, $pop32
473; NO-SIMD128-NEXT:    i32.select $push35=, $8, $24, $pop34
474; NO-SIMD128-NEXT:    i32.store8 7($0), $pop35
475; NO-SIMD128-NEXT:    i32.extend8_s $push37=, $7
476; NO-SIMD128-NEXT:    i32.extend8_s $push36=, $23
477; NO-SIMD128-NEXT:    i32.lt_s $push38=, $pop37, $pop36
478; NO-SIMD128-NEXT:    i32.select $push39=, $7, $23, $pop38
479; NO-SIMD128-NEXT:    i32.store8 6($0), $pop39
480; NO-SIMD128-NEXT:    i32.extend8_s $push41=, $6
481; NO-SIMD128-NEXT:    i32.extend8_s $push40=, $22
482; NO-SIMD128-NEXT:    i32.lt_s $push42=, $pop41, $pop40
483; NO-SIMD128-NEXT:    i32.select $push43=, $6, $22, $pop42
484; NO-SIMD128-NEXT:    i32.store8 5($0), $pop43
485; NO-SIMD128-NEXT:    i32.extend8_s $push45=, $5
486; NO-SIMD128-NEXT:    i32.extend8_s $push44=, $21
487; NO-SIMD128-NEXT:    i32.lt_s $push46=, $pop45, $pop44
488; NO-SIMD128-NEXT:    i32.select $push47=, $5, $21, $pop46
489; NO-SIMD128-NEXT:    i32.store8 4($0), $pop47
490; NO-SIMD128-NEXT:    i32.extend8_s $push49=, $4
491; NO-SIMD128-NEXT:    i32.extend8_s $push48=, $20
492; NO-SIMD128-NEXT:    i32.lt_s $push50=, $pop49, $pop48
493; NO-SIMD128-NEXT:    i32.select $push51=, $4, $20, $pop50
494; NO-SIMD128-NEXT:    i32.store8 3($0), $pop51
495; NO-SIMD128-NEXT:    i32.extend8_s $push53=, $3
496; NO-SIMD128-NEXT:    i32.extend8_s $push52=, $19
497; NO-SIMD128-NEXT:    i32.lt_s $push54=, $pop53, $pop52
498; NO-SIMD128-NEXT:    i32.select $push55=, $3, $19, $pop54
499; NO-SIMD128-NEXT:    i32.store8 2($0), $pop55
500; NO-SIMD128-NEXT:    i32.extend8_s $push57=, $2
501; NO-SIMD128-NEXT:    i32.extend8_s $push56=, $18
502; NO-SIMD128-NEXT:    i32.lt_s $push58=, $pop57, $pop56
503; NO-SIMD128-NEXT:    i32.select $push59=, $2, $18, $pop58
504; NO-SIMD128-NEXT:    i32.store8 1($0), $pop59
505; NO-SIMD128-NEXT:    i32.extend8_s $push61=, $1
506; NO-SIMD128-NEXT:    i32.extend8_s $push60=, $17
507; NO-SIMD128-NEXT:    i32.lt_s $push62=, $pop61, $pop60
508; NO-SIMD128-NEXT:    i32.select $push63=, $1, $17, $pop62
509; NO-SIMD128-NEXT:    i32.store8 0($0), $pop63
510; NO-SIMD128-NEXT:    return
511;
512; NO-SIMD128-FAST-LABEL: min_s_v16i8:
513; NO-SIMD128-FAST:         .functype min_s_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
514; NO-SIMD128-FAST-NEXT:  # %bb.0:
515; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push1=, $1
516; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push0=, $17
517; NO-SIMD128-FAST-NEXT:    i32.lt_s $push2=, $pop1, $pop0
518; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $1, $17, $pop2
519; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop3
520; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push5=, $2
521; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push4=, $18
522; NO-SIMD128-FAST-NEXT:    i32.lt_s $push6=, $pop5, $pop4
523; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $2, $18, $pop6
524; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop7
525; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push9=, $3
526; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push8=, $19
527; NO-SIMD128-FAST-NEXT:    i32.lt_s $push10=, $pop9, $pop8
528; NO-SIMD128-FAST-NEXT:    i32.select $push11=, $3, $19, $pop10
529; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop11
530; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push13=, $4
531; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push12=, $20
532; NO-SIMD128-FAST-NEXT:    i32.lt_s $push14=, $pop13, $pop12
533; NO-SIMD128-FAST-NEXT:    i32.select $push15=, $4, $20, $pop14
534; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop15
535; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push17=, $5
536; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push16=, $21
537; NO-SIMD128-FAST-NEXT:    i32.lt_s $push18=, $pop17, $pop16
538; NO-SIMD128-FAST-NEXT:    i32.select $push19=, $5, $21, $pop18
539; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop19
540; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push21=, $6
541; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push20=, $22
542; NO-SIMD128-FAST-NEXT:    i32.lt_s $push22=, $pop21, $pop20
543; NO-SIMD128-FAST-NEXT:    i32.select $push23=, $6, $22, $pop22
544; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop23
545; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push25=, $7
546; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push24=, $23
547; NO-SIMD128-FAST-NEXT:    i32.lt_s $push26=, $pop25, $pop24
548; NO-SIMD128-FAST-NEXT:    i32.select $push27=, $7, $23, $pop26
549; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop27
550; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push29=, $8
551; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push28=, $24
552; NO-SIMD128-FAST-NEXT:    i32.lt_s $push30=, $pop29, $pop28
553; NO-SIMD128-FAST-NEXT:    i32.select $push31=, $8, $24, $pop30
554; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop31
555; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push33=, $9
556; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push32=, $25
557; NO-SIMD128-FAST-NEXT:    i32.lt_s $push34=, $pop33, $pop32
558; NO-SIMD128-FAST-NEXT:    i32.select $push35=, $9, $25, $pop34
559; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop35
560; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push37=, $10
561; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push36=, $26
562; NO-SIMD128-FAST-NEXT:    i32.lt_s $push38=, $pop37, $pop36
563; NO-SIMD128-FAST-NEXT:    i32.select $push39=, $10, $26, $pop38
564; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop39
565; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push41=, $11
566; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push40=, $27
567; NO-SIMD128-FAST-NEXT:    i32.lt_s $push42=, $pop41, $pop40
568; NO-SIMD128-FAST-NEXT:    i32.select $push43=, $11, $27, $pop42
569; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop43
570; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push45=, $12
571; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push44=, $28
572; NO-SIMD128-FAST-NEXT:    i32.lt_s $push46=, $pop45, $pop44
573; NO-SIMD128-FAST-NEXT:    i32.select $push47=, $12, $28, $pop46
574; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop47
575; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push49=, $13
576; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push48=, $29
577; NO-SIMD128-FAST-NEXT:    i32.lt_s $push50=, $pop49, $pop48
578; NO-SIMD128-FAST-NEXT:    i32.select $push51=, $13, $29, $pop50
579; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop51
580; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push53=, $14
581; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push52=, $30
582; NO-SIMD128-FAST-NEXT:    i32.lt_s $push54=, $pop53, $pop52
583; NO-SIMD128-FAST-NEXT:    i32.select $push55=, $14, $30, $pop54
584; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop55
585; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push57=, $15
586; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push56=, $31
587; NO-SIMD128-FAST-NEXT:    i32.lt_s $push58=, $pop57, $pop56
588; NO-SIMD128-FAST-NEXT:    i32.select $push59=, $15, $31, $pop58
589; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop59
590; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push61=, $16
591; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push60=, $32
592; NO-SIMD128-FAST-NEXT:    i32.lt_s $push62=, $pop61, $pop60
593; NO-SIMD128-FAST-NEXT:    i32.select $push63=, $16, $32, $pop62
594; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop63
595; NO-SIMD128-FAST-NEXT:    return
596  %c = icmp slt <16 x i8> %x, %y
597  %a = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
598  ret <16 x i8> %a
599}
600
601define <16 x i8> @min_u_v16i8(<16 x i8> %x, <16 x i8> %y) {
602; SIMD128-LABEL: min_u_v16i8:
603; SIMD128:         .functype min_u_v16i8 (v128, v128) -> (v128)
604; SIMD128-NEXT:  # %bb.0:
605; SIMD128-NEXT:    i8x16.min_u $push0=, $0, $1
606; SIMD128-NEXT:    return $pop0
607;
608; SIMD128-FAST-LABEL: min_u_v16i8:
609; SIMD128-FAST:         .functype min_u_v16i8 (v128, v128) -> (v128)
610; SIMD128-FAST-NEXT:  # %bb.0:
611; SIMD128-FAST-NEXT:    i8x16.min_u $push0=, $0, $1
612; SIMD128-FAST-NEXT:    return $pop0
613;
614; NO-SIMD128-LABEL: min_u_v16i8:
615; NO-SIMD128:         .functype min_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
616; NO-SIMD128-NEXT:  # %bb.0:
617; NO-SIMD128-NEXT:    i32.const $push0=, 255
618; NO-SIMD128-NEXT:    i32.and $push2=, $16, $pop0
619; NO-SIMD128-NEXT:    i32.const $push95=, 255
620; NO-SIMD128-NEXT:    i32.and $push1=, $32, $pop95
621; NO-SIMD128-NEXT:    i32.lt_u $push3=, $pop2, $pop1
622; NO-SIMD128-NEXT:    i32.select $push4=, $16, $32, $pop3
623; NO-SIMD128-NEXT:    i32.store8 15($0), $pop4
624; NO-SIMD128-NEXT:    i32.const $push94=, 255
625; NO-SIMD128-NEXT:    i32.and $push6=, $15, $pop94
626; NO-SIMD128-NEXT:    i32.const $push93=, 255
627; NO-SIMD128-NEXT:    i32.and $push5=, $31, $pop93
628; NO-SIMD128-NEXT:    i32.lt_u $push7=, $pop6, $pop5
629; NO-SIMD128-NEXT:    i32.select $push8=, $15, $31, $pop7
630; NO-SIMD128-NEXT:    i32.store8 14($0), $pop8
631; NO-SIMD128-NEXT:    i32.const $push92=, 255
632; NO-SIMD128-NEXT:    i32.and $push10=, $14, $pop92
633; NO-SIMD128-NEXT:    i32.const $push91=, 255
634; NO-SIMD128-NEXT:    i32.and $push9=, $30, $pop91
635; NO-SIMD128-NEXT:    i32.lt_u $push11=, $pop10, $pop9
636; NO-SIMD128-NEXT:    i32.select $push12=, $14, $30, $pop11
637; NO-SIMD128-NEXT:    i32.store8 13($0), $pop12
638; NO-SIMD128-NEXT:    i32.const $push90=, 255
639; NO-SIMD128-NEXT:    i32.and $push14=, $13, $pop90
640; NO-SIMD128-NEXT:    i32.const $push89=, 255
641; NO-SIMD128-NEXT:    i32.and $push13=, $29, $pop89
642; NO-SIMD128-NEXT:    i32.lt_u $push15=, $pop14, $pop13
643; NO-SIMD128-NEXT:    i32.select $push16=, $13, $29, $pop15
644; NO-SIMD128-NEXT:    i32.store8 12($0), $pop16
645; NO-SIMD128-NEXT:    i32.const $push88=, 255
646; NO-SIMD128-NEXT:    i32.and $push18=, $12, $pop88
647; NO-SIMD128-NEXT:    i32.const $push87=, 255
648; NO-SIMD128-NEXT:    i32.and $push17=, $28, $pop87
649; NO-SIMD128-NEXT:    i32.lt_u $push19=, $pop18, $pop17
650; NO-SIMD128-NEXT:    i32.select $push20=, $12, $28, $pop19
651; NO-SIMD128-NEXT:    i32.store8 11($0), $pop20
652; NO-SIMD128-NEXT:    i32.const $push86=, 255
653; NO-SIMD128-NEXT:    i32.and $push22=, $11, $pop86
654; NO-SIMD128-NEXT:    i32.const $push85=, 255
655; NO-SIMD128-NEXT:    i32.and $push21=, $27, $pop85
656; NO-SIMD128-NEXT:    i32.lt_u $push23=, $pop22, $pop21
657; NO-SIMD128-NEXT:    i32.select $push24=, $11, $27, $pop23
658; NO-SIMD128-NEXT:    i32.store8 10($0), $pop24
659; NO-SIMD128-NEXT:    i32.const $push84=, 255
660; NO-SIMD128-NEXT:    i32.and $push26=, $10, $pop84
661; NO-SIMD128-NEXT:    i32.const $push83=, 255
662; NO-SIMD128-NEXT:    i32.and $push25=, $26, $pop83
663; NO-SIMD128-NEXT:    i32.lt_u $push27=, $pop26, $pop25
664; NO-SIMD128-NEXT:    i32.select $push28=, $10, $26, $pop27
665; NO-SIMD128-NEXT:    i32.store8 9($0), $pop28
666; NO-SIMD128-NEXT:    i32.const $push82=, 255
667; NO-SIMD128-NEXT:    i32.and $push30=, $9, $pop82
668; NO-SIMD128-NEXT:    i32.const $push81=, 255
669; NO-SIMD128-NEXT:    i32.and $push29=, $25, $pop81
670; NO-SIMD128-NEXT:    i32.lt_u $push31=, $pop30, $pop29
671; NO-SIMD128-NEXT:    i32.select $push32=, $9, $25, $pop31
672; NO-SIMD128-NEXT:    i32.store8 8($0), $pop32
673; NO-SIMD128-NEXT:    i32.const $push80=, 255
674; NO-SIMD128-NEXT:    i32.and $push34=, $8, $pop80
675; NO-SIMD128-NEXT:    i32.const $push79=, 255
676; NO-SIMD128-NEXT:    i32.and $push33=, $24, $pop79
677; NO-SIMD128-NEXT:    i32.lt_u $push35=, $pop34, $pop33
678; NO-SIMD128-NEXT:    i32.select $push36=, $8, $24, $pop35
679; NO-SIMD128-NEXT:    i32.store8 7($0), $pop36
680; NO-SIMD128-NEXT:    i32.const $push78=, 255
681; NO-SIMD128-NEXT:    i32.and $push38=, $7, $pop78
682; NO-SIMD128-NEXT:    i32.const $push77=, 255
683; NO-SIMD128-NEXT:    i32.and $push37=, $23, $pop77
684; NO-SIMD128-NEXT:    i32.lt_u $push39=, $pop38, $pop37
685; NO-SIMD128-NEXT:    i32.select $push40=, $7, $23, $pop39
686; NO-SIMD128-NEXT:    i32.store8 6($0), $pop40
687; NO-SIMD128-NEXT:    i32.const $push76=, 255
688; NO-SIMD128-NEXT:    i32.and $push42=, $6, $pop76
689; NO-SIMD128-NEXT:    i32.const $push75=, 255
690; NO-SIMD128-NEXT:    i32.and $push41=, $22, $pop75
691; NO-SIMD128-NEXT:    i32.lt_u $push43=, $pop42, $pop41
692; NO-SIMD128-NEXT:    i32.select $push44=, $6, $22, $pop43
693; NO-SIMD128-NEXT:    i32.store8 5($0), $pop44
694; NO-SIMD128-NEXT:    i32.const $push74=, 255
695; NO-SIMD128-NEXT:    i32.and $push46=, $5, $pop74
696; NO-SIMD128-NEXT:    i32.const $push73=, 255
697; NO-SIMD128-NEXT:    i32.and $push45=, $21, $pop73
698; NO-SIMD128-NEXT:    i32.lt_u $push47=, $pop46, $pop45
699; NO-SIMD128-NEXT:    i32.select $push48=, $5, $21, $pop47
700; NO-SIMD128-NEXT:    i32.store8 4($0), $pop48
701; NO-SIMD128-NEXT:    i32.const $push72=, 255
702; NO-SIMD128-NEXT:    i32.and $push50=, $4, $pop72
703; NO-SIMD128-NEXT:    i32.const $push71=, 255
704; NO-SIMD128-NEXT:    i32.and $push49=, $20, $pop71
705; NO-SIMD128-NEXT:    i32.lt_u $push51=, $pop50, $pop49
706; NO-SIMD128-NEXT:    i32.select $push52=, $4, $20, $pop51
707; NO-SIMD128-NEXT:    i32.store8 3($0), $pop52
708; NO-SIMD128-NEXT:    i32.const $push70=, 255
709; NO-SIMD128-NEXT:    i32.and $push54=, $3, $pop70
710; NO-SIMD128-NEXT:    i32.const $push69=, 255
711; NO-SIMD128-NEXT:    i32.and $push53=, $19, $pop69
712; NO-SIMD128-NEXT:    i32.lt_u $push55=, $pop54, $pop53
713; NO-SIMD128-NEXT:    i32.select $push56=, $3, $19, $pop55
714; NO-SIMD128-NEXT:    i32.store8 2($0), $pop56
715; NO-SIMD128-NEXT:    i32.const $push68=, 255
716; NO-SIMD128-NEXT:    i32.and $push58=, $2, $pop68
717; NO-SIMD128-NEXT:    i32.const $push67=, 255
718; NO-SIMD128-NEXT:    i32.and $push57=, $18, $pop67
719; NO-SIMD128-NEXT:    i32.lt_u $push59=, $pop58, $pop57
720; NO-SIMD128-NEXT:    i32.select $push60=, $2, $18, $pop59
721; NO-SIMD128-NEXT:    i32.store8 1($0), $pop60
722; NO-SIMD128-NEXT:    i32.const $push66=, 255
723; NO-SIMD128-NEXT:    i32.and $push62=, $1, $pop66
724; NO-SIMD128-NEXT:    i32.const $push65=, 255
725; NO-SIMD128-NEXT:    i32.and $push61=, $17, $pop65
726; NO-SIMD128-NEXT:    i32.lt_u $push63=, $pop62, $pop61
727; NO-SIMD128-NEXT:    i32.select $push64=, $1, $17, $pop63
728; NO-SIMD128-NEXT:    i32.store8 0($0), $pop64
729; NO-SIMD128-NEXT:    return
730;
731; NO-SIMD128-FAST-LABEL: min_u_v16i8:
732; NO-SIMD128-FAST:         .functype min_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
733; NO-SIMD128-FAST-NEXT:  # %bb.0:
734; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
735; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
736; NO-SIMD128-FAST-NEXT:    i32.const $push95=, 255
737; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $17, $pop95
738; NO-SIMD128-FAST-NEXT:    i32.lt_u $push3=, $pop2, $pop1
739; NO-SIMD128-FAST-NEXT:    i32.select $push4=, $1, $17, $pop3
740; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop4
741; NO-SIMD128-FAST-NEXT:    i32.const $push94=, 255
742; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $2, $pop94
743; NO-SIMD128-FAST-NEXT:    i32.const $push93=, 255
744; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $18, $pop93
745; NO-SIMD128-FAST-NEXT:    i32.lt_u $push7=, $pop6, $pop5
746; NO-SIMD128-FAST-NEXT:    i32.select $push8=, $2, $18, $pop7
747; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop8
748; NO-SIMD128-FAST-NEXT:    i32.const $push92=, 255
749; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $3, $pop92
750; NO-SIMD128-FAST-NEXT:    i32.const $push91=, 255
751; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $19, $pop91
752; NO-SIMD128-FAST-NEXT:    i32.lt_u $push11=, $pop10, $pop9
753; NO-SIMD128-FAST-NEXT:    i32.select $push12=, $3, $19, $pop11
754; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop12
755; NO-SIMD128-FAST-NEXT:    i32.const $push90=, 255
756; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $4, $pop90
757; NO-SIMD128-FAST-NEXT:    i32.const $push89=, 255
758; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $20, $pop89
759; NO-SIMD128-FAST-NEXT:    i32.lt_u $push15=, $pop14, $pop13
760; NO-SIMD128-FAST-NEXT:    i32.select $push16=, $4, $20, $pop15
761; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop16
762; NO-SIMD128-FAST-NEXT:    i32.const $push88=, 255
763; NO-SIMD128-FAST-NEXT:    i32.and $push18=, $5, $pop88
764; NO-SIMD128-FAST-NEXT:    i32.const $push87=, 255
765; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $21, $pop87
766; NO-SIMD128-FAST-NEXT:    i32.lt_u $push19=, $pop18, $pop17
767; NO-SIMD128-FAST-NEXT:    i32.select $push20=, $5, $21, $pop19
768; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop20
769; NO-SIMD128-FAST-NEXT:    i32.const $push86=, 255
770; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $6, $pop86
771; NO-SIMD128-FAST-NEXT:    i32.const $push85=, 255
772; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $22, $pop85
773; NO-SIMD128-FAST-NEXT:    i32.lt_u $push23=, $pop22, $pop21
774; NO-SIMD128-FAST-NEXT:    i32.select $push24=, $6, $22, $pop23
775; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop24
776; NO-SIMD128-FAST-NEXT:    i32.const $push84=, 255
777; NO-SIMD128-FAST-NEXT:    i32.and $push26=, $7, $pop84
778; NO-SIMD128-FAST-NEXT:    i32.const $push83=, 255
779; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $23, $pop83
780; NO-SIMD128-FAST-NEXT:    i32.lt_u $push27=, $pop26, $pop25
781; NO-SIMD128-FAST-NEXT:    i32.select $push28=, $7, $23, $pop27
782; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop28
783; NO-SIMD128-FAST-NEXT:    i32.const $push82=, 255
784; NO-SIMD128-FAST-NEXT:    i32.and $push30=, $8, $pop82
785; NO-SIMD128-FAST-NEXT:    i32.const $push81=, 255
786; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $24, $pop81
787; NO-SIMD128-FAST-NEXT:    i32.lt_u $push31=, $pop30, $pop29
788; NO-SIMD128-FAST-NEXT:    i32.select $push32=, $8, $24, $pop31
789; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop32
790; NO-SIMD128-FAST-NEXT:    i32.const $push80=, 255
791; NO-SIMD128-FAST-NEXT:    i32.and $push34=, $9, $pop80
792; NO-SIMD128-FAST-NEXT:    i32.const $push79=, 255
793; NO-SIMD128-FAST-NEXT:    i32.and $push33=, $25, $pop79
794; NO-SIMD128-FAST-NEXT:    i32.lt_u $push35=, $pop34, $pop33
795; NO-SIMD128-FAST-NEXT:    i32.select $push36=, $9, $25, $pop35
796; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop36
797; NO-SIMD128-FAST-NEXT:    i32.const $push78=, 255
798; NO-SIMD128-FAST-NEXT:    i32.and $push38=, $10, $pop78
799; NO-SIMD128-FAST-NEXT:    i32.const $push77=, 255
800; NO-SIMD128-FAST-NEXT:    i32.and $push37=, $26, $pop77
801; NO-SIMD128-FAST-NEXT:    i32.lt_u $push39=, $pop38, $pop37
802; NO-SIMD128-FAST-NEXT:    i32.select $push40=, $10, $26, $pop39
803; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop40
804; NO-SIMD128-FAST-NEXT:    i32.const $push76=, 255
805; NO-SIMD128-FAST-NEXT:    i32.and $push42=, $11, $pop76
806; NO-SIMD128-FAST-NEXT:    i32.const $push75=, 255
807; NO-SIMD128-FAST-NEXT:    i32.and $push41=, $27, $pop75
808; NO-SIMD128-FAST-NEXT:    i32.lt_u $push43=, $pop42, $pop41
809; NO-SIMD128-FAST-NEXT:    i32.select $push44=, $11, $27, $pop43
810; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop44
811; NO-SIMD128-FAST-NEXT:    i32.const $push74=, 255
812; NO-SIMD128-FAST-NEXT:    i32.and $push46=, $12, $pop74
813; NO-SIMD128-FAST-NEXT:    i32.const $push73=, 255
814; NO-SIMD128-FAST-NEXT:    i32.and $push45=, $28, $pop73
815; NO-SIMD128-FAST-NEXT:    i32.lt_u $push47=, $pop46, $pop45
816; NO-SIMD128-FAST-NEXT:    i32.select $push48=, $12, $28, $pop47
817; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop48
818; NO-SIMD128-FAST-NEXT:    i32.const $push72=, 255
819; NO-SIMD128-FAST-NEXT:    i32.and $push50=, $13, $pop72
820; NO-SIMD128-FAST-NEXT:    i32.const $push71=, 255
821; NO-SIMD128-FAST-NEXT:    i32.and $push49=, $29, $pop71
822; NO-SIMD128-FAST-NEXT:    i32.lt_u $push51=, $pop50, $pop49
823; NO-SIMD128-FAST-NEXT:    i32.select $push52=, $13, $29, $pop51
824; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop52
825; NO-SIMD128-FAST-NEXT:    i32.const $push70=, 255
826; NO-SIMD128-FAST-NEXT:    i32.and $push54=, $14, $pop70
827; NO-SIMD128-FAST-NEXT:    i32.const $push69=, 255
828; NO-SIMD128-FAST-NEXT:    i32.and $push53=, $30, $pop69
829; NO-SIMD128-FAST-NEXT:    i32.lt_u $push55=, $pop54, $pop53
830; NO-SIMD128-FAST-NEXT:    i32.select $push56=, $14, $30, $pop55
831; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop56
832; NO-SIMD128-FAST-NEXT:    i32.const $push68=, 255
833; NO-SIMD128-FAST-NEXT:    i32.and $push58=, $15, $pop68
834; NO-SIMD128-FAST-NEXT:    i32.const $push67=, 255
835; NO-SIMD128-FAST-NEXT:    i32.and $push57=, $31, $pop67
836; NO-SIMD128-FAST-NEXT:    i32.lt_u $push59=, $pop58, $pop57
837; NO-SIMD128-FAST-NEXT:    i32.select $push60=, $15, $31, $pop59
838; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop60
839; NO-SIMD128-FAST-NEXT:    i32.const $push66=, 255
840; NO-SIMD128-FAST-NEXT:    i32.and $push62=, $16, $pop66
841; NO-SIMD128-FAST-NEXT:    i32.const $push65=, 255
842; NO-SIMD128-FAST-NEXT:    i32.and $push61=, $32, $pop65
843; NO-SIMD128-FAST-NEXT:    i32.lt_u $push63=, $pop62, $pop61
844; NO-SIMD128-FAST-NEXT:    i32.select $push64=, $16, $32, $pop63
845; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop64
846; NO-SIMD128-FAST-NEXT:    return
847  %c = icmp ult <16 x i8> %x, %y
848  %a = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
849  ret <16 x i8> %a
850}
851
852define <16 x i8> @max_s_v16i8(<16 x i8> %x, <16 x i8> %y) {
853; SIMD128-LABEL: max_s_v16i8:
854; SIMD128:         .functype max_s_v16i8 (v128, v128) -> (v128)
855; SIMD128-NEXT:  # %bb.0:
856; SIMD128-NEXT:    i8x16.max_s $push0=, $0, $1
857; SIMD128-NEXT:    return $pop0
858;
859; SIMD128-FAST-LABEL: max_s_v16i8:
860; SIMD128-FAST:         .functype max_s_v16i8 (v128, v128) -> (v128)
861; SIMD128-FAST-NEXT:  # %bb.0:
862; SIMD128-FAST-NEXT:    i8x16.max_s $push0=, $0, $1
863; SIMD128-FAST-NEXT:    return $pop0
864;
865; NO-SIMD128-LABEL: max_s_v16i8:
866; NO-SIMD128:         .functype max_s_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
867; NO-SIMD128-NEXT:  # %bb.0:
868; NO-SIMD128-NEXT:    i32.extend8_s $push1=, $16
869; NO-SIMD128-NEXT:    i32.extend8_s $push0=, $32
870; NO-SIMD128-NEXT:    i32.gt_s $push2=, $pop1, $pop0
871; NO-SIMD128-NEXT:    i32.select $push3=, $16, $32, $pop2
872; NO-SIMD128-NEXT:    i32.store8 15($0), $pop3
873; NO-SIMD128-NEXT:    i32.extend8_s $push5=, $15
874; NO-SIMD128-NEXT:    i32.extend8_s $push4=, $31
875; NO-SIMD128-NEXT:    i32.gt_s $push6=, $pop5, $pop4
876; NO-SIMD128-NEXT:    i32.select $push7=, $15, $31, $pop6
877; NO-SIMD128-NEXT:    i32.store8 14($0), $pop7
878; NO-SIMD128-NEXT:    i32.extend8_s $push9=, $14
879; NO-SIMD128-NEXT:    i32.extend8_s $push8=, $30
880; NO-SIMD128-NEXT:    i32.gt_s $push10=, $pop9, $pop8
881; NO-SIMD128-NEXT:    i32.select $push11=, $14, $30, $pop10
882; NO-SIMD128-NEXT:    i32.store8 13($0), $pop11
883; NO-SIMD128-NEXT:    i32.extend8_s $push13=, $13
884; NO-SIMD128-NEXT:    i32.extend8_s $push12=, $29
885; NO-SIMD128-NEXT:    i32.gt_s $push14=, $pop13, $pop12
886; NO-SIMD128-NEXT:    i32.select $push15=, $13, $29, $pop14
887; NO-SIMD128-NEXT:    i32.store8 12($0), $pop15
888; NO-SIMD128-NEXT:    i32.extend8_s $push17=, $12
889; NO-SIMD128-NEXT:    i32.extend8_s $push16=, $28
890; NO-SIMD128-NEXT:    i32.gt_s $push18=, $pop17, $pop16
891; NO-SIMD128-NEXT:    i32.select $push19=, $12, $28, $pop18
892; NO-SIMD128-NEXT:    i32.store8 11($0), $pop19
893; NO-SIMD128-NEXT:    i32.extend8_s $push21=, $11
894; NO-SIMD128-NEXT:    i32.extend8_s $push20=, $27
895; NO-SIMD128-NEXT:    i32.gt_s $push22=, $pop21, $pop20
896; NO-SIMD128-NEXT:    i32.select $push23=, $11, $27, $pop22
897; NO-SIMD128-NEXT:    i32.store8 10($0), $pop23
898; NO-SIMD128-NEXT:    i32.extend8_s $push25=, $10
899; NO-SIMD128-NEXT:    i32.extend8_s $push24=, $26
900; NO-SIMD128-NEXT:    i32.gt_s $push26=, $pop25, $pop24
901; NO-SIMD128-NEXT:    i32.select $push27=, $10, $26, $pop26
902; NO-SIMD128-NEXT:    i32.store8 9($0), $pop27
903; NO-SIMD128-NEXT:    i32.extend8_s $push29=, $9
904; NO-SIMD128-NEXT:    i32.extend8_s $push28=, $25
905; NO-SIMD128-NEXT:    i32.gt_s $push30=, $pop29, $pop28
906; NO-SIMD128-NEXT:    i32.select $push31=, $9, $25, $pop30
907; NO-SIMD128-NEXT:    i32.store8 8($0), $pop31
908; NO-SIMD128-NEXT:    i32.extend8_s $push33=, $8
909; NO-SIMD128-NEXT:    i32.extend8_s $push32=, $24
910; NO-SIMD128-NEXT:    i32.gt_s $push34=, $pop33, $pop32
911; NO-SIMD128-NEXT:    i32.select $push35=, $8, $24, $pop34
912; NO-SIMD128-NEXT:    i32.store8 7($0), $pop35
913; NO-SIMD128-NEXT:    i32.extend8_s $push37=, $7
914; NO-SIMD128-NEXT:    i32.extend8_s $push36=, $23
915; NO-SIMD128-NEXT:    i32.gt_s $push38=, $pop37, $pop36
916; NO-SIMD128-NEXT:    i32.select $push39=, $7, $23, $pop38
917; NO-SIMD128-NEXT:    i32.store8 6($0), $pop39
918; NO-SIMD128-NEXT:    i32.extend8_s $push41=, $6
919; NO-SIMD128-NEXT:    i32.extend8_s $push40=, $22
920; NO-SIMD128-NEXT:    i32.gt_s $push42=, $pop41, $pop40
921; NO-SIMD128-NEXT:    i32.select $push43=, $6, $22, $pop42
922; NO-SIMD128-NEXT:    i32.store8 5($0), $pop43
923; NO-SIMD128-NEXT:    i32.extend8_s $push45=, $5
924; NO-SIMD128-NEXT:    i32.extend8_s $push44=, $21
925; NO-SIMD128-NEXT:    i32.gt_s $push46=, $pop45, $pop44
926; NO-SIMD128-NEXT:    i32.select $push47=, $5, $21, $pop46
927; NO-SIMD128-NEXT:    i32.store8 4($0), $pop47
928; NO-SIMD128-NEXT:    i32.extend8_s $push49=, $4
929; NO-SIMD128-NEXT:    i32.extend8_s $push48=, $20
930; NO-SIMD128-NEXT:    i32.gt_s $push50=, $pop49, $pop48
931; NO-SIMD128-NEXT:    i32.select $push51=, $4, $20, $pop50
932; NO-SIMD128-NEXT:    i32.store8 3($0), $pop51
933; NO-SIMD128-NEXT:    i32.extend8_s $push53=, $3
934; NO-SIMD128-NEXT:    i32.extend8_s $push52=, $19
935; NO-SIMD128-NEXT:    i32.gt_s $push54=, $pop53, $pop52
936; NO-SIMD128-NEXT:    i32.select $push55=, $3, $19, $pop54
937; NO-SIMD128-NEXT:    i32.store8 2($0), $pop55
938; NO-SIMD128-NEXT:    i32.extend8_s $push57=, $2
939; NO-SIMD128-NEXT:    i32.extend8_s $push56=, $18
940; NO-SIMD128-NEXT:    i32.gt_s $push58=, $pop57, $pop56
941; NO-SIMD128-NEXT:    i32.select $push59=, $2, $18, $pop58
942; NO-SIMD128-NEXT:    i32.store8 1($0), $pop59
943; NO-SIMD128-NEXT:    i32.extend8_s $push61=, $1
944; NO-SIMD128-NEXT:    i32.extend8_s $push60=, $17
945; NO-SIMD128-NEXT:    i32.gt_s $push62=, $pop61, $pop60
946; NO-SIMD128-NEXT:    i32.select $push63=, $1, $17, $pop62
947; NO-SIMD128-NEXT:    i32.store8 0($0), $pop63
948; NO-SIMD128-NEXT:    return
949;
950; NO-SIMD128-FAST-LABEL: max_s_v16i8:
951; NO-SIMD128-FAST:         .functype max_s_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
952; NO-SIMD128-FAST-NEXT:  # %bb.0:
953; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push1=, $1
954; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push0=, $17
955; NO-SIMD128-FAST-NEXT:    i32.gt_s $push2=, $pop1, $pop0
956; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $1, $17, $pop2
957; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop3
958; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push5=, $2
959; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push4=, $18
960; NO-SIMD128-FAST-NEXT:    i32.gt_s $push6=, $pop5, $pop4
961; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $2, $18, $pop6
962; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop7
963; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push9=, $3
964; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push8=, $19
965; NO-SIMD128-FAST-NEXT:    i32.gt_s $push10=, $pop9, $pop8
966; NO-SIMD128-FAST-NEXT:    i32.select $push11=, $3, $19, $pop10
967; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop11
968; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push13=, $4
969; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push12=, $20
970; NO-SIMD128-FAST-NEXT:    i32.gt_s $push14=, $pop13, $pop12
971; NO-SIMD128-FAST-NEXT:    i32.select $push15=, $4, $20, $pop14
972; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop15
973; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push17=, $5
974; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push16=, $21
975; NO-SIMD128-FAST-NEXT:    i32.gt_s $push18=, $pop17, $pop16
976; NO-SIMD128-FAST-NEXT:    i32.select $push19=, $5, $21, $pop18
977; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop19
978; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push21=, $6
979; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push20=, $22
980; NO-SIMD128-FAST-NEXT:    i32.gt_s $push22=, $pop21, $pop20
981; NO-SIMD128-FAST-NEXT:    i32.select $push23=, $6, $22, $pop22
982; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop23
983; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push25=, $7
984; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push24=, $23
985; NO-SIMD128-FAST-NEXT:    i32.gt_s $push26=, $pop25, $pop24
986; NO-SIMD128-FAST-NEXT:    i32.select $push27=, $7, $23, $pop26
987; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop27
988; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push29=, $8
989; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push28=, $24
990; NO-SIMD128-FAST-NEXT:    i32.gt_s $push30=, $pop29, $pop28
991; NO-SIMD128-FAST-NEXT:    i32.select $push31=, $8, $24, $pop30
992; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop31
993; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push33=, $9
994; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push32=, $25
995; NO-SIMD128-FAST-NEXT:    i32.gt_s $push34=, $pop33, $pop32
996; NO-SIMD128-FAST-NEXT:    i32.select $push35=, $9, $25, $pop34
997; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop35
998; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push37=, $10
999; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push36=, $26
1000; NO-SIMD128-FAST-NEXT:    i32.gt_s $push38=, $pop37, $pop36
1001; NO-SIMD128-FAST-NEXT:    i32.select $push39=, $10, $26, $pop38
1002; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop39
1003; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push41=, $11
1004; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push40=, $27
1005; NO-SIMD128-FAST-NEXT:    i32.gt_s $push42=, $pop41, $pop40
1006; NO-SIMD128-FAST-NEXT:    i32.select $push43=, $11, $27, $pop42
1007; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop43
1008; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push45=, $12
1009; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push44=, $28
1010; NO-SIMD128-FAST-NEXT:    i32.gt_s $push46=, $pop45, $pop44
1011; NO-SIMD128-FAST-NEXT:    i32.select $push47=, $12, $28, $pop46
1012; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop47
1013; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push49=, $13
1014; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push48=, $29
1015; NO-SIMD128-FAST-NEXT:    i32.gt_s $push50=, $pop49, $pop48
1016; NO-SIMD128-FAST-NEXT:    i32.select $push51=, $13, $29, $pop50
1017; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop51
1018; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push53=, $14
1019; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push52=, $30
1020; NO-SIMD128-FAST-NEXT:    i32.gt_s $push54=, $pop53, $pop52
1021; NO-SIMD128-FAST-NEXT:    i32.select $push55=, $14, $30, $pop54
1022; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop55
1023; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push57=, $15
1024; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push56=, $31
1025; NO-SIMD128-FAST-NEXT:    i32.gt_s $push58=, $pop57, $pop56
1026; NO-SIMD128-FAST-NEXT:    i32.select $push59=, $15, $31, $pop58
1027; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop59
1028; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push61=, $16
1029; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push60=, $32
1030; NO-SIMD128-FAST-NEXT:    i32.gt_s $push62=, $pop61, $pop60
1031; NO-SIMD128-FAST-NEXT:    i32.select $push63=, $16, $32, $pop62
1032; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop63
1033; NO-SIMD128-FAST-NEXT:    return
1034  %c = icmp sgt <16 x i8> %x, %y
1035  %a = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
1036  ret <16 x i8> %a
1037}
1038
1039define <16 x i8> @max_u_v16i8(<16 x i8> %x, <16 x i8> %y) {
1040; SIMD128-LABEL: max_u_v16i8:
1041; SIMD128:         .functype max_u_v16i8 (v128, v128) -> (v128)
1042; SIMD128-NEXT:  # %bb.0:
1043; SIMD128-NEXT:    i8x16.max_u $push0=, $0, $1
1044; SIMD128-NEXT:    return $pop0
1045;
1046; SIMD128-FAST-LABEL: max_u_v16i8:
1047; SIMD128-FAST:         .functype max_u_v16i8 (v128, v128) -> (v128)
1048; SIMD128-FAST-NEXT:  # %bb.0:
1049; SIMD128-FAST-NEXT:    i8x16.max_u $push0=, $0, $1
1050; SIMD128-FAST-NEXT:    return $pop0
1051;
1052; NO-SIMD128-LABEL: max_u_v16i8:
1053; NO-SIMD128:         .functype max_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
1054; NO-SIMD128-NEXT:  # %bb.0:
1055; NO-SIMD128-NEXT:    i32.const $push0=, 255
1056; NO-SIMD128-NEXT:    i32.and $push2=, $16, $pop0
1057; NO-SIMD128-NEXT:    i32.const $push95=, 255
1058; NO-SIMD128-NEXT:    i32.and $push1=, $32, $pop95
1059; NO-SIMD128-NEXT:    i32.gt_u $push3=, $pop2, $pop1
1060; NO-SIMD128-NEXT:    i32.select $push4=, $16, $32, $pop3
1061; NO-SIMD128-NEXT:    i32.store8 15($0), $pop4
1062; NO-SIMD128-NEXT:    i32.const $push94=, 255
1063; NO-SIMD128-NEXT:    i32.and $push6=, $15, $pop94
1064; NO-SIMD128-NEXT:    i32.const $push93=, 255
1065; NO-SIMD128-NEXT:    i32.and $push5=, $31, $pop93
1066; NO-SIMD128-NEXT:    i32.gt_u $push7=, $pop6, $pop5
1067; NO-SIMD128-NEXT:    i32.select $push8=, $15, $31, $pop7
1068; NO-SIMD128-NEXT:    i32.store8 14($0), $pop8
1069; NO-SIMD128-NEXT:    i32.const $push92=, 255
1070; NO-SIMD128-NEXT:    i32.and $push10=, $14, $pop92
1071; NO-SIMD128-NEXT:    i32.const $push91=, 255
1072; NO-SIMD128-NEXT:    i32.and $push9=, $30, $pop91
1073; NO-SIMD128-NEXT:    i32.gt_u $push11=, $pop10, $pop9
1074; NO-SIMD128-NEXT:    i32.select $push12=, $14, $30, $pop11
1075; NO-SIMD128-NEXT:    i32.store8 13($0), $pop12
1076; NO-SIMD128-NEXT:    i32.const $push90=, 255
1077; NO-SIMD128-NEXT:    i32.and $push14=, $13, $pop90
1078; NO-SIMD128-NEXT:    i32.const $push89=, 255
1079; NO-SIMD128-NEXT:    i32.and $push13=, $29, $pop89
1080; NO-SIMD128-NEXT:    i32.gt_u $push15=, $pop14, $pop13
1081; NO-SIMD128-NEXT:    i32.select $push16=, $13, $29, $pop15
1082; NO-SIMD128-NEXT:    i32.store8 12($0), $pop16
1083; NO-SIMD128-NEXT:    i32.const $push88=, 255
1084; NO-SIMD128-NEXT:    i32.and $push18=, $12, $pop88
1085; NO-SIMD128-NEXT:    i32.const $push87=, 255
1086; NO-SIMD128-NEXT:    i32.and $push17=, $28, $pop87
1087; NO-SIMD128-NEXT:    i32.gt_u $push19=, $pop18, $pop17
1088; NO-SIMD128-NEXT:    i32.select $push20=, $12, $28, $pop19
1089; NO-SIMD128-NEXT:    i32.store8 11($0), $pop20
1090; NO-SIMD128-NEXT:    i32.const $push86=, 255
1091; NO-SIMD128-NEXT:    i32.and $push22=, $11, $pop86
1092; NO-SIMD128-NEXT:    i32.const $push85=, 255
1093; NO-SIMD128-NEXT:    i32.and $push21=, $27, $pop85
1094; NO-SIMD128-NEXT:    i32.gt_u $push23=, $pop22, $pop21
1095; NO-SIMD128-NEXT:    i32.select $push24=, $11, $27, $pop23
1096; NO-SIMD128-NEXT:    i32.store8 10($0), $pop24
1097; NO-SIMD128-NEXT:    i32.const $push84=, 255
1098; NO-SIMD128-NEXT:    i32.and $push26=, $10, $pop84
1099; NO-SIMD128-NEXT:    i32.const $push83=, 255
1100; NO-SIMD128-NEXT:    i32.and $push25=, $26, $pop83
1101; NO-SIMD128-NEXT:    i32.gt_u $push27=, $pop26, $pop25
1102; NO-SIMD128-NEXT:    i32.select $push28=, $10, $26, $pop27
1103; NO-SIMD128-NEXT:    i32.store8 9($0), $pop28
1104; NO-SIMD128-NEXT:    i32.const $push82=, 255
1105; NO-SIMD128-NEXT:    i32.and $push30=, $9, $pop82
1106; NO-SIMD128-NEXT:    i32.const $push81=, 255
1107; NO-SIMD128-NEXT:    i32.and $push29=, $25, $pop81
1108; NO-SIMD128-NEXT:    i32.gt_u $push31=, $pop30, $pop29
1109; NO-SIMD128-NEXT:    i32.select $push32=, $9, $25, $pop31
1110; NO-SIMD128-NEXT:    i32.store8 8($0), $pop32
1111; NO-SIMD128-NEXT:    i32.const $push80=, 255
1112; NO-SIMD128-NEXT:    i32.and $push34=, $8, $pop80
1113; NO-SIMD128-NEXT:    i32.const $push79=, 255
1114; NO-SIMD128-NEXT:    i32.and $push33=, $24, $pop79
1115; NO-SIMD128-NEXT:    i32.gt_u $push35=, $pop34, $pop33
1116; NO-SIMD128-NEXT:    i32.select $push36=, $8, $24, $pop35
1117; NO-SIMD128-NEXT:    i32.store8 7($0), $pop36
1118; NO-SIMD128-NEXT:    i32.const $push78=, 255
1119; NO-SIMD128-NEXT:    i32.and $push38=, $7, $pop78
1120; NO-SIMD128-NEXT:    i32.const $push77=, 255
1121; NO-SIMD128-NEXT:    i32.and $push37=, $23, $pop77
1122; NO-SIMD128-NEXT:    i32.gt_u $push39=, $pop38, $pop37
1123; NO-SIMD128-NEXT:    i32.select $push40=, $7, $23, $pop39
1124; NO-SIMD128-NEXT:    i32.store8 6($0), $pop40
1125; NO-SIMD128-NEXT:    i32.const $push76=, 255
1126; NO-SIMD128-NEXT:    i32.and $push42=, $6, $pop76
1127; NO-SIMD128-NEXT:    i32.const $push75=, 255
1128; NO-SIMD128-NEXT:    i32.and $push41=, $22, $pop75
1129; NO-SIMD128-NEXT:    i32.gt_u $push43=, $pop42, $pop41
1130; NO-SIMD128-NEXT:    i32.select $push44=, $6, $22, $pop43
1131; NO-SIMD128-NEXT:    i32.store8 5($0), $pop44
1132; NO-SIMD128-NEXT:    i32.const $push74=, 255
1133; NO-SIMD128-NEXT:    i32.and $push46=, $5, $pop74
1134; NO-SIMD128-NEXT:    i32.const $push73=, 255
1135; NO-SIMD128-NEXT:    i32.and $push45=, $21, $pop73
1136; NO-SIMD128-NEXT:    i32.gt_u $push47=, $pop46, $pop45
1137; NO-SIMD128-NEXT:    i32.select $push48=, $5, $21, $pop47
1138; NO-SIMD128-NEXT:    i32.store8 4($0), $pop48
1139; NO-SIMD128-NEXT:    i32.const $push72=, 255
1140; NO-SIMD128-NEXT:    i32.and $push50=, $4, $pop72
1141; NO-SIMD128-NEXT:    i32.const $push71=, 255
1142; NO-SIMD128-NEXT:    i32.and $push49=, $20, $pop71
1143; NO-SIMD128-NEXT:    i32.gt_u $push51=, $pop50, $pop49
1144; NO-SIMD128-NEXT:    i32.select $push52=, $4, $20, $pop51
1145; NO-SIMD128-NEXT:    i32.store8 3($0), $pop52
1146; NO-SIMD128-NEXT:    i32.const $push70=, 255
1147; NO-SIMD128-NEXT:    i32.and $push54=, $3, $pop70
1148; NO-SIMD128-NEXT:    i32.const $push69=, 255
1149; NO-SIMD128-NEXT:    i32.and $push53=, $19, $pop69
1150; NO-SIMD128-NEXT:    i32.gt_u $push55=, $pop54, $pop53
1151; NO-SIMD128-NEXT:    i32.select $push56=, $3, $19, $pop55
1152; NO-SIMD128-NEXT:    i32.store8 2($0), $pop56
1153; NO-SIMD128-NEXT:    i32.const $push68=, 255
1154; NO-SIMD128-NEXT:    i32.and $push58=, $2, $pop68
1155; NO-SIMD128-NEXT:    i32.const $push67=, 255
1156; NO-SIMD128-NEXT:    i32.and $push57=, $18, $pop67
1157; NO-SIMD128-NEXT:    i32.gt_u $push59=, $pop58, $pop57
1158; NO-SIMD128-NEXT:    i32.select $push60=, $2, $18, $pop59
1159; NO-SIMD128-NEXT:    i32.store8 1($0), $pop60
1160; NO-SIMD128-NEXT:    i32.const $push66=, 255
1161; NO-SIMD128-NEXT:    i32.and $push62=, $1, $pop66
1162; NO-SIMD128-NEXT:    i32.const $push65=, 255
1163; NO-SIMD128-NEXT:    i32.and $push61=, $17, $pop65
1164; NO-SIMD128-NEXT:    i32.gt_u $push63=, $pop62, $pop61
1165; NO-SIMD128-NEXT:    i32.select $push64=, $1, $17, $pop63
1166; NO-SIMD128-NEXT:    i32.store8 0($0), $pop64
1167; NO-SIMD128-NEXT:    return
1168;
1169; NO-SIMD128-FAST-LABEL: max_u_v16i8:
1170; NO-SIMD128-FAST:         .functype max_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
1171; NO-SIMD128-FAST-NEXT:  # %bb.0:
1172; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
1173; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
1174; NO-SIMD128-FAST-NEXT:    i32.const $push95=, 255
1175; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $17, $pop95
1176; NO-SIMD128-FAST-NEXT:    i32.gt_u $push3=, $pop2, $pop1
1177; NO-SIMD128-FAST-NEXT:    i32.select $push4=, $1, $17, $pop3
1178; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop4
1179; NO-SIMD128-FAST-NEXT:    i32.const $push94=, 255
1180; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $2, $pop94
1181; NO-SIMD128-FAST-NEXT:    i32.const $push93=, 255
1182; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $18, $pop93
1183; NO-SIMD128-FAST-NEXT:    i32.gt_u $push7=, $pop6, $pop5
1184; NO-SIMD128-FAST-NEXT:    i32.select $push8=, $2, $18, $pop7
1185; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop8
1186; NO-SIMD128-FAST-NEXT:    i32.const $push92=, 255
1187; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $3, $pop92
1188; NO-SIMD128-FAST-NEXT:    i32.const $push91=, 255
1189; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $19, $pop91
1190; NO-SIMD128-FAST-NEXT:    i32.gt_u $push11=, $pop10, $pop9
1191; NO-SIMD128-FAST-NEXT:    i32.select $push12=, $3, $19, $pop11
1192; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop12
1193; NO-SIMD128-FAST-NEXT:    i32.const $push90=, 255
1194; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $4, $pop90
1195; NO-SIMD128-FAST-NEXT:    i32.const $push89=, 255
1196; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $20, $pop89
1197; NO-SIMD128-FAST-NEXT:    i32.gt_u $push15=, $pop14, $pop13
1198; NO-SIMD128-FAST-NEXT:    i32.select $push16=, $4, $20, $pop15
1199; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop16
1200; NO-SIMD128-FAST-NEXT:    i32.const $push88=, 255
1201; NO-SIMD128-FAST-NEXT:    i32.and $push18=, $5, $pop88
1202; NO-SIMD128-FAST-NEXT:    i32.const $push87=, 255
1203; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $21, $pop87
1204; NO-SIMD128-FAST-NEXT:    i32.gt_u $push19=, $pop18, $pop17
1205; NO-SIMD128-FAST-NEXT:    i32.select $push20=, $5, $21, $pop19
1206; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop20
1207; NO-SIMD128-FAST-NEXT:    i32.const $push86=, 255
1208; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $6, $pop86
1209; NO-SIMD128-FAST-NEXT:    i32.const $push85=, 255
1210; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $22, $pop85
1211; NO-SIMD128-FAST-NEXT:    i32.gt_u $push23=, $pop22, $pop21
1212; NO-SIMD128-FAST-NEXT:    i32.select $push24=, $6, $22, $pop23
1213; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop24
1214; NO-SIMD128-FAST-NEXT:    i32.const $push84=, 255
1215; NO-SIMD128-FAST-NEXT:    i32.and $push26=, $7, $pop84
1216; NO-SIMD128-FAST-NEXT:    i32.const $push83=, 255
1217; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $23, $pop83
1218; NO-SIMD128-FAST-NEXT:    i32.gt_u $push27=, $pop26, $pop25
1219; NO-SIMD128-FAST-NEXT:    i32.select $push28=, $7, $23, $pop27
1220; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop28
1221; NO-SIMD128-FAST-NEXT:    i32.const $push82=, 255
1222; NO-SIMD128-FAST-NEXT:    i32.and $push30=, $8, $pop82
1223; NO-SIMD128-FAST-NEXT:    i32.const $push81=, 255
1224; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $24, $pop81
1225; NO-SIMD128-FAST-NEXT:    i32.gt_u $push31=, $pop30, $pop29
1226; NO-SIMD128-FAST-NEXT:    i32.select $push32=, $8, $24, $pop31
1227; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop32
1228; NO-SIMD128-FAST-NEXT:    i32.const $push80=, 255
1229; NO-SIMD128-FAST-NEXT:    i32.and $push34=, $9, $pop80
1230; NO-SIMD128-FAST-NEXT:    i32.const $push79=, 255
1231; NO-SIMD128-FAST-NEXT:    i32.and $push33=, $25, $pop79
1232; NO-SIMD128-FAST-NEXT:    i32.gt_u $push35=, $pop34, $pop33
1233; NO-SIMD128-FAST-NEXT:    i32.select $push36=, $9, $25, $pop35
1234; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop36
1235; NO-SIMD128-FAST-NEXT:    i32.const $push78=, 255
1236; NO-SIMD128-FAST-NEXT:    i32.and $push38=, $10, $pop78
1237; NO-SIMD128-FAST-NEXT:    i32.const $push77=, 255
1238; NO-SIMD128-FAST-NEXT:    i32.and $push37=, $26, $pop77
1239; NO-SIMD128-FAST-NEXT:    i32.gt_u $push39=, $pop38, $pop37
1240; NO-SIMD128-FAST-NEXT:    i32.select $push40=, $10, $26, $pop39
1241; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop40
1242; NO-SIMD128-FAST-NEXT:    i32.const $push76=, 255
1243; NO-SIMD128-FAST-NEXT:    i32.and $push42=, $11, $pop76
1244; NO-SIMD128-FAST-NEXT:    i32.const $push75=, 255
1245; NO-SIMD128-FAST-NEXT:    i32.and $push41=, $27, $pop75
1246; NO-SIMD128-FAST-NEXT:    i32.gt_u $push43=, $pop42, $pop41
1247; NO-SIMD128-FAST-NEXT:    i32.select $push44=, $11, $27, $pop43
1248; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop44
1249; NO-SIMD128-FAST-NEXT:    i32.const $push74=, 255
1250; NO-SIMD128-FAST-NEXT:    i32.and $push46=, $12, $pop74
1251; NO-SIMD128-FAST-NEXT:    i32.const $push73=, 255
1252; NO-SIMD128-FAST-NEXT:    i32.and $push45=, $28, $pop73
1253; NO-SIMD128-FAST-NEXT:    i32.gt_u $push47=, $pop46, $pop45
1254; NO-SIMD128-FAST-NEXT:    i32.select $push48=, $12, $28, $pop47
1255; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop48
1256; NO-SIMD128-FAST-NEXT:    i32.const $push72=, 255
1257; NO-SIMD128-FAST-NEXT:    i32.and $push50=, $13, $pop72
1258; NO-SIMD128-FAST-NEXT:    i32.const $push71=, 255
1259; NO-SIMD128-FAST-NEXT:    i32.and $push49=, $29, $pop71
1260; NO-SIMD128-FAST-NEXT:    i32.gt_u $push51=, $pop50, $pop49
1261; NO-SIMD128-FAST-NEXT:    i32.select $push52=, $13, $29, $pop51
1262; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop52
1263; NO-SIMD128-FAST-NEXT:    i32.const $push70=, 255
1264; NO-SIMD128-FAST-NEXT:    i32.and $push54=, $14, $pop70
1265; NO-SIMD128-FAST-NEXT:    i32.const $push69=, 255
1266; NO-SIMD128-FAST-NEXT:    i32.and $push53=, $30, $pop69
1267; NO-SIMD128-FAST-NEXT:    i32.gt_u $push55=, $pop54, $pop53
1268; NO-SIMD128-FAST-NEXT:    i32.select $push56=, $14, $30, $pop55
1269; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop56
1270; NO-SIMD128-FAST-NEXT:    i32.const $push68=, 255
1271; NO-SIMD128-FAST-NEXT:    i32.and $push58=, $15, $pop68
1272; NO-SIMD128-FAST-NEXT:    i32.const $push67=, 255
1273; NO-SIMD128-FAST-NEXT:    i32.and $push57=, $31, $pop67
1274; NO-SIMD128-FAST-NEXT:    i32.gt_u $push59=, $pop58, $pop57
1275; NO-SIMD128-FAST-NEXT:    i32.select $push60=, $15, $31, $pop59
1276; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop60
1277; NO-SIMD128-FAST-NEXT:    i32.const $push66=, 255
1278; NO-SIMD128-FAST-NEXT:    i32.and $push62=, $16, $pop66
1279; NO-SIMD128-FAST-NEXT:    i32.const $push65=, 255
1280; NO-SIMD128-FAST-NEXT:    i32.and $push61=, $32, $pop65
1281; NO-SIMD128-FAST-NEXT:    i32.gt_u $push63=, $pop62, $pop61
1282; NO-SIMD128-FAST-NEXT:    i32.select $push64=, $16, $32, $pop63
1283; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop64
1284; NO-SIMD128-FAST-NEXT:    return
1285  %c = icmp ugt <16 x i8> %x, %y
1286  %a = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
1287  ret <16 x i8> %a
1288}
1289
1290define <16 x i8> @avgr_u_v16i8(<16 x i8> %x, <16 x i8> %y) {
1291; SIMD128-LABEL: avgr_u_v16i8:
1292; SIMD128:         .functype avgr_u_v16i8 (v128, v128) -> (v128)
1293; SIMD128-NEXT:  # %bb.0:
1294; SIMD128-NEXT:    i8x16.avgr_u $push0=, $0, $1
1295; SIMD128-NEXT:    return $pop0
1296;
1297; SIMD128-FAST-LABEL: avgr_u_v16i8:
1298; SIMD128-FAST:         .functype avgr_u_v16i8 (v128, v128) -> (v128)
1299; SIMD128-FAST-NEXT:  # %bb.0:
1300; SIMD128-FAST-NEXT:    i8x16.avgr_u $push0=, $0, $1
1301; SIMD128-FAST-NEXT:    return $pop0
1302;
1303; NO-SIMD128-LABEL: avgr_u_v16i8:
1304; NO-SIMD128:         .functype avgr_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
1305; NO-SIMD128-NEXT:  # %bb.0:
1306; NO-SIMD128-NEXT:    i32.add $push0=, $16, $32
1307; NO-SIMD128-NEXT:    i32.const $push1=, 1
1308; NO-SIMD128-NEXT:    i32.add $push2=, $pop0, $pop1
1309; NO-SIMD128-NEXT:    i32.const $push3=, 254
1310; NO-SIMD128-NEXT:    i32.and $push4=, $pop2, $pop3
1311; NO-SIMD128-NEXT:    i32.const $push111=, 1
1312; NO-SIMD128-NEXT:    i32.shr_u $push5=, $pop4, $pop111
1313; NO-SIMD128-NEXT:    i32.store8 15($0), $pop5
1314; NO-SIMD128-NEXT:    i32.add $push6=, $15, $31
1315; NO-SIMD128-NEXT:    i32.const $push110=, 1
1316; NO-SIMD128-NEXT:    i32.add $push7=, $pop6, $pop110
1317; NO-SIMD128-NEXT:    i32.const $push109=, 254
1318; NO-SIMD128-NEXT:    i32.and $push8=, $pop7, $pop109
1319; NO-SIMD128-NEXT:    i32.const $push108=, 1
1320; NO-SIMD128-NEXT:    i32.shr_u $push9=, $pop8, $pop108
1321; NO-SIMD128-NEXT:    i32.store8 14($0), $pop9
1322; NO-SIMD128-NEXT:    i32.add $push10=, $14, $30
1323; NO-SIMD128-NEXT:    i32.const $push107=, 1
1324; NO-SIMD128-NEXT:    i32.add $push11=, $pop10, $pop107
1325; NO-SIMD128-NEXT:    i32.const $push106=, 254
1326; NO-SIMD128-NEXT:    i32.and $push12=, $pop11, $pop106
1327; NO-SIMD128-NEXT:    i32.const $push105=, 1
1328; NO-SIMD128-NEXT:    i32.shr_u $push13=, $pop12, $pop105
1329; NO-SIMD128-NEXT:    i32.store8 13($0), $pop13
1330; NO-SIMD128-NEXT:    i32.add $push14=, $13, $29
1331; NO-SIMD128-NEXT:    i32.const $push104=, 1
1332; NO-SIMD128-NEXT:    i32.add $push15=, $pop14, $pop104
1333; NO-SIMD128-NEXT:    i32.const $push103=, 254
1334; NO-SIMD128-NEXT:    i32.and $push16=, $pop15, $pop103
1335; NO-SIMD128-NEXT:    i32.const $push102=, 1
1336; NO-SIMD128-NEXT:    i32.shr_u $push17=, $pop16, $pop102
1337; NO-SIMD128-NEXT:    i32.store8 12($0), $pop17
1338; NO-SIMD128-NEXT:    i32.add $push18=, $12, $28
1339; NO-SIMD128-NEXT:    i32.const $push101=, 1
1340; NO-SIMD128-NEXT:    i32.add $push19=, $pop18, $pop101
1341; NO-SIMD128-NEXT:    i32.const $push100=, 254
1342; NO-SIMD128-NEXT:    i32.and $push20=, $pop19, $pop100
1343; NO-SIMD128-NEXT:    i32.const $push99=, 1
1344; NO-SIMD128-NEXT:    i32.shr_u $push21=, $pop20, $pop99
1345; NO-SIMD128-NEXT:    i32.store8 11($0), $pop21
1346; NO-SIMD128-NEXT:    i32.add $push22=, $11, $27
1347; NO-SIMD128-NEXT:    i32.const $push98=, 1
1348; NO-SIMD128-NEXT:    i32.add $push23=, $pop22, $pop98
1349; NO-SIMD128-NEXT:    i32.const $push97=, 254
1350; NO-SIMD128-NEXT:    i32.and $push24=, $pop23, $pop97
1351; NO-SIMD128-NEXT:    i32.const $push96=, 1
1352; NO-SIMD128-NEXT:    i32.shr_u $push25=, $pop24, $pop96
1353; NO-SIMD128-NEXT:    i32.store8 10($0), $pop25
1354; NO-SIMD128-NEXT:    i32.add $push26=, $10, $26
1355; NO-SIMD128-NEXT:    i32.const $push95=, 1
1356; NO-SIMD128-NEXT:    i32.add $push27=, $pop26, $pop95
1357; NO-SIMD128-NEXT:    i32.const $push94=, 254
1358; NO-SIMD128-NEXT:    i32.and $push28=, $pop27, $pop94
1359; NO-SIMD128-NEXT:    i32.const $push93=, 1
1360; NO-SIMD128-NEXT:    i32.shr_u $push29=, $pop28, $pop93
1361; NO-SIMD128-NEXT:    i32.store8 9($0), $pop29
1362; NO-SIMD128-NEXT:    i32.add $push30=, $9, $25
1363; NO-SIMD128-NEXT:    i32.const $push92=, 1
1364; NO-SIMD128-NEXT:    i32.add $push31=, $pop30, $pop92
1365; NO-SIMD128-NEXT:    i32.const $push91=, 254
1366; NO-SIMD128-NEXT:    i32.and $push32=, $pop31, $pop91
1367; NO-SIMD128-NEXT:    i32.const $push90=, 1
1368; NO-SIMD128-NEXT:    i32.shr_u $push33=, $pop32, $pop90
1369; NO-SIMD128-NEXT:    i32.store8 8($0), $pop33
1370; NO-SIMD128-NEXT:    i32.add $push34=, $8, $24
1371; NO-SIMD128-NEXT:    i32.const $push89=, 1
1372; NO-SIMD128-NEXT:    i32.add $push35=, $pop34, $pop89
1373; NO-SIMD128-NEXT:    i32.const $push88=, 254
1374; NO-SIMD128-NEXT:    i32.and $push36=, $pop35, $pop88
1375; NO-SIMD128-NEXT:    i32.const $push87=, 1
1376; NO-SIMD128-NEXT:    i32.shr_u $push37=, $pop36, $pop87
1377; NO-SIMD128-NEXT:    i32.store8 7($0), $pop37
1378; NO-SIMD128-NEXT:    i32.add $push38=, $7, $23
1379; NO-SIMD128-NEXT:    i32.const $push86=, 1
1380; NO-SIMD128-NEXT:    i32.add $push39=, $pop38, $pop86
1381; NO-SIMD128-NEXT:    i32.const $push85=, 254
1382; NO-SIMD128-NEXT:    i32.and $push40=, $pop39, $pop85
1383; NO-SIMD128-NEXT:    i32.const $push84=, 1
1384; NO-SIMD128-NEXT:    i32.shr_u $push41=, $pop40, $pop84
1385; NO-SIMD128-NEXT:    i32.store8 6($0), $pop41
1386; NO-SIMD128-NEXT:    i32.add $push42=, $6, $22
1387; NO-SIMD128-NEXT:    i32.const $push83=, 1
1388; NO-SIMD128-NEXT:    i32.add $push43=, $pop42, $pop83
1389; NO-SIMD128-NEXT:    i32.const $push82=, 254
1390; NO-SIMD128-NEXT:    i32.and $push44=, $pop43, $pop82
1391; NO-SIMD128-NEXT:    i32.const $push81=, 1
1392; NO-SIMD128-NEXT:    i32.shr_u $push45=, $pop44, $pop81
1393; NO-SIMD128-NEXT:    i32.store8 5($0), $pop45
1394; NO-SIMD128-NEXT:    i32.add $push46=, $5, $21
1395; NO-SIMD128-NEXT:    i32.const $push80=, 1
1396; NO-SIMD128-NEXT:    i32.add $push47=, $pop46, $pop80
1397; NO-SIMD128-NEXT:    i32.const $push79=, 254
1398; NO-SIMD128-NEXT:    i32.and $push48=, $pop47, $pop79
1399; NO-SIMD128-NEXT:    i32.const $push78=, 1
1400; NO-SIMD128-NEXT:    i32.shr_u $push49=, $pop48, $pop78
1401; NO-SIMD128-NEXT:    i32.store8 4($0), $pop49
1402; NO-SIMD128-NEXT:    i32.add $push50=, $4, $20
1403; NO-SIMD128-NEXT:    i32.const $push77=, 1
1404; NO-SIMD128-NEXT:    i32.add $push51=, $pop50, $pop77
1405; NO-SIMD128-NEXT:    i32.const $push76=, 254
1406; NO-SIMD128-NEXT:    i32.and $push52=, $pop51, $pop76
1407; NO-SIMD128-NEXT:    i32.const $push75=, 1
1408; NO-SIMD128-NEXT:    i32.shr_u $push53=, $pop52, $pop75
1409; NO-SIMD128-NEXT:    i32.store8 3($0), $pop53
1410; NO-SIMD128-NEXT:    i32.add $push54=, $3, $19
1411; NO-SIMD128-NEXT:    i32.const $push74=, 1
1412; NO-SIMD128-NEXT:    i32.add $push55=, $pop54, $pop74
1413; NO-SIMD128-NEXT:    i32.const $push73=, 254
1414; NO-SIMD128-NEXT:    i32.and $push56=, $pop55, $pop73
1415; NO-SIMD128-NEXT:    i32.const $push72=, 1
1416; NO-SIMD128-NEXT:    i32.shr_u $push57=, $pop56, $pop72
1417; NO-SIMD128-NEXT:    i32.store8 2($0), $pop57
1418; NO-SIMD128-NEXT:    i32.add $push58=, $2, $18
1419; NO-SIMD128-NEXT:    i32.const $push71=, 1
1420; NO-SIMD128-NEXT:    i32.add $push59=, $pop58, $pop71
1421; NO-SIMD128-NEXT:    i32.const $push70=, 254
1422; NO-SIMD128-NEXT:    i32.and $push60=, $pop59, $pop70
1423; NO-SIMD128-NEXT:    i32.const $push69=, 1
1424; NO-SIMD128-NEXT:    i32.shr_u $push61=, $pop60, $pop69
1425; NO-SIMD128-NEXT:    i32.store8 1($0), $pop61
1426; NO-SIMD128-NEXT:    i32.add $push62=, $1, $17
1427; NO-SIMD128-NEXT:    i32.const $push68=, 1
1428; NO-SIMD128-NEXT:    i32.add $push63=, $pop62, $pop68
1429; NO-SIMD128-NEXT:    i32.const $push67=, 254
1430; NO-SIMD128-NEXT:    i32.and $push64=, $pop63, $pop67
1431; NO-SIMD128-NEXT:    i32.const $push66=, 1
1432; NO-SIMD128-NEXT:    i32.shr_u $push65=, $pop64, $pop66
1433; NO-SIMD128-NEXT:    i32.store8 0($0), $pop65
1434; NO-SIMD128-NEXT:    return
1435;
1436; NO-SIMD128-FAST-LABEL: avgr_u_v16i8:
1437; NO-SIMD128-FAST:         .functype avgr_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
1438; NO-SIMD128-FAST-NEXT:  # %bb.0:
1439; NO-SIMD128-FAST-NEXT:    i32.add $push0=, $1, $17
1440; NO-SIMD128-FAST-NEXT:    i32.const $push1=, 1
1441; NO-SIMD128-FAST-NEXT:    i32.add $push2=, $pop0, $pop1
1442; NO-SIMD128-FAST-NEXT:    i32.const $push3=, 254
1443; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $pop2, $pop3
1444; NO-SIMD128-FAST-NEXT:    i32.const $push111=, 1
1445; NO-SIMD128-FAST-NEXT:    i32.shr_u $push5=, $pop4, $pop111
1446; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop5
1447; NO-SIMD128-FAST-NEXT:    i32.add $push6=, $2, $18
1448; NO-SIMD128-FAST-NEXT:    i32.const $push110=, 1
1449; NO-SIMD128-FAST-NEXT:    i32.add $push7=, $pop6, $pop110
1450; NO-SIMD128-FAST-NEXT:    i32.const $push109=, 254
1451; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $pop7, $pop109
1452; NO-SIMD128-FAST-NEXT:    i32.const $push108=, 1
1453; NO-SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop108
1454; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop9
1455; NO-SIMD128-FAST-NEXT:    i32.add $push10=, $3, $19
1456; NO-SIMD128-FAST-NEXT:    i32.const $push107=, 1
1457; NO-SIMD128-FAST-NEXT:    i32.add $push11=, $pop10, $pop107
1458; NO-SIMD128-FAST-NEXT:    i32.const $push106=, 254
1459; NO-SIMD128-FAST-NEXT:    i32.and $push12=, $pop11, $pop106
1460; NO-SIMD128-FAST-NEXT:    i32.const $push105=, 1
1461; NO-SIMD128-FAST-NEXT:    i32.shr_u $push13=, $pop12, $pop105
1462; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop13
1463; NO-SIMD128-FAST-NEXT:    i32.add $push14=, $4, $20
1464; NO-SIMD128-FAST-NEXT:    i32.const $push104=, 1
1465; NO-SIMD128-FAST-NEXT:    i32.add $push15=, $pop14, $pop104
1466; NO-SIMD128-FAST-NEXT:    i32.const $push103=, 254
1467; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $pop15, $pop103
1468; NO-SIMD128-FAST-NEXT:    i32.const $push102=, 1
1469; NO-SIMD128-FAST-NEXT:    i32.shr_u $push17=, $pop16, $pop102
1470; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop17
1471; NO-SIMD128-FAST-NEXT:    i32.add $push18=, $5, $21
1472; NO-SIMD128-FAST-NEXT:    i32.const $push101=, 1
1473; NO-SIMD128-FAST-NEXT:    i32.add $push19=, $pop18, $pop101
1474; NO-SIMD128-FAST-NEXT:    i32.const $push100=, 254
1475; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $pop19, $pop100
1476; NO-SIMD128-FAST-NEXT:    i32.const $push99=, 1
1477; NO-SIMD128-FAST-NEXT:    i32.shr_u $push21=, $pop20, $pop99
1478; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop21
1479; NO-SIMD128-FAST-NEXT:    i32.add $push22=, $6, $22
1480; NO-SIMD128-FAST-NEXT:    i32.const $push98=, 1
1481; NO-SIMD128-FAST-NEXT:    i32.add $push23=, $pop22, $pop98
1482; NO-SIMD128-FAST-NEXT:    i32.const $push97=, 254
1483; NO-SIMD128-FAST-NEXT:    i32.and $push24=, $pop23, $pop97
1484; NO-SIMD128-FAST-NEXT:    i32.const $push96=, 1
1485; NO-SIMD128-FAST-NEXT:    i32.shr_u $push25=, $pop24, $pop96
1486; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop25
1487; NO-SIMD128-FAST-NEXT:    i32.add $push26=, $7, $23
1488; NO-SIMD128-FAST-NEXT:    i32.const $push95=, 1
1489; NO-SIMD128-FAST-NEXT:    i32.add $push27=, $pop26, $pop95
1490; NO-SIMD128-FAST-NEXT:    i32.const $push94=, 254
1491; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop94
1492; NO-SIMD128-FAST-NEXT:    i32.const $push93=, 1
1493; NO-SIMD128-FAST-NEXT:    i32.shr_u $push29=, $pop28, $pop93
1494; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop29
1495; NO-SIMD128-FAST-NEXT:    i32.add $push30=, $8, $24
1496; NO-SIMD128-FAST-NEXT:    i32.const $push92=, 1
1497; NO-SIMD128-FAST-NEXT:    i32.add $push31=, $pop30, $pop92
1498; NO-SIMD128-FAST-NEXT:    i32.const $push91=, 254
1499; NO-SIMD128-FAST-NEXT:    i32.and $push32=, $pop31, $pop91
1500; NO-SIMD128-FAST-NEXT:    i32.const $push90=, 1
1501; NO-SIMD128-FAST-NEXT:    i32.shr_u $push33=, $pop32, $pop90
1502; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop33
1503; NO-SIMD128-FAST-NEXT:    i32.add $push34=, $9, $25
1504; NO-SIMD128-FAST-NEXT:    i32.const $push89=, 1
1505; NO-SIMD128-FAST-NEXT:    i32.add $push35=, $pop34, $pop89
1506; NO-SIMD128-FAST-NEXT:    i32.const $push88=, 254
1507; NO-SIMD128-FAST-NEXT:    i32.and $push36=, $pop35, $pop88
1508; NO-SIMD128-FAST-NEXT:    i32.const $push87=, 1
1509; NO-SIMD128-FAST-NEXT:    i32.shr_u $push37=, $pop36, $pop87
1510; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop37
1511; NO-SIMD128-FAST-NEXT:    i32.add $push38=, $10, $26
1512; NO-SIMD128-FAST-NEXT:    i32.const $push86=, 1
1513; NO-SIMD128-FAST-NEXT:    i32.add $push39=, $pop38, $pop86
1514; NO-SIMD128-FAST-NEXT:    i32.const $push85=, 254
1515; NO-SIMD128-FAST-NEXT:    i32.and $push40=, $pop39, $pop85
1516; NO-SIMD128-FAST-NEXT:    i32.const $push84=, 1
1517; NO-SIMD128-FAST-NEXT:    i32.shr_u $push41=, $pop40, $pop84
1518; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop41
1519; NO-SIMD128-FAST-NEXT:    i32.add $push42=, $11, $27
1520; NO-SIMD128-FAST-NEXT:    i32.const $push83=, 1
1521; NO-SIMD128-FAST-NEXT:    i32.add $push43=, $pop42, $pop83
1522; NO-SIMD128-FAST-NEXT:    i32.const $push82=, 254
1523; NO-SIMD128-FAST-NEXT:    i32.and $push44=, $pop43, $pop82
1524; NO-SIMD128-FAST-NEXT:    i32.const $push81=, 1
1525; NO-SIMD128-FAST-NEXT:    i32.shr_u $push45=, $pop44, $pop81
1526; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop45
1527; NO-SIMD128-FAST-NEXT:    i32.add $push46=, $12, $28
1528; NO-SIMD128-FAST-NEXT:    i32.const $push80=, 1
1529; NO-SIMD128-FAST-NEXT:    i32.add $push47=, $pop46, $pop80
1530; NO-SIMD128-FAST-NEXT:    i32.const $push79=, 254
1531; NO-SIMD128-FAST-NEXT:    i32.and $push48=, $pop47, $pop79
1532; NO-SIMD128-FAST-NEXT:    i32.const $push78=, 1
1533; NO-SIMD128-FAST-NEXT:    i32.shr_u $push49=, $pop48, $pop78
1534; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop49
1535; NO-SIMD128-FAST-NEXT:    i32.add $push50=, $13, $29
1536; NO-SIMD128-FAST-NEXT:    i32.const $push77=, 1
1537; NO-SIMD128-FAST-NEXT:    i32.add $push51=, $pop50, $pop77
1538; NO-SIMD128-FAST-NEXT:    i32.const $push76=, 254
1539; NO-SIMD128-FAST-NEXT:    i32.and $push52=, $pop51, $pop76
1540; NO-SIMD128-FAST-NEXT:    i32.const $push75=, 1
1541; NO-SIMD128-FAST-NEXT:    i32.shr_u $push53=, $pop52, $pop75
1542; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop53
1543; NO-SIMD128-FAST-NEXT:    i32.add $push54=, $14, $30
1544; NO-SIMD128-FAST-NEXT:    i32.const $push74=, 1
1545; NO-SIMD128-FAST-NEXT:    i32.add $push55=, $pop54, $pop74
1546; NO-SIMD128-FAST-NEXT:    i32.const $push73=, 254
1547; NO-SIMD128-FAST-NEXT:    i32.and $push56=, $pop55, $pop73
1548; NO-SIMD128-FAST-NEXT:    i32.const $push72=, 1
1549; NO-SIMD128-FAST-NEXT:    i32.shr_u $push57=, $pop56, $pop72
1550; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop57
1551; NO-SIMD128-FAST-NEXT:    i32.add $push58=, $15, $31
1552; NO-SIMD128-FAST-NEXT:    i32.const $push71=, 1
1553; NO-SIMD128-FAST-NEXT:    i32.add $push59=, $pop58, $pop71
1554; NO-SIMD128-FAST-NEXT:    i32.const $push70=, 254
1555; NO-SIMD128-FAST-NEXT:    i32.and $push60=, $pop59, $pop70
1556; NO-SIMD128-FAST-NEXT:    i32.const $push69=, 1
1557; NO-SIMD128-FAST-NEXT:    i32.shr_u $push61=, $pop60, $pop69
1558; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop61
1559; NO-SIMD128-FAST-NEXT:    i32.add $push62=, $16, $32
1560; NO-SIMD128-FAST-NEXT:    i32.const $push68=, 1
1561; NO-SIMD128-FAST-NEXT:    i32.add $push63=, $pop62, $pop68
1562; NO-SIMD128-FAST-NEXT:    i32.const $push67=, 254
1563; NO-SIMD128-FAST-NEXT:    i32.and $push64=, $pop63, $pop67
1564; NO-SIMD128-FAST-NEXT:    i32.const $push66=, 1
1565; NO-SIMD128-FAST-NEXT:    i32.shr_u $push65=, $pop64, $pop66
1566; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop65
1567; NO-SIMD128-FAST-NEXT:    return
1568  %a = add nuw <16 x i8> %x, %y
1569  %b = add nuw <16 x i8> %a, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1,
1570                              i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1571  %c = udiv <16 x i8> %b, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2,
1572                           i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1573  ret <16 x i8> %c
1574}
1575
1576define <16 x i8> @avgr_u_v16i8_wrap(<16 x i8> %x, <16 x i8> %y) {
1577; SIMD128-LABEL: avgr_u_v16i8_wrap:
1578; SIMD128:         .functype avgr_u_v16i8_wrap (v128, v128) -> (v128)
1579; SIMD128-NEXT:  # %bb.0:
1580; SIMD128-NEXT:    i8x16.add $push0=, $0, $1
1581; SIMD128-NEXT:    v128.const $push1=, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1582; SIMD128-NEXT:    i8x16.add $push2=, $pop0, $pop1
1583; SIMD128-NEXT:    i32.const $push3=, 1
1584; SIMD128-NEXT:    i8x16.shr_u $push4=, $pop2, $pop3
1585; SIMD128-NEXT:    return $pop4
1586;
1587; SIMD128-FAST-LABEL: avgr_u_v16i8_wrap:
1588; SIMD128-FAST:         .functype avgr_u_v16i8_wrap (v128, v128) -> (v128)
1589; SIMD128-FAST-NEXT:  # %bb.0:
1590; SIMD128-FAST-NEXT:    i8x16.add $push2=, $0, $1
1591; SIMD128-FAST-NEXT:    v128.const $push3=, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1592; SIMD128-FAST-NEXT:    i8x16.add $push1=, $pop2, $pop3
1593; SIMD128-FAST-NEXT:    i32.const $push4=, 1
1594; SIMD128-FAST-NEXT:    i8x16.shr_u $push0=, $pop1, $pop4
1595; SIMD128-FAST-NEXT:    return $pop0
1596;
1597; NO-SIMD128-LABEL: avgr_u_v16i8_wrap:
1598; NO-SIMD128:         .functype avgr_u_v16i8_wrap (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
1599; NO-SIMD128-NEXT:  # %bb.0:
1600; NO-SIMD128-NEXT:    i32.add $push0=, $16, $32
1601; NO-SIMD128-NEXT:    i32.const $push1=, 1
1602; NO-SIMD128-NEXT:    i32.add $push2=, $pop0, $pop1
1603; NO-SIMD128-NEXT:    i32.const $push3=, 254
1604; NO-SIMD128-NEXT:    i32.and $push4=, $pop2, $pop3
1605; NO-SIMD128-NEXT:    i32.const $push111=, 1
1606; NO-SIMD128-NEXT:    i32.shr_u $push5=, $pop4, $pop111
1607; NO-SIMD128-NEXT:    i32.store8 15($0), $pop5
1608; NO-SIMD128-NEXT:    i32.add $push6=, $15, $31
1609; NO-SIMD128-NEXT:    i32.const $push110=, 1
1610; NO-SIMD128-NEXT:    i32.add $push7=, $pop6, $pop110
1611; NO-SIMD128-NEXT:    i32.const $push109=, 254
1612; NO-SIMD128-NEXT:    i32.and $push8=, $pop7, $pop109
1613; NO-SIMD128-NEXT:    i32.const $push108=, 1
1614; NO-SIMD128-NEXT:    i32.shr_u $push9=, $pop8, $pop108
1615; NO-SIMD128-NEXT:    i32.store8 14($0), $pop9
1616; NO-SIMD128-NEXT:    i32.add $push10=, $14, $30
1617; NO-SIMD128-NEXT:    i32.const $push107=, 1
1618; NO-SIMD128-NEXT:    i32.add $push11=, $pop10, $pop107
1619; NO-SIMD128-NEXT:    i32.const $push106=, 254
1620; NO-SIMD128-NEXT:    i32.and $push12=, $pop11, $pop106
1621; NO-SIMD128-NEXT:    i32.const $push105=, 1
1622; NO-SIMD128-NEXT:    i32.shr_u $push13=, $pop12, $pop105
1623; NO-SIMD128-NEXT:    i32.store8 13($0), $pop13
1624; NO-SIMD128-NEXT:    i32.add $push14=, $13, $29
1625; NO-SIMD128-NEXT:    i32.const $push104=, 1
1626; NO-SIMD128-NEXT:    i32.add $push15=, $pop14, $pop104
1627; NO-SIMD128-NEXT:    i32.const $push103=, 254
1628; NO-SIMD128-NEXT:    i32.and $push16=, $pop15, $pop103
1629; NO-SIMD128-NEXT:    i32.const $push102=, 1
1630; NO-SIMD128-NEXT:    i32.shr_u $push17=, $pop16, $pop102
1631; NO-SIMD128-NEXT:    i32.store8 12($0), $pop17
1632; NO-SIMD128-NEXT:    i32.add $push18=, $12, $28
1633; NO-SIMD128-NEXT:    i32.const $push101=, 1
1634; NO-SIMD128-NEXT:    i32.add $push19=, $pop18, $pop101
1635; NO-SIMD128-NEXT:    i32.const $push100=, 254
1636; NO-SIMD128-NEXT:    i32.and $push20=, $pop19, $pop100
1637; NO-SIMD128-NEXT:    i32.const $push99=, 1
1638; NO-SIMD128-NEXT:    i32.shr_u $push21=, $pop20, $pop99
1639; NO-SIMD128-NEXT:    i32.store8 11($0), $pop21
1640; NO-SIMD128-NEXT:    i32.add $push22=, $11, $27
1641; NO-SIMD128-NEXT:    i32.const $push98=, 1
1642; NO-SIMD128-NEXT:    i32.add $push23=, $pop22, $pop98
1643; NO-SIMD128-NEXT:    i32.const $push97=, 254
1644; NO-SIMD128-NEXT:    i32.and $push24=, $pop23, $pop97
1645; NO-SIMD128-NEXT:    i32.const $push96=, 1
1646; NO-SIMD128-NEXT:    i32.shr_u $push25=, $pop24, $pop96
1647; NO-SIMD128-NEXT:    i32.store8 10($0), $pop25
1648; NO-SIMD128-NEXT:    i32.add $push26=, $10, $26
1649; NO-SIMD128-NEXT:    i32.const $push95=, 1
1650; NO-SIMD128-NEXT:    i32.add $push27=, $pop26, $pop95
1651; NO-SIMD128-NEXT:    i32.const $push94=, 254
1652; NO-SIMD128-NEXT:    i32.and $push28=, $pop27, $pop94
1653; NO-SIMD128-NEXT:    i32.const $push93=, 1
1654; NO-SIMD128-NEXT:    i32.shr_u $push29=, $pop28, $pop93
1655; NO-SIMD128-NEXT:    i32.store8 9($0), $pop29
1656; NO-SIMD128-NEXT:    i32.add $push30=, $9, $25
1657; NO-SIMD128-NEXT:    i32.const $push92=, 1
1658; NO-SIMD128-NEXT:    i32.add $push31=, $pop30, $pop92
1659; NO-SIMD128-NEXT:    i32.const $push91=, 254
1660; NO-SIMD128-NEXT:    i32.and $push32=, $pop31, $pop91
1661; NO-SIMD128-NEXT:    i32.const $push90=, 1
1662; NO-SIMD128-NEXT:    i32.shr_u $push33=, $pop32, $pop90
1663; NO-SIMD128-NEXT:    i32.store8 8($0), $pop33
1664; NO-SIMD128-NEXT:    i32.add $push34=, $8, $24
1665; NO-SIMD128-NEXT:    i32.const $push89=, 1
1666; NO-SIMD128-NEXT:    i32.add $push35=, $pop34, $pop89
1667; NO-SIMD128-NEXT:    i32.const $push88=, 254
1668; NO-SIMD128-NEXT:    i32.and $push36=, $pop35, $pop88
1669; NO-SIMD128-NEXT:    i32.const $push87=, 1
1670; NO-SIMD128-NEXT:    i32.shr_u $push37=, $pop36, $pop87
1671; NO-SIMD128-NEXT:    i32.store8 7($0), $pop37
1672; NO-SIMD128-NEXT:    i32.add $push38=, $7, $23
1673; NO-SIMD128-NEXT:    i32.const $push86=, 1
1674; NO-SIMD128-NEXT:    i32.add $push39=, $pop38, $pop86
1675; NO-SIMD128-NEXT:    i32.const $push85=, 254
1676; NO-SIMD128-NEXT:    i32.and $push40=, $pop39, $pop85
1677; NO-SIMD128-NEXT:    i32.const $push84=, 1
1678; NO-SIMD128-NEXT:    i32.shr_u $push41=, $pop40, $pop84
1679; NO-SIMD128-NEXT:    i32.store8 6($0), $pop41
1680; NO-SIMD128-NEXT:    i32.add $push42=, $6, $22
1681; NO-SIMD128-NEXT:    i32.const $push83=, 1
1682; NO-SIMD128-NEXT:    i32.add $push43=, $pop42, $pop83
1683; NO-SIMD128-NEXT:    i32.const $push82=, 254
1684; NO-SIMD128-NEXT:    i32.and $push44=, $pop43, $pop82
1685; NO-SIMD128-NEXT:    i32.const $push81=, 1
1686; NO-SIMD128-NEXT:    i32.shr_u $push45=, $pop44, $pop81
1687; NO-SIMD128-NEXT:    i32.store8 5($0), $pop45
1688; NO-SIMD128-NEXT:    i32.add $push46=, $5, $21
1689; NO-SIMD128-NEXT:    i32.const $push80=, 1
1690; NO-SIMD128-NEXT:    i32.add $push47=, $pop46, $pop80
1691; NO-SIMD128-NEXT:    i32.const $push79=, 254
1692; NO-SIMD128-NEXT:    i32.and $push48=, $pop47, $pop79
1693; NO-SIMD128-NEXT:    i32.const $push78=, 1
1694; NO-SIMD128-NEXT:    i32.shr_u $push49=, $pop48, $pop78
1695; NO-SIMD128-NEXT:    i32.store8 4($0), $pop49
1696; NO-SIMD128-NEXT:    i32.add $push50=, $4, $20
1697; NO-SIMD128-NEXT:    i32.const $push77=, 1
1698; NO-SIMD128-NEXT:    i32.add $push51=, $pop50, $pop77
1699; NO-SIMD128-NEXT:    i32.const $push76=, 254
1700; NO-SIMD128-NEXT:    i32.and $push52=, $pop51, $pop76
1701; NO-SIMD128-NEXT:    i32.const $push75=, 1
1702; NO-SIMD128-NEXT:    i32.shr_u $push53=, $pop52, $pop75
1703; NO-SIMD128-NEXT:    i32.store8 3($0), $pop53
1704; NO-SIMD128-NEXT:    i32.add $push54=, $3, $19
1705; NO-SIMD128-NEXT:    i32.const $push74=, 1
1706; NO-SIMD128-NEXT:    i32.add $push55=, $pop54, $pop74
1707; NO-SIMD128-NEXT:    i32.const $push73=, 254
1708; NO-SIMD128-NEXT:    i32.and $push56=, $pop55, $pop73
1709; NO-SIMD128-NEXT:    i32.const $push72=, 1
1710; NO-SIMD128-NEXT:    i32.shr_u $push57=, $pop56, $pop72
1711; NO-SIMD128-NEXT:    i32.store8 2($0), $pop57
1712; NO-SIMD128-NEXT:    i32.add $push58=, $2, $18
1713; NO-SIMD128-NEXT:    i32.const $push71=, 1
1714; NO-SIMD128-NEXT:    i32.add $push59=, $pop58, $pop71
1715; NO-SIMD128-NEXT:    i32.const $push70=, 254
1716; NO-SIMD128-NEXT:    i32.and $push60=, $pop59, $pop70
1717; NO-SIMD128-NEXT:    i32.const $push69=, 1
1718; NO-SIMD128-NEXT:    i32.shr_u $push61=, $pop60, $pop69
1719; NO-SIMD128-NEXT:    i32.store8 1($0), $pop61
1720; NO-SIMD128-NEXT:    i32.add $push62=, $1, $17
1721; NO-SIMD128-NEXT:    i32.const $push68=, 1
1722; NO-SIMD128-NEXT:    i32.add $push63=, $pop62, $pop68
1723; NO-SIMD128-NEXT:    i32.const $push67=, 254
1724; NO-SIMD128-NEXT:    i32.and $push64=, $pop63, $pop67
1725; NO-SIMD128-NEXT:    i32.const $push66=, 1
1726; NO-SIMD128-NEXT:    i32.shr_u $push65=, $pop64, $pop66
1727; NO-SIMD128-NEXT:    i32.store8 0($0), $pop65
1728; NO-SIMD128-NEXT:    return
1729;
1730; NO-SIMD128-FAST-LABEL: avgr_u_v16i8_wrap:
1731; NO-SIMD128-FAST:         .functype avgr_u_v16i8_wrap (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
1732; NO-SIMD128-FAST-NEXT:  # %bb.0:
1733; NO-SIMD128-FAST-NEXT:    i32.add $push0=, $1, $17
1734; NO-SIMD128-FAST-NEXT:    i32.const $push1=, 1
1735; NO-SIMD128-FAST-NEXT:    i32.add $push2=, $pop0, $pop1
1736; NO-SIMD128-FAST-NEXT:    i32.const $push3=, 254
1737; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $pop2, $pop3
1738; NO-SIMD128-FAST-NEXT:    i32.const $push111=, 1
1739; NO-SIMD128-FAST-NEXT:    i32.shr_u $push5=, $pop4, $pop111
1740; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop5
1741; NO-SIMD128-FAST-NEXT:    i32.add $push6=, $2, $18
1742; NO-SIMD128-FAST-NEXT:    i32.const $push110=, 1
1743; NO-SIMD128-FAST-NEXT:    i32.add $push7=, $pop6, $pop110
1744; NO-SIMD128-FAST-NEXT:    i32.const $push109=, 254
1745; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $pop7, $pop109
1746; NO-SIMD128-FAST-NEXT:    i32.const $push108=, 1
1747; NO-SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop108
1748; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop9
1749; NO-SIMD128-FAST-NEXT:    i32.add $push10=, $3, $19
1750; NO-SIMD128-FAST-NEXT:    i32.const $push107=, 1
1751; NO-SIMD128-FAST-NEXT:    i32.add $push11=, $pop10, $pop107
1752; NO-SIMD128-FAST-NEXT:    i32.const $push106=, 254
1753; NO-SIMD128-FAST-NEXT:    i32.and $push12=, $pop11, $pop106
1754; NO-SIMD128-FAST-NEXT:    i32.const $push105=, 1
1755; NO-SIMD128-FAST-NEXT:    i32.shr_u $push13=, $pop12, $pop105
1756; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop13
1757; NO-SIMD128-FAST-NEXT:    i32.add $push14=, $4, $20
1758; NO-SIMD128-FAST-NEXT:    i32.const $push104=, 1
1759; NO-SIMD128-FAST-NEXT:    i32.add $push15=, $pop14, $pop104
1760; NO-SIMD128-FAST-NEXT:    i32.const $push103=, 254
1761; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $pop15, $pop103
1762; NO-SIMD128-FAST-NEXT:    i32.const $push102=, 1
1763; NO-SIMD128-FAST-NEXT:    i32.shr_u $push17=, $pop16, $pop102
1764; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop17
1765; NO-SIMD128-FAST-NEXT:    i32.add $push18=, $5, $21
1766; NO-SIMD128-FAST-NEXT:    i32.const $push101=, 1
1767; NO-SIMD128-FAST-NEXT:    i32.add $push19=, $pop18, $pop101
1768; NO-SIMD128-FAST-NEXT:    i32.const $push100=, 254
1769; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $pop19, $pop100
1770; NO-SIMD128-FAST-NEXT:    i32.const $push99=, 1
1771; NO-SIMD128-FAST-NEXT:    i32.shr_u $push21=, $pop20, $pop99
1772; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop21
1773; NO-SIMD128-FAST-NEXT:    i32.add $push22=, $6, $22
1774; NO-SIMD128-FAST-NEXT:    i32.const $push98=, 1
1775; NO-SIMD128-FAST-NEXT:    i32.add $push23=, $pop22, $pop98
1776; NO-SIMD128-FAST-NEXT:    i32.const $push97=, 254
1777; NO-SIMD128-FAST-NEXT:    i32.and $push24=, $pop23, $pop97
1778; NO-SIMD128-FAST-NEXT:    i32.const $push96=, 1
1779; NO-SIMD128-FAST-NEXT:    i32.shr_u $push25=, $pop24, $pop96
1780; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop25
1781; NO-SIMD128-FAST-NEXT:    i32.add $push26=, $7, $23
1782; NO-SIMD128-FAST-NEXT:    i32.const $push95=, 1
1783; NO-SIMD128-FAST-NEXT:    i32.add $push27=, $pop26, $pop95
1784; NO-SIMD128-FAST-NEXT:    i32.const $push94=, 254
1785; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop94
1786; NO-SIMD128-FAST-NEXT:    i32.const $push93=, 1
1787; NO-SIMD128-FAST-NEXT:    i32.shr_u $push29=, $pop28, $pop93
1788; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop29
1789; NO-SIMD128-FAST-NEXT:    i32.add $push30=, $8, $24
1790; NO-SIMD128-FAST-NEXT:    i32.const $push92=, 1
1791; NO-SIMD128-FAST-NEXT:    i32.add $push31=, $pop30, $pop92
1792; NO-SIMD128-FAST-NEXT:    i32.const $push91=, 254
1793; NO-SIMD128-FAST-NEXT:    i32.and $push32=, $pop31, $pop91
1794; NO-SIMD128-FAST-NEXT:    i32.const $push90=, 1
1795; NO-SIMD128-FAST-NEXT:    i32.shr_u $push33=, $pop32, $pop90
1796; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop33
1797; NO-SIMD128-FAST-NEXT:    i32.add $push34=, $9, $25
1798; NO-SIMD128-FAST-NEXT:    i32.const $push89=, 1
1799; NO-SIMD128-FAST-NEXT:    i32.add $push35=, $pop34, $pop89
1800; NO-SIMD128-FAST-NEXT:    i32.const $push88=, 254
1801; NO-SIMD128-FAST-NEXT:    i32.and $push36=, $pop35, $pop88
1802; NO-SIMD128-FAST-NEXT:    i32.const $push87=, 1
1803; NO-SIMD128-FAST-NEXT:    i32.shr_u $push37=, $pop36, $pop87
1804; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop37
1805; NO-SIMD128-FAST-NEXT:    i32.add $push38=, $10, $26
1806; NO-SIMD128-FAST-NEXT:    i32.const $push86=, 1
1807; NO-SIMD128-FAST-NEXT:    i32.add $push39=, $pop38, $pop86
1808; NO-SIMD128-FAST-NEXT:    i32.const $push85=, 254
1809; NO-SIMD128-FAST-NEXT:    i32.and $push40=, $pop39, $pop85
1810; NO-SIMD128-FAST-NEXT:    i32.const $push84=, 1
1811; NO-SIMD128-FAST-NEXT:    i32.shr_u $push41=, $pop40, $pop84
1812; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop41
1813; NO-SIMD128-FAST-NEXT:    i32.add $push42=, $11, $27
1814; NO-SIMD128-FAST-NEXT:    i32.const $push83=, 1
1815; NO-SIMD128-FAST-NEXT:    i32.add $push43=, $pop42, $pop83
1816; NO-SIMD128-FAST-NEXT:    i32.const $push82=, 254
1817; NO-SIMD128-FAST-NEXT:    i32.and $push44=, $pop43, $pop82
1818; NO-SIMD128-FAST-NEXT:    i32.const $push81=, 1
1819; NO-SIMD128-FAST-NEXT:    i32.shr_u $push45=, $pop44, $pop81
1820; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop45
1821; NO-SIMD128-FAST-NEXT:    i32.add $push46=, $12, $28
1822; NO-SIMD128-FAST-NEXT:    i32.const $push80=, 1
1823; NO-SIMD128-FAST-NEXT:    i32.add $push47=, $pop46, $pop80
1824; NO-SIMD128-FAST-NEXT:    i32.const $push79=, 254
1825; NO-SIMD128-FAST-NEXT:    i32.and $push48=, $pop47, $pop79
1826; NO-SIMD128-FAST-NEXT:    i32.const $push78=, 1
1827; NO-SIMD128-FAST-NEXT:    i32.shr_u $push49=, $pop48, $pop78
1828; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop49
1829; NO-SIMD128-FAST-NEXT:    i32.add $push50=, $13, $29
1830; NO-SIMD128-FAST-NEXT:    i32.const $push77=, 1
1831; NO-SIMD128-FAST-NEXT:    i32.add $push51=, $pop50, $pop77
1832; NO-SIMD128-FAST-NEXT:    i32.const $push76=, 254
1833; NO-SIMD128-FAST-NEXT:    i32.and $push52=, $pop51, $pop76
1834; NO-SIMD128-FAST-NEXT:    i32.const $push75=, 1
1835; NO-SIMD128-FAST-NEXT:    i32.shr_u $push53=, $pop52, $pop75
1836; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop53
1837; NO-SIMD128-FAST-NEXT:    i32.add $push54=, $14, $30
1838; NO-SIMD128-FAST-NEXT:    i32.const $push74=, 1
1839; NO-SIMD128-FAST-NEXT:    i32.add $push55=, $pop54, $pop74
1840; NO-SIMD128-FAST-NEXT:    i32.const $push73=, 254
1841; NO-SIMD128-FAST-NEXT:    i32.and $push56=, $pop55, $pop73
1842; NO-SIMD128-FAST-NEXT:    i32.const $push72=, 1
1843; NO-SIMD128-FAST-NEXT:    i32.shr_u $push57=, $pop56, $pop72
1844; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop57
1845; NO-SIMD128-FAST-NEXT:    i32.add $push58=, $15, $31
1846; NO-SIMD128-FAST-NEXT:    i32.const $push71=, 1
1847; NO-SIMD128-FAST-NEXT:    i32.add $push59=, $pop58, $pop71
1848; NO-SIMD128-FAST-NEXT:    i32.const $push70=, 254
1849; NO-SIMD128-FAST-NEXT:    i32.and $push60=, $pop59, $pop70
1850; NO-SIMD128-FAST-NEXT:    i32.const $push69=, 1
1851; NO-SIMD128-FAST-NEXT:    i32.shr_u $push61=, $pop60, $pop69
1852; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop61
1853; NO-SIMD128-FAST-NEXT:    i32.add $push62=, $16, $32
1854; NO-SIMD128-FAST-NEXT:    i32.const $push68=, 1
1855; NO-SIMD128-FAST-NEXT:    i32.add $push63=, $pop62, $pop68
1856; NO-SIMD128-FAST-NEXT:    i32.const $push67=, 254
1857; NO-SIMD128-FAST-NEXT:    i32.and $push64=, $pop63, $pop67
1858; NO-SIMD128-FAST-NEXT:    i32.const $push66=, 1
1859; NO-SIMD128-FAST-NEXT:    i32.shr_u $push65=, $pop64, $pop66
1860; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop65
1861; NO-SIMD128-FAST-NEXT:    return
1862  %a = add <16 x i8> %x, %y
1863  %b = add <16 x i8> %a, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1,
1864                          i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1865  %c = udiv <16 x i8> %b, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2,
1866                           i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
1867  ret <16 x i8> %c
1868}
1869
1870define <16 x i8> @abs_v16i8(<16 x i8> %x) {
1871; SIMD128-LABEL: abs_v16i8:
1872; SIMD128:         .functype abs_v16i8 (v128) -> (v128)
1873; SIMD128-NEXT:  # %bb.0:
1874; SIMD128-NEXT:    i8x16.abs $push0=, $0
1875; SIMD128-NEXT:    return $pop0
1876;
1877; SIMD128-FAST-LABEL: abs_v16i8:
1878; SIMD128-FAST:         .functype abs_v16i8 (v128) -> (v128)
1879; SIMD128-FAST-NEXT:  # %bb.0:
1880; SIMD128-FAST-NEXT:    i8x16.abs $push0=, $0
1881; SIMD128-FAST-NEXT:    return $pop0
1882;
1883; NO-SIMD128-LABEL: abs_v16i8:
1884; NO-SIMD128:         .functype abs_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
1885; NO-SIMD128-NEXT:  # %bb.0:
1886; NO-SIMD128-NEXT:    i32.extend8_s $push0=, $16
1887; NO-SIMD128-NEXT:    i32.const $push1=, 7
1888; NO-SIMD128-NEXT:    i32.shr_s $push95=, $pop0, $pop1
1889; NO-SIMD128-NEXT:    local.tee $push94=, $17=, $pop95
1890; NO-SIMD128-NEXT:    i32.xor $push2=, $16, $pop94
1891; NO-SIMD128-NEXT:    i32.sub $push3=, $pop2, $17
1892; NO-SIMD128-NEXT:    i32.store8 15($0), $pop3
1893; NO-SIMD128-NEXT:    i32.extend8_s $push4=, $15
1894; NO-SIMD128-NEXT:    i32.const $push93=, 7
1895; NO-SIMD128-NEXT:    i32.shr_s $push92=, $pop4, $pop93
1896; NO-SIMD128-NEXT:    local.tee $push91=, $16=, $pop92
1897; NO-SIMD128-NEXT:    i32.xor $push5=, $15, $pop91
1898; NO-SIMD128-NEXT:    i32.sub $push6=, $pop5, $16
1899; NO-SIMD128-NEXT:    i32.store8 14($0), $pop6
1900; NO-SIMD128-NEXT:    i32.extend8_s $push7=, $14
1901; NO-SIMD128-NEXT:    i32.const $push90=, 7
1902; NO-SIMD128-NEXT:    i32.shr_s $push89=, $pop7, $pop90
1903; NO-SIMD128-NEXT:    local.tee $push88=, $16=, $pop89
1904; NO-SIMD128-NEXT:    i32.xor $push8=, $14, $pop88
1905; NO-SIMD128-NEXT:    i32.sub $push9=, $pop8, $16
1906; NO-SIMD128-NEXT:    i32.store8 13($0), $pop9
1907; NO-SIMD128-NEXT:    i32.extend8_s $push10=, $13
1908; NO-SIMD128-NEXT:    i32.const $push87=, 7
1909; NO-SIMD128-NEXT:    i32.shr_s $push86=, $pop10, $pop87
1910; NO-SIMD128-NEXT:    local.tee $push85=, $16=, $pop86
1911; NO-SIMD128-NEXT:    i32.xor $push11=, $13, $pop85
1912; NO-SIMD128-NEXT:    i32.sub $push12=, $pop11, $16
1913; NO-SIMD128-NEXT:    i32.store8 12($0), $pop12
1914; NO-SIMD128-NEXT:    i32.extend8_s $push13=, $12
1915; NO-SIMD128-NEXT:    i32.const $push84=, 7
1916; NO-SIMD128-NEXT:    i32.shr_s $push83=, $pop13, $pop84
1917; NO-SIMD128-NEXT:    local.tee $push82=, $16=, $pop83
1918; NO-SIMD128-NEXT:    i32.xor $push14=, $12, $pop82
1919; NO-SIMD128-NEXT:    i32.sub $push15=, $pop14, $16
1920; NO-SIMD128-NEXT:    i32.store8 11($0), $pop15
1921; NO-SIMD128-NEXT:    i32.extend8_s $push16=, $11
1922; NO-SIMD128-NEXT:    i32.const $push81=, 7
1923; NO-SIMD128-NEXT:    i32.shr_s $push80=, $pop16, $pop81
1924; NO-SIMD128-NEXT:    local.tee $push79=, $16=, $pop80
1925; NO-SIMD128-NEXT:    i32.xor $push17=, $11, $pop79
1926; NO-SIMD128-NEXT:    i32.sub $push18=, $pop17, $16
1927; NO-SIMD128-NEXT:    i32.store8 10($0), $pop18
1928; NO-SIMD128-NEXT:    i32.extend8_s $push19=, $10
1929; NO-SIMD128-NEXT:    i32.const $push78=, 7
1930; NO-SIMD128-NEXT:    i32.shr_s $push77=, $pop19, $pop78
1931; NO-SIMD128-NEXT:    local.tee $push76=, $16=, $pop77
1932; NO-SIMD128-NEXT:    i32.xor $push20=, $10, $pop76
1933; NO-SIMD128-NEXT:    i32.sub $push21=, $pop20, $16
1934; NO-SIMD128-NEXT:    i32.store8 9($0), $pop21
1935; NO-SIMD128-NEXT:    i32.extend8_s $push22=, $9
1936; NO-SIMD128-NEXT:    i32.const $push75=, 7
1937; NO-SIMD128-NEXT:    i32.shr_s $push74=, $pop22, $pop75
1938; NO-SIMD128-NEXT:    local.tee $push73=, $16=, $pop74
1939; NO-SIMD128-NEXT:    i32.xor $push23=, $9, $pop73
1940; NO-SIMD128-NEXT:    i32.sub $push24=, $pop23, $16
1941; NO-SIMD128-NEXT:    i32.store8 8($0), $pop24
1942; NO-SIMD128-NEXT:    i32.extend8_s $push25=, $8
1943; NO-SIMD128-NEXT:    i32.const $push72=, 7
1944; NO-SIMD128-NEXT:    i32.shr_s $push71=, $pop25, $pop72
1945; NO-SIMD128-NEXT:    local.tee $push70=, $16=, $pop71
1946; NO-SIMD128-NEXT:    i32.xor $push26=, $8, $pop70
1947; NO-SIMD128-NEXT:    i32.sub $push27=, $pop26, $16
1948; NO-SIMD128-NEXT:    i32.store8 7($0), $pop27
1949; NO-SIMD128-NEXT:    i32.extend8_s $push28=, $7
1950; NO-SIMD128-NEXT:    i32.const $push69=, 7
1951; NO-SIMD128-NEXT:    i32.shr_s $push68=, $pop28, $pop69
1952; NO-SIMD128-NEXT:    local.tee $push67=, $16=, $pop68
1953; NO-SIMD128-NEXT:    i32.xor $push29=, $7, $pop67
1954; NO-SIMD128-NEXT:    i32.sub $push30=, $pop29, $16
1955; NO-SIMD128-NEXT:    i32.store8 6($0), $pop30
1956; NO-SIMD128-NEXT:    i32.extend8_s $push31=, $6
1957; NO-SIMD128-NEXT:    i32.const $push66=, 7
1958; NO-SIMD128-NEXT:    i32.shr_s $push65=, $pop31, $pop66
1959; NO-SIMD128-NEXT:    local.tee $push64=, $16=, $pop65
1960; NO-SIMD128-NEXT:    i32.xor $push32=, $6, $pop64
1961; NO-SIMD128-NEXT:    i32.sub $push33=, $pop32, $16
1962; NO-SIMD128-NEXT:    i32.store8 5($0), $pop33
1963; NO-SIMD128-NEXT:    i32.extend8_s $push34=, $5
1964; NO-SIMD128-NEXT:    i32.const $push63=, 7
1965; NO-SIMD128-NEXT:    i32.shr_s $push62=, $pop34, $pop63
1966; NO-SIMD128-NEXT:    local.tee $push61=, $16=, $pop62
1967; NO-SIMD128-NEXT:    i32.xor $push35=, $5, $pop61
1968; NO-SIMD128-NEXT:    i32.sub $push36=, $pop35, $16
1969; NO-SIMD128-NEXT:    i32.store8 4($0), $pop36
1970; NO-SIMD128-NEXT:    i32.extend8_s $push37=, $4
1971; NO-SIMD128-NEXT:    i32.const $push60=, 7
1972; NO-SIMD128-NEXT:    i32.shr_s $push59=, $pop37, $pop60
1973; NO-SIMD128-NEXT:    local.tee $push58=, $16=, $pop59
1974; NO-SIMD128-NEXT:    i32.xor $push38=, $4, $pop58
1975; NO-SIMD128-NEXT:    i32.sub $push39=, $pop38, $16
1976; NO-SIMD128-NEXT:    i32.store8 3($0), $pop39
1977; NO-SIMD128-NEXT:    i32.extend8_s $push40=, $3
1978; NO-SIMD128-NEXT:    i32.const $push57=, 7
1979; NO-SIMD128-NEXT:    i32.shr_s $push56=, $pop40, $pop57
1980; NO-SIMD128-NEXT:    local.tee $push55=, $16=, $pop56
1981; NO-SIMD128-NEXT:    i32.xor $push41=, $3, $pop55
1982; NO-SIMD128-NEXT:    i32.sub $push42=, $pop41, $16
1983; NO-SIMD128-NEXT:    i32.store8 2($0), $pop42
1984; NO-SIMD128-NEXT:    i32.extend8_s $push43=, $2
1985; NO-SIMD128-NEXT:    i32.const $push54=, 7
1986; NO-SIMD128-NEXT:    i32.shr_s $push53=, $pop43, $pop54
1987; NO-SIMD128-NEXT:    local.tee $push52=, $16=, $pop53
1988; NO-SIMD128-NEXT:    i32.xor $push44=, $2, $pop52
1989; NO-SIMD128-NEXT:    i32.sub $push45=, $pop44, $16
1990; NO-SIMD128-NEXT:    i32.store8 1($0), $pop45
1991; NO-SIMD128-NEXT:    i32.extend8_s $push46=, $1
1992; NO-SIMD128-NEXT:    i32.const $push51=, 7
1993; NO-SIMD128-NEXT:    i32.shr_s $push50=, $pop46, $pop51
1994; NO-SIMD128-NEXT:    local.tee $push49=, $16=, $pop50
1995; NO-SIMD128-NEXT:    i32.xor $push47=, $1, $pop49
1996; NO-SIMD128-NEXT:    i32.sub $push48=, $pop47, $16
1997; NO-SIMD128-NEXT:    i32.store8 0($0), $pop48
1998; NO-SIMD128-NEXT:    return
1999;
2000; NO-SIMD128-FAST-LABEL: abs_v16i8:
2001; NO-SIMD128-FAST:         .functype abs_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2002; NO-SIMD128-FAST-NEXT:  # %bb.0:
2003; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push0=, $1
2004; NO-SIMD128-FAST-NEXT:    i32.const $push1=, 7
2005; NO-SIMD128-FAST-NEXT:    i32.shr_s $push95=, $pop0, $pop1
2006; NO-SIMD128-FAST-NEXT:    local.tee $push94=, $17=, $pop95
2007; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $1, $pop94
2008; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $pop2, $17
2009; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop3
2010; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push4=, $2
2011; NO-SIMD128-FAST-NEXT:    i32.const $push93=, 7
2012; NO-SIMD128-FAST-NEXT:    i32.shr_s $push92=, $pop4, $pop93
2013; NO-SIMD128-FAST-NEXT:    local.tee $push91=, $1=, $pop92
2014; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $2, $pop91
2015; NO-SIMD128-FAST-NEXT:    i32.sub $push6=, $pop5, $1
2016; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop6
2017; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push7=, $3
2018; NO-SIMD128-FAST-NEXT:    i32.const $push90=, 7
2019; NO-SIMD128-FAST-NEXT:    i32.shr_s $push89=, $pop7, $pop90
2020; NO-SIMD128-FAST-NEXT:    local.tee $push88=, $2=, $pop89
2021; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $3, $pop88
2022; NO-SIMD128-FAST-NEXT:    i32.sub $push9=, $pop8, $2
2023; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop9
2024; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push10=, $4
2025; NO-SIMD128-FAST-NEXT:    i32.const $push87=, 7
2026; NO-SIMD128-FAST-NEXT:    i32.shr_s $push86=, $pop10, $pop87
2027; NO-SIMD128-FAST-NEXT:    local.tee $push85=, $3=, $pop86
2028; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $4, $pop85
2029; NO-SIMD128-FAST-NEXT:    i32.sub $push12=, $pop11, $3
2030; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop12
2031; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push13=, $5
2032; NO-SIMD128-FAST-NEXT:    i32.const $push84=, 7
2033; NO-SIMD128-FAST-NEXT:    i32.shr_s $push83=, $pop13, $pop84
2034; NO-SIMD128-FAST-NEXT:    local.tee $push82=, $4=, $pop83
2035; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $5, $pop82
2036; NO-SIMD128-FAST-NEXT:    i32.sub $push15=, $pop14, $4
2037; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop15
2038; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push16=, $6
2039; NO-SIMD128-FAST-NEXT:    i32.const $push81=, 7
2040; NO-SIMD128-FAST-NEXT:    i32.shr_s $push80=, $pop16, $pop81
2041; NO-SIMD128-FAST-NEXT:    local.tee $push79=, $5=, $pop80
2042; NO-SIMD128-FAST-NEXT:    i32.xor $push17=, $6, $pop79
2043; NO-SIMD128-FAST-NEXT:    i32.sub $push18=, $pop17, $5
2044; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop18
2045; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push19=, $7
2046; NO-SIMD128-FAST-NEXT:    i32.const $push78=, 7
2047; NO-SIMD128-FAST-NEXT:    i32.shr_s $push77=, $pop19, $pop78
2048; NO-SIMD128-FAST-NEXT:    local.tee $push76=, $6=, $pop77
2049; NO-SIMD128-FAST-NEXT:    i32.xor $push20=, $7, $pop76
2050; NO-SIMD128-FAST-NEXT:    i32.sub $push21=, $pop20, $6
2051; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop21
2052; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push22=, $8
2053; NO-SIMD128-FAST-NEXT:    i32.const $push75=, 7
2054; NO-SIMD128-FAST-NEXT:    i32.shr_s $push74=, $pop22, $pop75
2055; NO-SIMD128-FAST-NEXT:    local.tee $push73=, $7=, $pop74
2056; NO-SIMD128-FAST-NEXT:    i32.xor $push23=, $8, $pop73
2057; NO-SIMD128-FAST-NEXT:    i32.sub $push24=, $pop23, $7
2058; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop24
2059; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push25=, $9
2060; NO-SIMD128-FAST-NEXT:    i32.const $push72=, 7
2061; NO-SIMD128-FAST-NEXT:    i32.shr_s $push71=, $pop25, $pop72
2062; NO-SIMD128-FAST-NEXT:    local.tee $push70=, $8=, $pop71
2063; NO-SIMD128-FAST-NEXT:    i32.xor $push26=, $9, $pop70
2064; NO-SIMD128-FAST-NEXT:    i32.sub $push27=, $pop26, $8
2065; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop27
2066; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push28=, $10
2067; NO-SIMD128-FAST-NEXT:    i32.const $push69=, 7
2068; NO-SIMD128-FAST-NEXT:    i32.shr_s $push68=, $pop28, $pop69
2069; NO-SIMD128-FAST-NEXT:    local.tee $push67=, $9=, $pop68
2070; NO-SIMD128-FAST-NEXT:    i32.xor $push29=, $10, $pop67
2071; NO-SIMD128-FAST-NEXT:    i32.sub $push30=, $pop29, $9
2072; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop30
2073; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push31=, $11
2074; NO-SIMD128-FAST-NEXT:    i32.const $push66=, 7
2075; NO-SIMD128-FAST-NEXT:    i32.shr_s $push65=, $pop31, $pop66
2076; NO-SIMD128-FAST-NEXT:    local.tee $push64=, $10=, $pop65
2077; NO-SIMD128-FAST-NEXT:    i32.xor $push32=, $11, $pop64
2078; NO-SIMD128-FAST-NEXT:    i32.sub $push33=, $pop32, $10
2079; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop33
2080; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push34=, $12
2081; NO-SIMD128-FAST-NEXT:    i32.const $push63=, 7
2082; NO-SIMD128-FAST-NEXT:    i32.shr_s $push62=, $pop34, $pop63
2083; NO-SIMD128-FAST-NEXT:    local.tee $push61=, $11=, $pop62
2084; NO-SIMD128-FAST-NEXT:    i32.xor $push35=, $12, $pop61
2085; NO-SIMD128-FAST-NEXT:    i32.sub $push36=, $pop35, $11
2086; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop36
2087; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push37=, $13
2088; NO-SIMD128-FAST-NEXT:    i32.const $push60=, 7
2089; NO-SIMD128-FAST-NEXT:    i32.shr_s $push59=, $pop37, $pop60
2090; NO-SIMD128-FAST-NEXT:    local.tee $push58=, $12=, $pop59
2091; NO-SIMD128-FAST-NEXT:    i32.xor $push38=, $13, $pop58
2092; NO-SIMD128-FAST-NEXT:    i32.sub $push39=, $pop38, $12
2093; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop39
2094; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push40=, $14
2095; NO-SIMD128-FAST-NEXT:    i32.const $push57=, 7
2096; NO-SIMD128-FAST-NEXT:    i32.shr_s $push56=, $pop40, $pop57
2097; NO-SIMD128-FAST-NEXT:    local.tee $push55=, $13=, $pop56
2098; NO-SIMD128-FAST-NEXT:    i32.xor $push41=, $14, $pop55
2099; NO-SIMD128-FAST-NEXT:    i32.sub $push42=, $pop41, $13
2100; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop42
2101; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push43=, $15
2102; NO-SIMD128-FAST-NEXT:    i32.const $push54=, 7
2103; NO-SIMD128-FAST-NEXT:    i32.shr_s $push53=, $pop43, $pop54
2104; NO-SIMD128-FAST-NEXT:    local.tee $push52=, $14=, $pop53
2105; NO-SIMD128-FAST-NEXT:    i32.xor $push44=, $15, $pop52
2106; NO-SIMD128-FAST-NEXT:    i32.sub $push45=, $pop44, $14
2107; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop45
2108; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push46=, $16
2109; NO-SIMD128-FAST-NEXT:    i32.const $push51=, 7
2110; NO-SIMD128-FAST-NEXT:    i32.shr_s $push50=, $pop46, $pop51
2111; NO-SIMD128-FAST-NEXT:    local.tee $push49=, $15=, $pop50
2112; NO-SIMD128-FAST-NEXT:    i32.xor $push47=, $16, $pop49
2113; NO-SIMD128-FAST-NEXT:    i32.sub $push48=, $pop47, $15
2114; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop48
2115; NO-SIMD128-FAST-NEXT:    return
2116  %a = sub <16 x i8> zeroinitializer, %x
2117  %b = icmp slt <16 x i8> %x, zeroinitializer
2118  %c = select <16 x i1> %b, <16 x i8> %a, <16 x i8> %x
2119  ret <16 x i8> %c
2120}
2121
2122define <16 x i8> @neg_v16i8(<16 x i8> %x) {
2123; SIMD128-LABEL: neg_v16i8:
2124; SIMD128:         .functype neg_v16i8 (v128) -> (v128)
2125; SIMD128-NEXT:  # %bb.0:
2126; SIMD128-NEXT:    i8x16.neg $push0=, $0
2127; SIMD128-NEXT:    return $pop0
2128;
2129; SIMD128-FAST-LABEL: neg_v16i8:
2130; SIMD128-FAST:         .functype neg_v16i8 (v128) -> (v128)
2131; SIMD128-FAST-NEXT:  # %bb.0:
2132; SIMD128-FAST-NEXT:    i8x16.neg $push0=, $0
2133; SIMD128-FAST-NEXT:    return $pop0
2134;
2135; NO-SIMD128-LABEL: neg_v16i8:
2136; NO-SIMD128:         .functype neg_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2137; NO-SIMD128-NEXT:  # %bb.0:
2138; NO-SIMD128-NEXT:    i32.const $push0=, 0
2139; NO-SIMD128-NEXT:    i32.sub $push1=, $pop0, $16
2140; NO-SIMD128-NEXT:    i32.store8 15($0), $pop1
2141; NO-SIMD128-NEXT:    i32.const $push31=, 0
2142; NO-SIMD128-NEXT:    i32.sub $push2=, $pop31, $15
2143; NO-SIMD128-NEXT:    i32.store8 14($0), $pop2
2144; NO-SIMD128-NEXT:    i32.const $push30=, 0
2145; NO-SIMD128-NEXT:    i32.sub $push3=, $pop30, $14
2146; NO-SIMD128-NEXT:    i32.store8 13($0), $pop3
2147; NO-SIMD128-NEXT:    i32.const $push29=, 0
2148; NO-SIMD128-NEXT:    i32.sub $push4=, $pop29, $13
2149; NO-SIMD128-NEXT:    i32.store8 12($0), $pop4
2150; NO-SIMD128-NEXT:    i32.const $push28=, 0
2151; NO-SIMD128-NEXT:    i32.sub $push5=, $pop28, $12
2152; NO-SIMD128-NEXT:    i32.store8 11($0), $pop5
2153; NO-SIMD128-NEXT:    i32.const $push27=, 0
2154; NO-SIMD128-NEXT:    i32.sub $push6=, $pop27, $11
2155; NO-SIMD128-NEXT:    i32.store8 10($0), $pop6
2156; NO-SIMD128-NEXT:    i32.const $push26=, 0
2157; NO-SIMD128-NEXT:    i32.sub $push7=, $pop26, $10
2158; NO-SIMD128-NEXT:    i32.store8 9($0), $pop7
2159; NO-SIMD128-NEXT:    i32.const $push25=, 0
2160; NO-SIMD128-NEXT:    i32.sub $push8=, $pop25, $9
2161; NO-SIMD128-NEXT:    i32.store8 8($0), $pop8
2162; NO-SIMD128-NEXT:    i32.const $push24=, 0
2163; NO-SIMD128-NEXT:    i32.sub $push9=, $pop24, $8
2164; NO-SIMD128-NEXT:    i32.store8 7($0), $pop9
2165; NO-SIMD128-NEXT:    i32.const $push23=, 0
2166; NO-SIMD128-NEXT:    i32.sub $push10=, $pop23, $7
2167; NO-SIMD128-NEXT:    i32.store8 6($0), $pop10
2168; NO-SIMD128-NEXT:    i32.const $push22=, 0
2169; NO-SIMD128-NEXT:    i32.sub $push11=, $pop22, $6
2170; NO-SIMD128-NEXT:    i32.store8 5($0), $pop11
2171; NO-SIMD128-NEXT:    i32.const $push21=, 0
2172; NO-SIMD128-NEXT:    i32.sub $push12=, $pop21, $5
2173; NO-SIMD128-NEXT:    i32.store8 4($0), $pop12
2174; NO-SIMD128-NEXT:    i32.const $push20=, 0
2175; NO-SIMD128-NEXT:    i32.sub $push13=, $pop20, $4
2176; NO-SIMD128-NEXT:    i32.store8 3($0), $pop13
2177; NO-SIMD128-NEXT:    i32.const $push19=, 0
2178; NO-SIMD128-NEXT:    i32.sub $push14=, $pop19, $3
2179; NO-SIMD128-NEXT:    i32.store8 2($0), $pop14
2180; NO-SIMD128-NEXT:    i32.const $push18=, 0
2181; NO-SIMD128-NEXT:    i32.sub $push15=, $pop18, $2
2182; NO-SIMD128-NEXT:    i32.store8 1($0), $pop15
2183; NO-SIMD128-NEXT:    i32.const $push17=, 0
2184; NO-SIMD128-NEXT:    i32.sub $push16=, $pop17, $1
2185; NO-SIMD128-NEXT:    i32.store8 0($0), $pop16
2186; NO-SIMD128-NEXT:    return
2187;
2188; NO-SIMD128-FAST-LABEL: neg_v16i8:
2189; NO-SIMD128-FAST:         .functype neg_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2190; NO-SIMD128-FAST-NEXT:  # %bb.0:
2191; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 0
2192; NO-SIMD128-FAST-NEXT:    i32.sub $push1=, $pop0, $1
2193; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop1
2194; NO-SIMD128-FAST-NEXT:    i32.const $push31=, 0
2195; NO-SIMD128-FAST-NEXT:    i32.sub $push2=, $pop31, $2
2196; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop2
2197; NO-SIMD128-FAST-NEXT:    i32.const $push30=, 0
2198; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $pop30, $3
2199; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop3
2200; NO-SIMD128-FAST-NEXT:    i32.const $push29=, 0
2201; NO-SIMD128-FAST-NEXT:    i32.sub $push4=, $pop29, $4
2202; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop4
2203; NO-SIMD128-FAST-NEXT:    i32.const $push28=, 0
2204; NO-SIMD128-FAST-NEXT:    i32.sub $push5=, $pop28, $5
2205; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop5
2206; NO-SIMD128-FAST-NEXT:    i32.const $push27=, 0
2207; NO-SIMD128-FAST-NEXT:    i32.sub $push6=, $pop27, $6
2208; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop6
2209; NO-SIMD128-FAST-NEXT:    i32.const $push26=, 0
2210; NO-SIMD128-FAST-NEXT:    i32.sub $push7=, $pop26, $7
2211; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop7
2212; NO-SIMD128-FAST-NEXT:    i32.const $push25=, 0
2213; NO-SIMD128-FAST-NEXT:    i32.sub $push8=, $pop25, $8
2214; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop8
2215; NO-SIMD128-FAST-NEXT:    i32.const $push24=, 0
2216; NO-SIMD128-FAST-NEXT:    i32.sub $push9=, $pop24, $9
2217; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop9
2218; NO-SIMD128-FAST-NEXT:    i32.const $push23=, 0
2219; NO-SIMD128-FAST-NEXT:    i32.sub $push10=, $pop23, $10
2220; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop10
2221; NO-SIMD128-FAST-NEXT:    i32.const $push22=, 0
2222; NO-SIMD128-FAST-NEXT:    i32.sub $push11=, $pop22, $11
2223; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop11
2224; NO-SIMD128-FAST-NEXT:    i32.const $push21=, 0
2225; NO-SIMD128-FAST-NEXT:    i32.sub $push12=, $pop21, $12
2226; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop12
2227; NO-SIMD128-FAST-NEXT:    i32.const $push20=, 0
2228; NO-SIMD128-FAST-NEXT:    i32.sub $push13=, $pop20, $13
2229; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop13
2230; NO-SIMD128-FAST-NEXT:    i32.const $push19=, 0
2231; NO-SIMD128-FAST-NEXT:    i32.sub $push14=, $pop19, $14
2232; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop14
2233; NO-SIMD128-FAST-NEXT:    i32.const $push18=, 0
2234; NO-SIMD128-FAST-NEXT:    i32.sub $push15=, $pop18, $15
2235; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop15
2236; NO-SIMD128-FAST-NEXT:    i32.const $push17=, 0
2237; NO-SIMD128-FAST-NEXT:    i32.sub $push16=, $pop17, $16
2238; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop16
2239; NO-SIMD128-FAST-NEXT:    return
2240  %a = sub <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0,
2241                      i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>,
2242                     %x
2243  ret <16 x i8> %a
2244}
2245
2246define <16 x i8> @shl_v16i8(<16 x i8> %v, i8 %x) {
2247; SIMD128-LABEL: shl_v16i8:
2248; SIMD128:         .functype shl_v16i8 (v128, i32) -> (v128)
2249; SIMD128-NEXT:  # %bb.0:
2250; SIMD128-NEXT:    i8x16.shl $push0=, $0, $1
2251; SIMD128-NEXT:    return $pop0
2252;
2253; SIMD128-FAST-LABEL: shl_v16i8:
2254; SIMD128-FAST:         .functype shl_v16i8 (v128, i32) -> (v128)
2255; SIMD128-FAST-NEXT:  # %bb.0:
2256; SIMD128-FAST-NEXT:    i8x16.shl $push0=, $0, $1
2257; SIMD128-FAST-NEXT:    return $pop0
2258;
2259; NO-SIMD128-LABEL: shl_v16i8:
2260; NO-SIMD128:         .functype shl_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2261; NO-SIMD128-NEXT:  # %bb.0:
2262; NO-SIMD128-NEXT:    i32.const $push0=, 255
2263; NO-SIMD128-NEXT:    i32.and $push18=, $17, $pop0
2264; NO-SIMD128-NEXT:    local.tee $push17=, $17=, $pop18
2265; NO-SIMD128-NEXT:    i32.shl $push1=, $16, $pop17
2266; NO-SIMD128-NEXT:    i32.store8 15($0), $pop1
2267; NO-SIMD128-NEXT:    i32.shl $push2=, $15, $17
2268; NO-SIMD128-NEXT:    i32.store8 14($0), $pop2
2269; NO-SIMD128-NEXT:    i32.shl $push3=, $14, $17
2270; NO-SIMD128-NEXT:    i32.store8 13($0), $pop3
2271; NO-SIMD128-NEXT:    i32.shl $push4=, $13, $17
2272; NO-SIMD128-NEXT:    i32.store8 12($0), $pop4
2273; NO-SIMD128-NEXT:    i32.shl $push5=, $12, $17
2274; NO-SIMD128-NEXT:    i32.store8 11($0), $pop5
2275; NO-SIMD128-NEXT:    i32.shl $push6=, $11, $17
2276; NO-SIMD128-NEXT:    i32.store8 10($0), $pop6
2277; NO-SIMD128-NEXT:    i32.shl $push7=, $10, $17
2278; NO-SIMD128-NEXT:    i32.store8 9($0), $pop7
2279; NO-SIMD128-NEXT:    i32.shl $push8=, $9, $17
2280; NO-SIMD128-NEXT:    i32.store8 8($0), $pop8
2281; NO-SIMD128-NEXT:    i32.shl $push9=, $8, $17
2282; NO-SIMD128-NEXT:    i32.store8 7($0), $pop9
2283; NO-SIMD128-NEXT:    i32.shl $push10=, $7, $17
2284; NO-SIMD128-NEXT:    i32.store8 6($0), $pop10
2285; NO-SIMD128-NEXT:    i32.shl $push11=, $6, $17
2286; NO-SIMD128-NEXT:    i32.store8 5($0), $pop11
2287; NO-SIMD128-NEXT:    i32.shl $push12=, $5, $17
2288; NO-SIMD128-NEXT:    i32.store8 4($0), $pop12
2289; NO-SIMD128-NEXT:    i32.shl $push13=, $4, $17
2290; NO-SIMD128-NEXT:    i32.store8 3($0), $pop13
2291; NO-SIMD128-NEXT:    i32.shl $push14=, $3, $17
2292; NO-SIMD128-NEXT:    i32.store8 2($0), $pop14
2293; NO-SIMD128-NEXT:    i32.shl $push15=, $2, $17
2294; NO-SIMD128-NEXT:    i32.store8 1($0), $pop15
2295; NO-SIMD128-NEXT:    i32.shl $push16=, $1, $17
2296; NO-SIMD128-NEXT:    i32.store8 0($0), $pop16
2297; NO-SIMD128-NEXT:    return
2298;
2299; NO-SIMD128-FAST-LABEL: shl_v16i8:
2300; NO-SIMD128-FAST:         .functype shl_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2301; NO-SIMD128-FAST-NEXT:  # %bb.0:
2302; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
2303; NO-SIMD128-FAST-NEXT:    i32.and $push18=, $17, $pop0
2304; NO-SIMD128-FAST-NEXT:    local.tee $push17=, $17=, $pop18
2305; NO-SIMD128-FAST-NEXT:    i32.shl $push1=, $2, $pop17
2306; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop1
2307; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $1, $17
2308; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop2
2309; NO-SIMD128-FAST-NEXT:    i32.shl $push3=, $3, $17
2310; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop3
2311; NO-SIMD128-FAST-NEXT:    i32.shl $push4=, $4, $17
2312; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop4
2313; NO-SIMD128-FAST-NEXT:    i32.shl $push5=, $5, $17
2314; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop5
2315; NO-SIMD128-FAST-NEXT:    i32.shl $push6=, $6, $17
2316; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop6
2317; NO-SIMD128-FAST-NEXT:    i32.shl $push7=, $7, $17
2318; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop7
2319; NO-SIMD128-FAST-NEXT:    i32.shl $push8=, $8, $17
2320; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop8
2321; NO-SIMD128-FAST-NEXT:    i32.shl $push9=, $9, $17
2322; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop9
2323; NO-SIMD128-FAST-NEXT:    i32.shl $push10=, $10, $17
2324; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop10
2325; NO-SIMD128-FAST-NEXT:    i32.shl $push11=, $11, $17
2326; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop11
2327; NO-SIMD128-FAST-NEXT:    i32.shl $push12=, $12, $17
2328; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop12
2329; NO-SIMD128-FAST-NEXT:    i32.shl $push13=, $13, $17
2330; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop13
2331; NO-SIMD128-FAST-NEXT:    i32.shl $push14=, $14, $17
2332; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop14
2333; NO-SIMD128-FAST-NEXT:    i32.shl $push15=, $15, $17
2334; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop15
2335; NO-SIMD128-FAST-NEXT:    i32.shl $push16=, $16, $17
2336; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop16
2337; NO-SIMD128-FAST-NEXT:    return
2338  %t = insertelement <16 x i8> undef, i8 %x, i32 0
2339  %s = shufflevector <16 x i8> %t, <16 x i8> undef,
2340    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,
2341                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
2342  %a = shl <16 x i8> %v, %s
2343  ret <16 x i8> %a
2344}
2345
2346define <16 x i8> @shl_const_v16i8(<16 x i8> %v) {
2347; SIMD128-LABEL: shl_const_v16i8:
2348; SIMD128:         .functype shl_const_v16i8 (v128) -> (v128)
2349; SIMD128-NEXT:  # %bb.0:
2350; SIMD128-NEXT:    i32.const $push0=, 5
2351; SIMD128-NEXT:    i8x16.shl $push1=, $0, $pop0
2352; SIMD128-NEXT:    return $pop1
2353;
2354; SIMD128-FAST-LABEL: shl_const_v16i8:
2355; SIMD128-FAST:         .functype shl_const_v16i8 (v128) -> (v128)
2356; SIMD128-FAST-NEXT:  # %bb.0:
2357; SIMD128-FAST-NEXT:    i32.const $push1=, 5
2358; SIMD128-FAST-NEXT:    i8x16.shl $push0=, $0, $pop1
2359; SIMD128-FAST-NEXT:    return $pop0
2360;
2361; NO-SIMD128-LABEL: shl_const_v16i8:
2362; NO-SIMD128:         .functype shl_const_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2363; NO-SIMD128-NEXT:  # %bb.0:
2364; NO-SIMD128-NEXT:    i32.const $push0=, 5
2365; NO-SIMD128-NEXT:    i32.shl $push1=, $16, $pop0
2366; NO-SIMD128-NEXT:    i32.store8 15($0), $pop1
2367; NO-SIMD128-NEXT:    i32.const $push31=, 5
2368; NO-SIMD128-NEXT:    i32.shl $push2=, $15, $pop31
2369; NO-SIMD128-NEXT:    i32.store8 14($0), $pop2
2370; NO-SIMD128-NEXT:    i32.const $push30=, 5
2371; NO-SIMD128-NEXT:    i32.shl $push3=, $14, $pop30
2372; NO-SIMD128-NEXT:    i32.store8 13($0), $pop3
2373; NO-SIMD128-NEXT:    i32.const $push29=, 5
2374; NO-SIMD128-NEXT:    i32.shl $push4=, $13, $pop29
2375; NO-SIMD128-NEXT:    i32.store8 12($0), $pop4
2376; NO-SIMD128-NEXT:    i32.const $push28=, 5
2377; NO-SIMD128-NEXT:    i32.shl $push5=, $12, $pop28
2378; NO-SIMD128-NEXT:    i32.store8 11($0), $pop5
2379; NO-SIMD128-NEXT:    i32.const $push27=, 5
2380; NO-SIMD128-NEXT:    i32.shl $push6=, $11, $pop27
2381; NO-SIMD128-NEXT:    i32.store8 10($0), $pop6
2382; NO-SIMD128-NEXT:    i32.const $push26=, 5
2383; NO-SIMD128-NEXT:    i32.shl $push7=, $10, $pop26
2384; NO-SIMD128-NEXT:    i32.store8 9($0), $pop7
2385; NO-SIMD128-NEXT:    i32.const $push25=, 5
2386; NO-SIMD128-NEXT:    i32.shl $push8=, $9, $pop25
2387; NO-SIMD128-NEXT:    i32.store8 8($0), $pop8
2388; NO-SIMD128-NEXT:    i32.const $push24=, 5
2389; NO-SIMD128-NEXT:    i32.shl $push9=, $8, $pop24
2390; NO-SIMD128-NEXT:    i32.store8 7($0), $pop9
2391; NO-SIMD128-NEXT:    i32.const $push23=, 5
2392; NO-SIMD128-NEXT:    i32.shl $push10=, $7, $pop23
2393; NO-SIMD128-NEXT:    i32.store8 6($0), $pop10
2394; NO-SIMD128-NEXT:    i32.const $push22=, 5
2395; NO-SIMD128-NEXT:    i32.shl $push11=, $6, $pop22
2396; NO-SIMD128-NEXT:    i32.store8 5($0), $pop11
2397; NO-SIMD128-NEXT:    i32.const $push21=, 5
2398; NO-SIMD128-NEXT:    i32.shl $push12=, $5, $pop21
2399; NO-SIMD128-NEXT:    i32.store8 4($0), $pop12
2400; NO-SIMD128-NEXT:    i32.const $push20=, 5
2401; NO-SIMD128-NEXT:    i32.shl $push13=, $4, $pop20
2402; NO-SIMD128-NEXT:    i32.store8 3($0), $pop13
2403; NO-SIMD128-NEXT:    i32.const $push19=, 5
2404; NO-SIMD128-NEXT:    i32.shl $push14=, $3, $pop19
2405; NO-SIMD128-NEXT:    i32.store8 2($0), $pop14
2406; NO-SIMD128-NEXT:    i32.const $push18=, 5
2407; NO-SIMD128-NEXT:    i32.shl $push15=, $2, $pop18
2408; NO-SIMD128-NEXT:    i32.store8 1($0), $pop15
2409; NO-SIMD128-NEXT:    i32.const $push17=, 5
2410; NO-SIMD128-NEXT:    i32.shl $push16=, $1, $pop17
2411; NO-SIMD128-NEXT:    i32.store8 0($0), $pop16
2412; NO-SIMD128-NEXT:    return
2413;
2414; NO-SIMD128-FAST-LABEL: shl_const_v16i8:
2415; NO-SIMD128-FAST:         .functype shl_const_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2416; NO-SIMD128-FAST-NEXT:  # %bb.0:
2417; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 5
2418; NO-SIMD128-FAST-NEXT:    i32.shl $push1=, $1, $pop0
2419; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop1
2420; NO-SIMD128-FAST-NEXT:    i32.const $push31=, 5
2421; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $2, $pop31
2422; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop2
2423; NO-SIMD128-FAST-NEXT:    i32.const $push30=, 5
2424; NO-SIMD128-FAST-NEXT:    i32.shl $push3=, $3, $pop30
2425; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop3
2426; NO-SIMD128-FAST-NEXT:    i32.const $push29=, 5
2427; NO-SIMD128-FAST-NEXT:    i32.shl $push4=, $4, $pop29
2428; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop4
2429; NO-SIMD128-FAST-NEXT:    i32.const $push28=, 5
2430; NO-SIMD128-FAST-NEXT:    i32.shl $push5=, $5, $pop28
2431; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop5
2432; NO-SIMD128-FAST-NEXT:    i32.const $push27=, 5
2433; NO-SIMD128-FAST-NEXT:    i32.shl $push6=, $6, $pop27
2434; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop6
2435; NO-SIMD128-FAST-NEXT:    i32.const $push26=, 5
2436; NO-SIMD128-FAST-NEXT:    i32.shl $push7=, $7, $pop26
2437; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop7
2438; NO-SIMD128-FAST-NEXT:    i32.const $push25=, 5
2439; NO-SIMD128-FAST-NEXT:    i32.shl $push8=, $8, $pop25
2440; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop8
2441; NO-SIMD128-FAST-NEXT:    i32.const $push24=, 5
2442; NO-SIMD128-FAST-NEXT:    i32.shl $push9=, $9, $pop24
2443; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop9
2444; NO-SIMD128-FAST-NEXT:    i32.const $push23=, 5
2445; NO-SIMD128-FAST-NEXT:    i32.shl $push10=, $10, $pop23
2446; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop10
2447; NO-SIMD128-FAST-NEXT:    i32.const $push22=, 5
2448; NO-SIMD128-FAST-NEXT:    i32.shl $push11=, $11, $pop22
2449; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop11
2450; NO-SIMD128-FAST-NEXT:    i32.const $push21=, 5
2451; NO-SIMD128-FAST-NEXT:    i32.shl $push12=, $12, $pop21
2452; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop12
2453; NO-SIMD128-FAST-NEXT:    i32.const $push20=, 5
2454; NO-SIMD128-FAST-NEXT:    i32.shl $push13=, $13, $pop20
2455; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop13
2456; NO-SIMD128-FAST-NEXT:    i32.const $push19=, 5
2457; NO-SIMD128-FAST-NEXT:    i32.shl $push14=, $14, $pop19
2458; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop14
2459; NO-SIMD128-FAST-NEXT:    i32.const $push18=, 5
2460; NO-SIMD128-FAST-NEXT:    i32.shl $push15=, $15, $pop18
2461; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop15
2462; NO-SIMD128-FAST-NEXT:    i32.const $push17=, 5
2463; NO-SIMD128-FAST-NEXT:    i32.shl $push16=, $16, $pop17
2464; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop16
2465; NO-SIMD128-FAST-NEXT:    return
2466  %a = shl <16 x i8> %v,
2467    <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5,
2468     i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
2469  ret <16 x i8> %a
2470}
2471
2472define <16 x i8> @shl_vec_v16i8(<16 x i8> %v, <16 x i8> %x) {
2473; SIMD128-LABEL: shl_vec_v16i8:
2474; SIMD128:         .functype shl_vec_v16i8 (v128, v128) -> (v128)
2475; SIMD128-NEXT:  # %bb.0:
2476; SIMD128-NEXT:    i8x16.extract_lane_u $push7=, $0, 0
2477; SIMD128-NEXT:    i8x16.extract_lane_u $push5=, $1, 0
2478; SIMD128-NEXT:    i32.const $push1=, 7
2479; SIMD128-NEXT:    i32.and $push6=, $pop5, $pop1
2480; SIMD128-NEXT:    i32.shl $push8=, $pop7, $pop6
2481; SIMD128-NEXT:    i8x16.splat $push9=, $pop8
2482; SIMD128-NEXT:    i8x16.extract_lane_u $push3=, $0, 1
2483; SIMD128-NEXT:    i8x16.extract_lane_u $push0=, $1, 1
2484; SIMD128-NEXT:    i32.const $push95=, 7
2485; SIMD128-NEXT:    i32.and $push2=, $pop0, $pop95
2486; SIMD128-NEXT:    i32.shl $push4=, $pop3, $pop2
2487; SIMD128-NEXT:    i8x16.replace_lane $push10=, $pop9, 1, $pop4
2488; SIMD128-NEXT:    i8x16.extract_lane_u $push13=, $0, 2
2489; SIMD128-NEXT:    i8x16.extract_lane_u $push11=, $1, 2
2490; SIMD128-NEXT:    i32.const $push94=, 7
2491; SIMD128-NEXT:    i32.and $push12=, $pop11, $pop94
2492; SIMD128-NEXT:    i32.shl $push14=, $pop13, $pop12
2493; SIMD128-NEXT:    i8x16.replace_lane $push15=, $pop10, 2, $pop14
2494; SIMD128-NEXT:    i8x16.extract_lane_u $push18=, $0, 3
2495; SIMD128-NEXT:    i8x16.extract_lane_u $push16=, $1, 3
2496; SIMD128-NEXT:    i32.const $push93=, 7
2497; SIMD128-NEXT:    i32.and $push17=, $pop16, $pop93
2498; SIMD128-NEXT:    i32.shl $push19=, $pop18, $pop17
2499; SIMD128-NEXT:    i8x16.replace_lane $push20=, $pop15, 3, $pop19
2500; SIMD128-NEXT:    i8x16.extract_lane_u $push23=, $0, 4
2501; SIMD128-NEXT:    i8x16.extract_lane_u $push21=, $1, 4
2502; SIMD128-NEXT:    i32.const $push92=, 7
2503; SIMD128-NEXT:    i32.and $push22=, $pop21, $pop92
2504; SIMD128-NEXT:    i32.shl $push24=, $pop23, $pop22
2505; SIMD128-NEXT:    i8x16.replace_lane $push25=, $pop20, 4, $pop24
2506; SIMD128-NEXT:    i8x16.extract_lane_u $push28=, $0, 5
2507; SIMD128-NEXT:    i8x16.extract_lane_u $push26=, $1, 5
2508; SIMD128-NEXT:    i32.const $push91=, 7
2509; SIMD128-NEXT:    i32.and $push27=, $pop26, $pop91
2510; SIMD128-NEXT:    i32.shl $push29=, $pop28, $pop27
2511; SIMD128-NEXT:    i8x16.replace_lane $push30=, $pop25, 5, $pop29
2512; SIMD128-NEXT:    i8x16.extract_lane_u $push33=, $0, 6
2513; SIMD128-NEXT:    i8x16.extract_lane_u $push31=, $1, 6
2514; SIMD128-NEXT:    i32.const $push90=, 7
2515; SIMD128-NEXT:    i32.and $push32=, $pop31, $pop90
2516; SIMD128-NEXT:    i32.shl $push34=, $pop33, $pop32
2517; SIMD128-NEXT:    i8x16.replace_lane $push35=, $pop30, 6, $pop34
2518; SIMD128-NEXT:    i8x16.extract_lane_u $push38=, $0, 7
2519; SIMD128-NEXT:    i8x16.extract_lane_u $push36=, $1, 7
2520; SIMD128-NEXT:    i32.const $push89=, 7
2521; SIMD128-NEXT:    i32.and $push37=, $pop36, $pop89
2522; SIMD128-NEXT:    i32.shl $push39=, $pop38, $pop37
2523; SIMD128-NEXT:    i8x16.replace_lane $push40=, $pop35, 7, $pop39
2524; SIMD128-NEXT:    i8x16.extract_lane_u $push43=, $0, 8
2525; SIMD128-NEXT:    i8x16.extract_lane_u $push41=, $1, 8
2526; SIMD128-NEXT:    i32.const $push88=, 7
2527; SIMD128-NEXT:    i32.and $push42=, $pop41, $pop88
2528; SIMD128-NEXT:    i32.shl $push44=, $pop43, $pop42
2529; SIMD128-NEXT:    i8x16.replace_lane $push45=, $pop40, 8, $pop44
2530; SIMD128-NEXT:    i8x16.extract_lane_u $push48=, $0, 9
2531; SIMD128-NEXT:    i8x16.extract_lane_u $push46=, $1, 9
2532; SIMD128-NEXT:    i32.const $push87=, 7
2533; SIMD128-NEXT:    i32.and $push47=, $pop46, $pop87
2534; SIMD128-NEXT:    i32.shl $push49=, $pop48, $pop47
2535; SIMD128-NEXT:    i8x16.replace_lane $push50=, $pop45, 9, $pop49
2536; SIMD128-NEXT:    i8x16.extract_lane_u $push53=, $0, 10
2537; SIMD128-NEXT:    i8x16.extract_lane_u $push51=, $1, 10
2538; SIMD128-NEXT:    i32.const $push86=, 7
2539; SIMD128-NEXT:    i32.and $push52=, $pop51, $pop86
2540; SIMD128-NEXT:    i32.shl $push54=, $pop53, $pop52
2541; SIMD128-NEXT:    i8x16.replace_lane $push55=, $pop50, 10, $pop54
2542; SIMD128-NEXT:    i8x16.extract_lane_u $push58=, $0, 11
2543; SIMD128-NEXT:    i8x16.extract_lane_u $push56=, $1, 11
2544; SIMD128-NEXT:    i32.const $push85=, 7
2545; SIMD128-NEXT:    i32.and $push57=, $pop56, $pop85
2546; SIMD128-NEXT:    i32.shl $push59=, $pop58, $pop57
2547; SIMD128-NEXT:    i8x16.replace_lane $push60=, $pop55, 11, $pop59
2548; SIMD128-NEXT:    i8x16.extract_lane_u $push63=, $0, 12
2549; SIMD128-NEXT:    i8x16.extract_lane_u $push61=, $1, 12
2550; SIMD128-NEXT:    i32.const $push84=, 7
2551; SIMD128-NEXT:    i32.and $push62=, $pop61, $pop84
2552; SIMD128-NEXT:    i32.shl $push64=, $pop63, $pop62
2553; SIMD128-NEXT:    i8x16.replace_lane $push65=, $pop60, 12, $pop64
2554; SIMD128-NEXT:    i8x16.extract_lane_u $push68=, $0, 13
2555; SIMD128-NEXT:    i8x16.extract_lane_u $push66=, $1, 13
2556; SIMD128-NEXT:    i32.const $push83=, 7
2557; SIMD128-NEXT:    i32.and $push67=, $pop66, $pop83
2558; SIMD128-NEXT:    i32.shl $push69=, $pop68, $pop67
2559; SIMD128-NEXT:    i8x16.replace_lane $push70=, $pop65, 13, $pop69
2560; SIMD128-NEXT:    i8x16.extract_lane_u $push73=, $0, 14
2561; SIMD128-NEXT:    i8x16.extract_lane_u $push71=, $1, 14
2562; SIMD128-NEXT:    i32.const $push82=, 7
2563; SIMD128-NEXT:    i32.and $push72=, $pop71, $pop82
2564; SIMD128-NEXT:    i32.shl $push74=, $pop73, $pop72
2565; SIMD128-NEXT:    i8x16.replace_lane $push75=, $pop70, 14, $pop74
2566; SIMD128-NEXT:    i8x16.extract_lane_u $push78=, $0, 15
2567; SIMD128-NEXT:    i8x16.extract_lane_u $push76=, $1, 15
2568; SIMD128-NEXT:    i32.const $push81=, 7
2569; SIMD128-NEXT:    i32.and $push77=, $pop76, $pop81
2570; SIMD128-NEXT:    i32.shl $push79=, $pop78, $pop77
2571; SIMD128-NEXT:    i8x16.replace_lane $push80=, $pop75, 15, $pop79
2572; SIMD128-NEXT:    return $pop80
2573;
2574; SIMD128-FAST-LABEL: shl_vec_v16i8:
2575; SIMD128-FAST:         .functype shl_vec_v16i8 (v128, v128) -> (v128)
2576; SIMD128-FAST-NEXT:  # %bb.0:
2577; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push8=, $0, 0
2578; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push6=, $1, 0
2579; SIMD128-FAST-NEXT:    i32.const $push2=, 7
2580; SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop2
2581; SIMD128-FAST-NEXT:    i32.shl $push9=, $pop8, $pop7
2582; SIMD128-FAST-NEXT:    i8x16.splat $push10=, $pop9
2583; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push4=, $0, 1
2584; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push1=, $1, 1
2585; SIMD128-FAST-NEXT:    i32.const $push95=, 7
2586; SIMD128-FAST-NEXT:    i32.and $push3=, $pop1, $pop95
2587; SIMD128-FAST-NEXT:    i32.shl $push5=, $pop4, $pop3
2588; SIMD128-FAST-NEXT:    i8x16.replace_lane $push11=, $pop10, 1, $pop5
2589; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push14=, $0, 2
2590; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push12=, $1, 2
2591; SIMD128-FAST-NEXT:    i32.const $push94=, 7
2592; SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $pop94
2593; SIMD128-FAST-NEXT:    i32.shl $push15=, $pop14, $pop13
2594; SIMD128-FAST-NEXT:    i8x16.replace_lane $push16=, $pop11, 2, $pop15
2595; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push19=, $0, 3
2596; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push17=, $1, 3
2597; SIMD128-FAST-NEXT:    i32.const $push93=, 7
2598; SIMD128-FAST-NEXT:    i32.and $push18=, $pop17, $pop93
2599; SIMD128-FAST-NEXT:    i32.shl $push20=, $pop19, $pop18
2600; SIMD128-FAST-NEXT:    i8x16.replace_lane $push21=, $pop16, 3, $pop20
2601; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push24=, $0, 4
2602; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push22=, $1, 4
2603; SIMD128-FAST-NEXT:    i32.const $push92=, 7
2604; SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop92
2605; SIMD128-FAST-NEXT:    i32.shl $push25=, $pop24, $pop23
2606; SIMD128-FAST-NEXT:    i8x16.replace_lane $push26=, $pop21, 4, $pop25
2607; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push29=, $0, 5
2608; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push27=, $1, 5
2609; SIMD128-FAST-NEXT:    i32.const $push91=, 7
2610; SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop91
2611; SIMD128-FAST-NEXT:    i32.shl $push30=, $pop29, $pop28
2612; SIMD128-FAST-NEXT:    i8x16.replace_lane $push31=, $pop26, 5, $pop30
2613; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push34=, $0, 6
2614; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push32=, $1, 6
2615; SIMD128-FAST-NEXT:    i32.const $push90=, 7
2616; SIMD128-FAST-NEXT:    i32.and $push33=, $pop32, $pop90
2617; SIMD128-FAST-NEXT:    i32.shl $push35=, $pop34, $pop33
2618; SIMD128-FAST-NEXT:    i8x16.replace_lane $push36=, $pop31, 6, $pop35
2619; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push39=, $0, 7
2620; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push37=, $1, 7
2621; SIMD128-FAST-NEXT:    i32.const $push89=, 7
2622; SIMD128-FAST-NEXT:    i32.and $push38=, $pop37, $pop89
2623; SIMD128-FAST-NEXT:    i32.shl $push40=, $pop39, $pop38
2624; SIMD128-FAST-NEXT:    i8x16.replace_lane $push41=, $pop36, 7, $pop40
2625; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push44=, $0, 8
2626; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push42=, $1, 8
2627; SIMD128-FAST-NEXT:    i32.const $push88=, 7
2628; SIMD128-FAST-NEXT:    i32.and $push43=, $pop42, $pop88
2629; SIMD128-FAST-NEXT:    i32.shl $push45=, $pop44, $pop43
2630; SIMD128-FAST-NEXT:    i8x16.replace_lane $push46=, $pop41, 8, $pop45
2631; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push49=, $0, 9
2632; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push47=, $1, 9
2633; SIMD128-FAST-NEXT:    i32.const $push87=, 7
2634; SIMD128-FAST-NEXT:    i32.and $push48=, $pop47, $pop87
2635; SIMD128-FAST-NEXT:    i32.shl $push50=, $pop49, $pop48
2636; SIMD128-FAST-NEXT:    i8x16.replace_lane $push51=, $pop46, 9, $pop50
2637; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push54=, $0, 10
2638; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push52=, $1, 10
2639; SIMD128-FAST-NEXT:    i32.const $push86=, 7
2640; SIMD128-FAST-NEXT:    i32.and $push53=, $pop52, $pop86
2641; SIMD128-FAST-NEXT:    i32.shl $push55=, $pop54, $pop53
2642; SIMD128-FAST-NEXT:    i8x16.replace_lane $push56=, $pop51, 10, $pop55
2643; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push59=, $0, 11
2644; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push57=, $1, 11
2645; SIMD128-FAST-NEXT:    i32.const $push85=, 7
2646; SIMD128-FAST-NEXT:    i32.and $push58=, $pop57, $pop85
2647; SIMD128-FAST-NEXT:    i32.shl $push60=, $pop59, $pop58
2648; SIMD128-FAST-NEXT:    i8x16.replace_lane $push61=, $pop56, 11, $pop60
2649; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push64=, $0, 12
2650; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push62=, $1, 12
2651; SIMD128-FAST-NEXT:    i32.const $push84=, 7
2652; SIMD128-FAST-NEXT:    i32.and $push63=, $pop62, $pop84
2653; SIMD128-FAST-NEXT:    i32.shl $push65=, $pop64, $pop63
2654; SIMD128-FAST-NEXT:    i8x16.replace_lane $push66=, $pop61, 12, $pop65
2655; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push69=, $0, 13
2656; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push67=, $1, 13
2657; SIMD128-FAST-NEXT:    i32.const $push83=, 7
2658; SIMD128-FAST-NEXT:    i32.and $push68=, $pop67, $pop83
2659; SIMD128-FAST-NEXT:    i32.shl $push70=, $pop69, $pop68
2660; SIMD128-FAST-NEXT:    i8x16.replace_lane $push71=, $pop66, 13, $pop70
2661; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push74=, $0, 14
2662; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push72=, $1, 14
2663; SIMD128-FAST-NEXT:    i32.const $push82=, 7
2664; SIMD128-FAST-NEXT:    i32.and $push73=, $pop72, $pop82
2665; SIMD128-FAST-NEXT:    i32.shl $push75=, $pop74, $pop73
2666; SIMD128-FAST-NEXT:    i8x16.replace_lane $push76=, $pop71, 14, $pop75
2667; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push79=, $0, 15
2668; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push77=, $1, 15
2669; SIMD128-FAST-NEXT:    i32.const $push81=, 7
2670; SIMD128-FAST-NEXT:    i32.and $push78=, $pop77, $pop81
2671; SIMD128-FAST-NEXT:    i32.shl $push80=, $pop79, $pop78
2672; SIMD128-FAST-NEXT:    i8x16.replace_lane $push0=, $pop76, 15, $pop80
2673; SIMD128-FAST-NEXT:    return $pop0
2674;
2675; NO-SIMD128-LABEL: shl_vec_v16i8:
2676; NO-SIMD128:         .functype shl_vec_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2677; NO-SIMD128-NEXT:  # %bb.0:
2678; NO-SIMD128-NEXT:    i32.const $push0=, 255
2679; NO-SIMD128-NEXT:    i32.and $push1=, $32, $pop0
2680; NO-SIMD128-NEXT:    i32.shl $push2=, $16, $pop1
2681; NO-SIMD128-NEXT:    i32.store8 15($0), $pop2
2682; NO-SIMD128-NEXT:    i32.const $push47=, 255
2683; NO-SIMD128-NEXT:    i32.and $push3=, $31, $pop47
2684; NO-SIMD128-NEXT:    i32.shl $push4=, $15, $pop3
2685; NO-SIMD128-NEXT:    i32.store8 14($0), $pop4
2686; NO-SIMD128-NEXT:    i32.const $push46=, 255
2687; NO-SIMD128-NEXT:    i32.and $push5=, $30, $pop46
2688; NO-SIMD128-NEXT:    i32.shl $push6=, $14, $pop5
2689; NO-SIMD128-NEXT:    i32.store8 13($0), $pop6
2690; NO-SIMD128-NEXT:    i32.const $push45=, 255
2691; NO-SIMD128-NEXT:    i32.and $push7=, $29, $pop45
2692; NO-SIMD128-NEXT:    i32.shl $push8=, $13, $pop7
2693; NO-SIMD128-NEXT:    i32.store8 12($0), $pop8
2694; NO-SIMD128-NEXT:    i32.const $push44=, 255
2695; NO-SIMD128-NEXT:    i32.and $push9=, $28, $pop44
2696; NO-SIMD128-NEXT:    i32.shl $push10=, $12, $pop9
2697; NO-SIMD128-NEXT:    i32.store8 11($0), $pop10
2698; NO-SIMD128-NEXT:    i32.const $push43=, 255
2699; NO-SIMD128-NEXT:    i32.and $push11=, $27, $pop43
2700; NO-SIMD128-NEXT:    i32.shl $push12=, $11, $pop11
2701; NO-SIMD128-NEXT:    i32.store8 10($0), $pop12
2702; NO-SIMD128-NEXT:    i32.const $push42=, 255
2703; NO-SIMD128-NEXT:    i32.and $push13=, $26, $pop42
2704; NO-SIMD128-NEXT:    i32.shl $push14=, $10, $pop13
2705; NO-SIMD128-NEXT:    i32.store8 9($0), $pop14
2706; NO-SIMD128-NEXT:    i32.const $push41=, 255
2707; NO-SIMD128-NEXT:    i32.and $push15=, $25, $pop41
2708; NO-SIMD128-NEXT:    i32.shl $push16=, $9, $pop15
2709; NO-SIMD128-NEXT:    i32.store8 8($0), $pop16
2710; NO-SIMD128-NEXT:    i32.const $push40=, 255
2711; NO-SIMD128-NEXT:    i32.and $push17=, $24, $pop40
2712; NO-SIMD128-NEXT:    i32.shl $push18=, $8, $pop17
2713; NO-SIMD128-NEXT:    i32.store8 7($0), $pop18
2714; NO-SIMD128-NEXT:    i32.const $push39=, 255
2715; NO-SIMD128-NEXT:    i32.and $push19=, $23, $pop39
2716; NO-SIMD128-NEXT:    i32.shl $push20=, $7, $pop19
2717; NO-SIMD128-NEXT:    i32.store8 6($0), $pop20
2718; NO-SIMD128-NEXT:    i32.const $push38=, 255
2719; NO-SIMD128-NEXT:    i32.and $push21=, $22, $pop38
2720; NO-SIMD128-NEXT:    i32.shl $push22=, $6, $pop21
2721; NO-SIMD128-NEXT:    i32.store8 5($0), $pop22
2722; NO-SIMD128-NEXT:    i32.const $push37=, 255
2723; NO-SIMD128-NEXT:    i32.and $push23=, $21, $pop37
2724; NO-SIMD128-NEXT:    i32.shl $push24=, $5, $pop23
2725; NO-SIMD128-NEXT:    i32.store8 4($0), $pop24
2726; NO-SIMD128-NEXT:    i32.const $push36=, 255
2727; NO-SIMD128-NEXT:    i32.and $push25=, $20, $pop36
2728; NO-SIMD128-NEXT:    i32.shl $push26=, $4, $pop25
2729; NO-SIMD128-NEXT:    i32.store8 3($0), $pop26
2730; NO-SIMD128-NEXT:    i32.const $push35=, 255
2731; NO-SIMD128-NEXT:    i32.and $push27=, $19, $pop35
2732; NO-SIMD128-NEXT:    i32.shl $push28=, $3, $pop27
2733; NO-SIMD128-NEXT:    i32.store8 2($0), $pop28
2734; NO-SIMD128-NEXT:    i32.const $push34=, 255
2735; NO-SIMD128-NEXT:    i32.and $push29=, $18, $pop34
2736; NO-SIMD128-NEXT:    i32.shl $push30=, $2, $pop29
2737; NO-SIMD128-NEXT:    i32.store8 1($0), $pop30
2738; NO-SIMD128-NEXT:    i32.const $push33=, 255
2739; NO-SIMD128-NEXT:    i32.and $push31=, $17, $pop33
2740; NO-SIMD128-NEXT:    i32.shl $push32=, $1, $pop31
2741; NO-SIMD128-NEXT:    i32.store8 0($0), $pop32
2742; NO-SIMD128-NEXT:    return
2743;
2744; NO-SIMD128-FAST-LABEL: shl_vec_v16i8:
2745; NO-SIMD128-FAST:         .functype shl_vec_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2746; NO-SIMD128-FAST-NEXT:  # %bb.0:
2747; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
2748; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $17, $pop0
2749; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $1, $pop1
2750; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop2
2751; NO-SIMD128-FAST-NEXT:    i32.const $push47=, 255
2752; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $18, $pop47
2753; NO-SIMD128-FAST-NEXT:    i32.shl $push4=, $2, $pop3
2754; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop4
2755; NO-SIMD128-FAST-NEXT:    i32.const $push46=, 255
2756; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $19, $pop46
2757; NO-SIMD128-FAST-NEXT:    i32.shl $push6=, $3, $pop5
2758; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop6
2759; NO-SIMD128-FAST-NEXT:    i32.const $push45=, 255
2760; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $20, $pop45
2761; NO-SIMD128-FAST-NEXT:    i32.shl $push8=, $4, $pop7
2762; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop8
2763; NO-SIMD128-FAST-NEXT:    i32.const $push44=, 255
2764; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $21, $pop44
2765; NO-SIMD128-FAST-NEXT:    i32.shl $push10=, $5, $pop9
2766; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop10
2767; NO-SIMD128-FAST-NEXT:    i32.const $push43=, 255
2768; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $22, $pop43
2769; NO-SIMD128-FAST-NEXT:    i32.shl $push12=, $6, $pop11
2770; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop12
2771; NO-SIMD128-FAST-NEXT:    i32.const $push42=, 255
2772; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $23, $pop42
2773; NO-SIMD128-FAST-NEXT:    i32.shl $push14=, $7, $pop13
2774; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop14
2775; NO-SIMD128-FAST-NEXT:    i32.const $push41=, 255
2776; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $24, $pop41
2777; NO-SIMD128-FAST-NEXT:    i32.shl $push16=, $8, $pop15
2778; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop16
2779; NO-SIMD128-FAST-NEXT:    i32.const $push40=, 255
2780; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $25, $pop40
2781; NO-SIMD128-FAST-NEXT:    i32.shl $push18=, $9, $pop17
2782; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop18
2783; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 255
2784; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $26, $pop39
2785; NO-SIMD128-FAST-NEXT:    i32.shl $push20=, $10, $pop19
2786; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop20
2787; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 255
2788; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $27, $pop38
2789; NO-SIMD128-FAST-NEXT:    i32.shl $push22=, $11, $pop21
2790; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop22
2791; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 255
2792; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $28, $pop37
2793; NO-SIMD128-FAST-NEXT:    i32.shl $push24=, $12, $pop23
2794; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop24
2795; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 255
2796; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $29, $pop36
2797; NO-SIMD128-FAST-NEXT:    i32.shl $push26=, $13, $pop25
2798; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop26
2799; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 255
2800; NO-SIMD128-FAST-NEXT:    i32.and $push27=, $30, $pop35
2801; NO-SIMD128-FAST-NEXT:    i32.shl $push28=, $14, $pop27
2802; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop28
2803; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 255
2804; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $31, $pop34
2805; NO-SIMD128-FAST-NEXT:    i32.shl $push30=, $15, $pop29
2806; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop30
2807; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 255
2808; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $32, $pop33
2809; NO-SIMD128-FAST-NEXT:    i32.shl $push32=, $16, $pop31
2810; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop32
2811; NO-SIMD128-FAST-NEXT:    return
2812  %a = shl <16 x i8> %v, %x
2813  ret <16 x i8> %a
2814}
2815
2816define <16 x i8> @shr_s_v16i8(<16 x i8> %v, i8 %x) {
2817; SIMD128-LABEL: shr_s_v16i8:
2818; SIMD128:         .functype shr_s_v16i8 (v128, i32) -> (v128)
2819; SIMD128-NEXT:  # %bb.0:
2820; SIMD128-NEXT:    i8x16.shr_s $push0=, $0, $1
2821; SIMD128-NEXT:    return $pop0
2822;
2823; SIMD128-FAST-LABEL: shr_s_v16i8:
2824; SIMD128-FAST:         .functype shr_s_v16i8 (v128, i32) -> (v128)
2825; SIMD128-FAST-NEXT:  # %bb.0:
2826; SIMD128-FAST-NEXT:    i8x16.shr_s $push0=, $0, $1
2827; SIMD128-FAST-NEXT:    return $pop0
2828;
2829; NO-SIMD128-LABEL: shr_s_v16i8:
2830; NO-SIMD128:         .functype shr_s_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2831; NO-SIMD128-NEXT:  # %bb.0:
2832; NO-SIMD128-NEXT:    i32.extend8_s $push1=, $16
2833; NO-SIMD128-NEXT:    i32.const $push0=, 255
2834; NO-SIMD128-NEXT:    i32.and $push34=, $17, $pop0
2835; NO-SIMD128-NEXT:    local.tee $push33=, $17=, $pop34
2836; NO-SIMD128-NEXT:    i32.shr_s $push2=, $pop1, $pop33
2837; NO-SIMD128-NEXT:    i32.store8 15($0), $pop2
2838; NO-SIMD128-NEXT:    i32.extend8_s $push3=, $15
2839; NO-SIMD128-NEXT:    i32.shr_s $push4=, $pop3, $17
2840; NO-SIMD128-NEXT:    i32.store8 14($0), $pop4
2841; NO-SIMD128-NEXT:    i32.extend8_s $push5=, $14
2842; NO-SIMD128-NEXT:    i32.shr_s $push6=, $pop5, $17
2843; NO-SIMD128-NEXT:    i32.store8 13($0), $pop6
2844; NO-SIMD128-NEXT:    i32.extend8_s $push7=, $13
2845; NO-SIMD128-NEXT:    i32.shr_s $push8=, $pop7, $17
2846; NO-SIMD128-NEXT:    i32.store8 12($0), $pop8
2847; NO-SIMD128-NEXT:    i32.extend8_s $push9=, $12
2848; NO-SIMD128-NEXT:    i32.shr_s $push10=, $pop9, $17
2849; NO-SIMD128-NEXT:    i32.store8 11($0), $pop10
2850; NO-SIMD128-NEXT:    i32.extend8_s $push11=, $11
2851; NO-SIMD128-NEXT:    i32.shr_s $push12=, $pop11, $17
2852; NO-SIMD128-NEXT:    i32.store8 10($0), $pop12
2853; NO-SIMD128-NEXT:    i32.extend8_s $push13=, $10
2854; NO-SIMD128-NEXT:    i32.shr_s $push14=, $pop13, $17
2855; NO-SIMD128-NEXT:    i32.store8 9($0), $pop14
2856; NO-SIMD128-NEXT:    i32.extend8_s $push15=, $9
2857; NO-SIMD128-NEXT:    i32.shr_s $push16=, $pop15, $17
2858; NO-SIMD128-NEXT:    i32.store8 8($0), $pop16
2859; NO-SIMD128-NEXT:    i32.extend8_s $push17=, $8
2860; NO-SIMD128-NEXT:    i32.shr_s $push18=, $pop17, $17
2861; NO-SIMD128-NEXT:    i32.store8 7($0), $pop18
2862; NO-SIMD128-NEXT:    i32.extend8_s $push19=, $7
2863; NO-SIMD128-NEXT:    i32.shr_s $push20=, $pop19, $17
2864; NO-SIMD128-NEXT:    i32.store8 6($0), $pop20
2865; NO-SIMD128-NEXT:    i32.extend8_s $push21=, $6
2866; NO-SIMD128-NEXT:    i32.shr_s $push22=, $pop21, $17
2867; NO-SIMD128-NEXT:    i32.store8 5($0), $pop22
2868; NO-SIMD128-NEXT:    i32.extend8_s $push23=, $5
2869; NO-SIMD128-NEXT:    i32.shr_s $push24=, $pop23, $17
2870; NO-SIMD128-NEXT:    i32.store8 4($0), $pop24
2871; NO-SIMD128-NEXT:    i32.extend8_s $push25=, $4
2872; NO-SIMD128-NEXT:    i32.shr_s $push26=, $pop25, $17
2873; NO-SIMD128-NEXT:    i32.store8 3($0), $pop26
2874; NO-SIMD128-NEXT:    i32.extend8_s $push27=, $3
2875; NO-SIMD128-NEXT:    i32.shr_s $push28=, $pop27, $17
2876; NO-SIMD128-NEXT:    i32.store8 2($0), $pop28
2877; NO-SIMD128-NEXT:    i32.extend8_s $push29=, $2
2878; NO-SIMD128-NEXT:    i32.shr_s $push30=, $pop29, $17
2879; NO-SIMD128-NEXT:    i32.store8 1($0), $pop30
2880; NO-SIMD128-NEXT:    i32.extend8_s $push31=, $1
2881; NO-SIMD128-NEXT:    i32.shr_s $push32=, $pop31, $17
2882; NO-SIMD128-NEXT:    i32.store8 0($0), $pop32
2883; NO-SIMD128-NEXT:    return
2884;
2885; NO-SIMD128-FAST-LABEL: shr_s_v16i8:
2886; NO-SIMD128-FAST:         .functype shr_s_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
2887; NO-SIMD128-FAST-NEXT:  # %bb.0:
2888; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push1=, $1
2889; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
2890; NO-SIMD128-FAST-NEXT:    i32.and $push34=, $17, $pop0
2891; NO-SIMD128-FAST-NEXT:    local.tee $push33=, $1=, $pop34
2892; NO-SIMD128-FAST-NEXT:    i32.shr_s $push2=, $pop1, $pop33
2893; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop2
2894; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push3=, $2
2895; NO-SIMD128-FAST-NEXT:    i32.shr_s $push4=, $pop3, $1
2896; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop4
2897; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push5=, $3
2898; NO-SIMD128-FAST-NEXT:    i32.shr_s $push6=, $pop5, $1
2899; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop6
2900; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push7=, $4
2901; NO-SIMD128-FAST-NEXT:    i32.shr_s $push8=, $pop7, $1
2902; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop8
2903; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push9=, $5
2904; NO-SIMD128-FAST-NEXT:    i32.shr_s $push10=, $pop9, $1
2905; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop10
2906; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push11=, $6
2907; NO-SIMD128-FAST-NEXT:    i32.shr_s $push12=, $pop11, $1
2908; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop12
2909; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push13=, $7
2910; NO-SIMD128-FAST-NEXT:    i32.shr_s $push14=, $pop13, $1
2911; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop14
2912; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push15=, $8
2913; NO-SIMD128-FAST-NEXT:    i32.shr_s $push16=, $pop15, $1
2914; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop16
2915; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push17=, $9
2916; NO-SIMD128-FAST-NEXT:    i32.shr_s $push18=, $pop17, $1
2917; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop18
2918; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push19=, $10
2919; NO-SIMD128-FAST-NEXT:    i32.shr_s $push20=, $pop19, $1
2920; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop20
2921; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push21=, $11
2922; NO-SIMD128-FAST-NEXT:    i32.shr_s $push22=, $pop21, $1
2923; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop22
2924; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push23=, $12
2925; NO-SIMD128-FAST-NEXT:    i32.shr_s $push24=, $pop23, $1
2926; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop24
2927; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push25=, $13
2928; NO-SIMD128-FAST-NEXT:    i32.shr_s $push26=, $pop25, $1
2929; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop26
2930; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push27=, $14
2931; NO-SIMD128-FAST-NEXT:    i32.shr_s $push28=, $pop27, $1
2932; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop28
2933; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push29=, $15
2934; NO-SIMD128-FAST-NEXT:    i32.shr_s $push30=, $pop29, $1
2935; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop30
2936; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push31=, $16
2937; NO-SIMD128-FAST-NEXT:    i32.shr_s $push32=, $pop31, $1
2938; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop32
2939; NO-SIMD128-FAST-NEXT:    return
2940  %t = insertelement <16 x i8> undef, i8 %x, i32 0
2941  %s = shufflevector <16 x i8> %t, <16 x i8> undef,
2942    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,
2943                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
2944  %a = ashr <16 x i8> %v, %s
2945  ret <16 x i8> %a
2946}
2947
2948define <16 x i8> @shr_s_vec_v16i8(<16 x i8> %v, <16 x i8> %x) {
2949; SIMD128-LABEL: shr_s_vec_v16i8:
2950; SIMD128:         .functype shr_s_vec_v16i8 (v128, v128) -> (v128)
2951; SIMD128-NEXT:  # %bb.0:
2952; SIMD128-NEXT:    i8x16.extract_lane_s $push7=, $0, 0
2953; SIMD128-NEXT:    i8x16.extract_lane_u $push5=, $1, 0
2954; SIMD128-NEXT:    i32.const $push1=, 7
2955; SIMD128-NEXT:    i32.and $push6=, $pop5, $pop1
2956; SIMD128-NEXT:    i32.shr_s $push8=, $pop7, $pop6
2957; SIMD128-NEXT:    i8x16.splat $push9=, $pop8
2958; SIMD128-NEXT:    i8x16.extract_lane_s $push3=, $0, 1
2959; SIMD128-NEXT:    i8x16.extract_lane_u $push0=, $1, 1
2960; SIMD128-NEXT:    i32.const $push95=, 7
2961; SIMD128-NEXT:    i32.and $push2=, $pop0, $pop95
2962; SIMD128-NEXT:    i32.shr_s $push4=, $pop3, $pop2
2963; SIMD128-NEXT:    i8x16.replace_lane $push10=, $pop9, 1, $pop4
2964; SIMD128-NEXT:    i8x16.extract_lane_s $push13=, $0, 2
2965; SIMD128-NEXT:    i8x16.extract_lane_u $push11=, $1, 2
2966; SIMD128-NEXT:    i32.const $push94=, 7
2967; SIMD128-NEXT:    i32.and $push12=, $pop11, $pop94
2968; SIMD128-NEXT:    i32.shr_s $push14=, $pop13, $pop12
2969; SIMD128-NEXT:    i8x16.replace_lane $push15=, $pop10, 2, $pop14
2970; SIMD128-NEXT:    i8x16.extract_lane_s $push18=, $0, 3
2971; SIMD128-NEXT:    i8x16.extract_lane_u $push16=, $1, 3
2972; SIMD128-NEXT:    i32.const $push93=, 7
2973; SIMD128-NEXT:    i32.and $push17=, $pop16, $pop93
2974; SIMD128-NEXT:    i32.shr_s $push19=, $pop18, $pop17
2975; SIMD128-NEXT:    i8x16.replace_lane $push20=, $pop15, 3, $pop19
2976; SIMD128-NEXT:    i8x16.extract_lane_s $push23=, $0, 4
2977; SIMD128-NEXT:    i8x16.extract_lane_u $push21=, $1, 4
2978; SIMD128-NEXT:    i32.const $push92=, 7
2979; SIMD128-NEXT:    i32.and $push22=, $pop21, $pop92
2980; SIMD128-NEXT:    i32.shr_s $push24=, $pop23, $pop22
2981; SIMD128-NEXT:    i8x16.replace_lane $push25=, $pop20, 4, $pop24
2982; SIMD128-NEXT:    i8x16.extract_lane_s $push28=, $0, 5
2983; SIMD128-NEXT:    i8x16.extract_lane_u $push26=, $1, 5
2984; SIMD128-NEXT:    i32.const $push91=, 7
2985; SIMD128-NEXT:    i32.and $push27=, $pop26, $pop91
2986; SIMD128-NEXT:    i32.shr_s $push29=, $pop28, $pop27
2987; SIMD128-NEXT:    i8x16.replace_lane $push30=, $pop25, 5, $pop29
2988; SIMD128-NEXT:    i8x16.extract_lane_s $push33=, $0, 6
2989; SIMD128-NEXT:    i8x16.extract_lane_u $push31=, $1, 6
2990; SIMD128-NEXT:    i32.const $push90=, 7
2991; SIMD128-NEXT:    i32.and $push32=, $pop31, $pop90
2992; SIMD128-NEXT:    i32.shr_s $push34=, $pop33, $pop32
2993; SIMD128-NEXT:    i8x16.replace_lane $push35=, $pop30, 6, $pop34
2994; SIMD128-NEXT:    i8x16.extract_lane_s $push38=, $0, 7
2995; SIMD128-NEXT:    i8x16.extract_lane_u $push36=, $1, 7
2996; SIMD128-NEXT:    i32.const $push89=, 7
2997; SIMD128-NEXT:    i32.and $push37=, $pop36, $pop89
2998; SIMD128-NEXT:    i32.shr_s $push39=, $pop38, $pop37
2999; SIMD128-NEXT:    i8x16.replace_lane $push40=, $pop35, 7, $pop39
3000; SIMD128-NEXT:    i8x16.extract_lane_s $push43=, $0, 8
3001; SIMD128-NEXT:    i8x16.extract_lane_u $push41=, $1, 8
3002; SIMD128-NEXT:    i32.const $push88=, 7
3003; SIMD128-NEXT:    i32.and $push42=, $pop41, $pop88
3004; SIMD128-NEXT:    i32.shr_s $push44=, $pop43, $pop42
3005; SIMD128-NEXT:    i8x16.replace_lane $push45=, $pop40, 8, $pop44
3006; SIMD128-NEXT:    i8x16.extract_lane_s $push48=, $0, 9
3007; SIMD128-NEXT:    i8x16.extract_lane_u $push46=, $1, 9
3008; SIMD128-NEXT:    i32.const $push87=, 7
3009; SIMD128-NEXT:    i32.and $push47=, $pop46, $pop87
3010; SIMD128-NEXT:    i32.shr_s $push49=, $pop48, $pop47
3011; SIMD128-NEXT:    i8x16.replace_lane $push50=, $pop45, 9, $pop49
3012; SIMD128-NEXT:    i8x16.extract_lane_s $push53=, $0, 10
3013; SIMD128-NEXT:    i8x16.extract_lane_u $push51=, $1, 10
3014; SIMD128-NEXT:    i32.const $push86=, 7
3015; SIMD128-NEXT:    i32.and $push52=, $pop51, $pop86
3016; SIMD128-NEXT:    i32.shr_s $push54=, $pop53, $pop52
3017; SIMD128-NEXT:    i8x16.replace_lane $push55=, $pop50, 10, $pop54
3018; SIMD128-NEXT:    i8x16.extract_lane_s $push58=, $0, 11
3019; SIMD128-NEXT:    i8x16.extract_lane_u $push56=, $1, 11
3020; SIMD128-NEXT:    i32.const $push85=, 7
3021; SIMD128-NEXT:    i32.and $push57=, $pop56, $pop85
3022; SIMD128-NEXT:    i32.shr_s $push59=, $pop58, $pop57
3023; SIMD128-NEXT:    i8x16.replace_lane $push60=, $pop55, 11, $pop59
3024; SIMD128-NEXT:    i8x16.extract_lane_s $push63=, $0, 12
3025; SIMD128-NEXT:    i8x16.extract_lane_u $push61=, $1, 12
3026; SIMD128-NEXT:    i32.const $push84=, 7
3027; SIMD128-NEXT:    i32.and $push62=, $pop61, $pop84
3028; SIMD128-NEXT:    i32.shr_s $push64=, $pop63, $pop62
3029; SIMD128-NEXT:    i8x16.replace_lane $push65=, $pop60, 12, $pop64
3030; SIMD128-NEXT:    i8x16.extract_lane_s $push68=, $0, 13
3031; SIMD128-NEXT:    i8x16.extract_lane_u $push66=, $1, 13
3032; SIMD128-NEXT:    i32.const $push83=, 7
3033; SIMD128-NEXT:    i32.and $push67=, $pop66, $pop83
3034; SIMD128-NEXT:    i32.shr_s $push69=, $pop68, $pop67
3035; SIMD128-NEXT:    i8x16.replace_lane $push70=, $pop65, 13, $pop69
3036; SIMD128-NEXT:    i8x16.extract_lane_s $push73=, $0, 14
3037; SIMD128-NEXT:    i8x16.extract_lane_u $push71=, $1, 14
3038; SIMD128-NEXT:    i32.const $push82=, 7
3039; SIMD128-NEXT:    i32.and $push72=, $pop71, $pop82
3040; SIMD128-NEXT:    i32.shr_s $push74=, $pop73, $pop72
3041; SIMD128-NEXT:    i8x16.replace_lane $push75=, $pop70, 14, $pop74
3042; SIMD128-NEXT:    i8x16.extract_lane_s $push78=, $0, 15
3043; SIMD128-NEXT:    i8x16.extract_lane_u $push76=, $1, 15
3044; SIMD128-NEXT:    i32.const $push81=, 7
3045; SIMD128-NEXT:    i32.and $push77=, $pop76, $pop81
3046; SIMD128-NEXT:    i32.shr_s $push79=, $pop78, $pop77
3047; SIMD128-NEXT:    i8x16.replace_lane $push80=, $pop75, 15, $pop79
3048; SIMD128-NEXT:    return $pop80
3049;
3050; SIMD128-FAST-LABEL: shr_s_vec_v16i8:
3051; SIMD128-FAST:         .functype shr_s_vec_v16i8 (v128, v128) -> (v128)
3052; SIMD128-FAST-NEXT:  # %bb.0:
3053; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push8=, $0, 0
3054; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push6=, $1, 0
3055; SIMD128-FAST-NEXT:    i32.const $push2=, 7
3056; SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop2
3057; SIMD128-FAST-NEXT:    i32.shr_s $push9=, $pop8, $pop7
3058; SIMD128-FAST-NEXT:    i8x16.splat $push10=, $pop9
3059; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push4=, $0, 1
3060; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push1=, $1, 1
3061; SIMD128-FAST-NEXT:    i32.const $push95=, 7
3062; SIMD128-FAST-NEXT:    i32.and $push3=, $pop1, $pop95
3063; SIMD128-FAST-NEXT:    i32.shr_s $push5=, $pop4, $pop3
3064; SIMD128-FAST-NEXT:    i8x16.replace_lane $push11=, $pop10, 1, $pop5
3065; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push14=, $0, 2
3066; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push12=, $1, 2
3067; SIMD128-FAST-NEXT:    i32.const $push94=, 7
3068; SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $pop94
3069; SIMD128-FAST-NEXT:    i32.shr_s $push15=, $pop14, $pop13
3070; SIMD128-FAST-NEXT:    i8x16.replace_lane $push16=, $pop11, 2, $pop15
3071; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push19=, $0, 3
3072; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push17=, $1, 3
3073; SIMD128-FAST-NEXT:    i32.const $push93=, 7
3074; SIMD128-FAST-NEXT:    i32.and $push18=, $pop17, $pop93
3075; SIMD128-FAST-NEXT:    i32.shr_s $push20=, $pop19, $pop18
3076; SIMD128-FAST-NEXT:    i8x16.replace_lane $push21=, $pop16, 3, $pop20
3077; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push24=, $0, 4
3078; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push22=, $1, 4
3079; SIMD128-FAST-NEXT:    i32.const $push92=, 7
3080; SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop92
3081; SIMD128-FAST-NEXT:    i32.shr_s $push25=, $pop24, $pop23
3082; SIMD128-FAST-NEXT:    i8x16.replace_lane $push26=, $pop21, 4, $pop25
3083; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push29=, $0, 5
3084; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push27=, $1, 5
3085; SIMD128-FAST-NEXT:    i32.const $push91=, 7
3086; SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop91
3087; SIMD128-FAST-NEXT:    i32.shr_s $push30=, $pop29, $pop28
3088; SIMD128-FAST-NEXT:    i8x16.replace_lane $push31=, $pop26, 5, $pop30
3089; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push34=, $0, 6
3090; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push32=, $1, 6
3091; SIMD128-FAST-NEXT:    i32.const $push90=, 7
3092; SIMD128-FAST-NEXT:    i32.and $push33=, $pop32, $pop90
3093; SIMD128-FAST-NEXT:    i32.shr_s $push35=, $pop34, $pop33
3094; SIMD128-FAST-NEXT:    i8x16.replace_lane $push36=, $pop31, 6, $pop35
3095; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push39=, $0, 7
3096; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push37=, $1, 7
3097; SIMD128-FAST-NEXT:    i32.const $push89=, 7
3098; SIMD128-FAST-NEXT:    i32.and $push38=, $pop37, $pop89
3099; SIMD128-FAST-NEXT:    i32.shr_s $push40=, $pop39, $pop38
3100; SIMD128-FAST-NEXT:    i8x16.replace_lane $push41=, $pop36, 7, $pop40
3101; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push44=, $0, 8
3102; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push42=, $1, 8
3103; SIMD128-FAST-NEXT:    i32.const $push88=, 7
3104; SIMD128-FAST-NEXT:    i32.and $push43=, $pop42, $pop88
3105; SIMD128-FAST-NEXT:    i32.shr_s $push45=, $pop44, $pop43
3106; SIMD128-FAST-NEXT:    i8x16.replace_lane $push46=, $pop41, 8, $pop45
3107; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push49=, $0, 9
3108; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push47=, $1, 9
3109; SIMD128-FAST-NEXT:    i32.const $push87=, 7
3110; SIMD128-FAST-NEXT:    i32.and $push48=, $pop47, $pop87
3111; SIMD128-FAST-NEXT:    i32.shr_s $push50=, $pop49, $pop48
3112; SIMD128-FAST-NEXT:    i8x16.replace_lane $push51=, $pop46, 9, $pop50
3113; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push54=, $0, 10
3114; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push52=, $1, 10
3115; SIMD128-FAST-NEXT:    i32.const $push86=, 7
3116; SIMD128-FAST-NEXT:    i32.and $push53=, $pop52, $pop86
3117; SIMD128-FAST-NEXT:    i32.shr_s $push55=, $pop54, $pop53
3118; SIMD128-FAST-NEXT:    i8x16.replace_lane $push56=, $pop51, 10, $pop55
3119; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push59=, $0, 11
3120; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push57=, $1, 11
3121; SIMD128-FAST-NEXT:    i32.const $push85=, 7
3122; SIMD128-FAST-NEXT:    i32.and $push58=, $pop57, $pop85
3123; SIMD128-FAST-NEXT:    i32.shr_s $push60=, $pop59, $pop58
3124; SIMD128-FAST-NEXT:    i8x16.replace_lane $push61=, $pop56, 11, $pop60
3125; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push64=, $0, 12
3126; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push62=, $1, 12
3127; SIMD128-FAST-NEXT:    i32.const $push84=, 7
3128; SIMD128-FAST-NEXT:    i32.and $push63=, $pop62, $pop84
3129; SIMD128-FAST-NEXT:    i32.shr_s $push65=, $pop64, $pop63
3130; SIMD128-FAST-NEXT:    i8x16.replace_lane $push66=, $pop61, 12, $pop65
3131; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push69=, $0, 13
3132; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push67=, $1, 13
3133; SIMD128-FAST-NEXT:    i32.const $push83=, 7
3134; SIMD128-FAST-NEXT:    i32.and $push68=, $pop67, $pop83
3135; SIMD128-FAST-NEXT:    i32.shr_s $push70=, $pop69, $pop68
3136; SIMD128-FAST-NEXT:    i8x16.replace_lane $push71=, $pop66, 13, $pop70
3137; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push74=, $0, 14
3138; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push72=, $1, 14
3139; SIMD128-FAST-NEXT:    i32.const $push82=, 7
3140; SIMD128-FAST-NEXT:    i32.and $push73=, $pop72, $pop82
3141; SIMD128-FAST-NEXT:    i32.shr_s $push75=, $pop74, $pop73
3142; SIMD128-FAST-NEXT:    i8x16.replace_lane $push76=, $pop71, 14, $pop75
3143; SIMD128-FAST-NEXT:    i8x16.extract_lane_s $push79=, $0, 15
3144; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push77=, $1, 15
3145; SIMD128-FAST-NEXT:    i32.const $push81=, 7
3146; SIMD128-FAST-NEXT:    i32.and $push78=, $pop77, $pop81
3147; SIMD128-FAST-NEXT:    i32.shr_s $push80=, $pop79, $pop78
3148; SIMD128-FAST-NEXT:    i8x16.replace_lane $push0=, $pop76, 15, $pop80
3149; SIMD128-FAST-NEXT:    return $pop0
3150;
3151; NO-SIMD128-LABEL: shr_s_vec_v16i8:
3152; NO-SIMD128:         .functype shr_s_vec_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3153; NO-SIMD128-NEXT:  # %bb.0:
3154; NO-SIMD128-NEXT:    i32.extend8_s $push2=, $16
3155; NO-SIMD128-NEXT:    i32.const $push0=, 255
3156; NO-SIMD128-NEXT:    i32.and $push1=, $32, $pop0
3157; NO-SIMD128-NEXT:    i32.shr_s $push3=, $pop2, $pop1
3158; NO-SIMD128-NEXT:    i32.store8 15($0), $pop3
3159; NO-SIMD128-NEXT:    i32.extend8_s $push5=, $15
3160; NO-SIMD128-NEXT:    i32.const $push63=, 255
3161; NO-SIMD128-NEXT:    i32.and $push4=, $31, $pop63
3162; NO-SIMD128-NEXT:    i32.shr_s $push6=, $pop5, $pop4
3163; NO-SIMD128-NEXT:    i32.store8 14($0), $pop6
3164; NO-SIMD128-NEXT:    i32.extend8_s $push8=, $14
3165; NO-SIMD128-NEXT:    i32.const $push62=, 255
3166; NO-SIMD128-NEXT:    i32.and $push7=, $30, $pop62
3167; NO-SIMD128-NEXT:    i32.shr_s $push9=, $pop8, $pop7
3168; NO-SIMD128-NEXT:    i32.store8 13($0), $pop9
3169; NO-SIMD128-NEXT:    i32.extend8_s $push11=, $13
3170; NO-SIMD128-NEXT:    i32.const $push61=, 255
3171; NO-SIMD128-NEXT:    i32.and $push10=, $29, $pop61
3172; NO-SIMD128-NEXT:    i32.shr_s $push12=, $pop11, $pop10
3173; NO-SIMD128-NEXT:    i32.store8 12($0), $pop12
3174; NO-SIMD128-NEXT:    i32.extend8_s $push14=, $12
3175; NO-SIMD128-NEXT:    i32.const $push60=, 255
3176; NO-SIMD128-NEXT:    i32.and $push13=, $28, $pop60
3177; NO-SIMD128-NEXT:    i32.shr_s $push15=, $pop14, $pop13
3178; NO-SIMD128-NEXT:    i32.store8 11($0), $pop15
3179; NO-SIMD128-NEXT:    i32.extend8_s $push17=, $11
3180; NO-SIMD128-NEXT:    i32.const $push59=, 255
3181; NO-SIMD128-NEXT:    i32.and $push16=, $27, $pop59
3182; NO-SIMD128-NEXT:    i32.shr_s $push18=, $pop17, $pop16
3183; NO-SIMD128-NEXT:    i32.store8 10($0), $pop18
3184; NO-SIMD128-NEXT:    i32.extend8_s $push20=, $10
3185; NO-SIMD128-NEXT:    i32.const $push58=, 255
3186; NO-SIMD128-NEXT:    i32.and $push19=, $26, $pop58
3187; NO-SIMD128-NEXT:    i32.shr_s $push21=, $pop20, $pop19
3188; NO-SIMD128-NEXT:    i32.store8 9($0), $pop21
3189; NO-SIMD128-NEXT:    i32.extend8_s $push23=, $9
3190; NO-SIMD128-NEXT:    i32.const $push57=, 255
3191; NO-SIMD128-NEXT:    i32.and $push22=, $25, $pop57
3192; NO-SIMD128-NEXT:    i32.shr_s $push24=, $pop23, $pop22
3193; NO-SIMD128-NEXT:    i32.store8 8($0), $pop24
3194; NO-SIMD128-NEXT:    i32.extend8_s $push26=, $8
3195; NO-SIMD128-NEXT:    i32.const $push56=, 255
3196; NO-SIMD128-NEXT:    i32.and $push25=, $24, $pop56
3197; NO-SIMD128-NEXT:    i32.shr_s $push27=, $pop26, $pop25
3198; NO-SIMD128-NEXT:    i32.store8 7($0), $pop27
3199; NO-SIMD128-NEXT:    i32.extend8_s $push29=, $7
3200; NO-SIMD128-NEXT:    i32.const $push55=, 255
3201; NO-SIMD128-NEXT:    i32.and $push28=, $23, $pop55
3202; NO-SIMD128-NEXT:    i32.shr_s $push30=, $pop29, $pop28
3203; NO-SIMD128-NEXT:    i32.store8 6($0), $pop30
3204; NO-SIMD128-NEXT:    i32.extend8_s $push32=, $6
3205; NO-SIMD128-NEXT:    i32.const $push54=, 255
3206; NO-SIMD128-NEXT:    i32.and $push31=, $22, $pop54
3207; NO-SIMD128-NEXT:    i32.shr_s $push33=, $pop32, $pop31
3208; NO-SIMD128-NEXT:    i32.store8 5($0), $pop33
3209; NO-SIMD128-NEXT:    i32.extend8_s $push35=, $5
3210; NO-SIMD128-NEXT:    i32.const $push53=, 255
3211; NO-SIMD128-NEXT:    i32.and $push34=, $21, $pop53
3212; NO-SIMD128-NEXT:    i32.shr_s $push36=, $pop35, $pop34
3213; NO-SIMD128-NEXT:    i32.store8 4($0), $pop36
3214; NO-SIMD128-NEXT:    i32.extend8_s $push38=, $4
3215; NO-SIMD128-NEXT:    i32.const $push52=, 255
3216; NO-SIMD128-NEXT:    i32.and $push37=, $20, $pop52
3217; NO-SIMD128-NEXT:    i32.shr_s $push39=, $pop38, $pop37
3218; NO-SIMD128-NEXT:    i32.store8 3($0), $pop39
3219; NO-SIMD128-NEXT:    i32.extend8_s $push41=, $3
3220; NO-SIMD128-NEXT:    i32.const $push51=, 255
3221; NO-SIMD128-NEXT:    i32.and $push40=, $19, $pop51
3222; NO-SIMD128-NEXT:    i32.shr_s $push42=, $pop41, $pop40
3223; NO-SIMD128-NEXT:    i32.store8 2($0), $pop42
3224; NO-SIMD128-NEXT:    i32.extend8_s $push44=, $2
3225; NO-SIMD128-NEXT:    i32.const $push50=, 255
3226; NO-SIMD128-NEXT:    i32.and $push43=, $18, $pop50
3227; NO-SIMD128-NEXT:    i32.shr_s $push45=, $pop44, $pop43
3228; NO-SIMD128-NEXT:    i32.store8 1($0), $pop45
3229; NO-SIMD128-NEXT:    i32.extend8_s $push47=, $1
3230; NO-SIMD128-NEXT:    i32.const $push49=, 255
3231; NO-SIMD128-NEXT:    i32.and $push46=, $17, $pop49
3232; NO-SIMD128-NEXT:    i32.shr_s $push48=, $pop47, $pop46
3233; NO-SIMD128-NEXT:    i32.store8 0($0), $pop48
3234; NO-SIMD128-NEXT:    return
3235;
3236; NO-SIMD128-FAST-LABEL: shr_s_vec_v16i8:
3237; NO-SIMD128-FAST:         .functype shr_s_vec_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3238; NO-SIMD128-FAST-NEXT:  # %bb.0:
3239; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push2=, $1
3240; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
3241; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $17, $pop0
3242; NO-SIMD128-FAST-NEXT:    i32.shr_s $push3=, $pop2, $pop1
3243; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop3
3244; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push5=, $2
3245; NO-SIMD128-FAST-NEXT:    i32.const $push63=, 255
3246; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $18, $pop63
3247; NO-SIMD128-FAST-NEXT:    i32.shr_s $push6=, $pop5, $pop4
3248; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop6
3249; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push8=, $3
3250; NO-SIMD128-FAST-NEXT:    i32.const $push62=, 255
3251; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $19, $pop62
3252; NO-SIMD128-FAST-NEXT:    i32.shr_s $push9=, $pop8, $pop7
3253; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop9
3254; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push11=, $4
3255; NO-SIMD128-FAST-NEXT:    i32.const $push61=, 255
3256; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $20, $pop61
3257; NO-SIMD128-FAST-NEXT:    i32.shr_s $push12=, $pop11, $pop10
3258; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop12
3259; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push14=, $5
3260; NO-SIMD128-FAST-NEXT:    i32.const $push60=, 255
3261; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $21, $pop60
3262; NO-SIMD128-FAST-NEXT:    i32.shr_s $push15=, $pop14, $pop13
3263; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop15
3264; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push17=, $6
3265; NO-SIMD128-FAST-NEXT:    i32.const $push59=, 255
3266; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $22, $pop59
3267; NO-SIMD128-FAST-NEXT:    i32.shr_s $push18=, $pop17, $pop16
3268; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop18
3269; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push20=, $7
3270; NO-SIMD128-FAST-NEXT:    i32.const $push58=, 255
3271; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $23, $pop58
3272; NO-SIMD128-FAST-NEXT:    i32.shr_s $push21=, $pop20, $pop19
3273; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop21
3274; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push23=, $8
3275; NO-SIMD128-FAST-NEXT:    i32.const $push57=, 255
3276; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $24, $pop57
3277; NO-SIMD128-FAST-NEXT:    i32.shr_s $push24=, $pop23, $pop22
3278; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop24
3279; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push26=, $9
3280; NO-SIMD128-FAST-NEXT:    i32.const $push56=, 255
3281; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $25, $pop56
3282; NO-SIMD128-FAST-NEXT:    i32.shr_s $push27=, $pop26, $pop25
3283; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop27
3284; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push29=, $10
3285; NO-SIMD128-FAST-NEXT:    i32.const $push55=, 255
3286; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $26, $pop55
3287; NO-SIMD128-FAST-NEXT:    i32.shr_s $push30=, $pop29, $pop28
3288; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop30
3289; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push32=, $11
3290; NO-SIMD128-FAST-NEXT:    i32.const $push54=, 255
3291; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $27, $pop54
3292; NO-SIMD128-FAST-NEXT:    i32.shr_s $push33=, $pop32, $pop31
3293; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop33
3294; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push35=, $12
3295; NO-SIMD128-FAST-NEXT:    i32.const $push53=, 255
3296; NO-SIMD128-FAST-NEXT:    i32.and $push34=, $28, $pop53
3297; NO-SIMD128-FAST-NEXT:    i32.shr_s $push36=, $pop35, $pop34
3298; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop36
3299; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push38=, $13
3300; NO-SIMD128-FAST-NEXT:    i32.const $push52=, 255
3301; NO-SIMD128-FAST-NEXT:    i32.and $push37=, $29, $pop52
3302; NO-SIMD128-FAST-NEXT:    i32.shr_s $push39=, $pop38, $pop37
3303; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop39
3304; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push41=, $14
3305; NO-SIMD128-FAST-NEXT:    i32.const $push51=, 255
3306; NO-SIMD128-FAST-NEXT:    i32.and $push40=, $30, $pop51
3307; NO-SIMD128-FAST-NEXT:    i32.shr_s $push42=, $pop41, $pop40
3308; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop42
3309; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push44=, $15
3310; NO-SIMD128-FAST-NEXT:    i32.const $push50=, 255
3311; NO-SIMD128-FAST-NEXT:    i32.and $push43=, $31, $pop50
3312; NO-SIMD128-FAST-NEXT:    i32.shr_s $push45=, $pop44, $pop43
3313; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop45
3314; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push47=, $16
3315; NO-SIMD128-FAST-NEXT:    i32.const $push49=, 255
3316; NO-SIMD128-FAST-NEXT:    i32.and $push46=, $32, $pop49
3317; NO-SIMD128-FAST-NEXT:    i32.shr_s $push48=, $pop47, $pop46
3318; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop48
3319; NO-SIMD128-FAST-NEXT:    return
3320  %a = ashr <16 x i8> %v, %x
3321  ret <16 x i8> %a
3322}
3323
3324define <16 x i8> @shr_u_v16i8(<16 x i8> %v, i8 %x) {
3325; SIMD128-LABEL: shr_u_v16i8:
3326; SIMD128:         .functype shr_u_v16i8 (v128, i32) -> (v128)
3327; SIMD128-NEXT:  # %bb.0:
3328; SIMD128-NEXT:    i8x16.shr_u $push0=, $0, $1
3329; SIMD128-NEXT:    return $pop0
3330;
3331; SIMD128-FAST-LABEL: shr_u_v16i8:
3332; SIMD128-FAST:         .functype shr_u_v16i8 (v128, i32) -> (v128)
3333; SIMD128-FAST-NEXT:  # %bb.0:
3334; SIMD128-FAST-NEXT:    i8x16.shr_u $push0=, $0, $1
3335; SIMD128-FAST-NEXT:    return $pop0
3336;
3337; NO-SIMD128-LABEL: shr_u_v16i8:
3338; NO-SIMD128:         .functype shr_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3339; NO-SIMD128-NEXT:  # %bb.0:
3340; NO-SIMD128-NEXT:    i32.const $push0=, 255
3341; NO-SIMD128-NEXT:    i32.and $push1=, $16, $pop0
3342; NO-SIMD128-NEXT:    i32.const $push50=, 255
3343; NO-SIMD128-NEXT:    i32.and $push49=, $17, $pop50
3344; NO-SIMD128-NEXT:    local.tee $push48=, $17=, $pop49
3345; NO-SIMD128-NEXT:    i32.shr_u $push2=, $pop1, $pop48
3346; NO-SIMD128-NEXT:    i32.store8 15($0), $pop2
3347; NO-SIMD128-NEXT:    i32.const $push47=, 255
3348; NO-SIMD128-NEXT:    i32.and $push3=, $15, $pop47
3349; NO-SIMD128-NEXT:    i32.shr_u $push4=, $pop3, $17
3350; NO-SIMD128-NEXT:    i32.store8 14($0), $pop4
3351; NO-SIMD128-NEXT:    i32.const $push46=, 255
3352; NO-SIMD128-NEXT:    i32.and $push5=, $14, $pop46
3353; NO-SIMD128-NEXT:    i32.shr_u $push6=, $pop5, $17
3354; NO-SIMD128-NEXT:    i32.store8 13($0), $pop6
3355; NO-SIMD128-NEXT:    i32.const $push45=, 255
3356; NO-SIMD128-NEXT:    i32.and $push7=, $13, $pop45
3357; NO-SIMD128-NEXT:    i32.shr_u $push8=, $pop7, $17
3358; NO-SIMD128-NEXT:    i32.store8 12($0), $pop8
3359; NO-SIMD128-NEXT:    i32.const $push44=, 255
3360; NO-SIMD128-NEXT:    i32.and $push9=, $12, $pop44
3361; NO-SIMD128-NEXT:    i32.shr_u $push10=, $pop9, $17
3362; NO-SIMD128-NEXT:    i32.store8 11($0), $pop10
3363; NO-SIMD128-NEXT:    i32.const $push43=, 255
3364; NO-SIMD128-NEXT:    i32.and $push11=, $11, $pop43
3365; NO-SIMD128-NEXT:    i32.shr_u $push12=, $pop11, $17
3366; NO-SIMD128-NEXT:    i32.store8 10($0), $pop12
3367; NO-SIMD128-NEXT:    i32.const $push42=, 255
3368; NO-SIMD128-NEXT:    i32.and $push13=, $10, $pop42
3369; NO-SIMD128-NEXT:    i32.shr_u $push14=, $pop13, $17
3370; NO-SIMD128-NEXT:    i32.store8 9($0), $pop14
3371; NO-SIMD128-NEXT:    i32.const $push41=, 255
3372; NO-SIMD128-NEXT:    i32.and $push15=, $9, $pop41
3373; NO-SIMD128-NEXT:    i32.shr_u $push16=, $pop15, $17
3374; NO-SIMD128-NEXT:    i32.store8 8($0), $pop16
3375; NO-SIMD128-NEXT:    i32.const $push40=, 255
3376; NO-SIMD128-NEXT:    i32.and $push17=, $8, $pop40
3377; NO-SIMD128-NEXT:    i32.shr_u $push18=, $pop17, $17
3378; NO-SIMD128-NEXT:    i32.store8 7($0), $pop18
3379; NO-SIMD128-NEXT:    i32.const $push39=, 255
3380; NO-SIMD128-NEXT:    i32.and $push19=, $7, $pop39
3381; NO-SIMD128-NEXT:    i32.shr_u $push20=, $pop19, $17
3382; NO-SIMD128-NEXT:    i32.store8 6($0), $pop20
3383; NO-SIMD128-NEXT:    i32.const $push38=, 255
3384; NO-SIMD128-NEXT:    i32.and $push21=, $6, $pop38
3385; NO-SIMD128-NEXT:    i32.shr_u $push22=, $pop21, $17
3386; NO-SIMD128-NEXT:    i32.store8 5($0), $pop22
3387; NO-SIMD128-NEXT:    i32.const $push37=, 255
3388; NO-SIMD128-NEXT:    i32.and $push23=, $5, $pop37
3389; NO-SIMD128-NEXT:    i32.shr_u $push24=, $pop23, $17
3390; NO-SIMD128-NEXT:    i32.store8 4($0), $pop24
3391; NO-SIMD128-NEXT:    i32.const $push36=, 255
3392; NO-SIMD128-NEXT:    i32.and $push25=, $4, $pop36
3393; NO-SIMD128-NEXT:    i32.shr_u $push26=, $pop25, $17
3394; NO-SIMD128-NEXT:    i32.store8 3($0), $pop26
3395; NO-SIMD128-NEXT:    i32.const $push35=, 255
3396; NO-SIMD128-NEXT:    i32.and $push27=, $3, $pop35
3397; NO-SIMD128-NEXT:    i32.shr_u $push28=, $pop27, $17
3398; NO-SIMD128-NEXT:    i32.store8 2($0), $pop28
3399; NO-SIMD128-NEXT:    i32.const $push34=, 255
3400; NO-SIMD128-NEXT:    i32.and $push29=, $2, $pop34
3401; NO-SIMD128-NEXT:    i32.shr_u $push30=, $pop29, $17
3402; NO-SIMD128-NEXT:    i32.store8 1($0), $pop30
3403; NO-SIMD128-NEXT:    i32.const $push33=, 255
3404; NO-SIMD128-NEXT:    i32.and $push31=, $1, $pop33
3405; NO-SIMD128-NEXT:    i32.shr_u $push32=, $pop31, $17
3406; NO-SIMD128-NEXT:    i32.store8 0($0), $pop32
3407; NO-SIMD128-NEXT:    return
3408;
3409; NO-SIMD128-FAST-LABEL: shr_u_v16i8:
3410; NO-SIMD128-FAST:         .functype shr_u_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3411; NO-SIMD128-FAST-NEXT:  # %bb.0:
3412; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
3413; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $1, $pop0
3414; NO-SIMD128-FAST-NEXT:    i32.const $push50=, 255
3415; NO-SIMD128-FAST-NEXT:    i32.and $push49=, $17, $pop50
3416; NO-SIMD128-FAST-NEXT:    local.tee $push48=, $1=, $pop49
3417; NO-SIMD128-FAST-NEXT:    i32.shr_u $push2=, $pop1, $pop48
3418; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop2
3419; NO-SIMD128-FAST-NEXT:    i32.const $push47=, 255
3420; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $2, $pop47
3421; NO-SIMD128-FAST-NEXT:    i32.shr_u $push4=, $pop3, $1
3422; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop4
3423; NO-SIMD128-FAST-NEXT:    i32.const $push46=, 255
3424; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $3, $pop46
3425; NO-SIMD128-FAST-NEXT:    i32.shr_u $push6=, $pop5, $1
3426; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop6
3427; NO-SIMD128-FAST-NEXT:    i32.const $push45=, 255
3428; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $4, $pop45
3429; NO-SIMD128-FAST-NEXT:    i32.shr_u $push8=, $pop7, $1
3430; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop8
3431; NO-SIMD128-FAST-NEXT:    i32.const $push44=, 255
3432; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $5, $pop44
3433; NO-SIMD128-FAST-NEXT:    i32.shr_u $push10=, $pop9, $1
3434; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop10
3435; NO-SIMD128-FAST-NEXT:    i32.const $push43=, 255
3436; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $6, $pop43
3437; NO-SIMD128-FAST-NEXT:    i32.shr_u $push12=, $pop11, $1
3438; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop12
3439; NO-SIMD128-FAST-NEXT:    i32.const $push42=, 255
3440; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $7, $pop42
3441; NO-SIMD128-FAST-NEXT:    i32.shr_u $push14=, $pop13, $1
3442; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop14
3443; NO-SIMD128-FAST-NEXT:    i32.const $push41=, 255
3444; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $8, $pop41
3445; NO-SIMD128-FAST-NEXT:    i32.shr_u $push16=, $pop15, $1
3446; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop16
3447; NO-SIMD128-FAST-NEXT:    i32.const $push40=, 255
3448; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $9, $pop40
3449; NO-SIMD128-FAST-NEXT:    i32.shr_u $push18=, $pop17, $1
3450; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop18
3451; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 255
3452; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $10, $pop39
3453; NO-SIMD128-FAST-NEXT:    i32.shr_u $push20=, $pop19, $1
3454; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop20
3455; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 255
3456; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $11, $pop38
3457; NO-SIMD128-FAST-NEXT:    i32.shr_u $push22=, $pop21, $1
3458; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop22
3459; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 255
3460; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $12, $pop37
3461; NO-SIMD128-FAST-NEXT:    i32.shr_u $push24=, $pop23, $1
3462; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop24
3463; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 255
3464; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $13, $pop36
3465; NO-SIMD128-FAST-NEXT:    i32.shr_u $push26=, $pop25, $1
3466; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop26
3467; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 255
3468; NO-SIMD128-FAST-NEXT:    i32.and $push27=, $14, $pop35
3469; NO-SIMD128-FAST-NEXT:    i32.shr_u $push28=, $pop27, $1
3470; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop28
3471; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 255
3472; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $15, $pop34
3473; NO-SIMD128-FAST-NEXT:    i32.shr_u $push30=, $pop29, $1
3474; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop30
3475; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 255
3476; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $16, $pop33
3477; NO-SIMD128-FAST-NEXT:    i32.shr_u $push32=, $pop31, $1
3478; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop32
3479; NO-SIMD128-FAST-NEXT:    return
3480  %t = insertelement <16 x i8> undef, i8 %x, i32 0
3481  %s = shufflevector <16 x i8> %t, <16 x i8> undef,
3482    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,
3483                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
3484  %a = lshr <16 x i8> %v, %s
3485  ret <16 x i8> %a
3486}
3487
3488define <16 x i8> @shr_u_vec_v16i8(<16 x i8> %v, <16 x i8> %x) {
3489; SIMD128-LABEL: shr_u_vec_v16i8:
3490; SIMD128:         .functype shr_u_vec_v16i8 (v128, v128) -> (v128)
3491; SIMD128-NEXT:  # %bb.0:
3492; SIMD128-NEXT:    i8x16.extract_lane_u $push7=, $0, 0
3493; SIMD128-NEXT:    i8x16.extract_lane_u $push5=, $1, 0
3494; SIMD128-NEXT:    i32.const $push1=, 7
3495; SIMD128-NEXT:    i32.and $push6=, $pop5, $pop1
3496; SIMD128-NEXT:    i32.shr_u $push8=, $pop7, $pop6
3497; SIMD128-NEXT:    i8x16.splat $push9=, $pop8
3498; SIMD128-NEXT:    i8x16.extract_lane_u $push3=, $0, 1
3499; SIMD128-NEXT:    i8x16.extract_lane_u $push0=, $1, 1
3500; SIMD128-NEXT:    i32.const $push95=, 7
3501; SIMD128-NEXT:    i32.and $push2=, $pop0, $pop95
3502; SIMD128-NEXT:    i32.shr_u $push4=, $pop3, $pop2
3503; SIMD128-NEXT:    i8x16.replace_lane $push10=, $pop9, 1, $pop4
3504; SIMD128-NEXT:    i8x16.extract_lane_u $push13=, $0, 2
3505; SIMD128-NEXT:    i8x16.extract_lane_u $push11=, $1, 2
3506; SIMD128-NEXT:    i32.const $push94=, 7
3507; SIMD128-NEXT:    i32.and $push12=, $pop11, $pop94
3508; SIMD128-NEXT:    i32.shr_u $push14=, $pop13, $pop12
3509; SIMD128-NEXT:    i8x16.replace_lane $push15=, $pop10, 2, $pop14
3510; SIMD128-NEXT:    i8x16.extract_lane_u $push18=, $0, 3
3511; SIMD128-NEXT:    i8x16.extract_lane_u $push16=, $1, 3
3512; SIMD128-NEXT:    i32.const $push93=, 7
3513; SIMD128-NEXT:    i32.and $push17=, $pop16, $pop93
3514; SIMD128-NEXT:    i32.shr_u $push19=, $pop18, $pop17
3515; SIMD128-NEXT:    i8x16.replace_lane $push20=, $pop15, 3, $pop19
3516; SIMD128-NEXT:    i8x16.extract_lane_u $push23=, $0, 4
3517; SIMD128-NEXT:    i8x16.extract_lane_u $push21=, $1, 4
3518; SIMD128-NEXT:    i32.const $push92=, 7
3519; SIMD128-NEXT:    i32.and $push22=, $pop21, $pop92
3520; SIMD128-NEXT:    i32.shr_u $push24=, $pop23, $pop22
3521; SIMD128-NEXT:    i8x16.replace_lane $push25=, $pop20, 4, $pop24
3522; SIMD128-NEXT:    i8x16.extract_lane_u $push28=, $0, 5
3523; SIMD128-NEXT:    i8x16.extract_lane_u $push26=, $1, 5
3524; SIMD128-NEXT:    i32.const $push91=, 7
3525; SIMD128-NEXT:    i32.and $push27=, $pop26, $pop91
3526; SIMD128-NEXT:    i32.shr_u $push29=, $pop28, $pop27
3527; SIMD128-NEXT:    i8x16.replace_lane $push30=, $pop25, 5, $pop29
3528; SIMD128-NEXT:    i8x16.extract_lane_u $push33=, $0, 6
3529; SIMD128-NEXT:    i8x16.extract_lane_u $push31=, $1, 6
3530; SIMD128-NEXT:    i32.const $push90=, 7
3531; SIMD128-NEXT:    i32.and $push32=, $pop31, $pop90
3532; SIMD128-NEXT:    i32.shr_u $push34=, $pop33, $pop32
3533; SIMD128-NEXT:    i8x16.replace_lane $push35=, $pop30, 6, $pop34
3534; SIMD128-NEXT:    i8x16.extract_lane_u $push38=, $0, 7
3535; SIMD128-NEXT:    i8x16.extract_lane_u $push36=, $1, 7
3536; SIMD128-NEXT:    i32.const $push89=, 7
3537; SIMD128-NEXT:    i32.and $push37=, $pop36, $pop89
3538; SIMD128-NEXT:    i32.shr_u $push39=, $pop38, $pop37
3539; SIMD128-NEXT:    i8x16.replace_lane $push40=, $pop35, 7, $pop39
3540; SIMD128-NEXT:    i8x16.extract_lane_u $push43=, $0, 8
3541; SIMD128-NEXT:    i8x16.extract_lane_u $push41=, $1, 8
3542; SIMD128-NEXT:    i32.const $push88=, 7
3543; SIMD128-NEXT:    i32.and $push42=, $pop41, $pop88
3544; SIMD128-NEXT:    i32.shr_u $push44=, $pop43, $pop42
3545; SIMD128-NEXT:    i8x16.replace_lane $push45=, $pop40, 8, $pop44
3546; SIMD128-NEXT:    i8x16.extract_lane_u $push48=, $0, 9
3547; SIMD128-NEXT:    i8x16.extract_lane_u $push46=, $1, 9
3548; SIMD128-NEXT:    i32.const $push87=, 7
3549; SIMD128-NEXT:    i32.and $push47=, $pop46, $pop87
3550; SIMD128-NEXT:    i32.shr_u $push49=, $pop48, $pop47
3551; SIMD128-NEXT:    i8x16.replace_lane $push50=, $pop45, 9, $pop49
3552; SIMD128-NEXT:    i8x16.extract_lane_u $push53=, $0, 10
3553; SIMD128-NEXT:    i8x16.extract_lane_u $push51=, $1, 10
3554; SIMD128-NEXT:    i32.const $push86=, 7
3555; SIMD128-NEXT:    i32.and $push52=, $pop51, $pop86
3556; SIMD128-NEXT:    i32.shr_u $push54=, $pop53, $pop52
3557; SIMD128-NEXT:    i8x16.replace_lane $push55=, $pop50, 10, $pop54
3558; SIMD128-NEXT:    i8x16.extract_lane_u $push58=, $0, 11
3559; SIMD128-NEXT:    i8x16.extract_lane_u $push56=, $1, 11
3560; SIMD128-NEXT:    i32.const $push85=, 7
3561; SIMD128-NEXT:    i32.and $push57=, $pop56, $pop85
3562; SIMD128-NEXT:    i32.shr_u $push59=, $pop58, $pop57
3563; SIMD128-NEXT:    i8x16.replace_lane $push60=, $pop55, 11, $pop59
3564; SIMD128-NEXT:    i8x16.extract_lane_u $push63=, $0, 12
3565; SIMD128-NEXT:    i8x16.extract_lane_u $push61=, $1, 12
3566; SIMD128-NEXT:    i32.const $push84=, 7
3567; SIMD128-NEXT:    i32.and $push62=, $pop61, $pop84
3568; SIMD128-NEXT:    i32.shr_u $push64=, $pop63, $pop62
3569; SIMD128-NEXT:    i8x16.replace_lane $push65=, $pop60, 12, $pop64
3570; SIMD128-NEXT:    i8x16.extract_lane_u $push68=, $0, 13
3571; SIMD128-NEXT:    i8x16.extract_lane_u $push66=, $1, 13
3572; SIMD128-NEXT:    i32.const $push83=, 7
3573; SIMD128-NEXT:    i32.and $push67=, $pop66, $pop83
3574; SIMD128-NEXT:    i32.shr_u $push69=, $pop68, $pop67
3575; SIMD128-NEXT:    i8x16.replace_lane $push70=, $pop65, 13, $pop69
3576; SIMD128-NEXT:    i8x16.extract_lane_u $push73=, $0, 14
3577; SIMD128-NEXT:    i8x16.extract_lane_u $push71=, $1, 14
3578; SIMD128-NEXT:    i32.const $push82=, 7
3579; SIMD128-NEXT:    i32.and $push72=, $pop71, $pop82
3580; SIMD128-NEXT:    i32.shr_u $push74=, $pop73, $pop72
3581; SIMD128-NEXT:    i8x16.replace_lane $push75=, $pop70, 14, $pop74
3582; SIMD128-NEXT:    i8x16.extract_lane_u $push78=, $0, 15
3583; SIMD128-NEXT:    i8x16.extract_lane_u $push76=, $1, 15
3584; SIMD128-NEXT:    i32.const $push81=, 7
3585; SIMD128-NEXT:    i32.and $push77=, $pop76, $pop81
3586; SIMD128-NEXT:    i32.shr_u $push79=, $pop78, $pop77
3587; SIMD128-NEXT:    i8x16.replace_lane $push80=, $pop75, 15, $pop79
3588; SIMD128-NEXT:    return $pop80
3589;
3590; SIMD128-FAST-LABEL: shr_u_vec_v16i8:
3591; SIMD128-FAST:         .functype shr_u_vec_v16i8 (v128, v128) -> (v128)
3592; SIMD128-FAST-NEXT:  # %bb.0:
3593; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push8=, $0, 0
3594; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push6=, $1, 0
3595; SIMD128-FAST-NEXT:    i32.const $push2=, 7
3596; SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop2
3597; SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop7
3598; SIMD128-FAST-NEXT:    i8x16.splat $push10=, $pop9
3599; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push4=, $0, 1
3600; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push1=, $1, 1
3601; SIMD128-FAST-NEXT:    i32.const $push95=, 7
3602; SIMD128-FAST-NEXT:    i32.and $push3=, $pop1, $pop95
3603; SIMD128-FAST-NEXT:    i32.shr_u $push5=, $pop4, $pop3
3604; SIMD128-FAST-NEXT:    i8x16.replace_lane $push11=, $pop10, 1, $pop5
3605; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push14=, $0, 2
3606; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push12=, $1, 2
3607; SIMD128-FAST-NEXT:    i32.const $push94=, 7
3608; SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $pop94
3609; SIMD128-FAST-NEXT:    i32.shr_u $push15=, $pop14, $pop13
3610; SIMD128-FAST-NEXT:    i8x16.replace_lane $push16=, $pop11, 2, $pop15
3611; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push19=, $0, 3
3612; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push17=, $1, 3
3613; SIMD128-FAST-NEXT:    i32.const $push93=, 7
3614; SIMD128-FAST-NEXT:    i32.and $push18=, $pop17, $pop93
3615; SIMD128-FAST-NEXT:    i32.shr_u $push20=, $pop19, $pop18
3616; SIMD128-FAST-NEXT:    i8x16.replace_lane $push21=, $pop16, 3, $pop20
3617; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push24=, $0, 4
3618; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push22=, $1, 4
3619; SIMD128-FAST-NEXT:    i32.const $push92=, 7
3620; SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop92
3621; SIMD128-FAST-NEXT:    i32.shr_u $push25=, $pop24, $pop23
3622; SIMD128-FAST-NEXT:    i8x16.replace_lane $push26=, $pop21, 4, $pop25
3623; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push29=, $0, 5
3624; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push27=, $1, 5
3625; SIMD128-FAST-NEXT:    i32.const $push91=, 7
3626; SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop91
3627; SIMD128-FAST-NEXT:    i32.shr_u $push30=, $pop29, $pop28
3628; SIMD128-FAST-NEXT:    i8x16.replace_lane $push31=, $pop26, 5, $pop30
3629; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push34=, $0, 6
3630; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push32=, $1, 6
3631; SIMD128-FAST-NEXT:    i32.const $push90=, 7
3632; SIMD128-FAST-NEXT:    i32.and $push33=, $pop32, $pop90
3633; SIMD128-FAST-NEXT:    i32.shr_u $push35=, $pop34, $pop33
3634; SIMD128-FAST-NEXT:    i8x16.replace_lane $push36=, $pop31, 6, $pop35
3635; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push39=, $0, 7
3636; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push37=, $1, 7
3637; SIMD128-FAST-NEXT:    i32.const $push89=, 7
3638; SIMD128-FAST-NEXT:    i32.and $push38=, $pop37, $pop89
3639; SIMD128-FAST-NEXT:    i32.shr_u $push40=, $pop39, $pop38
3640; SIMD128-FAST-NEXT:    i8x16.replace_lane $push41=, $pop36, 7, $pop40
3641; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push44=, $0, 8
3642; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push42=, $1, 8
3643; SIMD128-FAST-NEXT:    i32.const $push88=, 7
3644; SIMD128-FAST-NEXT:    i32.and $push43=, $pop42, $pop88
3645; SIMD128-FAST-NEXT:    i32.shr_u $push45=, $pop44, $pop43
3646; SIMD128-FAST-NEXT:    i8x16.replace_lane $push46=, $pop41, 8, $pop45
3647; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push49=, $0, 9
3648; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push47=, $1, 9
3649; SIMD128-FAST-NEXT:    i32.const $push87=, 7
3650; SIMD128-FAST-NEXT:    i32.and $push48=, $pop47, $pop87
3651; SIMD128-FAST-NEXT:    i32.shr_u $push50=, $pop49, $pop48
3652; SIMD128-FAST-NEXT:    i8x16.replace_lane $push51=, $pop46, 9, $pop50
3653; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push54=, $0, 10
3654; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push52=, $1, 10
3655; SIMD128-FAST-NEXT:    i32.const $push86=, 7
3656; SIMD128-FAST-NEXT:    i32.and $push53=, $pop52, $pop86
3657; SIMD128-FAST-NEXT:    i32.shr_u $push55=, $pop54, $pop53
3658; SIMD128-FAST-NEXT:    i8x16.replace_lane $push56=, $pop51, 10, $pop55
3659; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push59=, $0, 11
3660; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push57=, $1, 11
3661; SIMD128-FAST-NEXT:    i32.const $push85=, 7
3662; SIMD128-FAST-NEXT:    i32.and $push58=, $pop57, $pop85
3663; SIMD128-FAST-NEXT:    i32.shr_u $push60=, $pop59, $pop58
3664; SIMD128-FAST-NEXT:    i8x16.replace_lane $push61=, $pop56, 11, $pop60
3665; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push64=, $0, 12
3666; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push62=, $1, 12
3667; SIMD128-FAST-NEXT:    i32.const $push84=, 7
3668; SIMD128-FAST-NEXT:    i32.and $push63=, $pop62, $pop84
3669; SIMD128-FAST-NEXT:    i32.shr_u $push65=, $pop64, $pop63
3670; SIMD128-FAST-NEXT:    i8x16.replace_lane $push66=, $pop61, 12, $pop65
3671; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push69=, $0, 13
3672; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push67=, $1, 13
3673; SIMD128-FAST-NEXT:    i32.const $push83=, 7
3674; SIMD128-FAST-NEXT:    i32.and $push68=, $pop67, $pop83
3675; SIMD128-FAST-NEXT:    i32.shr_u $push70=, $pop69, $pop68
3676; SIMD128-FAST-NEXT:    i8x16.replace_lane $push71=, $pop66, 13, $pop70
3677; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push74=, $0, 14
3678; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push72=, $1, 14
3679; SIMD128-FAST-NEXT:    i32.const $push82=, 7
3680; SIMD128-FAST-NEXT:    i32.and $push73=, $pop72, $pop82
3681; SIMD128-FAST-NEXT:    i32.shr_u $push75=, $pop74, $pop73
3682; SIMD128-FAST-NEXT:    i8x16.replace_lane $push76=, $pop71, 14, $pop75
3683; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push79=, $0, 15
3684; SIMD128-FAST-NEXT:    i8x16.extract_lane_u $push77=, $1, 15
3685; SIMD128-FAST-NEXT:    i32.const $push81=, 7
3686; SIMD128-FAST-NEXT:    i32.and $push78=, $pop77, $pop81
3687; SIMD128-FAST-NEXT:    i32.shr_u $push80=, $pop79, $pop78
3688; SIMD128-FAST-NEXT:    i8x16.replace_lane $push0=, $pop76, 15, $pop80
3689; SIMD128-FAST-NEXT:    return $pop0
3690;
3691; NO-SIMD128-LABEL: shr_u_vec_v16i8:
3692; NO-SIMD128:         .functype shr_u_vec_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3693; NO-SIMD128-NEXT:  # %bb.0:
3694; NO-SIMD128-NEXT:    i32.const $push0=, 255
3695; NO-SIMD128-NEXT:    i32.and $push2=, $16, $pop0
3696; NO-SIMD128-NEXT:    i32.const $push79=, 255
3697; NO-SIMD128-NEXT:    i32.and $push1=, $32, $pop79
3698; NO-SIMD128-NEXT:    i32.shr_u $push3=, $pop2, $pop1
3699; NO-SIMD128-NEXT:    i32.store8 15($0), $pop3
3700; NO-SIMD128-NEXT:    i32.const $push78=, 255
3701; NO-SIMD128-NEXT:    i32.and $push5=, $15, $pop78
3702; NO-SIMD128-NEXT:    i32.const $push77=, 255
3703; NO-SIMD128-NEXT:    i32.and $push4=, $31, $pop77
3704; NO-SIMD128-NEXT:    i32.shr_u $push6=, $pop5, $pop4
3705; NO-SIMD128-NEXT:    i32.store8 14($0), $pop6
3706; NO-SIMD128-NEXT:    i32.const $push76=, 255
3707; NO-SIMD128-NEXT:    i32.and $push8=, $14, $pop76
3708; NO-SIMD128-NEXT:    i32.const $push75=, 255
3709; NO-SIMD128-NEXT:    i32.and $push7=, $30, $pop75
3710; NO-SIMD128-NEXT:    i32.shr_u $push9=, $pop8, $pop7
3711; NO-SIMD128-NEXT:    i32.store8 13($0), $pop9
3712; NO-SIMD128-NEXT:    i32.const $push74=, 255
3713; NO-SIMD128-NEXT:    i32.and $push11=, $13, $pop74
3714; NO-SIMD128-NEXT:    i32.const $push73=, 255
3715; NO-SIMD128-NEXT:    i32.and $push10=, $29, $pop73
3716; NO-SIMD128-NEXT:    i32.shr_u $push12=, $pop11, $pop10
3717; NO-SIMD128-NEXT:    i32.store8 12($0), $pop12
3718; NO-SIMD128-NEXT:    i32.const $push72=, 255
3719; NO-SIMD128-NEXT:    i32.and $push14=, $12, $pop72
3720; NO-SIMD128-NEXT:    i32.const $push71=, 255
3721; NO-SIMD128-NEXT:    i32.and $push13=, $28, $pop71
3722; NO-SIMD128-NEXT:    i32.shr_u $push15=, $pop14, $pop13
3723; NO-SIMD128-NEXT:    i32.store8 11($0), $pop15
3724; NO-SIMD128-NEXT:    i32.const $push70=, 255
3725; NO-SIMD128-NEXT:    i32.and $push17=, $11, $pop70
3726; NO-SIMD128-NEXT:    i32.const $push69=, 255
3727; NO-SIMD128-NEXT:    i32.and $push16=, $27, $pop69
3728; NO-SIMD128-NEXT:    i32.shr_u $push18=, $pop17, $pop16
3729; NO-SIMD128-NEXT:    i32.store8 10($0), $pop18
3730; NO-SIMD128-NEXT:    i32.const $push68=, 255
3731; NO-SIMD128-NEXT:    i32.and $push20=, $10, $pop68
3732; NO-SIMD128-NEXT:    i32.const $push67=, 255
3733; NO-SIMD128-NEXT:    i32.and $push19=, $26, $pop67
3734; NO-SIMD128-NEXT:    i32.shr_u $push21=, $pop20, $pop19
3735; NO-SIMD128-NEXT:    i32.store8 9($0), $pop21
3736; NO-SIMD128-NEXT:    i32.const $push66=, 255
3737; NO-SIMD128-NEXT:    i32.and $push23=, $9, $pop66
3738; NO-SIMD128-NEXT:    i32.const $push65=, 255
3739; NO-SIMD128-NEXT:    i32.and $push22=, $25, $pop65
3740; NO-SIMD128-NEXT:    i32.shr_u $push24=, $pop23, $pop22
3741; NO-SIMD128-NEXT:    i32.store8 8($0), $pop24
3742; NO-SIMD128-NEXT:    i32.const $push64=, 255
3743; NO-SIMD128-NEXT:    i32.and $push26=, $8, $pop64
3744; NO-SIMD128-NEXT:    i32.const $push63=, 255
3745; NO-SIMD128-NEXT:    i32.and $push25=, $24, $pop63
3746; NO-SIMD128-NEXT:    i32.shr_u $push27=, $pop26, $pop25
3747; NO-SIMD128-NEXT:    i32.store8 7($0), $pop27
3748; NO-SIMD128-NEXT:    i32.const $push62=, 255
3749; NO-SIMD128-NEXT:    i32.and $push29=, $7, $pop62
3750; NO-SIMD128-NEXT:    i32.const $push61=, 255
3751; NO-SIMD128-NEXT:    i32.and $push28=, $23, $pop61
3752; NO-SIMD128-NEXT:    i32.shr_u $push30=, $pop29, $pop28
3753; NO-SIMD128-NEXT:    i32.store8 6($0), $pop30
3754; NO-SIMD128-NEXT:    i32.const $push60=, 255
3755; NO-SIMD128-NEXT:    i32.and $push32=, $6, $pop60
3756; NO-SIMD128-NEXT:    i32.const $push59=, 255
3757; NO-SIMD128-NEXT:    i32.and $push31=, $22, $pop59
3758; NO-SIMD128-NEXT:    i32.shr_u $push33=, $pop32, $pop31
3759; NO-SIMD128-NEXT:    i32.store8 5($0), $pop33
3760; NO-SIMD128-NEXT:    i32.const $push58=, 255
3761; NO-SIMD128-NEXT:    i32.and $push35=, $5, $pop58
3762; NO-SIMD128-NEXT:    i32.const $push57=, 255
3763; NO-SIMD128-NEXT:    i32.and $push34=, $21, $pop57
3764; NO-SIMD128-NEXT:    i32.shr_u $push36=, $pop35, $pop34
3765; NO-SIMD128-NEXT:    i32.store8 4($0), $pop36
3766; NO-SIMD128-NEXT:    i32.const $push56=, 255
3767; NO-SIMD128-NEXT:    i32.and $push38=, $4, $pop56
3768; NO-SIMD128-NEXT:    i32.const $push55=, 255
3769; NO-SIMD128-NEXT:    i32.and $push37=, $20, $pop55
3770; NO-SIMD128-NEXT:    i32.shr_u $push39=, $pop38, $pop37
3771; NO-SIMD128-NEXT:    i32.store8 3($0), $pop39
3772; NO-SIMD128-NEXT:    i32.const $push54=, 255
3773; NO-SIMD128-NEXT:    i32.and $push41=, $3, $pop54
3774; NO-SIMD128-NEXT:    i32.const $push53=, 255
3775; NO-SIMD128-NEXT:    i32.and $push40=, $19, $pop53
3776; NO-SIMD128-NEXT:    i32.shr_u $push42=, $pop41, $pop40
3777; NO-SIMD128-NEXT:    i32.store8 2($0), $pop42
3778; NO-SIMD128-NEXT:    i32.const $push52=, 255
3779; NO-SIMD128-NEXT:    i32.and $push44=, $2, $pop52
3780; NO-SIMD128-NEXT:    i32.const $push51=, 255
3781; NO-SIMD128-NEXT:    i32.and $push43=, $18, $pop51
3782; NO-SIMD128-NEXT:    i32.shr_u $push45=, $pop44, $pop43
3783; NO-SIMD128-NEXT:    i32.store8 1($0), $pop45
3784; NO-SIMD128-NEXT:    i32.const $push50=, 255
3785; NO-SIMD128-NEXT:    i32.and $push47=, $1, $pop50
3786; NO-SIMD128-NEXT:    i32.const $push49=, 255
3787; NO-SIMD128-NEXT:    i32.and $push46=, $17, $pop49
3788; NO-SIMD128-NEXT:    i32.shr_u $push48=, $pop47, $pop46
3789; NO-SIMD128-NEXT:    i32.store8 0($0), $pop48
3790; NO-SIMD128-NEXT:    return
3791;
3792; NO-SIMD128-FAST-LABEL: shr_u_vec_v16i8:
3793; NO-SIMD128-FAST:         .functype shr_u_vec_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3794; NO-SIMD128-FAST-NEXT:  # %bb.0:
3795; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
3796; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
3797; NO-SIMD128-FAST-NEXT:    i32.const $push79=, 255
3798; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $17, $pop79
3799; NO-SIMD128-FAST-NEXT:    i32.shr_u $push3=, $pop2, $pop1
3800; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop3
3801; NO-SIMD128-FAST-NEXT:    i32.const $push78=, 255
3802; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $2, $pop78
3803; NO-SIMD128-FAST-NEXT:    i32.const $push77=, 255
3804; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $18, $pop77
3805; NO-SIMD128-FAST-NEXT:    i32.shr_u $push6=, $pop5, $pop4
3806; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop6
3807; NO-SIMD128-FAST-NEXT:    i32.const $push76=, 255
3808; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $3, $pop76
3809; NO-SIMD128-FAST-NEXT:    i32.const $push75=, 255
3810; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $19, $pop75
3811; NO-SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop7
3812; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop9
3813; NO-SIMD128-FAST-NEXT:    i32.const $push74=, 255
3814; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $4, $pop74
3815; NO-SIMD128-FAST-NEXT:    i32.const $push73=, 255
3816; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $20, $pop73
3817; NO-SIMD128-FAST-NEXT:    i32.shr_u $push12=, $pop11, $pop10
3818; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop12
3819; NO-SIMD128-FAST-NEXT:    i32.const $push72=, 255
3820; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $5, $pop72
3821; NO-SIMD128-FAST-NEXT:    i32.const $push71=, 255
3822; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $21, $pop71
3823; NO-SIMD128-FAST-NEXT:    i32.shr_u $push15=, $pop14, $pop13
3824; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop15
3825; NO-SIMD128-FAST-NEXT:    i32.const $push70=, 255
3826; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $6, $pop70
3827; NO-SIMD128-FAST-NEXT:    i32.const $push69=, 255
3828; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $22, $pop69
3829; NO-SIMD128-FAST-NEXT:    i32.shr_u $push18=, $pop17, $pop16
3830; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop18
3831; NO-SIMD128-FAST-NEXT:    i32.const $push68=, 255
3832; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $7, $pop68
3833; NO-SIMD128-FAST-NEXT:    i32.const $push67=, 255
3834; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $23, $pop67
3835; NO-SIMD128-FAST-NEXT:    i32.shr_u $push21=, $pop20, $pop19
3836; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop21
3837; NO-SIMD128-FAST-NEXT:    i32.const $push66=, 255
3838; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $8, $pop66
3839; NO-SIMD128-FAST-NEXT:    i32.const $push65=, 255
3840; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $24, $pop65
3841; NO-SIMD128-FAST-NEXT:    i32.shr_u $push24=, $pop23, $pop22
3842; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop24
3843; NO-SIMD128-FAST-NEXT:    i32.const $push64=, 255
3844; NO-SIMD128-FAST-NEXT:    i32.and $push26=, $9, $pop64
3845; NO-SIMD128-FAST-NEXT:    i32.const $push63=, 255
3846; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $25, $pop63
3847; NO-SIMD128-FAST-NEXT:    i32.shr_u $push27=, $pop26, $pop25
3848; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop27
3849; NO-SIMD128-FAST-NEXT:    i32.const $push62=, 255
3850; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $10, $pop62
3851; NO-SIMD128-FAST-NEXT:    i32.const $push61=, 255
3852; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $26, $pop61
3853; NO-SIMD128-FAST-NEXT:    i32.shr_u $push30=, $pop29, $pop28
3854; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop30
3855; NO-SIMD128-FAST-NEXT:    i32.const $push60=, 255
3856; NO-SIMD128-FAST-NEXT:    i32.and $push32=, $11, $pop60
3857; NO-SIMD128-FAST-NEXT:    i32.const $push59=, 255
3858; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $27, $pop59
3859; NO-SIMD128-FAST-NEXT:    i32.shr_u $push33=, $pop32, $pop31
3860; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop33
3861; NO-SIMD128-FAST-NEXT:    i32.const $push58=, 255
3862; NO-SIMD128-FAST-NEXT:    i32.and $push35=, $12, $pop58
3863; NO-SIMD128-FAST-NEXT:    i32.const $push57=, 255
3864; NO-SIMD128-FAST-NEXT:    i32.and $push34=, $28, $pop57
3865; NO-SIMD128-FAST-NEXT:    i32.shr_u $push36=, $pop35, $pop34
3866; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop36
3867; NO-SIMD128-FAST-NEXT:    i32.const $push56=, 255
3868; NO-SIMD128-FAST-NEXT:    i32.and $push38=, $13, $pop56
3869; NO-SIMD128-FAST-NEXT:    i32.const $push55=, 255
3870; NO-SIMD128-FAST-NEXT:    i32.and $push37=, $29, $pop55
3871; NO-SIMD128-FAST-NEXT:    i32.shr_u $push39=, $pop38, $pop37
3872; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop39
3873; NO-SIMD128-FAST-NEXT:    i32.const $push54=, 255
3874; NO-SIMD128-FAST-NEXT:    i32.and $push41=, $14, $pop54
3875; NO-SIMD128-FAST-NEXT:    i32.const $push53=, 255
3876; NO-SIMD128-FAST-NEXT:    i32.and $push40=, $30, $pop53
3877; NO-SIMD128-FAST-NEXT:    i32.shr_u $push42=, $pop41, $pop40
3878; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop42
3879; NO-SIMD128-FAST-NEXT:    i32.const $push52=, 255
3880; NO-SIMD128-FAST-NEXT:    i32.and $push44=, $15, $pop52
3881; NO-SIMD128-FAST-NEXT:    i32.const $push51=, 255
3882; NO-SIMD128-FAST-NEXT:    i32.and $push43=, $31, $pop51
3883; NO-SIMD128-FAST-NEXT:    i32.shr_u $push45=, $pop44, $pop43
3884; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop45
3885; NO-SIMD128-FAST-NEXT:    i32.const $push50=, 255
3886; NO-SIMD128-FAST-NEXT:    i32.and $push47=, $16, $pop50
3887; NO-SIMD128-FAST-NEXT:    i32.const $push49=, 255
3888; NO-SIMD128-FAST-NEXT:    i32.and $push46=, $32, $pop49
3889; NO-SIMD128-FAST-NEXT:    i32.shr_u $push48=, $pop47, $pop46
3890; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop48
3891; NO-SIMD128-FAST-NEXT:    return
3892  %a = lshr <16 x i8> %v, %x
3893  ret <16 x i8> %a
3894}
3895
3896define <16 x i8> @and_v16i8(<16 x i8> %x, <16 x i8> %y) {
3897; SIMD128-LABEL: and_v16i8:
3898; SIMD128:         .functype and_v16i8 (v128, v128) -> (v128)
3899; SIMD128-NEXT:  # %bb.0:
3900; SIMD128-NEXT:    v128.and $push0=, $0, $1
3901; SIMD128-NEXT:    return $pop0
3902;
3903; SIMD128-FAST-LABEL: and_v16i8:
3904; SIMD128-FAST:         .functype and_v16i8 (v128, v128) -> (v128)
3905; SIMD128-FAST-NEXT:  # %bb.0:
3906; SIMD128-FAST-NEXT:    v128.and $push0=, $0, $1
3907; SIMD128-FAST-NEXT:    return $pop0
3908;
3909; NO-SIMD128-LABEL: and_v16i8:
3910; NO-SIMD128:         .functype and_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3911; NO-SIMD128-NEXT:  # %bb.0:
3912; NO-SIMD128-NEXT:    i32.and $push0=, $16, $32
3913; NO-SIMD128-NEXT:    i32.store8 15($0), $pop0
3914; NO-SIMD128-NEXT:    i32.and $push1=, $15, $31
3915; NO-SIMD128-NEXT:    i32.store8 14($0), $pop1
3916; NO-SIMD128-NEXT:    i32.and $push2=, $14, $30
3917; NO-SIMD128-NEXT:    i32.store8 13($0), $pop2
3918; NO-SIMD128-NEXT:    i32.and $push3=, $13, $29
3919; NO-SIMD128-NEXT:    i32.store8 12($0), $pop3
3920; NO-SIMD128-NEXT:    i32.and $push4=, $12, $28
3921; NO-SIMD128-NEXT:    i32.store8 11($0), $pop4
3922; NO-SIMD128-NEXT:    i32.and $push5=, $11, $27
3923; NO-SIMD128-NEXT:    i32.store8 10($0), $pop5
3924; NO-SIMD128-NEXT:    i32.and $push6=, $10, $26
3925; NO-SIMD128-NEXT:    i32.store8 9($0), $pop6
3926; NO-SIMD128-NEXT:    i32.and $push7=, $9, $25
3927; NO-SIMD128-NEXT:    i32.store8 8($0), $pop7
3928; NO-SIMD128-NEXT:    i32.and $push8=, $8, $24
3929; NO-SIMD128-NEXT:    i32.store8 7($0), $pop8
3930; NO-SIMD128-NEXT:    i32.and $push9=, $7, $23
3931; NO-SIMD128-NEXT:    i32.store8 6($0), $pop9
3932; NO-SIMD128-NEXT:    i32.and $push10=, $6, $22
3933; NO-SIMD128-NEXT:    i32.store8 5($0), $pop10
3934; NO-SIMD128-NEXT:    i32.and $push11=, $5, $21
3935; NO-SIMD128-NEXT:    i32.store8 4($0), $pop11
3936; NO-SIMD128-NEXT:    i32.and $push12=, $4, $20
3937; NO-SIMD128-NEXT:    i32.store8 3($0), $pop12
3938; NO-SIMD128-NEXT:    i32.and $push13=, $3, $19
3939; NO-SIMD128-NEXT:    i32.store8 2($0), $pop13
3940; NO-SIMD128-NEXT:    i32.and $push14=, $2, $18
3941; NO-SIMD128-NEXT:    i32.store8 1($0), $pop14
3942; NO-SIMD128-NEXT:    i32.and $push15=, $1, $17
3943; NO-SIMD128-NEXT:    i32.store8 0($0), $pop15
3944; NO-SIMD128-NEXT:    return
3945;
3946; NO-SIMD128-FAST-LABEL: and_v16i8:
3947; NO-SIMD128-FAST:         .functype and_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
3948; NO-SIMD128-FAST-NEXT:  # %bb.0:
3949; NO-SIMD128-FAST-NEXT:    i32.and $push0=, $1, $17
3950; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop0
3951; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $2, $18
3952; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop1
3953; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $3, $19
3954; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop2
3955; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $4, $20
3956; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop3
3957; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $5, $21
3958; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop4
3959; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $6, $22
3960; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop5
3961; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $7, $23
3962; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop6
3963; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $8, $24
3964; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop7
3965; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $9, $25
3966; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop8
3967; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $10, $26
3968; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop9
3969; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $11, $27
3970; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop10
3971; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $12, $28
3972; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop11
3973; NO-SIMD128-FAST-NEXT:    i32.and $push12=, $13, $29
3974; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop12
3975; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $14, $30
3976; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop13
3977; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $15, $31
3978; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop14
3979; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $16, $32
3980; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop15
3981; NO-SIMD128-FAST-NEXT:    return
3982  %a = and <16 x i8> %x, %y
3983  ret <16 x i8> %a
3984}
3985
3986define <16 x i8> @or_v16i8(<16 x i8> %x, <16 x i8> %y) {
3987; SIMD128-LABEL: or_v16i8:
3988; SIMD128:         .functype or_v16i8 (v128, v128) -> (v128)
3989; SIMD128-NEXT:  # %bb.0:
3990; SIMD128-NEXT:    v128.or $push0=, $0, $1
3991; SIMD128-NEXT:    return $pop0
3992;
3993; SIMD128-FAST-LABEL: or_v16i8:
3994; SIMD128-FAST:         .functype or_v16i8 (v128, v128) -> (v128)
3995; SIMD128-FAST-NEXT:  # %bb.0:
3996; SIMD128-FAST-NEXT:    v128.or $push0=, $0, $1
3997; SIMD128-FAST-NEXT:    return $pop0
3998;
3999; NO-SIMD128-LABEL: or_v16i8:
4000; NO-SIMD128:         .functype or_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4001; NO-SIMD128-NEXT:  # %bb.0:
4002; NO-SIMD128-NEXT:    i32.or $push0=, $16, $32
4003; NO-SIMD128-NEXT:    i32.store8 15($0), $pop0
4004; NO-SIMD128-NEXT:    i32.or $push1=, $15, $31
4005; NO-SIMD128-NEXT:    i32.store8 14($0), $pop1
4006; NO-SIMD128-NEXT:    i32.or $push2=, $14, $30
4007; NO-SIMD128-NEXT:    i32.store8 13($0), $pop2
4008; NO-SIMD128-NEXT:    i32.or $push3=, $13, $29
4009; NO-SIMD128-NEXT:    i32.store8 12($0), $pop3
4010; NO-SIMD128-NEXT:    i32.or $push4=, $12, $28
4011; NO-SIMD128-NEXT:    i32.store8 11($0), $pop4
4012; NO-SIMD128-NEXT:    i32.or $push5=, $11, $27
4013; NO-SIMD128-NEXT:    i32.store8 10($0), $pop5
4014; NO-SIMD128-NEXT:    i32.or $push6=, $10, $26
4015; NO-SIMD128-NEXT:    i32.store8 9($0), $pop6
4016; NO-SIMD128-NEXT:    i32.or $push7=, $9, $25
4017; NO-SIMD128-NEXT:    i32.store8 8($0), $pop7
4018; NO-SIMD128-NEXT:    i32.or $push8=, $8, $24
4019; NO-SIMD128-NEXT:    i32.store8 7($0), $pop8
4020; NO-SIMD128-NEXT:    i32.or $push9=, $7, $23
4021; NO-SIMD128-NEXT:    i32.store8 6($0), $pop9
4022; NO-SIMD128-NEXT:    i32.or $push10=, $6, $22
4023; NO-SIMD128-NEXT:    i32.store8 5($0), $pop10
4024; NO-SIMD128-NEXT:    i32.or $push11=, $5, $21
4025; NO-SIMD128-NEXT:    i32.store8 4($0), $pop11
4026; NO-SIMD128-NEXT:    i32.or $push12=, $4, $20
4027; NO-SIMD128-NEXT:    i32.store8 3($0), $pop12
4028; NO-SIMD128-NEXT:    i32.or $push13=, $3, $19
4029; NO-SIMD128-NEXT:    i32.store8 2($0), $pop13
4030; NO-SIMD128-NEXT:    i32.or $push14=, $2, $18
4031; NO-SIMD128-NEXT:    i32.store8 1($0), $pop14
4032; NO-SIMD128-NEXT:    i32.or $push15=, $1, $17
4033; NO-SIMD128-NEXT:    i32.store8 0($0), $pop15
4034; NO-SIMD128-NEXT:    return
4035;
4036; NO-SIMD128-FAST-LABEL: or_v16i8:
4037; NO-SIMD128-FAST:         .functype or_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4038; NO-SIMD128-FAST-NEXT:  # %bb.0:
4039; NO-SIMD128-FAST-NEXT:    i32.or $push0=, $1, $17
4040; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop0
4041; NO-SIMD128-FAST-NEXT:    i32.or $push1=, $2, $18
4042; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop1
4043; NO-SIMD128-FAST-NEXT:    i32.or $push2=, $3, $19
4044; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop2
4045; NO-SIMD128-FAST-NEXT:    i32.or $push3=, $4, $20
4046; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop3
4047; NO-SIMD128-FAST-NEXT:    i32.or $push4=, $5, $21
4048; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop4
4049; NO-SIMD128-FAST-NEXT:    i32.or $push5=, $6, $22
4050; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop5
4051; NO-SIMD128-FAST-NEXT:    i32.or $push6=, $7, $23
4052; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop6
4053; NO-SIMD128-FAST-NEXT:    i32.or $push7=, $8, $24
4054; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop7
4055; NO-SIMD128-FAST-NEXT:    i32.or $push8=, $9, $25
4056; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop8
4057; NO-SIMD128-FAST-NEXT:    i32.or $push9=, $10, $26
4058; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop9
4059; NO-SIMD128-FAST-NEXT:    i32.or $push10=, $11, $27
4060; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop10
4061; NO-SIMD128-FAST-NEXT:    i32.or $push11=, $12, $28
4062; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop11
4063; NO-SIMD128-FAST-NEXT:    i32.or $push12=, $13, $29
4064; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop12
4065; NO-SIMD128-FAST-NEXT:    i32.or $push13=, $14, $30
4066; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop13
4067; NO-SIMD128-FAST-NEXT:    i32.or $push14=, $15, $31
4068; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop14
4069; NO-SIMD128-FAST-NEXT:    i32.or $push15=, $16, $32
4070; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop15
4071; NO-SIMD128-FAST-NEXT:    return
4072  %a = or <16 x i8> %x, %y
4073  ret <16 x i8> %a
4074}
4075
4076define <16 x i8> @xor_v16i8(<16 x i8> %x, <16 x i8> %y) {
4077; SIMD128-LABEL: xor_v16i8:
4078; SIMD128:         .functype xor_v16i8 (v128, v128) -> (v128)
4079; SIMD128-NEXT:  # %bb.0:
4080; SIMD128-NEXT:    v128.xor $push0=, $0, $1
4081; SIMD128-NEXT:    return $pop0
4082;
4083; SIMD128-FAST-LABEL: xor_v16i8:
4084; SIMD128-FAST:         .functype xor_v16i8 (v128, v128) -> (v128)
4085; SIMD128-FAST-NEXT:  # %bb.0:
4086; SIMD128-FAST-NEXT:    v128.xor $push0=, $0, $1
4087; SIMD128-FAST-NEXT:    return $pop0
4088;
4089; NO-SIMD128-LABEL: xor_v16i8:
4090; NO-SIMD128:         .functype xor_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4091; NO-SIMD128-NEXT:  # %bb.0:
4092; NO-SIMD128-NEXT:    i32.xor $push0=, $16, $32
4093; NO-SIMD128-NEXT:    i32.store8 15($0), $pop0
4094; NO-SIMD128-NEXT:    i32.xor $push1=, $15, $31
4095; NO-SIMD128-NEXT:    i32.store8 14($0), $pop1
4096; NO-SIMD128-NEXT:    i32.xor $push2=, $14, $30
4097; NO-SIMD128-NEXT:    i32.store8 13($0), $pop2
4098; NO-SIMD128-NEXT:    i32.xor $push3=, $13, $29
4099; NO-SIMD128-NEXT:    i32.store8 12($0), $pop3
4100; NO-SIMD128-NEXT:    i32.xor $push4=, $12, $28
4101; NO-SIMD128-NEXT:    i32.store8 11($0), $pop4
4102; NO-SIMD128-NEXT:    i32.xor $push5=, $11, $27
4103; NO-SIMD128-NEXT:    i32.store8 10($0), $pop5
4104; NO-SIMD128-NEXT:    i32.xor $push6=, $10, $26
4105; NO-SIMD128-NEXT:    i32.store8 9($0), $pop6
4106; NO-SIMD128-NEXT:    i32.xor $push7=, $9, $25
4107; NO-SIMD128-NEXT:    i32.store8 8($0), $pop7
4108; NO-SIMD128-NEXT:    i32.xor $push8=, $8, $24
4109; NO-SIMD128-NEXT:    i32.store8 7($0), $pop8
4110; NO-SIMD128-NEXT:    i32.xor $push9=, $7, $23
4111; NO-SIMD128-NEXT:    i32.store8 6($0), $pop9
4112; NO-SIMD128-NEXT:    i32.xor $push10=, $6, $22
4113; NO-SIMD128-NEXT:    i32.store8 5($0), $pop10
4114; NO-SIMD128-NEXT:    i32.xor $push11=, $5, $21
4115; NO-SIMD128-NEXT:    i32.store8 4($0), $pop11
4116; NO-SIMD128-NEXT:    i32.xor $push12=, $4, $20
4117; NO-SIMD128-NEXT:    i32.store8 3($0), $pop12
4118; NO-SIMD128-NEXT:    i32.xor $push13=, $3, $19
4119; NO-SIMD128-NEXT:    i32.store8 2($0), $pop13
4120; NO-SIMD128-NEXT:    i32.xor $push14=, $2, $18
4121; NO-SIMD128-NEXT:    i32.store8 1($0), $pop14
4122; NO-SIMD128-NEXT:    i32.xor $push15=, $1, $17
4123; NO-SIMD128-NEXT:    i32.store8 0($0), $pop15
4124; NO-SIMD128-NEXT:    return
4125;
4126; NO-SIMD128-FAST-LABEL: xor_v16i8:
4127; NO-SIMD128-FAST:         .functype xor_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4128; NO-SIMD128-FAST-NEXT:  # %bb.0:
4129; NO-SIMD128-FAST-NEXT:    i32.xor $push0=, $1, $17
4130; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop0
4131; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $2, $18
4132; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop1
4133; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $3, $19
4134; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop2
4135; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $4, $20
4136; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop3
4137; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $5, $21
4138; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop4
4139; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $6, $22
4140; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop5
4141; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $7, $23
4142; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop6
4143; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $8, $24
4144; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop7
4145; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $9, $25
4146; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop8
4147; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $10, $26
4148; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop9
4149; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $11, $27
4150; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop10
4151; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $12, $28
4152; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop11
4153; NO-SIMD128-FAST-NEXT:    i32.xor $push12=, $13, $29
4154; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop12
4155; NO-SIMD128-FAST-NEXT:    i32.xor $push13=, $14, $30
4156; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop13
4157; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $15, $31
4158; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop14
4159; NO-SIMD128-FAST-NEXT:    i32.xor $push15=, $16, $32
4160; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop15
4161; NO-SIMD128-FAST-NEXT:    return
4162  %a = xor <16 x i8> %x, %y
4163  ret <16 x i8> %a
4164}
4165
4166define <16 x i8> @not_v16i8(<16 x i8> %x) {
4167; SIMD128-LABEL: not_v16i8:
4168; SIMD128:         .functype not_v16i8 (v128) -> (v128)
4169; SIMD128-NEXT:  # %bb.0:
4170; SIMD128-NEXT:    v128.not $push0=, $0
4171; SIMD128-NEXT:    return $pop0
4172;
4173; SIMD128-FAST-LABEL: not_v16i8:
4174; SIMD128-FAST:         .functype not_v16i8 (v128) -> (v128)
4175; SIMD128-FAST-NEXT:  # %bb.0:
4176; SIMD128-FAST-NEXT:    v128.not $push0=, $0
4177; SIMD128-FAST-NEXT:    return $pop0
4178;
4179; NO-SIMD128-LABEL: not_v16i8:
4180; NO-SIMD128:         .functype not_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4181; NO-SIMD128-NEXT:  # %bb.0:
4182; NO-SIMD128-NEXT:    i32.const $push0=, -1
4183; NO-SIMD128-NEXT:    i32.xor $push1=, $16, $pop0
4184; NO-SIMD128-NEXT:    i32.store8 15($0), $pop1
4185; NO-SIMD128-NEXT:    i32.const $push31=, -1
4186; NO-SIMD128-NEXT:    i32.xor $push2=, $15, $pop31
4187; NO-SIMD128-NEXT:    i32.store8 14($0), $pop2
4188; NO-SIMD128-NEXT:    i32.const $push30=, -1
4189; NO-SIMD128-NEXT:    i32.xor $push3=, $14, $pop30
4190; NO-SIMD128-NEXT:    i32.store8 13($0), $pop3
4191; NO-SIMD128-NEXT:    i32.const $push29=, -1
4192; NO-SIMD128-NEXT:    i32.xor $push4=, $13, $pop29
4193; NO-SIMD128-NEXT:    i32.store8 12($0), $pop4
4194; NO-SIMD128-NEXT:    i32.const $push28=, -1
4195; NO-SIMD128-NEXT:    i32.xor $push5=, $12, $pop28
4196; NO-SIMD128-NEXT:    i32.store8 11($0), $pop5
4197; NO-SIMD128-NEXT:    i32.const $push27=, -1
4198; NO-SIMD128-NEXT:    i32.xor $push6=, $11, $pop27
4199; NO-SIMD128-NEXT:    i32.store8 10($0), $pop6
4200; NO-SIMD128-NEXT:    i32.const $push26=, -1
4201; NO-SIMD128-NEXT:    i32.xor $push7=, $10, $pop26
4202; NO-SIMD128-NEXT:    i32.store8 9($0), $pop7
4203; NO-SIMD128-NEXT:    i32.const $push25=, -1
4204; NO-SIMD128-NEXT:    i32.xor $push8=, $9, $pop25
4205; NO-SIMD128-NEXT:    i32.store8 8($0), $pop8
4206; NO-SIMD128-NEXT:    i32.const $push24=, -1
4207; NO-SIMD128-NEXT:    i32.xor $push9=, $8, $pop24
4208; NO-SIMD128-NEXT:    i32.store8 7($0), $pop9
4209; NO-SIMD128-NEXT:    i32.const $push23=, -1
4210; NO-SIMD128-NEXT:    i32.xor $push10=, $7, $pop23
4211; NO-SIMD128-NEXT:    i32.store8 6($0), $pop10
4212; NO-SIMD128-NEXT:    i32.const $push22=, -1
4213; NO-SIMD128-NEXT:    i32.xor $push11=, $6, $pop22
4214; NO-SIMD128-NEXT:    i32.store8 5($0), $pop11
4215; NO-SIMD128-NEXT:    i32.const $push21=, -1
4216; NO-SIMD128-NEXT:    i32.xor $push12=, $5, $pop21
4217; NO-SIMD128-NEXT:    i32.store8 4($0), $pop12
4218; NO-SIMD128-NEXT:    i32.const $push20=, -1
4219; NO-SIMD128-NEXT:    i32.xor $push13=, $4, $pop20
4220; NO-SIMD128-NEXT:    i32.store8 3($0), $pop13
4221; NO-SIMD128-NEXT:    i32.const $push19=, -1
4222; NO-SIMD128-NEXT:    i32.xor $push14=, $3, $pop19
4223; NO-SIMD128-NEXT:    i32.store8 2($0), $pop14
4224; NO-SIMD128-NEXT:    i32.const $push18=, -1
4225; NO-SIMD128-NEXT:    i32.xor $push15=, $2, $pop18
4226; NO-SIMD128-NEXT:    i32.store8 1($0), $pop15
4227; NO-SIMD128-NEXT:    i32.const $push17=, -1
4228; NO-SIMD128-NEXT:    i32.xor $push16=, $1, $pop17
4229; NO-SIMD128-NEXT:    i32.store8 0($0), $pop16
4230; NO-SIMD128-NEXT:    return
4231;
4232; NO-SIMD128-FAST-LABEL: not_v16i8:
4233; NO-SIMD128-FAST:         .functype not_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4234; NO-SIMD128-FAST-NEXT:  # %bb.0:
4235; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
4236; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $1, $pop0
4237; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop1
4238; NO-SIMD128-FAST-NEXT:    i32.const $push31=, -1
4239; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $2, $pop31
4240; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop2
4241; NO-SIMD128-FAST-NEXT:    i32.const $push30=, -1
4242; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $3, $pop30
4243; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop3
4244; NO-SIMD128-FAST-NEXT:    i32.const $push29=, -1
4245; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $4, $pop29
4246; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop4
4247; NO-SIMD128-FAST-NEXT:    i32.const $push28=, -1
4248; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $5, $pop28
4249; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop5
4250; NO-SIMD128-FAST-NEXT:    i32.const $push27=, -1
4251; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $6, $pop27
4252; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop6
4253; NO-SIMD128-FAST-NEXT:    i32.const $push26=, -1
4254; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $7, $pop26
4255; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop7
4256; NO-SIMD128-FAST-NEXT:    i32.const $push25=, -1
4257; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $8, $pop25
4258; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop8
4259; NO-SIMD128-FAST-NEXT:    i32.const $push24=, -1
4260; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $9, $pop24
4261; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop9
4262; NO-SIMD128-FAST-NEXT:    i32.const $push23=, -1
4263; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $10, $pop23
4264; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop10
4265; NO-SIMD128-FAST-NEXT:    i32.const $push22=, -1
4266; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $11, $pop22
4267; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop11
4268; NO-SIMD128-FAST-NEXT:    i32.const $push21=, -1
4269; NO-SIMD128-FAST-NEXT:    i32.xor $push12=, $12, $pop21
4270; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop12
4271; NO-SIMD128-FAST-NEXT:    i32.const $push20=, -1
4272; NO-SIMD128-FAST-NEXT:    i32.xor $push13=, $13, $pop20
4273; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop13
4274; NO-SIMD128-FAST-NEXT:    i32.const $push19=, -1
4275; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $14, $pop19
4276; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop14
4277; NO-SIMD128-FAST-NEXT:    i32.const $push18=, -1
4278; NO-SIMD128-FAST-NEXT:    i32.xor $push15=, $15, $pop18
4279; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop15
4280; NO-SIMD128-FAST-NEXT:    i32.const $push17=, -1
4281; NO-SIMD128-FAST-NEXT:    i32.xor $push16=, $16, $pop17
4282; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop16
4283; NO-SIMD128-FAST-NEXT:    return
4284  %a = xor <16 x i8> %x, <i8 -1, i8 -1, i8 -1, i8 -1,
4285                          i8 -1, i8 -1, i8 -1, i8 -1,
4286                          i8 -1, i8 -1, i8 -1, i8 -1,
4287                          i8 -1, i8 -1, i8 -1, i8 -1>
4288  ret <16 x i8> %a
4289}
4290
4291define <16 x i8> @andnot_v16i8(<16 x i8> %x, <16 x i8> %y) {
4292; SIMD128-LABEL: andnot_v16i8:
4293; SIMD128:         .functype andnot_v16i8 (v128, v128) -> (v128)
4294; SIMD128-NEXT:  # %bb.0:
4295; SIMD128-NEXT:    v128.andnot $push0=, $0, $1
4296; SIMD128-NEXT:    return $pop0
4297;
4298; SIMD128-FAST-LABEL: andnot_v16i8:
4299; SIMD128-FAST:         .functype andnot_v16i8 (v128, v128) -> (v128)
4300; SIMD128-FAST-NEXT:  # %bb.0:
4301; SIMD128-FAST-NEXT:    v128.not $push0=, $1
4302; SIMD128-FAST-NEXT:    v128.and $push1=, $0, $pop0
4303; SIMD128-FAST-NEXT:    return $pop1
4304;
4305; NO-SIMD128-LABEL: andnot_v16i8:
4306; NO-SIMD128:         .functype andnot_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4307; NO-SIMD128-NEXT:  # %bb.0:
4308; NO-SIMD128-NEXT:    i32.const $push0=, -1
4309; NO-SIMD128-NEXT:    i32.xor $push1=, $32, $pop0
4310; NO-SIMD128-NEXT:    i32.and $push2=, $16, $pop1
4311; NO-SIMD128-NEXT:    i32.store8 15($0), $pop2
4312; NO-SIMD128-NEXT:    i32.const $push47=, -1
4313; NO-SIMD128-NEXT:    i32.xor $push3=, $31, $pop47
4314; NO-SIMD128-NEXT:    i32.and $push4=, $15, $pop3
4315; NO-SIMD128-NEXT:    i32.store8 14($0), $pop4
4316; NO-SIMD128-NEXT:    i32.const $push46=, -1
4317; NO-SIMD128-NEXT:    i32.xor $push5=, $30, $pop46
4318; NO-SIMD128-NEXT:    i32.and $push6=, $14, $pop5
4319; NO-SIMD128-NEXT:    i32.store8 13($0), $pop6
4320; NO-SIMD128-NEXT:    i32.const $push45=, -1
4321; NO-SIMD128-NEXT:    i32.xor $push7=, $29, $pop45
4322; NO-SIMD128-NEXT:    i32.and $push8=, $13, $pop7
4323; NO-SIMD128-NEXT:    i32.store8 12($0), $pop8
4324; NO-SIMD128-NEXT:    i32.const $push44=, -1
4325; NO-SIMD128-NEXT:    i32.xor $push9=, $28, $pop44
4326; NO-SIMD128-NEXT:    i32.and $push10=, $12, $pop9
4327; NO-SIMD128-NEXT:    i32.store8 11($0), $pop10
4328; NO-SIMD128-NEXT:    i32.const $push43=, -1
4329; NO-SIMD128-NEXT:    i32.xor $push11=, $27, $pop43
4330; NO-SIMD128-NEXT:    i32.and $push12=, $11, $pop11
4331; NO-SIMD128-NEXT:    i32.store8 10($0), $pop12
4332; NO-SIMD128-NEXT:    i32.const $push42=, -1
4333; NO-SIMD128-NEXT:    i32.xor $push13=, $26, $pop42
4334; NO-SIMD128-NEXT:    i32.and $push14=, $10, $pop13
4335; NO-SIMD128-NEXT:    i32.store8 9($0), $pop14
4336; NO-SIMD128-NEXT:    i32.const $push41=, -1
4337; NO-SIMD128-NEXT:    i32.xor $push15=, $25, $pop41
4338; NO-SIMD128-NEXT:    i32.and $push16=, $9, $pop15
4339; NO-SIMD128-NEXT:    i32.store8 8($0), $pop16
4340; NO-SIMD128-NEXT:    i32.const $push40=, -1
4341; NO-SIMD128-NEXT:    i32.xor $push17=, $24, $pop40
4342; NO-SIMD128-NEXT:    i32.and $push18=, $8, $pop17
4343; NO-SIMD128-NEXT:    i32.store8 7($0), $pop18
4344; NO-SIMD128-NEXT:    i32.const $push39=, -1
4345; NO-SIMD128-NEXT:    i32.xor $push19=, $23, $pop39
4346; NO-SIMD128-NEXT:    i32.and $push20=, $7, $pop19
4347; NO-SIMD128-NEXT:    i32.store8 6($0), $pop20
4348; NO-SIMD128-NEXT:    i32.const $push38=, -1
4349; NO-SIMD128-NEXT:    i32.xor $push21=, $22, $pop38
4350; NO-SIMD128-NEXT:    i32.and $push22=, $6, $pop21
4351; NO-SIMD128-NEXT:    i32.store8 5($0), $pop22
4352; NO-SIMD128-NEXT:    i32.const $push37=, -1
4353; NO-SIMD128-NEXT:    i32.xor $push23=, $21, $pop37
4354; NO-SIMD128-NEXT:    i32.and $push24=, $5, $pop23
4355; NO-SIMD128-NEXT:    i32.store8 4($0), $pop24
4356; NO-SIMD128-NEXT:    i32.const $push36=, -1
4357; NO-SIMD128-NEXT:    i32.xor $push25=, $20, $pop36
4358; NO-SIMD128-NEXT:    i32.and $push26=, $4, $pop25
4359; NO-SIMD128-NEXT:    i32.store8 3($0), $pop26
4360; NO-SIMD128-NEXT:    i32.const $push35=, -1
4361; NO-SIMD128-NEXT:    i32.xor $push27=, $19, $pop35
4362; NO-SIMD128-NEXT:    i32.and $push28=, $3, $pop27
4363; NO-SIMD128-NEXT:    i32.store8 2($0), $pop28
4364; NO-SIMD128-NEXT:    i32.const $push34=, -1
4365; NO-SIMD128-NEXT:    i32.xor $push29=, $18, $pop34
4366; NO-SIMD128-NEXT:    i32.and $push30=, $2, $pop29
4367; NO-SIMD128-NEXT:    i32.store8 1($0), $pop30
4368; NO-SIMD128-NEXT:    i32.const $push33=, -1
4369; NO-SIMD128-NEXT:    i32.xor $push31=, $17, $pop33
4370; NO-SIMD128-NEXT:    i32.and $push32=, $1, $pop31
4371; NO-SIMD128-NEXT:    i32.store8 0($0), $pop32
4372; NO-SIMD128-NEXT:    return
4373;
4374; NO-SIMD128-FAST-LABEL: andnot_v16i8:
4375; NO-SIMD128-FAST:         .functype andnot_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4376; NO-SIMD128-FAST-NEXT:  # %bb.0:
4377; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
4378; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $17, $pop0
4379; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop1
4380; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop2
4381; NO-SIMD128-FAST-NEXT:    i32.const $push47=, -1
4382; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $18, $pop47
4383; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $2, $pop3
4384; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop4
4385; NO-SIMD128-FAST-NEXT:    i32.const $push46=, -1
4386; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $19, $pop46
4387; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $3, $pop5
4388; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop6
4389; NO-SIMD128-FAST-NEXT:    i32.const $push45=, -1
4390; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $20, $pop45
4391; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $4, $pop7
4392; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop8
4393; NO-SIMD128-FAST-NEXT:    i32.const $push44=, -1
4394; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $21, $pop44
4395; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $5, $pop9
4396; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop10
4397; NO-SIMD128-FAST-NEXT:    i32.const $push43=, -1
4398; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $22, $pop43
4399; NO-SIMD128-FAST-NEXT:    i32.and $push12=, $6, $pop11
4400; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop12
4401; NO-SIMD128-FAST-NEXT:    i32.const $push42=, -1
4402; NO-SIMD128-FAST-NEXT:    i32.xor $push13=, $23, $pop42
4403; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $7, $pop13
4404; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop14
4405; NO-SIMD128-FAST-NEXT:    i32.const $push41=, -1
4406; NO-SIMD128-FAST-NEXT:    i32.xor $push15=, $24, $pop41
4407; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $8, $pop15
4408; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop16
4409; NO-SIMD128-FAST-NEXT:    i32.const $push40=, -1
4410; NO-SIMD128-FAST-NEXT:    i32.xor $push17=, $25, $pop40
4411; NO-SIMD128-FAST-NEXT:    i32.and $push18=, $9, $pop17
4412; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop18
4413; NO-SIMD128-FAST-NEXT:    i32.const $push39=, -1
4414; NO-SIMD128-FAST-NEXT:    i32.xor $push19=, $26, $pop39
4415; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $10, $pop19
4416; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop20
4417; NO-SIMD128-FAST-NEXT:    i32.const $push38=, -1
4418; NO-SIMD128-FAST-NEXT:    i32.xor $push21=, $27, $pop38
4419; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $11, $pop21
4420; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop22
4421; NO-SIMD128-FAST-NEXT:    i32.const $push37=, -1
4422; NO-SIMD128-FAST-NEXT:    i32.xor $push23=, $28, $pop37
4423; NO-SIMD128-FAST-NEXT:    i32.and $push24=, $12, $pop23
4424; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop24
4425; NO-SIMD128-FAST-NEXT:    i32.const $push36=, -1
4426; NO-SIMD128-FAST-NEXT:    i32.xor $push25=, $29, $pop36
4427; NO-SIMD128-FAST-NEXT:    i32.and $push26=, $13, $pop25
4428; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop26
4429; NO-SIMD128-FAST-NEXT:    i32.const $push35=, -1
4430; NO-SIMD128-FAST-NEXT:    i32.xor $push27=, $30, $pop35
4431; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $14, $pop27
4432; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop28
4433; NO-SIMD128-FAST-NEXT:    i32.const $push34=, -1
4434; NO-SIMD128-FAST-NEXT:    i32.xor $push29=, $31, $pop34
4435; NO-SIMD128-FAST-NEXT:    i32.and $push30=, $15, $pop29
4436; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop30
4437; NO-SIMD128-FAST-NEXT:    i32.const $push33=, -1
4438; NO-SIMD128-FAST-NEXT:    i32.xor $push31=, $32, $pop33
4439; NO-SIMD128-FAST-NEXT:    i32.and $push32=, $16, $pop31
4440; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop32
4441; NO-SIMD128-FAST-NEXT:    return
4442 %inv_y = xor <16 x i8> %y,
4443   <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
4444    i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
4445 %a = and <16 x i8> %x, %inv_y
4446 ret <16 x i8> %a
4447}
4448
4449define <16 x i8> @bitselect_v16i8(<16 x i8> %c, <16 x i8> %v1, <16 x i8> %v2) {
4450; SIMD128-LABEL: bitselect_v16i8:
4451; SIMD128:         .functype bitselect_v16i8 (v128, v128, v128) -> (v128)
4452; SIMD128-NEXT:  # %bb.0:
4453; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
4454; SIMD128-NEXT:    return $pop0
4455;
4456; SIMD128-FAST-LABEL: bitselect_v16i8:
4457; SIMD128-FAST:         .functype bitselect_v16i8 (v128, v128, v128) -> (v128)
4458; SIMD128-FAST-NEXT:  # %bb.0:
4459; SIMD128-FAST-NEXT:    v128.and $push0=, $0, $1
4460; SIMD128-FAST-NEXT:    v128.not $push2=, $0
4461; SIMD128-FAST-NEXT:    v128.and $push3=, $pop2, $2
4462; SIMD128-FAST-NEXT:    v128.or $push1=, $pop0, $pop3
4463; SIMD128-FAST-NEXT:    return $pop1
4464;
4465; NO-SIMD128-LABEL: bitselect_v16i8:
4466; NO-SIMD128:         .functype bitselect_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4467; NO-SIMD128-NEXT:  # %bb.0:
4468; NO-SIMD128-NEXT:    i32.and $push0=, $16, $32
4469; NO-SIMD128-NEXT:    i32.const $push1=, -1
4470; NO-SIMD128-NEXT:    i32.xor $push2=, $16, $pop1
4471; NO-SIMD128-NEXT:    i32.and $push3=, $pop2, $48
4472; NO-SIMD128-NEXT:    i32.or $push4=, $pop0, $pop3
4473; NO-SIMD128-NEXT:    i32.store8 15($0), $pop4
4474; NO-SIMD128-NEXT:    i32.and $push5=, $15, $31
4475; NO-SIMD128-NEXT:    i32.const $push79=, -1
4476; NO-SIMD128-NEXT:    i32.xor $push6=, $15, $pop79
4477; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $47
4478; NO-SIMD128-NEXT:    i32.or $push8=, $pop5, $pop7
4479; NO-SIMD128-NEXT:    i32.store8 14($0), $pop8
4480; NO-SIMD128-NEXT:    i32.and $push9=, $14, $30
4481; NO-SIMD128-NEXT:    i32.const $push78=, -1
4482; NO-SIMD128-NEXT:    i32.xor $push10=, $14, $pop78
4483; NO-SIMD128-NEXT:    i32.and $push11=, $pop10, $46
4484; NO-SIMD128-NEXT:    i32.or $push12=, $pop9, $pop11
4485; NO-SIMD128-NEXT:    i32.store8 13($0), $pop12
4486; NO-SIMD128-NEXT:    i32.and $push13=, $13, $29
4487; NO-SIMD128-NEXT:    i32.const $push77=, -1
4488; NO-SIMD128-NEXT:    i32.xor $push14=, $13, $pop77
4489; NO-SIMD128-NEXT:    i32.and $push15=, $pop14, $45
4490; NO-SIMD128-NEXT:    i32.or $push16=, $pop13, $pop15
4491; NO-SIMD128-NEXT:    i32.store8 12($0), $pop16
4492; NO-SIMD128-NEXT:    i32.and $push17=, $12, $28
4493; NO-SIMD128-NEXT:    i32.const $push76=, -1
4494; NO-SIMD128-NEXT:    i32.xor $push18=, $12, $pop76
4495; NO-SIMD128-NEXT:    i32.and $push19=, $pop18, $44
4496; NO-SIMD128-NEXT:    i32.or $push20=, $pop17, $pop19
4497; NO-SIMD128-NEXT:    i32.store8 11($0), $pop20
4498; NO-SIMD128-NEXT:    i32.and $push21=, $11, $27
4499; NO-SIMD128-NEXT:    i32.const $push75=, -1
4500; NO-SIMD128-NEXT:    i32.xor $push22=, $11, $pop75
4501; NO-SIMD128-NEXT:    i32.and $push23=, $pop22, $43
4502; NO-SIMD128-NEXT:    i32.or $push24=, $pop21, $pop23
4503; NO-SIMD128-NEXT:    i32.store8 10($0), $pop24
4504; NO-SIMD128-NEXT:    i32.and $push25=, $10, $26
4505; NO-SIMD128-NEXT:    i32.const $push74=, -1
4506; NO-SIMD128-NEXT:    i32.xor $push26=, $10, $pop74
4507; NO-SIMD128-NEXT:    i32.and $push27=, $pop26, $42
4508; NO-SIMD128-NEXT:    i32.or $push28=, $pop25, $pop27
4509; NO-SIMD128-NEXT:    i32.store8 9($0), $pop28
4510; NO-SIMD128-NEXT:    i32.and $push29=, $9, $25
4511; NO-SIMD128-NEXT:    i32.const $push73=, -1
4512; NO-SIMD128-NEXT:    i32.xor $push30=, $9, $pop73
4513; NO-SIMD128-NEXT:    i32.and $push31=, $pop30, $41
4514; NO-SIMD128-NEXT:    i32.or $push32=, $pop29, $pop31
4515; NO-SIMD128-NEXT:    i32.store8 8($0), $pop32
4516; NO-SIMD128-NEXT:    i32.and $push33=, $8, $24
4517; NO-SIMD128-NEXT:    i32.const $push72=, -1
4518; NO-SIMD128-NEXT:    i32.xor $push34=, $8, $pop72
4519; NO-SIMD128-NEXT:    i32.and $push35=, $pop34, $40
4520; NO-SIMD128-NEXT:    i32.or $push36=, $pop33, $pop35
4521; NO-SIMD128-NEXT:    i32.store8 7($0), $pop36
4522; NO-SIMD128-NEXT:    i32.and $push37=, $7, $23
4523; NO-SIMD128-NEXT:    i32.const $push71=, -1
4524; NO-SIMD128-NEXT:    i32.xor $push38=, $7, $pop71
4525; NO-SIMD128-NEXT:    i32.and $push39=, $pop38, $39
4526; NO-SIMD128-NEXT:    i32.or $push40=, $pop37, $pop39
4527; NO-SIMD128-NEXT:    i32.store8 6($0), $pop40
4528; NO-SIMD128-NEXT:    i32.and $push41=, $6, $22
4529; NO-SIMD128-NEXT:    i32.const $push70=, -1
4530; NO-SIMD128-NEXT:    i32.xor $push42=, $6, $pop70
4531; NO-SIMD128-NEXT:    i32.and $push43=, $pop42, $38
4532; NO-SIMD128-NEXT:    i32.or $push44=, $pop41, $pop43
4533; NO-SIMD128-NEXT:    i32.store8 5($0), $pop44
4534; NO-SIMD128-NEXT:    i32.and $push45=, $5, $21
4535; NO-SIMD128-NEXT:    i32.const $push69=, -1
4536; NO-SIMD128-NEXT:    i32.xor $push46=, $5, $pop69
4537; NO-SIMD128-NEXT:    i32.and $push47=, $pop46, $37
4538; NO-SIMD128-NEXT:    i32.or $push48=, $pop45, $pop47
4539; NO-SIMD128-NEXT:    i32.store8 4($0), $pop48
4540; NO-SIMD128-NEXT:    i32.and $push49=, $4, $20
4541; NO-SIMD128-NEXT:    i32.const $push68=, -1
4542; NO-SIMD128-NEXT:    i32.xor $push50=, $4, $pop68
4543; NO-SIMD128-NEXT:    i32.and $push51=, $pop50, $36
4544; NO-SIMD128-NEXT:    i32.or $push52=, $pop49, $pop51
4545; NO-SIMD128-NEXT:    i32.store8 3($0), $pop52
4546; NO-SIMD128-NEXT:    i32.and $push53=, $3, $19
4547; NO-SIMD128-NEXT:    i32.const $push67=, -1
4548; NO-SIMD128-NEXT:    i32.xor $push54=, $3, $pop67
4549; NO-SIMD128-NEXT:    i32.and $push55=, $pop54, $35
4550; NO-SIMD128-NEXT:    i32.or $push56=, $pop53, $pop55
4551; NO-SIMD128-NEXT:    i32.store8 2($0), $pop56
4552; NO-SIMD128-NEXT:    i32.and $push57=, $2, $18
4553; NO-SIMD128-NEXT:    i32.const $push66=, -1
4554; NO-SIMD128-NEXT:    i32.xor $push58=, $2, $pop66
4555; NO-SIMD128-NEXT:    i32.and $push59=, $pop58, $34
4556; NO-SIMD128-NEXT:    i32.or $push60=, $pop57, $pop59
4557; NO-SIMD128-NEXT:    i32.store8 1($0), $pop60
4558; NO-SIMD128-NEXT:    i32.and $push61=, $1, $17
4559; NO-SIMD128-NEXT:    i32.const $push65=, -1
4560; NO-SIMD128-NEXT:    i32.xor $push62=, $1, $pop65
4561; NO-SIMD128-NEXT:    i32.and $push63=, $pop62, $33
4562; NO-SIMD128-NEXT:    i32.or $push64=, $pop61, $pop63
4563; NO-SIMD128-NEXT:    i32.store8 0($0), $pop64
4564; NO-SIMD128-NEXT:    return
4565;
4566; NO-SIMD128-FAST-LABEL: bitselect_v16i8:
4567; NO-SIMD128-FAST:         .functype bitselect_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4568; NO-SIMD128-FAST-NEXT:  # %bb.0:
4569; NO-SIMD128-FAST-NEXT:    i32.and $push0=, $1, $17
4570; NO-SIMD128-FAST-NEXT:    i32.const $push1=, -1
4571; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $1, $pop1
4572; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $pop2, $33
4573; NO-SIMD128-FAST-NEXT:    i32.or $push4=, $pop0, $pop3
4574; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop4
4575; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $2, $18
4576; NO-SIMD128-FAST-NEXT:    i32.const $push79=, -1
4577; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $2, $pop79
4578; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $34
4579; NO-SIMD128-FAST-NEXT:    i32.or $push8=, $pop5, $pop7
4580; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop8
4581; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $3, $19
4582; NO-SIMD128-FAST-NEXT:    i32.const $push78=, -1
4583; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $3, $pop78
4584; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $pop10, $35
4585; NO-SIMD128-FAST-NEXT:    i32.or $push12=, $pop9, $pop11
4586; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop12
4587; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $4, $20
4588; NO-SIMD128-FAST-NEXT:    i32.const $push77=, -1
4589; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $4, $pop77
4590; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $pop14, $36
4591; NO-SIMD128-FAST-NEXT:    i32.or $push16=, $pop13, $pop15
4592; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop16
4593; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $5, $21
4594; NO-SIMD128-FAST-NEXT:    i32.const $push76=, -1
4595; NO-SIMD128-FAST-NEXT:    i32.xor $push18=, $5, $pop76
4596; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $pop18, $37
4597; NO-SIMD128-FAST-NEXT:    i32.or $push20=, $pop17, $pop19
4598; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop20
4599; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $6, $22
4600; NO-SIMD128-FAST-NEXT:    i32.const $push75=, -1
4601; NO-SIMD128-FAST-NEXT:    i32.xor $push22=, $6, $pop75
4602; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $38
4603; NO-SIMD128-FAST-NEXT:    i32.or $push24=, $pop21, $pop23
4604; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop24
4605; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $7, $23
4606; NO-SIMD128-FAST-NEXT:    i32.const $push74=, -1
4607; NO-SIMD128-FAST-NEXT:    i32.xor $push26=, $7, $pop74
4608; NO-SIMD128-FAST-NEXT:    i32.and $push27=, $pop26, $39
4609; NO-SIMD128-FAST-NEXT:    i32.or $push28=, $pop25, $pop27
4610; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop28
4611; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $8, $24
4612; NO-SIMD128-FAST-NEXT:    i32.const $push73=, -1
4613; NO-SIMD128-FAST-NEXT:    i32.xor $push30=, $8, $pop73
4614; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $pop30, $40
4615; NO-SIMD128-FAST-NEXT:    i32.or $push32=, $pop29, $pop31
4616; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop32
4617; NO-SIMD128-FAST-NEXT:    i32.and $push33=, $9, $25
4618; NO-SIMD128-FAST-NEXT:    i32.const $push72=, -1
4619; NO-SIMD128-FAST-NEXT:    i32.xor $push34=, $9, $pop72
4620; NO-SIMD128-FAST-NEXT:    i32.and $push35=, $pop34, $41
4621; NO-SIMD128-FAST-NEXT:    i32.or $push36=, $pop33, $pop35
4622; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop36
4623; NO-SIMD128-FAST-NEXT:    i32.and $push37=, $10, $26
4624; NO-SIMD128-FAST-NEXT:    i32.const $push71=, -1
4625; NO-SIMD128-FAST-NEXT:    i32.xor $push38=, $10, $pop71
4626; NO-SIMD128-FAST-NEXT:    i32.and $push39=, $pop38, $42
4627; NO-SIMD128-FAST-NEXT:    i32.or $push40=, $pop37, $pop39
4628; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop40
4629; NO-SIMD128-FAST-NEXT:    i32.and $push41=, $11, $27
4630; NO-SIMD128-FAST-NEXT:    i32.const $push70=, -1
4631; NO-SIMD128-FAST-NEXT:    i32.xor $push42=, $11, $pop70
4632; NO-SIMD128-FAST-NEXT:    i32.and $push43=, $pop42, $43
4633; NO-SIMD128-FAST-NEXT:    i32.or $push44=, $pop41, $pop43
4634; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop44
4635; NO-SIMD128-FAST-NEXT:    i32.and $push45=, $12, $28
4636; NO-SIMD128-FAST-NEXT:    i32.const $push69=, -1
4637; NO-SIMD128-FAST-NEXT:    i32.xor $push46=, $12, $pop69
4638; NO-SIMD128-FAST-NEXT:    i32.and $push47=, $pop46, $44
4639; NO-SIMD128-FAST-NEXT:    i32.or $push48=, $pop45, $pop47
4640; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop48
4641; NO-SIMD128-FAST-NEXT:    i32.and $push49=, $13, $29
4642; NO-SIMD128-FAST-NEXT:    i32.const $push68=, -1
4643; NO-SIMD128-FAST-NEXT:    i32.xor $push50=, $13, $pop68
4644; NO-SIMD128-FAST-NEXT:    i32.and $push51=, $pop50, $45
4645; NO-SIMD128-FAST-NEXT:    i32.or $push52=, $pop49, $pop51
4646; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop52
4647; NO-SIMD128-FAST-NEXT:    i32.and $push53=, $14, $30
4648; NO-SIMD128-FAST-NEXT:    i32.const $push67=, -1
4649; NO-SIMD128-FAST-NEXT:    i32.xor $push54=, $14, $pop67
4650; NO-SIMD128-FAST-NEXT:    i32.and $push55=, $pop54, $46
4651; NO-SIMD128-FAST-NEXT:    i32.or $push56=, $pop53, $pop55
4652; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop56
4653; NO-SIMD128-FAST-NEXT:    i32.and $push57=, $15, $31
4654; NO-SIMD128-FAST-NEXT:    i32.const $push66=, -1
4655; NO-SIMD128-FAST-NEXT:    i32.xor $push58=, $15, $pop66
4656; NO-SIMD128-FAST-NEXT:    i32.and $push59=, $pop58, $47
4657; NO-SIMD128-FAST-NEXT:    i32.or $push60=, $pop57, $pop59
4658; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop60
4659; NO-SIMD128-FAST-NEXT:    i32.and $push61=, $16, $32
4660; NO-SIMD128-FAST-NEXT:    i32.const $push65=, -1
4661; NO-SIMD128-FAST-NEXT:    i32.xor $push62=, $16, $pop65
4662; NO-SIMD128-FAST-NEXT:    i32.and $push63=, $pop62, $48
4663; NO-SIMD128-FAST-NEXT:    i32.or $push64=, $pop61, $pop63
4664; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop64
4665; NO-SIMD128-FAST-NEXT:    return
4666  %masked_v1 = and <16 x i8> %c, %v1
4667  %inv_mask = xor <16 x i8> %c,
4668    <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
4669     i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
4670  %masked_v2 = and <16 x i8> %inv_mask, %v2
4671  %a = or <16 x i8> %masked_v1, %masked_v2
4672  ret <16 x i8> %a
4673}
4674
4675define <16 x i8> @bitselect_xor_v16i8(<16 x i8> %c, <16 x i8> %v1, <16 x i8> %v2) {
4676; SIMD128-LABEL: bitselect_xor_v16i8:
4677; SIMD128:         .functype bitselect_xor_v16i8 (v128, v128, v128) -> (v128)
4678; SIMD128-NEXT:  # %bb.0:
4679; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
4680; SIMD128-NEXT:    return $pop0
4681;
4682; SIMD128-FAST-LABEL: bitselect_xor_v16i8:
4683; SIMD128-FAST:         .functype bitselect_xor_v16i8 (v128, v128, v128) -> (v128)
4684; SIMD128-FAST-NEXT:  # %bb.0:
4685; SIMD128-FAST-NEXT:    v128.xor $push2=, $1, $2
4686; SIMD128-FAST-NEXT:    v128.and $push1=, $pop2, $0
4687; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop1, $2
4688; SIMD128-FAST-NEXT:    return $pop0
4689;
4690; NO-SIMD128-LABEL: bitselect_xor_v16i8:
4691; NO-SIMD128:         .functype bitselect_xor_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4692; NO-SIMD128-NEXT:  # %bb.0:
4693; NO-SIMD128-NEXT:    i32.xor $push0=, $32, $48
4694; NO-SIMD128-NEXT:    i32.and $push1=, $pop0, $16
4695; NO-SIMD128-NEXT:    i32.xor $push2=, $pop1, $48
4696; NO-SIMD128-NEXT:    i32.store8 15($0), $pop2
4697; NO-SIMD128-NEXT:    i32.xor $push3=, $31, $47
4698; NO-SIMD128-NEXT:    i32.and $push4=, $pop3, $15
4699; NO-SIMD128-NEXT:    i32.xor $push5=, $pop4, $47
4700; NO-SIMD128-NEXT:    i32.store8 14($0), $pop5
4701; NO-SIMD128-NEXT:    i32.xor $push6=, $30, $46
4702; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $14
4703; NO-SIMD128-NEXT:    i32.xor $push8=, $pop7, $46
4704; NO-SIMD128-NEXT:    i32.store8 13($0), $pop8
4705; NO-SIMD128-NEXT:    i32.xor $push9=, $29, $45
4706; NO-SIMD128-NEXT:    i32.and $push10=, $pop9, $13
4707; NO-SIMD128-NEXT:    i32.xor $push11=, $pop10, $45
4708; NO-SIMD128-NEXT:    i32.store8 12($0), $pop11
4709; NO-SIMD128-NEXT:    i32.xor $push12=, $28, $44
4710; NO-SIMD128-NEXT:    i32.and $push13=, $pop12, $12
4711; NO-SIMD128-NEXT:    i32.xor $push14=, $pop13, $44
4712; NO-SIMD128-NEXT:    i32.store8 11($0), $pop14
4713; NO-SIMD128-NEXT:    i32.xor $push15=, $27, $43
4714; NO-SIMD128-NEXT:    i32.and $push16=, $pop15, $11
4715; NO-SIMD128-NEXT:    i32.xor $push17=, $pop16, $43
4716; NO-SIMD128-NEXT:    i32.store8 10($0), $pop17
4717; NO-SIMD128-NEXT:    i32.xor $push18=, $26, $42
4718; NO-SIMD128-NEXT:    i32.and $push19=, $pop18, $10
4719; NO-SIMD128-NEXT:    i32.xor $push20=, $pop19, $42
4720; NO-SIMD128-NEXT:    i32.store8 9($0), $pop20
4721; NO-SIMD128-NEXT:    i32.xor $push21=, $25, $41
4722; NO-SIMD128-NEXT:    i32.and $push22=, $pop21, $9
4723; NO-SIMD128-NEXT:    i32.xor $push23=, $pop22, $41
4724; NO-SIMD128-NEXT:    i32.store8 8($0), $pop23
4725; NO-SIMD128-NEXT:    i32.xor $push24=, $24, $40
4726; NO-SIMD128-NEXT:    i32.and $push25=, $pop24, $8
4727; NO-SIMD128-NEXT:    i32.xor $push26=, $pop25, $40
4728; NO-SIMD128-NEXT:    i32.store8 7($0), $pop26
4729; NO-SIMD128-NEXT:    i32.xor $push27=, $23, $39
4730; NO-SIMD128-NEXT:    i32.and $push28=, $pop27, $7
4731; NO-SIMD128-NEXT:    i32.xor $push29=, $pop28, $39
4732; NO-SIMD128-NEXT:    i32.store8 6($0), $pop29
4733; NO-SIMD128-NEXT:    i32.xor $push30=, $22, $38
4734; NO-SIMD128-NEXT:    i32.and $push31=, $pop30, $6
4735; NO-SIMD128-NEXT:    i32.xor $push32=, $pop31, $38
4736; NO-SIMD128-NEXT:    i32.store8 5($0), $pop32
4737; NO-SIMD128-NEXT:    i32.xor $push33=, $21, $37
4738; NO-SIMD128-NEXT:    i32.and $push34=, $pop33, $5
4739; NO-SIMD128-NEXT:    i32.xor $push35=, $pop34, $37
4740; NO-SIMD128-NEXT:    i32.store8 4($0), $pop35
4741; NO-SIMD128-NEXT:    i32.xor $push36=, $20, $36
4742; NO-SIMD128-NEXT:    i32.and $push37=, $pop36, $4
4743; NO-SIMD128-NEXT:    i32.xor $push38=, $pop37, $36
4744; NO-SIMD128-NEXT:    i32.store8 3($0), $pop38
4745; NO-SIMD128-NEXT:    i32.xor $push39=, $19, $35
4746; NO-SIMD128-NEXT:    i32.and $push40=, $pop39, $3
4747; NO-SIMD128-NEXT:    i32.xor $push41=, $pop40, $35
4748; NO-SIMD128-NEXT:    i32.store8 2($0), $pop41
4749; NO-SIMD128-NEXT:    i32.xor $push42=, $18, $34
4750; NO-SIMD128-NEXT:    i32.and $push43=, $pop42, $2
4751; NO-SIMD128-NEXT:    i32.xor $push44=, $pop43, $34
4752; NO-SIMD128-NEXT:    i32.store8 1($0), $pop44
4753; NO-SIMD128-NEXT:    i32.xor $push45=, $17, $33
4754; NO-SIMD128-NEXT:    i32.and $push46=, $pop45, $1
4755; NO-SIMD128-NEXT:    i32.xor $push47=, $pop46, $33
4756; NO-SIMD128-NEXT:    i32.store8 0($0), $pop47
4757; NO-SIMD128-NEXT:    return
4758;
4759; NO-SIMD128-FAST-LABEL: bitselect_xor_v16i8:
4760; NO-SIMD128-FAST:         .functype bitselect_xor_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4761; NO-SIMD128-FAST-NEXT:  # %bb.0:
4762; NO-SIMD128-FAST-NEXT:    i32.xor $push0=, $17, $33
4763; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $pop0, $1
4764; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $pop1, $33
4765; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop2
4766; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $18, $34
4767; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $pop3, $2
4768; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $pop4, $34
4769; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop5
4770; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $19, $35
4771; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $3
4772; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $pop7, $35
4773; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop8
4774; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $20, $36
4775; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $pop9, $4
4776; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $pop10, $36
4777; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop11
4778; NO-SIMD128-FAST-NEXT:    i32.xor $push12=, $21, $37
4779; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $5
4780; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $pop13, $37
4781; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop14
4782; NO-SIMD128-FAST-NEXT:    i32.xor $push15=, $22, $38
4783; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $pop15, $6
4784; NO-SIMD128-FAST-NEXT:    i32.xor $push17=, $pop16, $38
4785; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop17
4786; NO-SIMD128-FAST-NEXT:    i32.xor $push18=, $23, $39
4787; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $pop18, $7
4788; NO-SIMD128-FAST-NEXT:    i32.xor $push20=, $pop19, $39
4789; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop20
4790; NO-SIMD128-FAST-NEXT:    i32.xor $push21=, $24, $40
4791; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $pop21, $8
4792; NO-SIMD128-FAST-NEXT:    i32.xor $push23=, $pop22, $40
4793; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop23
4794; NO-SIMD128-FAST-NEXT:    i32.xor $push24=, $25, $41
4795; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $pop24, $9
4796; NO-SIMD128-FAST-NEXT:    i32.xor $push26=, $pop25, $41
4797; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop26
4798; NO-SIMD128-FAST-NEXT:    i32.xor $push27=, $26, $42
4799; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $10
4800; NO-SIMD128-FAST-NEXT:    i32.xor $push29=, $pop28, $42
4801; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop29
4802; NO-SIMD128-FAST-NEXT:    i32.xor $push30=, $27, $43
4803; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $pop30, $11
4804; NO-SIMD128-FAST-NEXT:    i32.xor $push32=, $pop31, $43
4805; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop32
4806; NO-SIMD128-FAST-NEXT:    i32.xor $push33=, $28, $44
4807; NO-SIMD128-FAST-NEXT:    i32.and $push34=, $pop33, $12
4808; NO-SIMD128-FAST-NEXT:    i32.xor $push35=, $pop34, $44
4809; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop35
4810; NO-SIMD128-FAST-NEXT:    i32.xor $push36=, $29, $45
4811; NO-SIMD128-FAST-NEXT:    i32.and $push37=, $pop36, $13
4812; NO-SIMD128-FAST-NEXT:    i32.xor $push38=, $pop37, $45
4813; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop38
4814; NO-SIMD128-FAST-NEXT:    i32.xor $push39=, $30, $46
4815; NO-SIMD128-FAST-NEXT:    i32.and $push40=, $pop39, $14
4816; NO-SIMD128-FAST-NEXT:    i32.xor $push41=, $pop40, $46
4817; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop41
4818; NO-SIMD128-FAST-NEXT:    i32.xor $push42=, $31, $47
4819; NO-SIMD128-FAST-NEXT:    i32.and $push43=, $pop42, $15
4820; NO-SIMD128-FAST-NEXT:    i32.xor $push44=, $pop43, $47
4821; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop44
4822; NO-SIMD128-FAST-NEXT:    i32.xor $push45=, $32, $48
4823; NO-SIMD128-FAST-NEXT:    i32.and $push46=, $pop45, $16
4824; NO-SIMD128-FAST-NEXT:    i32.xor $push47=, $pop46, $48
4825; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop47
4826; NO-SIMD128-FAST-NEXT:    return
4827 %xor1 = xor <16 x i8> %v1, %v2
4828 %and = and <16 x i8> %xor1, %c
4829 %a = xor <16 x i8> %and, %v2
4830 ret <16 x i8> %a
4831}
4832
4833define <16 x i8> @bitselect_xor_reversed_v16i8(<16 x i8> %c, <16 x i8> %v1, <16 x i8> %v2) {
4834; SIMD128-LABEL: bitselect_xor_reversed_v16i8:
4835; SIMD128:         .functype bitselect_xor_reversed_v16i8 (v128, v128, v128) -> (v128)
4836; SIMD128-NEXT:  # %bb.0:
4837; SIMD128-NEXT:    v128.bitselect $push0=, $2, $1, $0
4838; SIMD128-NEXT:    return $pop0
4839;
4840; SIMD128-FAST-LABEL: bitselect_xor_reversed_v16i8:
4841; SIMD128-FAST:         .functype bitselect_xor_reversed_v16i8 (v128, v128, v128) -> (v128)
4842; SIMD128-FAST-NEXT:  # %bb.0:
4843; SIMD128-FAST-NEXT:    v128.xor $push1=, $1, $2
4844; SIMD128-FAST-NEXT:    v128.not $push2=, $0
4845; SIMD128-FAST-NEXT:    v128.and $push3=, $pop1, $pop2
4846; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop3, $2
4847; SIMD128-FAST-NEXT:    return $pop0
4848;
4849; NO-SIMD128-LABEL: bitselect_xor_reversed_v16i8:
4850; NO-SIMD128:         .functype bitselect_xor_reversed_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4851; NO-SIMD128-NEXT:  # %bb.0:
4852; NO-SIMD128-NEXT:    i32.xor $push2=, $32, $48
4853; NO-SIMD128-NEXT:    i32.const $push0=, -1
4854; NO-SIMD128-NEXT:    i32.xor $push1=, $16, $pop0
4855; NO-SIMD128-NEXT:    i32.and $push3=, $pop2, $pop1
4856; NO-SIMD128-NEXT:    i32.xor $push4=, $pop3, $48
4857; NO-SIMD128-NEXT:    i32.store8 15($0), $pop4
4858; NO-SIMD128-NEXT:    i32.xor $push6=, $31, $47
4859; NO-SIMD128-NEXT:    i32.const $push79=, -1
4860; NO-SIMD128-NEXT:    i32.xor $push5=, $15, $pop79
4861; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $pop5
4862; NO-SIMD128-NEXT:    i32.xor $push8=, $pop7, $47
4863; NO-SIMD128-NEXT:    i32.store8 14($0), $pop8
4864; NO-SIMD128-NEXT:    i32.xor $push10=, $30, $46
4865; NO-SIMD128-NEXT:    i32.const $push78=, -1
4866; NO-SIMD128-NEXT:    i32.xor $push9=, $14, $pop78
4867; NO-SIMD128-NEXT:    i32.and $push11=, $pop10, $pop9
4868; NO-SIMD128-NEXT:    i32.xor $push12=, $pop11, $46
4869; NO-SIMD128-NEXT:    i32.store8 13($0), $pop12
4870; NO-SIMD128-NEXT:    i32.xor $push14=, $29, $45
4871; NO-SIMD128-NEXT:    i32.const $push77=, -1
4872; NO-SIMD128-NEXT:    i32.xor $push13=, $13, $pop77
4873; NO-SIMD128-NEXT:    i32.and $push15=, $pop14, $pop13
4874; NO-SIMD128-NEXT:    i32.xor $push16=, $pop15, $45
4875; NO-SIMD128-NEXT:    i32.store8 12($0), $pop16
4876; NO-SIMD128-NEXT:    i32.xor $push18=, $28, $44
4877; NO-SIMD128-NEXT:    i32.const $push76=, -1
4878; NO-SIMD128-NEXT:    i32.xor $push17=, $12, $pop76
4879; NO-SIMD128-NEXT:    i32.and $push19=, $pop18, $pop17
4880; NO-SIMD128-NEXT:    i32.xor $push20=, $pop19, $44
4881; NO-SIMD128-NEXT:    i32.store8 11($0), $pop20
4882; NO-SIMD128-NEXT:    i32.xor $push22=, $27, $43
4883; NO-SIMD128-NEXT:    i32.const $push75=, -1
4884; NO-SIMD128-NEXT:    i32.xor $push21=, $11, $pop75
4885; NO-SIMD128-NEXT:    i32.and $push23=, $pop22, $pop21
4886; NO-SIMD128-NEXT:    i32.xor $push24=, $pop23, $43
4887; NO-SIMD128-NEXT:    i32.store8 10($0), $pop24
4888; NO-SIMD128-NEXT:    i32.xor $push26=, $26, $42
4889; NO-SIMD128-NEXT:    i32.const $push74=, -1
4890; NO-SIMD128-NEXT:    i32.xor $push25=, $10, $pop74
4891; NO-SIMD128-NEXT:    i32.and $push27=, $pop26, $pop25
4892; NO-SIMD128-NEXT:    i32.xor $push28=, $pop27, $42
4893; NO-SIMD128-NEXT:    i32.store8 9($0), $pop28
4894; NO-SIMD128-NEXT:    i32.xor $push30=, $25, $41
4895; NO-SIMD128-NEXT:    i32.const $push73=, -1
4896; NO-SIMD128-NEXT:    i32.xor $push29=, $9, $pop73
4897; NO-SIMD128-NEXT:    i32.and $push31=, $pop30, $pop29
4898; NO-SIMD128-NEXT:    i32.xor $push32=, $pop31, $41
4899; NO-SIMD128-NEXT:    i32.store8 8($0), $pop32
4900; NO-SIMD128-NEXT:    i32.xor $push34=, $24, $40
4901; NO-SIMD128-NEXT:    i32.const $push72=, -1
4902; NO-SIMD128-NEXT:    i32.xor $push33=, $8, $pop72
4903; NO-SIMD128-NEXT:    i32.and $push35=, $pop34, $pop33
4904; NO-SIMD128-NEXT:    i32.xor $push36=, $pop35, $40
4905; NO-SIMD128-NEXT:    i32.store8 7($0), $pop36
4906; NO-SIMD128-NEXT:    i32.xor $push38=, $23, $39
4907; NO-SIMD128-NEXT:    i32.const $push71=, -1
4908; NO-SIMD128-NEXT:    i32.xor $push37=, $7, $pop71
4909; NO-SIMD128-NEXT:    i32.and $push39=, $pop38, $pop37
4910; NO-SIMD128-NEXT:    i32.xor $push40=, $pop39, $39
4911; NO-SIMD128-NEXT:    i32.store8 6($0), $pop40
4912; NO-SIMD128-NEXT:    i32.xor $push42=, $22, $38
4913; NO-SIMD128-NEXT:    i32.const $push70=, -1
4914; NO-SIMD128-NEXT:    i32.xor $push41=, $6, $pop70
4915; NO-SIMD128-NEXT:    i32.and $push43=, $pop42, $pop41
4916; NO-SIMD128-NEXT:    i32.xor $push44=, $pop43, $38
4917; NO-SIMD128-NEXT:    i32.store8 5($0), $pop44
4918; NO-SIMD128-NEXT:    i32.xor $push46=, $21, $37
4919; NO-SIMD128-NEXT:    i32.const $push69=, -1
4920; NO-SIMD128-NEXT:    i32.xor $push45=, $5, $pop69
4921; NO-SIMD128-NEXT:    i32.and $push47=, $pop46, $pop45
4922; NO-SIMD128-NEXT:    i32.xor $push48=, $pop47, $37
4923; NO-SIMD128-NEXT:    i32.store8 4($0), $pop48
4924; NO-SIMD128-NEXT:    i32.xor $push50=, $20, $36
4925; NO-SIMD128-NEXT:    i32.const $push68=, -1
4926; NO-SIMD128-NEXT:    i32.xor $push49=, $4, $pop68
4927; NO-SIMD128-NEXT:    i32.and $push51=, $pop50, $pop49
4928; NO-SIMD128-NEXT:    i32.xor $push52=, $pop51, $36
4929; NO-SIMD128-NEXT:    i32.store8 3($0), $pop52
4930; NO-SIMD128-NEXT:    i32.xor $push54=, $19, $35
4931; NO-SIMD128-NEXT:    i32.const $push67=, -1
4932; NO-SIMD128-NEXT:    i32.xor $push53=, $3, $pop67
4933; NO-SIMD128-NEXT:    i32.and $push55=, $pop54, $pop53
4934; NO-SIMD128-NEXT:    i32.xor $push56=, $pop55, $35
4935; NO-SIMD128-NEXT:    i32.store8 2($0), $pop56
4936; NO-SIMD128-NEXT:    i32.xor $push58=, $18, $34
4937; NO-SIMD128-NEXT:    i32.const $push66=, -1
4938; NO-SIMD128-NEXT:    i32.xor $push57=, $2, $pop66
4939; NO-SIMD128-NEXT:    i32.and $push59=, $pop58, $pop57
4940; NO-SIMD128-NEXT:    i32.xor $push60=, $pop59, $34
4941; NO-SIMD128-NEXT:    i32.store8 1($0), $pop60
4942; NO-SIMD128-NEXT:    i32.xor $push62=, $17, $33
4943; NO-SIMD128-NEXT:    i32.const $push65=, -1
4944; NO-SIMD128-NEXT:    i32.xor $push61=, $1, $pop65
4945; NO-SIMD128-NEXT:    i32.and $push63=, $pop62, $pop61
4946; NO-SIMD128-NEXT:    i32.xor $push64=, $pop63, $33
4947; NO-SIMD128-NEXT:    i32.store8 0($0), $pop64
4948; NO-SIMD128-NEXT:    return
4949;
4950; NO-SIMD128-FAST-LABEL: bitselect_xor_reversed_v16i8:
4951; NO-SIMD128-FAST:         .functype bitselect_xor_reversed_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
4952; NO-SIMD128-FAST-NEXT:  # %bb.0:
4953; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $17, $33
4954; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
4955; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $1, $pop0
4956; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $pop2, $pop1
4957; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $pop3, $33
4958; NO-SIMD128-FAST-NEXT:    i32.store8 0($0), $pop4
4959; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $18, $34
4960; NO-SIMD128-FAST-NEXT:    i32.const $push79=, -1
4961; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $2, $pop79
4962; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop5
4963; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $pop7, $34
4964; NO-SIMD128-FAST-NEXT:    i32.store8 1($0), $pop8
4965; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $19, $35
4966; NO-SIMD128-FAST-NEXT:    i32.const $push78=, -1
4967; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $3, $pop78
4968; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $pop10, $pop9
4969; NO-SIMD128-FAST-NEXT:    i32.xor $push12=, $pop11, $35
4970; NO-SIMD128-FAST-NEXT:    i32.store8 2($0), $pop12
4971; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $20, $36
4972; NO-SIMD128-FAST-NEXT:    i32.const $push77=, -1
4973; NO-SIMD128-FAST-NEXT:    i32.xor $push13=, $4, $pop77
4974; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $pop14, $pop13
4975; NO-SIMD128-FAST-NEXT:    i32.xor $push16=, $pop15, $36
4976; NO-SIMD128-FAST-NEXT:    i32.store8 3($0), $pop16
4977; NO-SIMD128-FAST-NEXT:    i32.xor $push18=, $21, $37
4978; NO-SIMD128-FAST-NEXT:    i32.const $push76=, -1
4979; NO-SIMD128-FAST-NEXT:    i32.xor $push17=, $5, $pop76
4980; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $pop18, $pop17
4981; NO-SIMD128-FAST-NEXT:    i32.xor $push20=, $pop19, $37
4982; NO-SIMD128-FAST-NEXT:    i32.store8 4($0), $pop20
4983; NO-SIMD128-FAST-NEXT:    i32.xor $push22=, $22, $38
4984; NO-SIMD128-FAST-NEXT:    i32.const $push75=, -1
4985; NO-SIMD128-FAST-NEXT:    i32.xor $push21=, $6, $pop75
4986; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop21
4987; NO-SIMD128-FAST-NEXT:    i32.xor $push24=, $pop23, $38
4988; NO-SIMD128-FAST-NEXT:    i32.store8 5($0), $pop24
4989; NO-SIMD128-FAST-NEXT:    i32.xor $push26=, $23, $39
4990; NO-SIMD128-FAST-NEXT:    i32.const $push74=, -1
4991; NO-SIMD128-FAST-NEXT:    i32.xor $push25=, $7, $pop74
4992; NO-SIMD128-FAST-NEXT:    i32.and $push27=, $pop26, $pop25
4993; NO-SIMD128-FAST-NEXT:    i32.xor $push28=, $pop27, $39
4994; NO-SIMD128-FAST-NEXT:    i32.store8 6($0), $pop28
4995; NO-SIMD128-FAST-NEXT:    i32.xor $push30=, $24, $40
4996; NO-SIMD128-FAST-NEXT:    i32.const $push73=, -1
4997; NO-SIMD128-FAST-NEXT:    i32.xor $push29=, $8, $pop73
4998; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $pop30, $pop29
4999; NO-SIMD128-FAST-NEXT:    i32.xor $push32=, $pop31, $40
5000; NO-SIMD128-FAST-NEXT:    i32.store8 7($0), $pop32
5001; NO-SIMD128-FAST-NEXT:    i32.xor $push34=, $25, $41
5002; NO-SIMD128-FAST-NEXT:    i32.const $push72=, -1
5003; NO-SIMD128-FAST-NEXT:    i32.xor $push33=, $9, $pop72
5004; NO-SIMD128-FAST-NEXT:    i32.and $push35=, $pop34, $pop33
5005; NO-SIMD128-FAST-NEXT:    i32.xor $push36=, $pop35, $41
5006; NO-SIMD128-FAST-NEXT:    i32.store8 8($0), $pop36
5007; NO-SIMD128-FAST-NEXT:    i32.xor $push38=, $26, $42
5008; NO-SIMD128-FAST-NEXT:    i32.const $push71=, -1
5009; NO-SIMD128-FAST-NEXT:    i32.xor $push37=, $10, $pop71
5010; NO-SIMD128-FAST-NEXT:    i32.and $push39=, $pop38, $pop37
5011; NO-SIMD128-FAST-NEXT:    i32.xor $push40=, $pop39, $42
5012; NO-SIMD128-FAST-NEXT:    i32.store8 9($0), $pop40
5013; NO-SIMD128-FAST-NEXT:    i32.xor $push42=, $27, $43
5014; NO-SIMD128-FAST-NEXT:    i32.const $push70=, -1
5015; NO-SIMD128-FAST-NEXT:    i32.xor $push41=, $11, $pop70
5016; NO-SIMD128-FAST-NEXT:    i32.and $push43=, $pop42, $pop41
5017; NO-SIMD128-FAST-NEXT:    i32.xor $push44=, $pop43, $43
5018; NO-SIMD128-FAST-NEXT:    i32.store8 10($0), $pop44
5019; NO-SIMD128-FAST-NEXT:    i32.xor $push46=, $28, $44
5020; NO-SIMD128-FAST-NEXT:    i32.const $push69=, -1
5021; NO-SIMD128-FAST-NEXT:    i32.xor $push45=, $12, $pop69
5022; NO-SIMD128-FAST-NEXT:    i32.and $push47=, $pop46, $pop45
5023; NO-SIMD128-FAST-NEXT:    i32.xor $push48=, $pop47, $44
5024; NO-SIMD128-FAST-NEXT:    i32.store8 11($0), $pop48
5025; NO-SIMD128-FAST-NEXT:    i32.xor $push50=, $29, $45
5026; NO-SIMD128-FAST-NEXT:    i32.const $push68=, -1
5027; NO-SIMD128-FAST-NEXT:    i32.xor $push49=, $13, $pop68
5028; NO-SIMD128-FAST-NEXT:    i32.and $push51=, $pop50, $pop49
5029; NO-SIMD128-FAST-NEXT:    i32.xor $push52=, $pop51, $45
5030; NO-SIMD128-FAST-NEXT:    i32.store8 12($0), $pop52
5031; NO-SIMD128-FAST-NEXT:    i32.xor $push54=, $30, $46
5032; NO-SIMD128-FAST-NEXT:    i32.const $push67=, -1
5033; NO-SIMD128-FAST-NEXT:    i32.xor $push53=, $14, $pop67
5034; NO-SIMD128-FAST-NEXT:    i32.and $push55=, $pop54, $pop53
5035; NO-SIMD128-FAST-NEXT:    i32.xor $push56=, $pop55, $46
5036; NO-SIMD128-FAST-NEXT:    i32.store8 13($0), $pop56
5037; NO-SIMD128-FAST-NEXT:    i32.xor $push58=, $31, $47
5038; NO-SIMD128-FAST-NEXT:    i32.const $push66=, -1
5039; NO-SIMD128-FAST-NEXT:    i32.xor $push57=, $15, $pop66
5040; NO-SIMD128-FAST-NEXT:    i32.and $push59=, $pop58, $pop57
5041; NO-SIMD128-FAST-NEXT:    i32.xor $push60=, $pop59, $47
5042; NO-SIMD128-FAST-NEXT:    i32.store8 14($0), $pop60
5043; NO-SIMD128-FAST-NEXT:    i32.xor $push62=, $32, $48
5044; NO-SIMD128-FAST-NEXT:    i32.const $push65=, -1
5045; NO-SIMD128-FAST-NEXT:    i32.xor $push61=, $16, $pop65
5046; NO-SIMD128-FAST-NEXT:    i32.and $push63=, $pop62, $pop61
5047; NO-SIMD128-FAST-NEXT:    i32.xor $push64=, $pop63, $48
5048; NO-SIMD128-FAST-NEXT:    i32.store8 15($0), $pop64
5049; NO-SIMD128-FAST-NEXT:    return
5050 %xor1 = xor <16 x i8> %v1, %v2
5051 %notc = xor <16 x i8> %c, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1,
5052                            i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
5053 %and = and <16 x i8> %xor1, %notc
5054 %a = xor <16 x i8> %and, %v2
5055 ret <16 x i8> %a
5056}
5057
5058; ==============================================================================
5059; 8 x i16
5060; ==============================================================================
5061define <8 x i16> @add_v8i16(<8 x i16> %x, <8 x i16> %y) {
5062; SIMD128-LABEL: add_v8i16:
5063; SIMD128:         .functype add_v8i16 (v128, v128) -> (v128)
5064; SIMD128-NEXT:  # %bb.0:
5065; SIMD128-NEXT:    i16x8.add $push0=, $0, $1
5066; SIMD128-NEXT:    return $pop0
5067;
5068; SIMD128-FAST-LABEL: add_v8i16:
5069; SIMD128-FAST:         .functype add_v8i16 (v128, v128) -> (v128)
5070; SIMD128-FAST-NEXT:  # %bb.0:
5071; SIMD128-FAST-NEXT:    i16x8.add $push0=, $0, $1
5072; SIMD128-FAST-NEXT:    return $pop0
5073;
5074; NO-SIMD128-LABEL: add_v8i16:
5075; NO-SIMD128:         .functype add_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5076; NO-SIMD128-NEXT:  # %bb.0:
5077; NO-SIMD128-NEXT:    i32.add $push0=, $8, $16
5078; NO-SIMD128-NEXT:    i32.store16 14($0), $pop0
5079; NO-SIMD128-NEXT:    i32.add $push1=, $7, $15
5080; NO-SIMD128-NEXT:    i32.store16 12($0), $pop1
5081; NO-SIMD128-NEXT:    i32.add $push2=, $6, $14
5082; NO-SIMD128-NEXT:    i32.store16 10($0), $pop2
5083; NO-SIMD128-NEXT:    i32.add $push3=, $5, $13
5084; NO-SIMD128-NEXT:    i32.store16 8($0), $pop3
5085; NO-SIMD128-NEXT:    i32.add $push4=, $4, $12
5086; NO-SIMD128-NEXT:    i32.store16 6($0), $pop4
5087; NO-SIMD128-NEXT:    i32.add $push5=, $3, $11
5088; NO-SIMD128-NEXT:    i32.store16 4($0), $pop5
5089; NO-SIMD128-NEXT:    i32.add $push6=, $2, $10
5090; NO-SIMD128-NEXT:    i32.store16 2($0), $pop6
5091; NO-SIMD128-NEXT:    i32.add $push7=, $1, $9
5092; NO-SIMD128-NEXT:    i32.store16 0($0), $pop7
5093; NO-SIMD128-NEXT:    return
5094;
5095; NO-SIMD128-FAST-LABEL: add_v8i16:
5096; NO-SIMD128-FAST:         .functype add_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5097; NO-SIMD128-FAST-NEXT:  # %bb.0:
5098; NO-SIMD128-FAST-NEXT:    i32.add $push0=, $1, $9
5099; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop0
5100; NO-SIMD128-FAST-NEXT:    i32.add $push1=, $2, $10
5101; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop1
5102; NO-SIMD128-FAST-NEXT:    i32.add $push2=, $3, $11
5103; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop2
5104; NO-SIMD128-FAST-NEXT:    i32.add $push3=, $4, $12
5105; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop3
5106; NO-SIMD128-FAST-NEXT:    i32.add $push4=, $5, $13
5107; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop4
5108; NO-SIMD128-FAST-NEXT:    i32.add $push5=, $6, $14
5109; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop5
5110; NO-SIMD128-FAST-NEXT:    i32.add $push6=, $7, $15
5111; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop6
5112; NO-SIMD128-FAST-NEXT:    i32.add $push7=, $8, $16
5113; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop7
5114; NO-SIMD128-FAST-NEXT:    return
5115  %a = add <8 x i16> %x, %y
5116  ret <8 x i16> %a
5117}
5118
5119define <8 x i16> @sub_v8i16(<8 x i16> %x, <8 x i16> %y) {
5120; SIMD128-LABEL: sub_v8i16:
5121; SIMD128:         .functype sub_v8i16 (v128, v128) -> (v128)
5122; SIMD128-NEXT:  # %bb.0:
5123; SIMD128-NEXT:    i16x8.sub $push0=, $0, $1
5124; SIMD128-NEXT:    return $pop0
5125;
5126; SIMD128-FAST-LABEL: sub_v8i16:
5127; SIMD128-FAST:         .functype sub_v8i16 (v128, v128) -> (v128)
5128; SIMD128-FAST-NEXT:  # %bb.0:
5129; SIMD128-FAST-NEXT:    i16x8.sub $push0=, $0, $1
5130; SIMD128-FAST-NEXT:    return $pop0
5131;
5132; NO-SIMD128-LABEL: sub_v8i16:
5133; NO-SIMD128:         .functype sub_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5134; NO-SIMD128-NEXT:  # %bb.0:
5135; NO-SIMD128-NEXT:    i32.sub $push0=, $8, $16
5136; NO-SIMD128-NEXT:    i32.store16 14($0), $pop0
5137; NO-SIMD128-NEXT:    i32.sub $push1=, $7, $15
5138; NO-SIMD128-NEXT:    i32.store16 12($0), $pop1
5139; NO-SIMD128-NEXT:    i32.sub $push2=, $6, $14
5140; NO-SIMD128-NEXT:    i32.store16 10($0), $pop2
5141; NO-SIMD128-NEXT:    i32.sub $push3=, $5, $13
5142; NO-SIMD128-NEXT:    i32.store16 8($0), $pop3
5143; NO-SIMD128-NEXT:    i32.sub $push4=, $4, $12
5144; NO-SIMD128-NEXT:    i32.store16 6($0), $pop4
5145; NO-SIMD128-NEXT:    i32.sub $push5=, $3, $11
5146; NO-SIMD128-NEXT:    i32.store16 4($0), $pop5
5147; NO-SIMD128-NEXT:    i32.sub $push6=, $2, $10
5148; NO-SIMD128-NEXT:    i32.store16 2($0), $pop6
5149; NO-SIMD128-NEXT:    i32.sub $push7=, $1, $9
5150; NO-SIMD128-NEXT:    i32.store16 0($0), $pop7
5151; NO-SIMD128-NEXT:    return
5152;
5153; NO-SIMD128-FAST-LABEL: sub_v8i16:
5154; NO-SIMD128-FAST:         .functype sub_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5155; NO-SIMD128-FAST-NEXT:  # %bb.0:
5156; NO-SIMD128-FAST-NEXT:    i32.sub $push0=, $1, $9
5157; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop0
5158; NO-SIMD128-FAST-NEXT:    i32.sub $push1=, $2, $10
5159; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop1
5160; NO-SIMD128-FAST-NEXT:    i32.sub $push2=, $3, $11
5161; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop2
5162; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $4, $12
5163; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop3
5164; NO-SIMD128-FAST-NEXT:    i32.sub $push4=, $5, $13
5165; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop4
5166; NO-SIMD128-FAST-NEXT:    i32.sub $push5=, $6, $14
5167; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop5
5168; NO-SIMD128-FAST-NEXT:    i32.sub $push6=, $7, $15
5169; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop6
5170; NO-SIMD128-FAST-NEXT:    i32.sub $push7=, $8, $16
5171; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop7
5172; NO-SIMD128-FAST-NEXT:    return
5173  %a = sub <8 x i16> %x, %y
5174  ret <8 x i16> %a
5175}
5176
5177define <8 x i16> @mul_v8i16(<8 x i16> %x, <8 x i16> %y) {
5178; SIMD128-LABEL: mul_v8i16:
5179; SIMD128:         .functype mul_v8i16 (v128, v128) -> (v128)
5180; SIMD128-NEXT:  # %bb.0:
5181; SIMD128-NEXT:    i16x8.mul $push0=, $0, $1
5182; SIMD128-NEXT:    return $pop0
5183;
5184; SIMD128-FAST-LABEL: mul_v8i16:
5185; SIMD128-FAST:         .functype mul_v8i16 (v128, v128) -> (v128)
5186; SIMD128-FAST-NEXT:  # %bb.0:
5187; SIMD128-FAST-NEXT:    i16x8.mul $push0=, $0, $1
5188; SIMD128-FAST-NEXT:    return $pop0
5189;
5190; NO-SIMD128-LABEL: mul_v8i16:
5191; NO-SIMD128:         .functype mul_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5192; NO-SIMD128-NEXT:  # %bb.0:
5193; NO-SIMD128-NEXT:    i32.mul $push0=, $8, $16
5194; NO-SIMD128-NEXT:    i32.store16 14($0), $pop0
5195; NO-SIMD128-NEXT:    i32.mul $push1=, $7, $15
5196; NO-SIMD128-NEXT:    i32.store16 12($0), $pop1
5197; NO-SIMD128-NEXT:    i32.mul $push2=, $6, $14
5198; NO-SIMD128-NEXT:    i32.store16 10($0), $pop2
5199; NO-SIMD128-NEXT:    i32.mul $push3=, $5, $13
5200; NO-SIMD128-NEXT:    i32.store16 8($0), $pop3
5201; NO-SIMD128-NEXT:    i32.mul $push4=, $4, $12
5202; NO-SIMD128-NEXT:    i32.store16 6($0), $pop4
5203; NO-SIMD128-NEXT:    i32.mul $push5=, $3, $11
5204; NO-SIMD128-NEXT:    i32.store16 4($0), $pop5
5205; NO-SIMD128-NEXT:    i32.mul $push6=, $2, $10
5206; NO-SIMD128-NEXT:    i32.store16 2($0), $pop6
5207; NO-SIMD128-NEXT:    i32.mul $push7=, $1, $9
5208; NO-SIMD128-NEXT:    i32.store16 0($0), $pop7
5209; NO-SIMD128-NEXT:    return
5210;
5211; NO-SIMD128-FAST-LABEL: mul_v8i16:
5212; NO-SIMD128-FAST:         .functype mul_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5213; NO-SIMD128-FAST-NEXT:  # %bb.0:
5214; NO-SIMD128-FAST-NEXT:    i32.mul $push0=, $1, $9
5215; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop0
5216; NO-SIMD128-FAST-NEXT:    i32.mul $push1=, $2, $10
5217; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop1
5218; NO-SIMD128-FAST-NEXT:    i32.mul $push2=, $3, $11
5219; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop2
5220; NO-SIMD128-FAST-NEXT:    i32.mul $push3=, $4, $12
5221; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop3
5222; NO-SIMD128-FAST-NEXT:    i32.mul $push4=, $5, $13
5223; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop4
5224; NO-SIMD128-FAST-NEXT:    i32.mul $push5=, $6, $14
5225; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop5
5226; NO-SIMD128-FAST-NEXT:    i32.mul $push6=, $7, $15
5227; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop6
5228; NO-SIMD128-FAST-NEXT:    i32.mul $push7=, $8, $16
5229; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop7
5230; NO-SIMD128-FAST-NEXT:    return
5231  %a = mul <8 x i16> %x, %y
5232  ret <8 x i16> %a
5233}
5234
5235define <8 x i16> @min_s_v8i16(<8 x i16> %x, <8 x i16> %y) {
5236; SIMD128-LABEL: min_s_v8i16:
5237; SIMD128:         .functype min_s_v8i16 (v128, v128) -> (v128)
5238; SIMD128-NEXT:  # %bb.0:
5239; SIMD128-NEXT:    i16x8.min_s $push0=, $0, $1
5240; SIMD128-NEXT:    return $pop0
5241;
5242; SIMD128-FAST-LABEL: min_s_v8i16:
5243; SIMD128-FAST:         .functype min_s_v8i16 (v128, v128) -> (v128)
5244; SIMD128-FAST-NEXT:  # %bb.0:
5245; SIMD128-FAST-NEXT:    i16x8.min_s $push0=, $0, $1
5246; SIMD128-FAST-NEXT:    return $pop0
5247;
5248; NO-SIMD128-LABEL: min_s_v8i16:
5249; NO-SIMD128:         .functype min_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5250; NO-SIMD128-NEXT:  # %bb.0:
5251; NO-SIMD128-NEXT:    i32.extend16_s $push1=, $8
5252; NO-SIMD128-NEXT:    i32.extend16_s $push0=, $16
5253; NO-SIMD128-NEXT:    i32.lt_s $push2=, $pop1, $pop0
5254; NO-SIMD128-NEXT:    i32.select $push3=, $8, $16, $pop2
5255; NO-SIMD128-NEXT:    i32.store16 14($0), $pop3
5256; NO-SIMD128-NEXT:    i32.extend16_s $push5=, $7
5257; NO-SIMD128-NEXT:    i32.extend16_s $push4=, $15
5258; NO-SIMD128-NEXT:    i32.lt_s $push6=, $pop5, $pop4
5259; NO-SIMD128-NEXT:    i32.select $push7=, $7, $15, $pop6
5260; NO-SIMD128-NEXT:    i32.store16 12($0), $pop7
5261; NO-SIMD128-NEXT:    i32.extend16_s $push9=, $6
5262; NO-SIMD128-NEXT:    i32.extend16_s $push8=, $14
5263; NO-SIMD128-NEXT:    i32.lt_s $push10=, $pop9, $pop8
5264; NO-SIMD128-NEXT:    i32.select $push11=, $6, $14, $pop10
5265; NO-SIMD128-NEXT:    i32.store16 10($0), $pop11
5266; NO-SIMD128-NEXT:    i32.extend16_s $push13=, $5
5267; NO-SIMD128-NEXT:    i32.extend16_s $push12=, $13
5268; NO-SIMD128-NEXT:    i32.lt_s $push14=, $pop13, $pop12
5269; NO-SIMD128-NEXT:    i32.select $push15=, $5, $13, $pop14
5270; NO-SIMD128-NEXT:    i32.store16 8($0), $pop15
5271; NO-SIMD128-NEXT:    i32.extend16_s $push17=, $4
5272; NO-SIMD128-NEXT:    i32.extend16_s $push16=, $12
5273; NO-SIMD128-NEXT:    i32.lt_s $push18=, $pop17, $pop16
5274; NO-SIMD128-NEXT:    i32.select $push19=, $4, $12, $pop18
5275; NO-SIMD128-NEXT:    i32.store16 6($0), $pop19
5276; NO-SIMD128-NEXT:    i32.extend16_s $push21=, $3
5277; NO-SIMD128-NEXT:    i32.extend16_s $push20=, $11
5278; NO-SIMD128-NEXT:    i32.lt_s $push22=, $pop21, $pop20
5279; NO-SIMD128-NEXT:    i32.select $push23=, $3, $11, $pop22
5280; NO-SIMD128-NEXT:    i32.store16 4($0), $pop23
5281; NO-SIMD128-NEXT:    i32.extend16_s $push25=, $2
5282; NO-SIMD128-NEXT:    i32.extend16_s $push24=, $10
5283; NO-SIMD128-NEXT:    i32.lt_s $push26=, $pop25, $pop24
5284; NO-SIMD128-NEXT:    i32.select $push27=, $2, $10, $pop26
5285; NO-SIMD128-NEXT:    i32.store16 2($0), $pop27
5286; NO-SIMD128-NEXT:    i32.extend16_s $push29=, $1
5287; NO-SIMD128-NEXT:    i32.extend16_s $push28=, $9
5288; NO-SIMD128-NEXT:    i32.lt_s $push30=, $pop29, $pop28
5289; NO-SIMD128-NEXT:    i32.select $push31=, $1, $9, $pop30
5290; NO-SIMD128-NEXT:    i32.store16 0($0), $pop31
5291; NO-SIMD128-NEXT:    return
5292;
5293; NO-SIMD128-FAST-LABEL: min_s_v8i16:
5294; NO-SIMD128-FAST:         .functype min_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5295; NO-SIMD128-FAST-NEXT:  # %bb.0:
5296; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push1=, $1
5297; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push0=, $9
5298; NO-SIMD128-FAST-NEXT:    i32.lt_s $push2=, $pop1, $pop0
5299; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $1, $9, $pop2
5300; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop3
5301; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push5=, $2
5302; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push4=, $10
5303; NO-SIMD128-FAST-NEXT:    i32.lt_s $push6=, $pop5, $pop4
5304; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $2, $10, $pop6
5305; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop7
5306; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push9=, $3
5307; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push8=, $11
5308; NO-SIMD128-FAST-NEXT:    i32.lt_s $push10=, $pop9, $pop8
5309; NO-SIMD128-FAST-NEXT:    i32.select $push11=, $3, $11, $pop10
5310; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop11
5311; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push13=, $4
5312; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push12=, $12
5313; NO-SIMD128-FAST-NEXT:    i32.lt_s $push14=, $pop13, $pop12
5314; NO-SIMD128-FAST-NEXT:    i32.select $push15=, $4, $12, $pop14
5315; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop15
5316; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push17=, $5
5317; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push16=, $13
5318; NO-SIMD128-FAST-NEXT:    i32.lt_s $push18=, $pop17, $pop16
5319; NO-SIMD128-FAST-NEXT:    i32.select $push19=, $5, $13, $pop18
5320; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop19
5321; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push21=, $6
5322; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push20=, $14
5323; NO-SIMD128-FAST-NEXT:    i32.lt_s $push22=, $pop21, $pop20
5324; NO-SIMD128-FAST-NEXT:    i32.select $push23=, $6, $14, $pop22
5325; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop23
5326; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push25=, $7
5327; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push24=, $15
5328; NO-SIMD128-FAST-NEXT:    i32.lt_s $push26=, $pop25, $pop24
5329; NO-SIMD128-FAST-NEXT:    i32.select $push27=, $7, $15, $pop26
5330; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop27
5331; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push29=, $8
5332; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push28=, $16
5333; NO-SIMD128-FAST-NEXT:    i32.lt_s $push30=, $pop29, $pop28
5334; NO-SIMD128-FAST-NEXT:    i32.select $push31=, $8, $16, $pop30
5335; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop31
5336; NO-SIMD128-FAST-NEXT:    return
5337  %c = icmp slt <8 x i16> %x, %y
5338  %a = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
5339  ret <8 x i16> %a
5340}
5341
5342define <8 x i16> @min_u_v8i16(<8 x i16> %x, <8 x i16> %y) {
5343; SIMD128-LABEL: min_u_v8i16:
5344; SIMD128:         .functype min_u_v8i16 (v128, v128) -> (v128)
5345; SIMD128-NEXT:  # %bb.0:
5346; SIMD128-NEXT:    i16x8.min_u $push0=, $0, $1
5347; SIMD128-NEXT:    return $pop0
5348;
5349; SIMD128-FAST-LABEL: min_u_v8i16:
5350; SIMD128-FAST:         .functype min_u_v8i16 (v128, v128) -> (v128)
5351; SIMD128-FAST-NEXT:  # %bb.0:
5352; SIMD128-FAST-NEXT:    i16x8.min_u $push0=, $0, $1
5353; SIMD128-FAST-NEXT:    return $pop0
5354;
5355; NO-SIMD128-LABEL: min_u_v8i16:
5356; NO-SIMD128:         .functype min_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5357; NO-SIMD128-NEXT:  # %bb.0:
5358; NO-SIMD128-NEXT:    i32.const $push0=, 65535
5359; NO-SIMD128-NEXT:    i32.and $push2=, $8, $pop0
5360; NO-SIMD128-NEXT:    i32.const $push47=, 65535
5361; NO-SIMD128-NEXT:    i32.and $push1=, $16, $pop47
5362; NO-SIMD128-NEXT:    i32.lt_u $push3=, $pop2, $pop1
5363; NO-SIMD128-NEXT:    i32.select $push4=, $8, $16, $pop3
5364; NO-SIMD128-NEXT:    i32.store16 14($0), $pop4
5365; NO-SIMD128-NEXT:    i32.const $push46=, 65535
5366; NO-SIMD128-NEXT:    i32.and $push6=, $7, $pop46
5367; NO-SIMD128-NEXT:    i32.const $push45=, 65535
5368; NO-SIMD128-NEXT:    i32.and $push5=, $15, $pop45
5369; NO-SIMD128-NEXT:    i32.lt_u $push7=, $pop6, $pop5
5370; NO-SIMD128-NEXT:    i32.select $push8=, $7, $15, $pop7
5371; NO-SIMD128-NEXT:    i32.store16 12($0), $pop8
5372; NO-SIMD128-NEXT:    i32.const $push44=, 65535
5373; NO-SIMD128-NEXT:    i32.and $push10=, $6, $pop44
5374; NO-SIMD128-NEXT:    i32.const $push43=, 65535
5375; NO-SIMD128-NEXT:    i32.and $push9=, $14, $pop43
5376; NO-SIMD128-NEXT:    i32.lt_u $push11=, $pop10, $pop9
5377; NO-SIMD128-NEXT:    i32.select $push12=, $6, $14, $pop11
5378; NO-SIMD128-NEXT:    i32.store16 10($0), $pop12
5379; NO-SIMD128-NEXT:    i32.const $push42=, 65535
5380; NO-SIMD128-NEXT:    i32.and $push14=, $5, $pop42
5381; NO-SIMD128-NEXT:    i32.const $push41=, 65535
5382; NO-SIMD128-NEXT:    i32.and $push13=, $13, $pop41
5383; NO-SIMD128-NEXT:    i32.lt_u $push15=, $pop14, $pop13
5384; NO-SIMD128-NEXT:    i32.select $push16=, $5, $13, $pop15
5385; NO-SIMD128-NEXT:    i32.store16 8($0), $pop16
5386; NO-SIMD128-NEXT:    i32.const $push40=, 65535
5387; NO-SIMD128-NEXT:    i32.and $push18=, $4, $pop40
5388; NO-SIMD128-NEXT:    i32.const $push39=, 65535
5389; NO-SIMD128-NEXT:    i32.and $push17=, $12, $pop39
5390; NO-SIMD128-NEXT:    i32.lt_u $push19=, $pop18, $pop17
5391; NO-SIMD128-NEXT:    i32.select $push20=, $4, $12, $pop19
5392; NO-SIMD128-NEXT:    i32.store16 6($0), $pop20
5393; NO-SIMD128-NEXT:    i32.const $push38=, 65535
5394; NO-SIMD128-NEXT:    i32.and $push22=, $3, $pop38
5395; NO-SIMD128-NEXT:    i32.const $push37=, 65535
5396; NO-SIMD128-NEXT:    i32.and $push21=, $11, $pop37
5397; NO-SIMD128-NEXT:    i32.lt_u $push23=, $pop22, $pop21
5398; NO-SIMD128-NEXT:    i32.select $push24=, $3, $11, $pop23
5399; NO-SIMD128-NEXT:    i32.store16 4($0), $pop24
5400; NO-SIMD128-NEXT:    i32.const $push36=, 65535
5401; NO-SIMD128-NEXT:    i32.and $push26=, $2, $pop36
5402; NO-SIMD128-NEXT:    i32.const $push35=, 65535
5403; NO-SIMD128-NEXT:    i32.and $push25=, $10, $pop35
5404; NO-SIMD128-NEXT:    i32.lt_u $push27=, $pop26, $pop25
5405; NO-SIMD128-NEXT:    i32.select $push28=, $2, $10, $pop27
5406; NO-SIMD128-NEXT:    i32.store16 2($0), $pop28
5407; NO-SIMD128-NEXT:    i32.const $push34=, 65535
5408; NO-SIMD128-NEXT:    i32.and $push30=, $1, $pop34
5409; NO-SIMD128-NEXT:    i32.const $push33=, 65535
5410; NO-SIMD128-NEXT:    i32.and $push29=, $9, $pop33
5411; NO-SIMD128-NEXT:    i32.lt_u $push31=, $pop30, $pop29
5412; NO-SIMD128-NEXT:    i32.select $push32=, $1, $9, $pop31
5413; NO-SIMD128-NEXT:    i32.store16 0($0), $pop32
5414; NO-SIMD128-NEXT:    return
5415;
5416; NO-SIMD128-FAST-LABEL: min_u_v8i16:
5417; NO-SIMD128-FAST:         .functype min_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5418; NO-SIMD128-FAST-NEXT:  # %bb.0:
5419; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
5420; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
5421; NO-SIMD128-FAST-NEXT:    i32.const $push47=, 65535
5422; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $9, $pop47
5423; NO-SIMD128-FAST-NEXT:    i32.lt_u $push3=, $pop2, $pop1
5424; NO-SIMD128-FAST-NEXT:    i32.select $push4=, $1, $9, $pop3
5425; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop4
5426; NO-SIMD128-FAST-NEXT:    i32.const $push46=, 65535
5427; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $2, $pop46
5428; NO-SIMD128-FAST-NEXT:    i32.const $push45=, 65535
5429; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $10, $pop45
5430; NO-SIMD128-FAST-NEXT:    i32.lt_u $push7=, $pop6, $pop5
5431; NO-SIMD128-FAST-NEXT:    i32.select $push8=, $2, $10, $pop7
5432; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop8
5433; NO-SIMD128-FAST-NEXT:    i32.const $push44=, 65535
5434; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $3, $pop44
5435; NO-SIMD128-FAST-NEXT:    i32.const $push43=, 65535
5436; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $11, $pop43
5437; NO-SIMD128-FAST-NEXT:    i32.lt_u $push11=, $pop10, $pop9
5438; NO-SIMD128-FAST-NEXT:    i32.select $push12=, $3, $11, $pop11
5439; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop12
5440; NO-SIMD128-FAST-NEXT:    i32.const $push42=, 65535
5441; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $4, $pop42
5442; NO-SIMD128-FAST-NEXT:    i32.const $push41=, 65535
5443; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $12, $pop41
5444; NO-SIMD128-FAST-NEXT:    i32.lt_u $push15=, $pop14, $pop13
5445; NO-SIMD128-FAST-NEXT:    i32.select $push16=, $4, $12, $pop15
5446; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop16
5447; NO-SIMD128-FAST-NEXT:    i32.const $push40=, 65535
5448; NO-SIMD128-FAST-NEXT:    i32.and $push18=, $5, $pop40
5449; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 65535
5450; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $13, $pop39
5451; NO-SIMD128-FAST-NEXT:    i32.lt_u $push19=, $pop18, $pop17
5452; NO-SIMD128-FAST-NEXT:    i32.select $push20=, $5, $13, $pop19
5453; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop20
5454; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 65535
5455; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $6, $pop38
5456; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 65535
5457; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $14, $pop37
5458; NO-SIMD128-FAST-NEXT:    i32.lt_u $push23=, $pop22, $pop21
5459; NO-SIMD128-FAST-NEXT:    i32.select $push24=, $6, $14, $pop23
5460; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop24
5461; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 65535
5462; NO-SIMD128-FAST-NEXT:    i32.and $push26=, $7, $pop36
5463; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 65535
5464; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $15, $pop35
5465; NO-SIMD128-FAST-NEXT:    i32.lt_u $push27=, $pop26, $pop25
5466; NO-SIMD128-FAST-NEXT:    i32.select $push28=, $7, $15, $pop27
5467; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop28
5468; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 65535
5469; NO-SIMD128-FAST-NEXT:    i32.and $push30=, $8, $pop34
5470; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 65535
5471; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $16, $pop33
5472; NO-SIMD128-FAST-NEXT:    i32.lt_u $push31=, $pop30, $pop29
5473; NO-SIMD128-FAST-NEXT:    i32.select $push32=, $8, $16, $pop31
5474; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop32
5475; NO-SIMD128-FAST-NEXT:    return
5476  %c = icmp ult <8 x i16> %x, %y
5477  %a = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
5478  ret <8 x i16> %a
5479}
5480
5481define <8 x i16> @max_s_v8i16(<8 x i16> %x, <8 x i16> %y) {
5482; SIMD128-LABEL: max_s_v8i16:
5483; SIMD128:         .functype max_s_v8i16 (v128, v128) -> (v128)
5484; SIMD128-NEXT:  # %bb.0:
5485; SIMD128-NEXT:    i16x8.max_s $push0=, $0, $1
5486; SIMD128-NEXT:    return $pop0
5487;
5488; SIMD128-FAST-LABEL: max_s_v8i16:
5489; SIMD128-FAST:         .functype max_s_v8i16 (v128, v128) -> (v128)
5490; SIMD128-FAST-NEXT:  # %bb.0:
5491; SIMD128-FAST-NEXT:    i16x8.max_s $push0=, $0, $1
5492; SIMD128-FAST-NEXT:    return $pop0
5493;
5494; NO-SIMD128-LABEL: max_s_v8i16:
5495; NO-SIMD128:         .functype max_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5496; NO-SIMD128-NEXT:  # %bb.0:
5497; NO-SIMD128-NEXT:    i32.extend16_s $push1=, $8
5498; NO-SIMD128-NEXT:    i32.extend16_s $push0=, $16
5499; NO-SIMD128-NEXT:    i32.gt_s $push2=, $pop1, $pop0
5500; NO-SIMD128-NEXT:    i32.select $push3=, $8, $16, $pop2
5501; NO-SIMD128-NEXT:    i32.store16 14($0), $pop3
5502; NO-SIMD128-NEXT:    i32.extend16_s $push5=, $7
5503; NO-SIMD128-NEXT:    i32.extend16_s $push4=, $15
5504; NO-SIMD128-NEXT:    i32.gt_s $push6=, $pop5, $pop4
5505; NO-SIMD128-NEXT:    i32.select $push7=, $7, $15, $pop6
5506; NO-SIMD128-NEXT:    i32.store16 12($0), $pop7
5507; NO-SIMD128-NEXT:    i32.extend16_s $push9=, $6
5508; NO-SIMD128-NEXT:    i32.extend16_s $push8=, $14
5509; NO-SIMD128-NEXT:    i32.gt_s $push10=, $pop9, $pop8
5510; NO-SIMD128-NEXT:    i32.select $push11=, $6, $14, $pop10
5511; NO-SIMD128-NEXT:    i32.store16 10($0), $pop11
5512; NO-SIMD128-NEXT:    i32.extend16_s $push13=, $5
5513; NO-SIMD128-NEXT:    i32.extend16_s $push12=, $13
5514; NO-SIMD128-NEXT:    i32.gt_s $push14=, $pop13, $pop12
5515; NO-SIMD128-NEXT:    i32.select $push15=, $5, $13, $pop14
5516; NO-SIMD128-NEXT:    i32.store16 8($0), $pop15
5517; NO-SIMD128-NEXT:    i32.extend16_s $push17=, $4
5518; NO-SIMD128-NEXT:    i32.extend16_s $push16=, $12
5519; NO-SIMD128-NEXT:    i32.gt_s $push18=, $pop17, $pop16
5520; NO-SIMD128-NEXT:    i32.select $push19=, $4, $12, $pop18
5521; NO-SIMD128-NEXT:    i32.store16 6($0), $pop19
5522; NO-SIMD128-NEXT:    i32.extend16_s $push21=, $3
5523; NO-SIMD128-NEXT:    i32.extend16_s $push20=, $11
5524; NO-SIMD128-NEXT:    i32.gt_s $push22=, $pop21, $pop20
5525; NO-SIMD128-NEXT:    i32.select $push23=, $3, $11, $pop22
5526; NO-SIMD128-NEXT:    i32.store16 4($0), $pop23
5527; NO-SIMD128-NEXT:    i32.extend16_s $push25=, $2
5528; NO-SIMD128-NEXT:    i32.extend16_s $push24=, $10
5529; NO-SIMD128-NEXT:    i32.gt_s $push26=, $pop25, $pop24
5530; NO-SIMD128-NEXT:    i32.select $push27=, $2, $10, $pop26
5531; NO-SIMD128-NEXT:    i32.store16 2($0), $pop27
5532; NO-SIMD128-NEXT:    i32.extend16_s $push29=, $1
5533; NO-SIMD128-NEXT:    i32.extend16_s $push28=, $9
5534; NO-SIMD128-NEXT:    i32.gt_s $push30=, $pop29, $pop28
5535; NO-SIMD128-NEXT:    i32.select $push31=, $1, $9, $pop30
5536; NO-SIMD128-NEXT:    i32.store16 0($0), $pop31
5537; NO-SIMD128-NEXT:    return
5538;
5539; NO-SIMD128-FAST-LABEL: max_s_v8i16:
5540; NO-SIMD128-FAST:         .functype max_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5541; NO-SIMD128-FAST-NEXT:  # %bb.0:
5542; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push1=, $1
5543; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push0=, $9
5544; NO-SIMD128-FAST-NEXT:    i32.gt_s $push2=, $pop1, $pop0
5545; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $1, $9, $pop2
5546; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop3
5547; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push5=, $2
5548; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push4=, $10
5549; NO-SIMD128-FAST-NEXT:    i32.gt_s $push6=, $pop5, $pop4
5550; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $2, $10, $pop6
5551; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop7
5552; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push9=, $3
5553; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push8=, $11
5554; NO-SIMD128-FAST-NEXT:    i32.gt_s $push10=, $pop9, $pop8
5555; NO-SIMD128-FAST-NEXT:    i32.select $push11=, $3, $11, $pop10
5556; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop11
5557; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push13=, $4
5558; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push12=, $12
5559; NO-SIMD128-FAST-NEXT:    i32.gt_s $push14=, $pop13, $pop12
5560; NO-SIMD128-FAST-NEXT:    i32.select $push15=, $4, $12, $pop14
5561; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop15
5562; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push17=, $5
5563; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push16=, $13
5564; NO-SIMD128-FAST-NEXT:    i32.gt_s $push18=, $pop17, $pop16
5565; NO-SIMD128-FAST-NEXT:    i32.select $push19=, $5, $13, $pop18
5566; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop19
5567; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push21=, $6
5568; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push20=, $14
5569; NO-SIMD128-FAST-NEXT:    i32.gt_s $push22=, $pop21, $pop20
5570; NO-SIMD128-FAST-NEXT:    i32.select $push23=, $6, $14, $pop22
5571; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop23
5572; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push25=, $7
5573; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push24=, $15
5574; NO-SIMD128-FAST-NEXT:    i32.gt_s $push26=, $pop25, $pop24
5575; NO-SIMD128-FAST-NEXT:    i32.select $push27=, $7, $15, $pop26
5576; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop27
5577; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push29=, $8
5578; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push28=, $16
5579; NO-SIMD128-FAST-NEXT:    i32.gt_s $push30=, $pop29, $pop28
5580; NO-SIMD128-FAST-NEXT:    i32.select $push31=, $8, $16, $pop30
5581; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop31
5582; NO-SIMD128-FAST-NEXT:    return
5583  %c = icmp sgt <8 x i16> %x, %y
5584  %a = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
5585  ret <8 x i16> %a
5586}
5587
5588define <8 x i16> @max_u_v8i16(<8 x i16> %x, <8 x i16> %y) {
5589; SIMD128-LABEL: max_u_v8i16:
5590; SIMD128:         .functype max_u_v8i16 (v128, v128) -> (v128)
5591; SIMD128-NEXT:  # %bb.0:
5592; SIMD128-NEXT:    i16x8.max_u $push0=, $0, $1
5593; SIMD128-NEXT:    return $pop0
5594;
5595; SIMD128-FAST-LABEL: max_u_v8i16:
5596; SIMD128-FAST:         .functype max_u_v8i16 (v128, v128) -> (v128)
5597; SIMD128-FAST-NEXT:  # %bb.0:
5598; SIMD128-FAST-NEXT:    i16x8.max_u $push0=, $0, $1
5599; SIMD128-FAST-NEXT:    return $pop0
5600;
5601; NO-SIMD128-LABEL: max_u_v8i16:
5602; NO-SIMD128:         .functype max_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5603; NO-SIMD128-NEXT:  # %bb.0:
5604; NO-SIMD128-NEXT:    i32.const $push0=, 65535
5605; NO-SIMD128-NEXT:    i32.and $push2=, $8, $pop0
5606; NO-SIMD128-NEXT:    i32.const $push47=, 65535
5607; NO-SIMD128-NEXT:    i32.and $push1=, $16, $pop47
5608; NO-SIMD128-NEXT:    i32.gt_u $push3=, $pop2, $pop1
5609; NO-SIMD128-NEXT:    i32.select $push4=, $8, $16, $pop3
5610; NO-SIMD128-NEXT:    i32.store16 14($0), $pop4
5611; NO-SIMD128-NEXT:    i32.const $push46=, 65535
5612; NO-SIMD128-NEXT:    i32.and $push6=, $7, $pop46
5613; NO-SIMD128-NEXT:    i32.const $push45=, 65535
5614; NO-SIMD128-NEXT:    i32.and $push5=, $15, $pop45
5615; NO-SIMD128-NEXT:    i32.gt_u $push7=, $pop6, $pop5
5616; NO-SIMD128-NEXT:    i32.select $push8=, $7, $15, $pop7
5617; NO-SIMD128-NEXT:    i32.store16 12($0), $pop8
5618; NO-SIMD128-NEXT:    i32.const $push44=, 65535
5619; NO-SIMD128-NEXT:    i32.and $push10=, $6, $pop44
5620; NO-SIMD128-NEXT:    i32.const $push43=, 65535
5621; NO-SIMD128-NEXT:    i32.and $push9=, $14, $pop43
5622; NO-SIMD128-NEXT:    i32.gt_u $push11=, $pop10, $pop9
5623; NO-SIMD128-NEXT:    i32.select $push12=, $6, $14, $pop11
5624; NO-SIMD128-NEXT:    i32.store16 10($0), $pop12
5625; NO-SIMD128-NEXT:    i32.const $push42=, 65535
5626; NO-SIMD128-NEXT:    i32.and $push14=, $5, $pop42
5627; NO-SIMD128-NEXT:    i32.const $push41=, 65535
5628; NO-SIMD128-NEXT:    i32.and $push13=, $13, $pop41
5629; NO-SIMD128-NEXT:    i32.gt_u $push15=, $pop14, $pop13
5630; NO-SIMD128-NEXT:    i32.select $push16=, $5, $13, $pop15
5631; NO-SIMD128-NEXT:    i32.store16 8($0), $pop16
5632; NO-SIMD128-NEXT:    i32.const $push40=, 65535
5633; NO-SIMD128-NEXT:    i32.and $push18=, $4, $pop40
5634; NO-SIMD128-NEXT:    i32.const $push39=, 65535
5635; NO-SIMD128-NEXT:    i32.and $push17=, $12, $pop39
5636; NO-SIMD128-NEXT:    i32.gt_u $push19=, $pop18, $pop17
5637; NO-SIMD128-NEXT:    i32.select $push20=, $4, $12, $pop19
5638; NO-SIMD128-NEXT:    i32.store16 6($0), $pop20
5639; NO-SIMD128-NEXT:    i32.const $push38=, 65535
5640; NO-SIMD128-NEXT:    i32.and $push22=, $3, $pop38
5641; NO-SIMD128-NEXT:    i32.const $push37=, 65535
5642; NO-SIMD128-NEXT:    i32.and $push21=, $11, $pop37
5643; NO-SIMD128-NEXT:    i32.gt_u $push23=, $pop22, $pop21
5644; NO-SIMD128-NEXT:    i32.select $push24=, $3, $11, $pop23
5645; NO-SIMD128-NEXT:    i32.store16 4($0), $pop24
5646; NO-SIMD128-NEXT:    i32.const $push36=, 65535
5647; NO-SIMD128-NEXT:    i32.and $push26=, $2, $pop36
5648; NO-SIMD128-NEXT:    i32.const $push35=, 65535
5649; NO-SIMD128-NEXT:    i32.and $push25=, $10, $pop35
5650; NO-SIMD128-NEXT:    i32.gt_u $push27=, $pop26, $pop25
5651; NO-SIMD128-NEXT:    i32.select $push28=, $2, $10, $pop27
5652; NO-SIMD128-NEXT:    i32.store16 2($0), $pop28
5653; NO-SIMD128-NEXT:    i32.const $push34=, 65535
5654; NO-SIMD128-NEXT:    i32.and $push30=, $1, $pop34
5655; NO-SIMD128-NEXT:    i32.const $push33=, 65535
5656; NO-SIMD128-NEXT:    i32.and $push29=, $9, $pop33
5657; NO-SIMD128-NEXT:    i32.gt_u $push31=, $pop30, $pop29
5658; NO-SIMD128-NEXT:    i32.select $push32=, $1, $9, $pop31
5659; NO-SIMD128-NEXT:    i32.store16 0($0), $pop32
5660; NO-SIMD128-NEXT:    return
5661;
5662; NO-SIMD128-FAST-LABEL: max_u_v8i16:
5663; NO-SIMD128-FAST:         .functype max_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5664; NO-SIMD128-FAST-NEXT:  # %bb.0:
5665; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
5666; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
5667; NO-SIMD128-FAST-NEXT:    i32.const $push47=, 65535
5668; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $9, $pop47
5669; NO-SIMD128-FAST-NEXT:    i32.gt_u $push3=, $pop2, $pop1
5670; NO-SIMD128-FAST-NEXT:    i32.select $push4=, $1, $9, $pop3
5671; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop4
5672; NO-SIMD128-FAST-NEXT:    i32.const $push46=, 65535
5673; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $2, $pop46
5674; NO-SIMD128-FAST-NEXT:    i32.const $push45=, 65535
5675; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $10, $pop45
5676; NO-SIMD128-FAST-NEXT:    i32.gt_u $push7=, $pop6, $pop5
5677; NO-SIMD128-FAST-NEXT:    i32.select $push8=, $2, $10, $pop7
5678; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop8
5679; NO-SIMD128-FAST-NEXT:    i32.const $push44=, 65535
5680; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $3, $pop44
5681; NO-SIMD128-FAST-NEXT:    i32.const $push43=, 65535
5682; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $11, $pop43
5683; NO-SIMD128-FAST-NEXT:    i32.gt_u $push11=, $pop10, $pop9
5684; NO-SIMD128-FAST-NEXT:    i32.select $push12=, $3, $11, $pop11
5685; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop12
5686; NO-SIMD128-FAST-NEXT:    i32.const $push42=, 65535
5687; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $4, $pop42
5688; NO-SIMD128-FAST-NEXT:    i32.const $push41=, 65535
5689; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $12, $pop41
5690; NO-SIMD128-FAST-NEXT:    i32.gt_u $push15=, $pop14, $pop13
5691; NO-SIMD128-FAST-NEXT:    i32.select $push16=, $4, $12, $pop15
5692; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop16
5693; NO-SIMD128-FAST-NEXT:    i32.const $push40=, 65535
5694; NO-SIMD128-FAST-NEXT:    i32.and $push18=, $5, $pop40
5695; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 65535
5696; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $13, $pop39
5697; NO-SIMD128-FAST-NEXT:    i32.gt_u $push19=, $pop18, $pop17
5698; NO-SIMD128-FAST-NEXT:    i32.select $push20=, $5, $13, $pop19
5699; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop20
5700; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 65535
5701; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $6, $pop38
5702; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 65535
5703; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $14, $pop37
5704; NO-SIMD128-FAST-NEXT:    i32.gt_u $push23=, $pop22, $pop21
5705; NO-SIMD128-FAST-NEXT:    i32.select $push24=, $6, $14, $pop23
5706; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop24
5707; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 65535
5708; NO-SIMD128-FAST-NEXT:    i32.and $push26=, $7, $pop36
5709; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 65535
5710; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $15, $pop35
5711; NO-SIMD128-FAST-NEXT:    i32.gt_u $push27=, $pop26, $pop25
5712; NO-SIMD128-FAST-NEXT:    i32.select $push28=, $7, $15, $pop27
5713; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop28
5714; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 65535
5715; NO-SIMD128-FAST-NEXT:    i32.and $push30=, $8, $pop34
5716; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 65535
5717; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $16, $pop33
5718; NO-SIMD128-FAST-NEXT:    i32.gt_u $push31=, $pop30, $pop29
5719; NO-SIMD128-FAST-NEXT:    i32.select $push32=, $8, $16, $pop31
5720; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop32
5721; NO-SIMD128-FAST-NEXT:    return
5722  %c = icmp ugt <8 x i16> %x, %y
5723  %a = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
5724  ret <8 x i16> %a
5725}
5726
5727define <8 x i16> @avgr_u_v8i16(<8 x i16> %x, <8 x i16> %y) {
5728; SIMD128-LABEL: avgr_u_v8i16:
5729; SIMD128:         .functype avgr_u_v8i16 (v128, v128) -> (v128)
5730; SIMD128-NEXT:  # %bb.0:
5731; SIMD128-NEXT:    i16x8.avgr_u $push0=, $0, $1
5732; SIMD128-NEXT:    return $pop0
5733;
5734; SIMD128-FAST-LABEL: avgr_u_v8i16:
5735; SIMD128-FAST:         .functype avgr_u_v8i16 (v128, v128) -> (v128)
5736; SIMD128-FAST-NEXT:  # %bb.0:
5737; SIMD128-FAST-NEXT:    i16x8.avgr_u $push0=, $0, $1
5738; SIMD128-FAST-NEXT:    return $pop0
5739;
5740; NO-SIMD128-LABEL: avgr_u_v8i16:
5741; NO-SIMD128:         .functype avgr_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5742; NO-SIMD128-NEXT:  # %bb.0:
5743; NO-SIMD128-NEXT:    i32.add $push0=, $8, $16
5744; NO-SIMD128-NEXT:    i32.const $push1=, 1
5745; NO-SIMD128-NEXT:    i32.add $push2=, $pop0, $pop1
5746; NO-SIMD128-NEXT:    i32.const $push3=, 65534
5747; NO-SIMD128-NEXT:    i32.and $push4=, $pop2, $pop3
5748; NO-SIMD128-NEXT:    i32.const $push55=, 1
5749; NO-SIMD128-NEXT:    i32.shr_u $push5=, $pop4, $pop55
5750; NO-SIMD128-NEXT:    i32.store16 14($0), $pop5
5751; NO-SIMD128-NEXT:    i32.add $push6=, $7, $15
5752; NO-SIMD128-NEXT:    i32.const $push54=, 1
5753; NO-SIMD128-NEXT:    i32.add $push7=, $pop6, $pop54
5754; NO-SIMD128-NEXT:    i32.const $push53=, 65534
5755; NO-SIMD128-NEXT:    i32.and $push8=, $pop7, $pop53
5756; NO-SIMD128-NEXT:    i32.const $push52=, 1
5757; NO-SIMD128-NEXT:    i32.shr_u $push9=, $pop8, $pop52
5758; NO-SIMD128-NEXT:    i32.store16 12($0), $pop9
5759; NO-SIMD128-NEXT:    i32.add $push10=, $6, $14
5760; NO-SIMD128-NEXT:    i32.const $push51=, 1
5761; NO-SIMD128-NEXT:    i32.add $push11=, $pop10, $pop51
5762; NO-SIMD128-NEXT:    i32.const $push50=, 65534
5763; NO-SIMD128-NEXT:    i32.and $push12=, $pop11, $pop50
5764; NO-SIMD128-NEXT:    i32.const $push49=, 1
5765; NO-SIMD128-NEXT:    i32.shr_u $push13=, $pop12, $pop49
5766; NO-SIMD128-NEXT:    i32.store16 10($0), $pop13
5767; NO-SIMD128-NEXT:    i32.add $push14=, $5, $13
5768; NO-SIMD128-NEXT:    i32.const $push48=, 1
5769; NO-SIMD128-NEXT:    i32.add $push15=, $pop14, $pop48
5770; NO-SIMD128-NEXT:    i32.const $push47=, 65534
5771; NO-SIMD128-NEXT:    i32.and $push16=, $pop15, $pop47
5772; NO-SIMD128-NEXT:    i32.const $push46=, 1
5773; NO-SIMD128-NEXT:    i32.shr_u $push17=, $pop16, $pop46
5774; NO-SIMD128-NEXT:    i32.store16 8($0), $pop17
5775; NO-SIMD128-NEXT:    i32.add $push18=, $4, $12
5776; NO-SIMD128-NEXT:    i32.const $push45=, 1
5777; NO-SIMD128-NEXT:    i32.add $push19=, $pop18, $pop45
5778; NO-SIMD128-NEXT:    i32.const $push44=, 65534
5779; NO-SIMD128-NEXT:    i32.and $push20=, $pop19, $pop44
5780; NO-SIMD128-NEXT:    i32.const $push43=, 1
5781; NO-SIMD128-NEXT:    i32.shr_u $push21=, $pop20, $pop43
5782; NO-SIMD128-NEXT:    i32.store16 6($0), $pop21
5783; NO-SIMD128-NEXT:    i32.add $push22=, $3, $11
5784; NO-SIMD128-NEXT:    i32.const $push42=, 1
5785; NO-SIMD128-NEXT:    i32.add $push23=, $pop22, $pop42
5786; NO-SIMD128-NEXT:    i32.const $push41=, 65534
5787; NO-SIMD128-NEXT:    i32.and $push24=, $pop23, $pop41
5788; NO-SIMD128-NEXT:    i32.const $push40=, 1
5789; NO-SIMD128-NEXT:    i32.shr_u $push25=, $pop24, $pop40
5790; NO-SIMD128-NEXT:    i32.store16 4($0), $pop25
5791; NO-SIMD128-NEXT:    i32.add $push26=, $2, $10
5792; NO-SIMD128-NEXT:    i32.const $push39=, 1
5793; NO-SIMD128-NEXT:    i32.add $push27=, $pop26, $pop39
5794; NO-SIMD128-NEXT:    i32.const $push38=, 65534
5795; NO-SIMD128-NEXT:    i32.and $push28=, $pop27, $pop38
5796; NO-SIMD128-NEXT:    i32.const $push37=, 1
5797; NO-SIMD128-NEXT:    i32.shr_u $push29=, $pop28, $pop37
5798; NO-SIMD128-NEXT:    i32.store16 2($0), $pop29
5799; NO-SIMD128-NEXT:    i32.add $push30=, $1, $9
5800; NO-SIMD128-NEXT:    i32.const $push36=, 1
5801; NO-SIMD128-NEXT:    i32.add $push31=, $pop30, $pop36
5802; NO-SIMD128-NEXT:    i32.const $push35=, 65534
5803; NO-SIMD128-NEXT:    i32.and $push32=, $pop31, $pop35
5804; NO-SIMD128-NEXT:    i32.const $push34=, 1
5805; NO-SIMD128-NEXT:    i32.shr_u $push33=, $pop32, $pop34
5806; NO-SIMD128-NEXT:    i32.store16 0($0), $pop33
5807; NO-SIMD128-NEXT:    return
5808;
5809; NO-SIMD128-FAST-LABEL: avgr_u_v8i16:
5810; NO-SIMD128-FAST:         .functype avgr_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5811; NO-SIMD128-FAST-NEXT:  # %bb.0:
5812; NO-SIMD128-FAST-NEXT:    i32.add $push0=, $1, $9
5813; NO-SIMD128-FAST-NEXT:    i32.const $push1=, 1
5814; NO-SIMD128-FAST-NEXT:    i32.add $push2=, $pop0, $pop1
5815; NO-SIMD128-FAST-NEXT:    i32.const $push3=, 65534
5816; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $pop2, $pop3
5817; NO-SIMD128-FAST-NEXT:    i32.const $push55=, 1
5818; NO-SIMD128-FAST-NEXT:    i32.shr_u $push5=, $pop4, $pop55
5819; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop5
5820; NO-SIMD128-FAST-NEXT:    i32.add $push6=, $2, $10
5821; NO-SIMD128-FAST-NEXT:    i32.const $push54=, 1
5822; NO-SIMD128-FAST-NEXT:    i32.add $push7=, $pop6, $pop54
5823; NO-SIMD128-FAST-NEXT:    i32.const $push53=, 65534
5824; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $pop7, $pop53
5825; NO-SIMD128-FAST-NEXT:    i32.const $push52=, 1
5826; NO-SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop52
5827; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop9
5828; NO-SIMD128-FAST-NEXT:    i32.add $push10=, $3, $11
5829; NO-SIMD128-FAST-NEXT:    i32.const $push51=, 1
5830; NO-SIMD128-FAST-NEXT:    i32.add $push11=, $pop10, $pop51
5831; NO-SIMD128-FAST-NEXT:    i32.const $push50=, 65534
5832; NO-SIMD128-FAST-NEXT:    i32.and $push12=, $pop11, $pop50
5833; NO-SIMD128-FAST-NEXT:    i32.const $push49=, 1
5834; NO-SIMD128-FAST-NEXT:    i32.shr_u $push13=, $pop12, $pop49
5835; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop13
5836; NO-SIMD128-FAST-NEXT:    i32.add $push14=, $4, $12
5837; NO-SIMD128-FAST-NEXT:    i32.const $push48=, 1
5838; NO-SIMD128-FAST-NEXT:    i32.add $push15=, $pop14, $pop48
5839; NO-SIMD128-FAST-NEXT:    i32.const $push47=, 65534
5840; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $pop15, $pop47
5841; NO-SIMD128-FAST-NEXT:    i32.const $push46=, 1
5842; NO-SIMD128-FAST-NEXT:    i32.shr_u $push17=, $pop16, $pop46
5843; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop17
5844; NO-SIMD128-FAST-NEXT:    i32.add $push18=, $5, $13
5845; NO-SIMD128-FAST-NEXT:    i32.const $push45=, 1
5846; NO-SIMD128-FAST-NEXT:    i32.add $push19=, $pop18, $pop45
5847; NO-SIMD128-FAST-NEXT:    i32.const $push44=, 65534
5848; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $pop19, $pop44
5849; NO-SIMD128-FAST-NEXT:    i32.const $push43=, 1
5850; NO-SIMD128-FAST-NEXT:    i32.shr_u $push21=, $pop20, $pop43
5851; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop21
5852; NO-SIMD128-FAST-NEXT:    i32.add $push22=, $6, $14
5853; NO-SIMD128-FAST-NEXT:    i32.const $push42=, 1
5854; NO-SIMD128-FAST-NEXT:    i32.add $push23=, $pop22, $pop42
5855; NO-SIMD128-FAST-NEXT:    i32.const $push41=, 65534
5856; NO-SIMD128-FAST-NEXT:    i32.and $push24=, $pop23, $pop41
5857; NO-SIMD128-FAST-NEXT:    i32.const $push40=, 1
5858; NO-SIMD128-FAST-NEXT:    i32.shr_u $push25=, $pop24, $pop40
5859; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop25
5860; NO-SIMD128-FAST-NEXT:    i32.add $push26=, $7, $15
5861; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 1
5862; NO-SIMD128-FAST-NEXT:    i32.add $push27=, $pop26, $pop39
5863; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 65534
5864; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop38
5865; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 1
5866; NO-SIMD128-FAST-NEXT:    i32.shr_u $push29=, $pop28, $pop37
5867; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop29
5868; NO-SIMD128-FAST-NEXT:    i32.add $push30=, $8, $16
5869; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 1
5870; NO-SIMD128-FAST-NEXT:    i32.add $push31=, $pop30, $pop36
5871; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 65534
5872; NO-SIMD128-FAST-NEXT:    i32.and $push32=, $pop31, $pop35
5873; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 1
5874; NO-SIMD128-FAST-NEXT:    i32.shr_u $push33=, $pop32, $pop34
5875; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop33
5876; NO-SIMD128-FAST-NEXT:    return
5877  %a = add nuw <8 x i16> %x, %y
5878  %b = add nuw <8 x i16> %a, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
5879  %c = udiv <8 x i16> %b, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
5880  ret <8 x i16> %c
5881}
5882
5883define <8 x i16> @avgr_u_v8i16_wrap(<8 x i16> %x, <8 x i16> %y) {
5884; SIMD128-LABEL: avgr_u_v8i16_wrap:
5885; SIMD128:         .functype avgr_u_v8i16_wrap (v128, v128) -> (v128)
5886; SIMD128-NEXT:  # %bb.0:
5887; SIMD128-NEXT:    i16x8.add $push0=, $0, $1
5888; SIMD128-NEXT:    v128.const $push1=, 1, 1, 1, 1, 1, 1, 1, 1
5889; SIMD128-NEXT:    i16x8.add $push2=, $pop0, $pop1
5890; SIMD128-NEXT:    i32.const $push3=, 1
5891; SIMD128-NEXT:    i16x8.shr_u $push4=, $pop2, $pop3
5892; SIMD128-NEXT:    return $pop4
5893;
5894; SIMD128-FAST-LABEL: avgr_u_v8i16_wrap:
5895; SIMD128-FAST:         .functype avgr_u_v8i16_wrap (v128, v128) -> (v128)
5896; SIMD128-FAST-NEXT:  # %bb.0:
5897; SIMD128-FAST-NEXT:    i16x8.add $push2=, $0, $1
5898; SIMD128-FAST-NEXT:    v128.const $push3=, 1, 1, 1, 1, 1, 1, 1, 1
5899; SIMD128-FAST-NEXT:    i16x8.add $push1=, $pop2, $pop3
5900; SIMD128-FAST-NEXT:    i32.const $push4=, 1
5901; SIMD128-FAST-NEXT:    i16x8.shr_u $push0=, $pop1, $pop4
5902; SIMD128-FAST-NEXT:    return $pop0
5903;
5904; NO-SIMD128-LABEL: avgr_u_v8i16_wrap:
5905; NO-SIMD128:         .functype avgr_u_v8i16_wrap (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5906; NO-SIMD128-NEXT:  # %bb.0:
5907; NO-SIMD128-NEXT:    i32.add $push0=, $8, $16
5908; NO-SIMD128-NEXT:    i32.const $push1=, 1
5909; NO-SIMD128-NEXT:    i32.add $push2=, $pop0, $pop1
5910; NO-SIMD128-NEXT:    i32.const $push3=, 65534
5911; NO-SIMD128-NEXT:    i32.and $push4=, $pop2, $pop3
5912; NO-SIMD128-NEXT:    i32.const $push55=, 1
5913; NO-SIMD128-NEXT:    i32.shr_u $push5=, $pop4, $pop55
5914; NO-SIMD128-NEXT:    i32.store16 14($0), $pop5
5915; NO-SIMD128-NEXT:    i32.add $push6=, $7, $15
5916; NO-SIMD128-NEXT:    i32.const $push54=, 1
5917; NO-SIMD128-NEXT:    i32.add $push7=, $pop6, $pop54
5918; NO-SIMD128-NEXT:    i32.const $push53=, 65534
5919; NO-SIMD128-NEXT:    i32.and $push8=, $pop7, $pop53
5920; NO-SIMD128-NEXT:    i32.const $push52=, 1
5921; NO-SIMD128-NEXT:    i32.shr_u $push9=, $pop8, $pop52
5922; NO-SIMD128-NEXT:    i32.store16 12($0), $pop9
5923; NO-SIMD128-NEXT:    i32.add $push10=, $6, $14
5924; NO-SIMD128-NEXT:    i32.const $push51=, 1
5925; NO-SIMD128-NEXT:    i32.add $push11=, $pop10, $pop51
5926; NO-SIMD128-NEXT:    i32.const $push50=, 65534
5927; NO-SIMD128-NEXT:    i32.and $push12=, $pop11, $pop50
5928; NO-SIMD128-NEXT:    i32.const $push49=, 1
5929; NO-SIMD128-NEXT:    i32.shr_u $push13=, $pop12, $pop49
5930; NO-SIMD128-NEXT:    i32.store16 10($0), $pop13
5931; NO-SIMD128-NEXT:    i32.add $push14=, $5, $13
5932; NO-SIMD128-NEXT:    i32.const $push48=, 1
5933; NO-SIMD128-NEXT:    i32.add $push15=, $pop14, $pop48
5934; NO-SIMD128-NEXT:    i32.const $push47=, 65534
5935; NO-SIMD128-NEXT:    i32.and $push16=, $pop15, $pop47
5936; NO-SIMD128-NEXT:    i32.const $push46=, 1
5937; NO-SIMD128-NEXT:    i32.shr_u $push17=, $pop16, $pop46
5938; NO-SIMD128-NEXT:    i32.store16 8($0), $pop17
5939; NO-SIMD128-NEXT:    i32.add $push18=, $4, $12
5940; NO-SIMD128-NEXT:    i32.const $push45=, 1
5941; NO-SIMD128-NEXT:    i32.add $push19=, $pop18, $pop45
5942; NO-SIMD128-NEXT:    i32.const $push44=, 65534
5943; NO-SIMD128-NEXT:    i32.and $push20=, $pop19, $pop44
5944; NO-SIMD128-NEXT:    i32.const $push43=, 1
5945; NO-SIMD128-NEXT:    i32.shr_u $push21=, $pop20, $pop43
5946; NO-SIMD128-NEXT:    i32.store16 6($0), $pop21
5947; NO-SIMD128-NEXT:    i32.add $push22=, $3, $11
5948; NO-SIMD128-NEXT:    i32.const $push42=, 1
5949; NO-SIMD128-NEXT:    i32.add $push23=, $pop22, $pop42
5950; NO-SIMD128-NEXT:    i32.const $push41=, 65534
5951; NO-SIMD128-NEXT:    i32.and $push24=, $pop23, $pop41
5952; NO-SIMD128-NEXT:    i32.const $push40=, 1
5953; NO-SIMD128-NEXT:    i32.shr_u $push25=, $pop24, $pop40
5954; NO-SIMD128-NEXT:    i32.store16 4($0), $pop25
5955; NO-SIMD128-NEXT:    i32.add $push26=, $2, $10
5956; NO-SIMD128-NEXT:    i32.const $push39=, 1
5957; NO-SIMD128-NEXT:    i32.add $push27=, $pop26, $pop39
5958; NO-SIMD128-NEXT:    i32.const $push38=, 65534
5959; NO-SIMD128-NEXT:    i32.and $push28=, $pop27, $pop38
5960; NO-SIMD128-NEXT:    i32.const $push37=, 1
5961; NO-SIMD128-NEXT:    i32.shr_u $push29=, $pop28, $pop37
5962; NO-SIMD128-NEXT:    i32.store16 2($0), $pop29
5963; NO-SIMD128-NEXT:    i32.add $push30=, $1, $9
5964; NO-SIMD128-NEXT:    i32.const $push36=, 1
5965; NO-SIMD128-NEXT:    i32.add $push31=, $pop30, $pop36
5966; NO-SIMD128-NEXT:    i32.const $push35=, 65534
5967; NO-SIMD128-NEXT:    i32.and $push32=, $pop31, $pop35
5968; NO-SIMD128-NEXT:    i32.const $push34=, 1
5969; NO-SIMD128-NEXT:    i32.shr_u $push33=, $pop32, $pop34
5970; NO-SIMD128-NEXT:    i32.store16 0($0), $pop33
5971; NO-SIMD128-NEXT:    return
5972;
5973; NO-SIMD128-FAST-LABEL: avgr_u_v8i16_wrap:
5974; NO-SIMD128-FAST:         .functype avgr_u_v8i16_wrap (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
5975; NO-SIMD128-FAST-NEXT:  # %bb.0:
5976; NO-SIMD128-FAST-NEXT:    i32.add $push0=, $1, $9
5977; NO-SIMD128-FAST-NEXT:    i32.const $push1=, 1
5978; NO-SIMD128-FAST-NEXT:    i32.add $push2=, $pop0, $pop1
5979; NO-SIMD128-FAST-NEXT:    i32.const $push3=, 65534
5980; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $pop2, $pop3
5981; NO-SIMD128-FAST-NEXT:    i32.const $push55=, 1
5982; NO-SIMD128-FAST-NEXT:    i32.shr_u $push5=, $pop4, $pop55
5983; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop5
5984; NO-SIMD128-FAST-NEXT:    i32.add $push6=, $2, $10
5985; NO-SIMD128-FAST-NEXT:    i32.const $push54=, 1
5986; NO-SIMD128-FAST-NEXT:    i32.add $push7=, $pop6, $pop54
5987; NO-SIMD128-FAST-NEXT:    i32.const $push53=, 65534
5988; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $pop7, $pop53
5989; NO-SIMD128-FAST-NEXT:    i32.const $push52=, 1
5990; NO-SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop52
5991; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop9
5992; NO-SIMD128-FAST-NEXT:    i32.add $push10=, $3, $11
5993; NO-SIMD128-FAST-NEXT:    i32.const $push51=, 1
5994; NO-SIMD128-FAST-NEXT:    i32.add $push11=, $pop10, $pop51
5995; NO-SIMD128-FAST-NEXT:    i32.const $push50=, 65534
5996; NO-SIMD128-FAST-NEXT:    i32.and $push12=, $pop11, $pop50
5997; NO-SIMD128-FAST-NEXT:    i32.const $push49=, 1
5998; NO-SIMD128-FAST-NEXT:    i32.shr_u $push13=, $pop12, $pop49
5999; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop13
6000; NO-SIMD128-FAST-NEXT:    i32.add $push14=, $4, $12
6001; NO-SIMD128-FAST-NEXT:    i32.const $push48=, 1
6002; NO-SIMD128-FAST-NEXT:    i32.add $push15=, $pop14, $pop48
6003; NO-SIMD128-FAST-NEXT:    i32.const $push47=, 65534
6004; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $pop15, $pop47
6005; NO-SIMD128-FAST-NEXT:    i32.const $push46=, 1
6006; NO-SIMD128-FAST-NEXT:    i32.shr_u $push17=, $pop16, $pop46
6007; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop17
6008; NO-SIMD128-FAST-NEXT:    i32.add $push18=, $5, $13
6009; NO-SIMD128-FAST-NEXT:    i32.const $push45=, 1
6010; NO-SIMD128-FAST-NEXT:    i32.add $push19=, $pop18, $pop45
6011; NO-SIMD128-FAST-NEXT:    i32.const $push44=, 65534
6012; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $pop19, $pop44
6013; NO-SIMD128-FAST-NEXT:    i32.const $push43=, 1
6014; NO-SIMD128-FAST-NEXT:    i32.shr_u $push21=, $pop20, $pop43
6015; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop21
6016; NO-SIMD128-FAST-NEXT:    i32.add $push22=, $6, $14
6017; NO-SIMD128-FAST-NEXT:    i32.const $push42=, 1
6018; NO-SIMD128-FAST-NEXT:    i32.add $push23=, $pop22, $pop42
6019; NO-SIMD128-FAST-NEXT:    i32.const $push41=, 65534
6020; NO-SIMD128-FAST-NEXT:    i32.and $push24=, $pop23, $pop41
6021; NO-SIMD128-FAST-NEXT:    i32.const $push40=, 1
6022; NO-SIMD128-FAST-NEXT:    i32.shr_u $push25=, $pop24, $pop40
6023; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop25
6024; NO-SIMD128-FAST-NEXT:    i32.add $push26=, $7, $15
6025; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 1
6026; NO-SIMD128-FAST-NEXT:    i32.add $push27=, $pop26, $pop39
6027; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 65534
6028; NO-SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop38
6029; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 1
6030; NO-SIMD128-FAST-NEXT:    i32.shr_u $push29=, $pop28, $pop37
6031; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop29
6032; NO-SIMD128-FAST-NEXT:    i32.add $push30=, $8, $16
6033; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 1
6034; NO-SIMD128-FAST-NEXT:    i32.add $push31=, $pop30, $pop36
6035; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 65534
6036; NO-SIMD128-FAST-NEXT:    i32.and $push32=, $pop31, $pop35
6037; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 1
6038; NO-SIMD128-FAST-NEXT:    i32.shr_u $push33=, $pop32, $pop34
6039; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop33
6040; NO-SIMD128-FAST-NEXT:    return
6041  %a = add <8 x i16> %x, %y
6042  %b = add <8 x i16> %a, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
6043  %c = udiv <8 x i16> %b, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
6044  ret <8 x i16> %c
6045}
6046
6047define <8 x i16> @abs_v8i16(<8 x i16> %x) {
6048; SIMD128-LABEL: abs_v8i16:
6049; SIMD128:         .functype abs_v8i16 (v128) -> (v128)
6050; SIMD128-NEXT:  # %bb.0:
6051; SIMD128-NEXT:    i16x8.abs $push0=, $0
6052; SIMD128-NEXT:    return $pop0
6053;
6054; SIMD128-FAST-LABEL: abs_v8i16:
6055; SIMD128-FAST:         .functype abs_v8i16 (v128) -> (v128)
6056; SIMD128-FAST-NEXT:  # %bb.0:
6057; SIMD128-FAST-NEXT:    i16x8.abs $push0=, $0
6058; SIMD128-FAST-NEXT:    return $pop0
6059;
6060; NO-SIMD128-LABEL: abs_v8i16:
6061; NO-SIMD128:         .functype abs_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6062; NO-SIMD128-NEXT:  # %bb.0:
6063; NO-SIMD128-NEXT:    i32.extend16_s $push0=, $8
6064; NO-SIMD128-NEXT:    i32.const $push1=, 15
6065; NO-SIMD128-NEXT:    i32.shr_s $push47=, $pop0, $pop1
6066; NO-SIMD128-NEXT:    local.tee $push46=, $9=, $pop47
6067; NO-SIMD128-NEXT:    i32.xor $push2=, $8, $pop46
6068; NO-SIMD128-NEXT:    i32.sub $push3=, $pop2, $9
6069; NO-SIMD128-NEXT:    i32.store16 14($0), $pop3
6070; NO-SIMD128-NEXT:    i32.extend16_s $push4=, $7
6071; NO-SIMD128-NEXT:    i32.const $push45=, 15
6072; NO-SIMD128-NEXT:    i32.shr_s $push44=, $pop4, $pop45
6073; NO-SIMD128-NEXT:    local.tee $push43=, $8=, $pop44
6074; NO-SIMD128-NEXT:    i32.xor $push5=, $7, $pop43
6075; NO-SIMD128-NEXT:    i32.sub $push6=, $pop5, $8
6076; NO-SIMD128-NEXT:    i32.store16 12($0), $pop6
6077; NO-SIMD128-NEXT:    i32.extend16_s $push7=, $6
6078; NO-SIMD128-NEXT:    i32.const $push42=, 15
6079; NO-SIMD128-NEXT:    i32.shr_s $push41=, $pop7, $pop42
6080; NO-SIMD128-NEXT:    local.tee $push40=, $8=, $pop41
6081; NO-SIMD128-NEXT:    i32.xor $push8=, $6, $pop40
6082; NO-SIMD128-NEXT:    i32.sub $push9=, $pop8, $8
6083; NO-SIMD128-NEXT:    i32.store16 10($0), $pop9
6084; NO-SIMD128-NEXT:    i32.extend16_s $push10=, $5
6085; NO-SIMD128-NEXT:    i32.const $push39=, 15
6086; NO-SIMD128-NEXT:    i32.shr_s $push38=, $pop10, $pop39
6087; NO-SIMD128-NEXT:    local.tee $push37=, $8=, $pop38
6088; NO-SIMD128-NEXT:    i32.xor $push11=, $5, $pop37
6089; NO-SIMD128-NEXT:    i32.sub $push12=, $pop11, $8
6090; NO-SIMD128-NEXT:    i32.store16 8($0), $pop12
6091; NO-SIMD128-NEXT:    i32.extend16_s $push13=, $4
6092; NO-SIMD128-NEXT:    i32.const $push36=, 15
6093; NO-SIMD128-NEXT:    i32.shr_s $push35=, $pop13, $pop36
6094; NO-SIMD128-NEXT:    local.tee $push34=, $8=, $pop35
6095; NO-SIMD128-NEXT:    i32.xor $push14=, $4, $pop34
6096; NO-SIMD128-NEXT:    i32.sub $push15=, $pop14, $8
6097; NO-SIMD128-NEXT:    i32.store16 6($0), $pop15
6098; NO-SIMD128-NEXT:    i32.extend16_s $push16=, $3
6099; NO-SIMD128-NEXT:    i32.const $push33=, 15
6100; NO-SIMD128-NEXT:    i32.shr_s $push32=, $pop16, $pop33
6101; NO-SIMD128-NEXT:    local.tee $push31=, $8=, $pop32
6102; NO-SIMD128-NEXT:    i32.xor $push17=, $3, $pop31
6103; NO-SIMD128-NEXT:    i32.sub $push18=, $pop17, $8
6104; NO-SIMD128-NEXT:    i32.store16 4($0), $pop18
6105; NO-SIMD128-NEXT:    i32.extend16_s $push19=, $2
6106; NO-SIMD128-NEXT:    i32.const $push30=, 15
6107; NO-SIMD128-NEXT:    i32.shr_s $push29=, $pop19, $pop30
6108; NO-SIMD128-NEXT:    local.tee $push28=, $8=, $pop29
6109; NO-SIMD128-NEXT:    i32.xor $push20=, $2, $pop28
6110; NO-SIMD128-NEXT:    i32.sub $push21=, $pop20, $8
6111; NO-SIMD128-NEXT:    i32.store16 2($0), $pop21
6112; NO-SIMD128-NEXT:    i32.extend16_s $push22=, $1
6113; NO-SIMD128-NEXT:    i32.const $push27=, 15
6114; NO-SIMD128-NEXT:    i32.shr_s $push26=, $pop22, $pop27
6115; NO-SIMD128-NEXT:    local.tee $push25=, $8=, $pop26
6116; NO-SIMD128-NEXT:    i32.xor $push23=, $1, $pop25
6117; NO-SIMD128-NEXT:    i32.sub $push24=, $pop23, $8
6118; NO-SIMD128-NEXT:    i32.store16 0($0), $pop24
6119; NO-SIMD128-NEXT:    return
6120;
6121; NO-SIMD128-FAST-LABEL: abs_v8i16:
6122; NO-SIMD128-FAST:         .functype abs_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6123; NO-SIMD128-FAST-NEXT:  # %bb.0:
6124; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push0=, $1
6125; NO-SIMD128-FAST-NEXT:    i32.const $push1=, 15
6126; NO-SIMD128-FAST-NEXT:    i32.shr_s $push47=, $pop0, $pop1
6127; NO-SIMD128-FAST-NEXT:    local.tee $push46=, $9=, $pop47
6128; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $1, $pop46
6129; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $pop2, $9
6130; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop3
6131; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push4=, $2
6132; NO-SIMD128-FAST-NEXT:    i32.const $push45=, 15
6133; NO-SIMD128-FAST-NEXT:    i32.shr_s $push44=, $pop4, $pop45
6134; NO-SIMD128-FAST-NEXT:    local.tee $push43=, $1=, $pop44
6135; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $2, $pop43
6136; NO-SIMD128-FAST-NEXT:    i32.sub $push6=, $pop5, $1
6137; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop6
6138; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push7=, $3
6139; NO-SIMD128-FAST-NEXT:    i32.const $push42=, 15
6140; NO-SIMD128-FAST-NEXT:    i32.shr_s $push41=, $pop7, $pop42
6141; NO-SIMD128-FAST-NEXT:    local.tee $push40=, $2=, $pop41
6142; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $3, $pop40
6143; NO-SIMD128-FAST-NEXT:    i32.sub $push9=, $pop8, $2
6144; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop9
6145; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push10=, $4
6146; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 15
6147; NO-SIMD128-FAST-NEXT:    i32.shr_s $push38=, $pop10, $pop39
6148; NO-SIMD128-FAST-NEXT:    local.tee $push37=, $3=, $pop38
6149; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $4, $pop37
6150; NO-SIMD128-FAST-NEXT:    i32.sub $push12=, $pop11, $3
6151; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop12
6152; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push13=, $5
6153; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 15
6154; NO-SIMD128-FAST-NEXT:    i32.shr_s $push35=, $pop13, $pop36
6155; NO-SIMD128-FAST-NEXT:    local.tee $push34=, $4=, $pop35
6156; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $5, $pop34
6157; NO-SIMD128-FAST-NEXT:    i32.sub $push15=, $pop14, $4
6158; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop15
6159; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push16=, $6
6160; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 15
6161; NO-SIMD128-FAST-NEXT:    i32.shr_s $push32=, $pop16, $pop33
6162; NO-SIMD128-FAST-NEXT:    local.tee $push31=, $5=, $pop32
6163; NO-SIMD128-FAST-NEXT:    i32.xor $push17=, $6, $pop31
6164; NO-SIMD128-FAST-NEXT:    i32.sub $push18=, $pop17, $5
6165; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop18
6166; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push19=, $7
6167; NO-SIMD128-FAST-NEXT:    i32.const $push30=, 15
6168; NO-SIMD128-FAST-NEXT:    i32.shr_s $push29=, $pop19, $pop30
6169; NO-SIMD128-FAST-NEXT:    local.tee $push28=, $6=, $pop29
6170; NO-SIMD128-FAST-NEXT:    i32.xor $push20=, $7, $pop28
6171; NO-SIMD128-FAST-NEXT:    i32.sub $push21=, $pop20, $6
6172; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop21
6173; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push22=, $8
6174; NO-SIMD128-FAST-NEXT:    i32.const $push27=, 15
6175; NO-SIMD128-FAST-NEXT:    i32.shr_s $push26=, $pop22, $pop27
6176; NO-SIMD128-FAST-NEXT:    local.tee $push25=, $7=, $pop26
6177; NO-SIMD128-FAST-NEXT:    i32.xor $push23=, $8, $pop25
6178; NO-SIMD128-FAST-NEXT:    i32.sub $push24=, $pop23, $7
6179; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop24
6180; NO-SIMD128-FAST-NEXT:    return
6181  %a = sub <8 x i16> zeroinitializer, %x
6182  %b = icmp slt <8 x i16> %x, zeroinitializer
6183  %c = select <8 x i1> %b, <8 x i16> %a, <8 x i16> %x
6184  ret <8 x i16> %c
6185}
6186
6187define <8 x i16> @neg_v8i16(<8 x i16> %x) {
6188; SIMD128-LABEL: neg_v8i16:
6189; SIMD128:         .functype neg_v8i16 (v128) -> (v128)
6190; SIMD128-NEXT:  # %bb.0:
6191; SIMD128-NEXT:    i16x8.neg $push0=, $0
6192; SIMD128-NEXT:    return $pop0
6193;
6194; SIMD128-FAST-LABEL: neg_v8i16:
6195; SIMD128-FAST:         .functype neg_v8i16 (v128) -> (v128)
6196; SIMD128-FAST-NEXT:  # %bb.0:
6197; SIMD128-FAST-NEXT:    i16x8.neg $push0=, $0
6198; SIMD128-FAST-NEXT:    return $pop0
6199;
6200; NO-SIMD128-LABEL: neg_v8i16:
6201; NO-SIMD128:         .functype neg_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6202; NO-SIMD128-NEXT:  # %bb.0:
6203; NO-SIMD128-NEXT:    i32.const $push0=, 0
6204; NO-SIMD128-NEXT:    i32.sub $push1=, $pop0, $8
6205; NO-SIMD128-NEXT:    i32.store16 14($0), $pop1
6206; NO-SIMD128-NEXT:    i32.const $push15=, 0
6207; NO-SIMD128-NEXT:    i32.sub $push2=, $pop15, $7
6208; NO-SIMD128-NEXT:    i32.store16 12($0), $pop2
6209; NO-SIMD128-NEXT:    i32.const $push14=, 0
6210; NO-SIMD128-NEXT:    i32.sub $push3=, $pop14, $6
6211; NO-SIMD128-NEXT:    i32.store16 10($0), $pop3
6212; NO-SIMD128-NEXT:    i32.const $push13=, 0
6213; NO-SIMD128-NEXT:    i32.sub $push4=, $pop13, $5
6214; NO-SIMD128-NEXT:    i32.store16 8($0), $pop4
6215; NO-SIMD128-NEXT:    i32.const $push12=, 0
6216; NO-SIMD128-NEXT:    i32.sub $push5=, $pop12, $4
6217; NO-SIMD128-NEXT:    i32.store16 6($0), $pop5
6218; NO-SIMD128-NEXT:    i32.const $push11=, 0
6219; NO-SIMD128-NEXT:    i32.sub $push6=, $pop11, $3
6220; NO-SIMD128-NEXT:    i32.store16 4($0), $pop6
6221; NO-SIMD128-NEXT:    i32.const $push10=, 0
6222; NO-SIMD128-NEXT:    i32.sub $push7=, $pop10, $2
6223; NO-SIMD128-NEXT:    i32.store16 2($0), $pop7
6224; NO-SIMD128-NEXT:    i32.const $push9=, 0
6225; NO-SIMD128-NEXT:    i32.sub $push8=, $pop9, $1
6226; NO-SIMD128-NEXT:    i32.store16 0($0), $pop8
6227; NO-SIMD128-NEXT:    return
6228;
6229; NO-SIMD128-FAST-LABEL: neg_v8i16:
6230; NO-SIMD128-FAST:         .functype neg_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6231; NO-SIMD128-FAST-NEXT:  # %bb.0:
6232; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 0
6233; NO-SIMD128-FAST-NEXT:    i32.sub $push1=, $pop0, $1
6234; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop1
6235; NO-SIMD128-FAST-NEXT:    i32.const $push15=, 0
6236; NO-SIMD128-FAST-NEXT:    i32.sub $push2=, $pop15, $2
6237; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop2
6238; NO-SIMD128-FAST-NEXT:    i32.const $push14=, 0
6239; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $pop14, $3
6240; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop3
6241; NO-SIMD128-FAST-NEXT:    i32.const $push13=, 0
6242; NO-SIMD128-FAST-NEXT:    i32.sub $push4=, $pop13, $4
6243; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop4
6244; NO-SIMD128-FAST-NEXT:    i32.const $push12=, 0
6245; NO-SIMD128-FAST-NEXT:    i32.sub $push5=, $pop12, $5
6246; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop5
6247; NO-SIMD128-FAST-NEXT:    i32.const $push11=, 0
6248; NO-SIMD128-FAST-NEXT:    i32.sub $push6=, $pop11, $6
6249; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop6
6250; NO-SIMD128-FAST-NEXT:    i32.const $push10=, 0
6251; NO-SIMD128-FAST-NEXT:    i32.sub $push7=, $pop10, $7
6252; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop7
6253; NO-SIMD128-FAST-NEXT:    i32.const $push9=, 0
6254; NO-SIMD128-FAST-NEXT:    i32.sub $push8=, $pop9, $8
6255; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop8
6256; NO-SIMD128-FAST-NEXT:    return
6257  %a = sub <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>,
6258                     %x
6259  ret <8 x i16> %a
6260}
6261
6262define <8 x i16> @shl_v8i16(<8 x i16> %v, i16 %x) {
6263; SIMD128-LABEL: shl_v8i16:
6264; SIMD128:         .functype shl_v8i16 (v128, i32) -> (v128)
6265; SIMD128-NEXT:  # %bb.0:
6266; SIMD128-NEXT:    i16x8.shl $push0=, $0, $1
6267; SIMD128-NEXT:    return $pop0
6268;
6269; SIMD128-FAST-LABEL: shl_v8i16:
6270; SIMD128-FAST:         .functype shl_v8i16 (v128, i32) -> (v128)
6271; SIMD128-FAST-NEXT:  # %bb.0:
6272; SIMD128-FAST-NEXT:    i16x8.shl $push0=, $0, $1
6273; SIMD128-FAST-NEXT:    return $pop0
6274;
6275; NO-SIMD128-LABEL: shl_v8i16:
6276; NO-SIMD128:         .functype shl_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6277; NO-SIMD128-NEXT:  # %bb.0:
6278; NO-SIMD128-NEXT:    i32.const $push0=, 65535
6279; NO-SIMD128-NEXT:    i32.and $push10=, $9, $pop0
6280; NO-SIMD128-NEXT:    local.tee $push9=, $9=, $pop10
6281; NO-SIMD128-NEXT:    i32.shl $push1=, $8, $pop9
6282; NO-SIMD128-NEXT:    i32.store16 14($0), $pop1
6283; NO-SIMD128-NEXT:    i32.shl $push2=, $7, $9
6284; NO-SIMD128-NEXT:    i32.store16 12($0), $pop2
6285; NO-SIMD128-NEXT:    i32.shl $push3=, $6, $9
6286; NO-SIMD128-NEXT:    i32.store16 10($0), $pop3
6287; NO-SIMD128-NEXT:    i32.shl $push4=, $5, $9
6288; NO-SIMD128-NEXT:    i32.store16 8($0), $pop4
6289; NO-SIMD128-NEXT:    i32.shl $push5=, $4, $9
6290; NO-SIMD128-NEXT:    i32.store16 6($0), $pop5
6291; NO-SIMD128-NEXT:    i32.shl $push6=, $3, $9
6292; NO-SIMD128-NEXT:    i32.store16 4($0), $pop6
6293; NO-SIMD128-NEXT:    i32.shl $push7=, $2, $9
6294; NO-SIMD128-NEXT:    i32.store16 2($0), $pop7
6295; NO-SIMD128-NEXT:    i32.shl $push8=, $1, $9
6296; NO-SIMD128-NEXT:    i32.store16 0($0), $pop8
6297; NO-SIMD128-NEXT:    return
6298;
6299; NO-SIMD128-FAST-LABEL: shl_v8i16:
6300; NO-SIMD128-FAST:         .functype shl_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6301; NO-SIMD128-FAST-NEXT:  # %bb.0:
6302; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
6303; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $9, $pop0
6304; NO-SIMD128-FAST-NEXT:    local.tee $push9=, $9=, $pop10
6305; NO-SIMD128-FAST-NEXT:    i32.shl $push1=, $2, $pop9
6306; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop1
6307; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $1, $9
6308; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
6309; NO-SIMD128-FAST-NEXT:    i32.shl $push3=, $3, $9
6310; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop3
6311; NO-SIMD128-FAST-NEXT:    i32.shl $push4=, $4, $9
6312; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop4
6313; NO-SIMD128-FAST-NEXT:    i32.shl $push5=, $5, $9
6314; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop5
6315; NO-SIMD128-FAST-NEXT:    i32.shl $push6=, $6, $9
6316; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop6
6317; NO-SIMD128-FAST-NEXT:    i32.shl $push7=, $7, $9
6318; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop7
6319; NO-SIMD128-FAST-NEXT:    i32.shl $push8=, $8, $9
6320; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop8
6321; NO-SIMD128-FAST-NEXT:    return
6322  %t = insertelement <8 x i16> undef, i16 %x, i32 0
6323  %s = shufflevector <8 x i16> %t, <8 x i16> undef,
6324    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
6325  %a = shl <8 x i16> %v, %s
6326  ret <8 x i16> %a
6327}
6328
6329define <8 x i16> @shl_const_v8i16(<8 x i16> %v) {
6330; SIMD128-LABEL: shl_const_v8i16:
6331; SIMD128:         .functype shl_const_v8i16 (v128) -> (v128)
6332; SIMD128-NEXT:  # %bb.0:
6333; SIMD128-NEXT:    i32.const $push0=, 5
6334; SIMD128-NEXT:    i16x8.shl $push1=, $0, $pop0
6335; SIMD128-NEXT:    return $pop1
6336;
6337; SIMD128-FAST-LABEL: shl_const_v8i16:
6338; SIMD128-FAST:         .functype shl_const_v8i16 (v128) -> (v128)
6339; SIMD128-FAST-NEXT:  # %bb.0:
6340; SIMD128-FAST-NEXT:    i32.const $push1=, 5
6341; SIMD128-FAST-NEXT:    i16x8.shl $push0=, $0, $pop1
6342; SIMD128-FAST-NEXT:    return $pop0
6343;
6344; NO-SIMD128-LABEL: shl_const_v8i16:
6345; NO-SIMD128:         .functype shl_const_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6346; NO-SIMD128-NEXT:  # %bb.0:
6347; NO-SIMD128-NEXT:    i32.const $push0=, 5
6348; NO-SIMD128-NEXT:    i32.shl $push1=, $8, $pop0
6349; NO-SIMD128-NEXT:    i32.store16 14($0), $pop1
6350; NO-SIMD128-NEXT:    i32.const $push15=, 5
6351; NO-SIMD128-NEXT:    i32.shl $push2=, $7, $pop15
6352; NO-SIMD128-NEXT:    i32.store16 12($0), $pop2
6353; NO-SIMD128-NEXT:    i32.const $push14=, 5
6354; NO-SIMD128-NEXT:    i32.shl $push3=, $6, $pop14
6355; NO-SIMD128-NEXT:    i32.store16 10($0), $pop3
6356; NO-SIMD128-NEXT:    i32.const $push13=, 5
6357; NO-SIMD128-NEXT:    i32.shl $push4=, $5, $pop13
6358; NO-SIMD128-NEXT:    i32.store16 8($0), $pop4
6359; NO-SIMD128-NEXT:    i32.const $push12=, 5
6360; NO-SIMD128-NEXT:    i32.shl $push5=, $4, $pop12
6361; NO-SIMD128-NEXT:    i32.store16 6($0), $pop5
6362; NO-SIMD128-NEXT:    i32.const $push11=, 5
6363; NO-SIMD128-NEXT:    i32.shl $push6=, $3, $pop11
6364; NO-SIMD128-NEXT:    i32.store16 4($0), $pop6
6365; NO-SIMD128-NEXT:    i32.const $push10=, 5
6366; NO-SIMD128-NEXT:    i32.shl $push7=, $2, $pop10
6367; NO-SIMD128-NEXT:    i32.store16 2($0), $pop7
6368; NO-SIMD128-NEXT:    i32.const $push9=, 5
6369; NO-SIMD128-NEXT:    i32.shl $push8=, $1, $pop9
6370; NO-SIMD128-NEXT:    i32.store16 0($0), $pop8
6371; NO-SIMD128-NEXT:    return
6372;
6373; NO-SIMD128-FAST-LABEL: shl_const_v8i16:
6374; NO-SIMD128-FAST:         .functype shl_const_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6375; NO-SIMD128-FAST-NEXT:  # %bb.0:
6376; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 5
6377; NO-SIMD128-FAST-NEXT:    i32.shl $push1=, $1, $pop0
6378; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop1
6379; NO-SIMD128-FAST-NEXT:    i32.const $push15=, 5
6380; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $2, $pop15
6381; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop2
6382; NO-SIMD128-FAST-NEXT:    i32.const $push14=, 5
6383; NO-SIMD128-FAST-NEXT:    i32.shl $push3=, $3, $pop14
6384; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop3
6385; NO-SIMD128-FAST-NEXT:    i32.const $push13=, 5
6386; NO-SIMD128-FAST-NEXT:    i32.shl $push4=, $4, $pop13
6387; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop4
6388; NO-SIMD128-FAST-NEXT:    i32.const $push12=, 5
6389; NO-SIMD128-FAST-NEXT:    i32.shl $push5=, $5, $pop12
6390; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop5
6391; NO-SIMD128-FAST-NEXT:    i32.const $push11=, 5
6392; NO-SIMD128-FAST-NEXT:    i32.shl $push6=, $6, $pop11
6393; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop6
6394; NO-SIMD128-FAST-NEXT:    i32.const $push10=, 5
6395; NO-SIMD128-FAST-NEXT:    i32.shl $push7=, $7, $pop10
6396; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop7
6397; NO-SIMD128-FAST-NEXT:    i32.const $push9=, 5
6398; NO-SIMD128-FAST-NEXT:    i32.shl $push8=, $8, $pop9
6399; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop8
6400; NO-SIMD128-FAST-NEXT:    return
6401  %a = shl <8 x i16> %v,
6402    <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
6403  ret <8 x i16> %a
6404}
6405
6406define <8 x i16> @shl_vec_v8i16(<8 x i16> %v, <8 x i16> %x) {
6407; SIMD128-LABEL: shl_vec_v8i16:
6408; SIMD128:         .functype shl_vec_v8i16 (v128, v128) -> (v128)
6409; SIMD128-NEXT:  # %bb.0:
6410; SIMD128-NEXT:    i16x8.extract_lane_u $push7=, $0, 0
6411; SIMD128-NEXT:    i16x8.extract_lane_u $push5=, $1, 0
6412; SIMD128-NEXT:    i32.const $push1=, 15
6413; SIMD128-NEXT:    i32.and $push6=, $pop5, $pop1
6414; SIMD128-NEXT:    i32.shl $push8=, $pop7, $pop6
6415; SIMD128-NEXT:    i16x8.splat $push9=, $pop8
6416; SIMD128-NEXT:    i16x8.extract_lane_u $push3=, $0, 1
6417; SIMD128-NEXT:    i16x8.extract_lane_u $push0=, $1, 1
6418; SIMD128-NEXT:    i32.const $push47=, 15
6419; SIMD128-NEXT:    i32.and $push2=, $pop0, $pop47
6420; SIMD128-NEXT:    i32.shl $push4=, $pop3, $pop2
6421; SIMD128-NEXT:    i16x8.replace_lane $push10=, $pop9, 1, $pop4
6422; SIMD128-NEXT:    i16x8.extract_lane_u $push13=, $0, 2
6423; SIMD128-NEXT:    i16x8.extract_lane_u $push11=, $1, 2
6424; SIMD128-NEXT:    i32.const $push46=, 15
6425; SIMD128-NEXT:    i32.and $push12=, $pop11, $pop46
6426; SIMD128-NEXT:    i32.shl $push14=, $pop13, $pop12
6427; SIMD128-NEXT:    i16x8.replace_lane $push15=, $pop10, 2, $pop14
6428; SIMD128-NEXT:    i16x8.extract_lane_u $push18=, $0, 3
6429; SIMD128-NEXT:    i16x8.extract_lane_u $push16=, $1, 3
6430; SIMD128-NEXT:    i32.const $push45=, 15
6431; SIMD128-NEXT:    i32.and $push17=, $pop16, $pop45
6432; SIMD128-NEXT:    i32.shl $push19=, $pop18, $pop17
6433; SIMD128-NEXT:    i16x8.replace_lane $push20=, $pop15, 3, $pop19
6434; SIMD128-NEXT:    i16x8.extract_lane_u $push23=, $0, 4
6435; SIMD128-NEXT:    i16x8.extract_lane_u $push21=, $1, 4
6436; SIMD128-NEXT:    i32.const $push44=, 15
6437; SIMD128-NEXT:    i32.and $push22=, $pop21, $pop44
6438; SIMD128-NEXT:    i32.shl $push24=, $pop23, $pop22
6439; SIMD128-NEXT:    i16x8.replace_lane $push25=, $pop20, 4, $pop24
6440; SIMD128-NEXT:    i16x8.extract_lane_u $push28=, $0, 5
6441; SIMD128-NEXT:    i16x8.extract_lane_u $push26=, $1, 5
6442; SIMD128-NEXT:    i32.const $push43=, 15
6443; SIMD128-NEXT:    i32.and $push27=, $pop26, $pop43
6444; SIMD128-NEXT:    i32.shl $push29=, $pop28, $pop27
6445; SIMD128-NEXT:    i16x8.replace_lane $push30=, $pop25, 5, $pop29
6446; SIMD128-NEXT:    i16x8.extract_lane_u $push33=, $0, 6
6447; SIMD128-NEXT:    i16x8.extract_lane_u $push31=, $1, 6
6448; SIMD128-NEXT:    i32.const $push42=, 15
6449; SIMD128-NEXT:    i32.and $push32=, $pop31, $pop42
6450; SIMD128-NEXT:    i32.shl $push34=, $pop33, $pop32
6451; SIMD128-NEXT:    i16x8.replace_lane $push35=, $pop30, 6, $pop34
6452; SIMD128-NEXT:    i16x8.extract_lane_u $push38=, $0, 7
6453; SIMD128-NEXT:    i16x8.extract_lane_u $push36=, $1, 7
6454; SIMD128-NEXT:    i32.const $push41=, 15
6455; SIMD128-NEXT:    i32.and $push37=, $pop36, $pop41
6456; SIMD128-NEXT:    i32.shl $push39=, $pop38, $pop37
6457; SIMD128-NEXT:    i16x8.replace_lane $push40=, $pop35, 7, $pop39
6458; SIMD128-NEXT:    return $pop40
6459;
6460; SIMD128-FAST-LABEL: shl_vec_v8i16:
6461; SIMD128-FAST:         .functype shl_vec_v8i16 (v128, v128) -> (v128)
6462; SIMD128-FAST-NEXT:  # %bb.0:
6463; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push8=, $0, 0
6464; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push6=, $1, 0
6465; SIMD128-FAST-NEXT:    i32.const $push2=, 15
6466; SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop2
6467; SIMD128-FAST-NEXT:    i32.shl $push9=, $pop8, $pop7
6468; SIMD128-FAST-NEXT:    i16x8.splat $push10=, $pop9
6469; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push4=, $0, 1
6470; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push1=, $1, 1
6471; SIMD128-FAST-NEXT:    i32.const $push47=, 15
6472; SIMD128-FAST-NEXT:    i32.and $push3=, $pop1, $pop47
6473; SIMD128-FAST-NEXT:    i32.shl $push5=, $pop4, $pop3
6474; SIMD128-FAST-NEXT:    i16x8.replace_lane $push11=, $pop10, 1, $pop5
6475; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push14=, $0, 2
6476; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push12=, $1, 2
6477; SIMD128-FAST-NEXT:    i32.const $push46=, 15
6478; SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $pop46
6479; SIMD128-FAST-NEXT:    i32.shl $push15=, $pop14, $pop13
6480; SIMD128-FAST-NEXT:    i16x8.replace_lane $push16=, $pop11, 2, $pop15
6481; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push19=, $0, 3
6482; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push17=, $1, 3
6483; SIMD128-FAST-NEXT:    i32.const $push45=, 15
6484; SIMD128-FAST-NEXT:    i32.and $push18=, $pop17, $pop45
6485; SIMD128-FAST-NEXT:    i32.shl $push20=, $pop19, $pop18
6486; SIMD128-FAST-NEXT:    i16x8.replace_lane $push21=, $pop16, 3, $pop20
6487; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push24=, $0, 4
6488; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push22=, $1, 4
6489; SIMD128-FAST-NEXT:    i32.const $push44=, 15
6490; SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop44
6491; SIMD128-FAST-NEXT:    i32.shl $push25=, $pop24, $pop23
6492; SIMD128-FAST-NEXT:    i16x8.replace_lane $push26=, $pop21, 4, $pop25
6493; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push29=, $0, 5
6494; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push27=, $1, 5
6495; SIMD128-FAST-NEXT:    i32.const $push43=, 15
6496; SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop43
6497; SIMD128-FAST-NEXT:    i32.shl $push30=, $pop29, $pop28
6498; SIMD128-FAST-NEXT:    i16x8.replace_lane $push31=, $pop26, 5, $pop30
6499; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push34=, $0, 6
6500; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push32=, $1, 6
6501; SIMD128-FAST-NEXT:    i32.const $push42=, 15
6502; SIMD128-FAST-NEXT:    i32.and $push33=, $pop32, $pop42
6503; SIMD128-FAST-NEXT:    i32.shl $push35=, $pop34, $pop33
6504; SIMD128-FAST-NEXT:    i16x8.replace_lane $push36=, $pop31, 6, $pop35
6505; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push39=, $0, 7
6506; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push37=, $1, 7
6507; SIMD128-FAST-NEXT:    i32.const $push41=, 15
6508; SIMD128-FAST-NEXT:    i32.and $push38=, $pop37, $pop41
6509; SIMD128-FAST-NEXT:    i32.shl $push40=, $pop39, $pop38
6510; SIMD128-FAST-NEXT:    i16x8.replace_lane $push0=, $pop36, 7, $pop40
6511; SIMD128-FAST-NEXT:    return $pop0
6512;
6513; NO-SIMD128-LABEL: shl_vec_v8i16:
6514; NO-SIMD128:         .functype shl_vec_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6515; NO-SIMD128-NEXT:  # %bb.0:
6516; NO-SIMD128-NEXT:    i32.const $push0=, 65535
6517; NO-SIMD128-NEXT:    i32.and $push1=, $16, $pop0
6518; NO-SIMD128-NEXT:    i32.shl $push2=, $8, $pop1
6519; NO-SIMD128-NEXT:    i32.store16 14($0), $pop2
6520; NO-SIMD128-NEXT:    i32.const $push23=, 65535
6521; NO-SIMD128-NEXT:    i32.and $push3=, $15, $pop23
6522; NO-SIMD128-NEXT:    i32.shl $push4=, $7, $pop3
6523; NO-SIMD128-NEXT:    i32.store16 12($0), $pop4
6524; NO-SIMD128-NEXT:    i32.const $push22=, 65535
6525; NO-SIMD128-NEXT:    i32.and $push5=, $14, $pop22
6526; NO-SIMD128-NEXT:    i32.shl $push6=, $6, $pop5
6527; NO-SIMD128-NEXT:    i32.store16 10($0), $pop6
6528; NO-SIMD128-NEXT:    i32.const $push21=, 65535
6529; NO-SIMD128-NEXT:    i32.and $push7=, $13, $pop21
6530; NO-SIMD128-NEXT:    i32.shl $push8=, $5, $pop7
6531; NO-SIMD128-NEXT:    i32.store16 8($0), $pop8
6532; NO-SIMD128-NEXT:    i32.const $push20=, 65535
6533; NO-SIMD128-NEXT:    i32.and $push9=, $12, $pop20
6534; NO-SIMD128-NEXT:    i32.shl $push10=, $4, $pop9
6535; NO-SIMD128-NEXT:    i32.store16 6($0), $pop10
6536; NO-SIMD128-NEXT:    i32.const $push19=, 65535
6537; NO-SIMD128-NEXT:    i32.and $push11=, $11, $pop19
6538; NO-SIMD128-NEXT:    i32.shl $push12=, $3, $pop11
6539; NO-SIMD128-NEXT:    i32.store16 4($0), $pop12
6540; NO-SIMD128-NEXT:    i32.const $push18=, 65535
6541; NO-SIMD128-NEXT:    i32.and $push13=, $10, $pop18
6542; NO-SIMD128-NEXT:    i32.shl $push14=, $2, $pop13
6543; NO-SIMD128-NEXT:    i32.store16 2($0), $pop14
6544; NO-SIMD128-NEXT:    i32.const $push17=, 65535
6545; NO-SIMD128-NEXT:    i32.and $push15=, $9, $pop17
6546; NO-SIMD128-NEXT:    i32.shl $push16=, $1, $pop15
6547; NO-SIMD128-NEXT:    i32.store16 0($0), $pop16
6548; NO-SIMD128-NEXT:    return
6549;
6550; NO-SIMD128-FAST-LABEL: shl_vec_v8i16:
6551; NO-SIMD128-FAST:         .functype shl_vec_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6552; NO-SIMD128-FAST-NEXT:  # %bb.0:
6553; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
6554; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $9, $pop0
6555; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $1, $pop1
6556; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
6557; NO-SIMD128-FAST-NEXT:    i32.const $push23=, 65535
6558; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $10, $pop23
6559; NO-SIMD128-FAST-NEXT:    i32.shl $push4=, $2, $pop3
6560; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop4
6561; NO-SIMD128-FAST-NEXT:    i32.const $push22=, 65535
6562; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $11, $pop22
6563; NO-SIMD128-FAST-NEXT:    i32.shl $push6=, $3, $pop5
6564; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop6
6565; NO-SIMD128-FAST-NEXT:    i32.const $push21=, 65535
6566; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $12, $pop21
6567; NO-SIMD128-FAST-NEXT:    i32.shl $push8=, $4, $pop7
6568; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop8
6569; NO-SIMD128-FAST-NEXT:    i32.const $push20=, 65535
6570; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $13, $pop20
6571; NO-SIMD128-FAST-NEXT:    i32.shl $push10=, $5, $pop9
6572; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop10
6573; NO-SIMD128-FAST-NEXT:    i32.const $push19=, 65535
6574; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $14, $pop19
6575; NO-SIMD128-FAST-NEXT:    i32.shl $push12=, $6, $pop11
6576; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop12
6577; NO-SIMD128-FAST-NEXT:    i32.const $push18=, 65535
6578; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $15, $pop18
6579; NO-SIMD128-FAST-NEXT:    i32.shl $push14=, $7, $pop13
6580; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop14
6581; NO-SIMD128-FAST-NEXT:    i32.const $push17=, 65535
6582; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $16, $pop17
6583; NO-SIMD128-FAST-NEXT:    i32.shl $push16=, $8, $pop15
6584; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop16
6585; NO-SIMD128-FAST-NEXT:    return
6586  %a = shl <8 x i16> %v, %x
6587  ret <8 x i16> %a
6588}
6589
6590define <8 x i16> @shr_s_v8i16(<8 x i16> %v, i16 %x) {
6591; SIMD128-LABEL: shr_s_v8i16:
6592; SIMD128:         .functype shr_s_v8i16 (v128, i32) -> (v128)
6593; SIMD128-NEXT:  # %bb.0:
6594; SIMD128-NEXT:    i16x8.shr_s $push0=, $0, $1
6595; SIMD128-NEXT:    return $pop0
6596;
6597; SIMD128-FAST-LABEL: shr_s_v8i16:
6598; SIMD128-FAST:         .functype shr_s_v8i16 (v128, i32) -> (v128)
6599; SIMD128-FAST-NEXT:  # %bb.0:
6600; SIMD128-FAST-NEXT:    i16x8.shr_s $push0=, $0, $1
6601; SIMD128-FAST-NEXT:    return $pop0
6602;
6603; NO-SIMD128-LABEL: shr_s_v8i16:
6604; NO-SIMD128:         .functype shr_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6605; NO-SIMD128-NEXT:  # %bb.0:
6606; NO-SIMD128-NEXT:    i32.extend16_s $push1=, $8
6607; NO-SIMD128-NEXT:    i32.const $push0=, 65535
6608; NO-SIMD128-NEXT:    i32.and $push18=, $9, $pop0
6609; NO-SIMD128-NEXT:    local.tee $push17=, $9=, $pop18
6610; NO-SIMD128-NEXT:    i32.shr_s $push2=, $pop1, $pop17
6611; NO-SIMD128-NEXT:    i32.store16 14($0), $pop2
6612; NO-SIMD128-NEXT:    i32.extend16_s $push3=, $7
6613; NO-SIMD128-NEXT:    i32.shr_s $push4=, $pop3, $9
6614; NO-SIMD128-NEXT:    i32.store16 12($0), $pop4
6615; NO-SIMD128-NEXT:    i32.extend16_s $push5=, $6
6616; NO-SIMD128-NEXT:    i32.shr_s $push6=, $pop5, $9
6617; NO-SIMD128-NEXT:    i32.store16 10($0), $pop6
6618; NO-SIMD128-NEXT:    i32.extend16_s $push7=, $5
6619; NO-SIMD128-NEXT:    i32.shr_s $push8=, $pop7, $9
6620; NO-SIMD128-NEXT:    i32.store16 8($0), $pop8
6621; NO-SIMD128-NEXT:    i32.extend16_s $push9=, $4
6622; NO-SIMD128-NEXT:    i32.shr_s $push10=, $pop9, $9
6623; NO-SIMD128-NEXT:    i32.store16 6($0), $pop10
6624; NO-SIMD128-NEXT:    i32.extend16_s $push11=, $3
6625; NO-SIMD128-NEXT:    i32.shr_s $push12=, $pop11, $9
6626; NO-SIMD128-NEXT:    i32.store16 4($0), $pop12
6627; NO-SIMD128-NEXT:    i32.extend16_s $push13=, $2
6628; NO-SIMD128-NEXT:    i32.shr_s $push14=, $pop13, $9
6629; NO-SIMD128-NEXT:    i32.store16 2($0), $pop14
6630; NO-SIMD128-NEXT:    i32.extend16_s $push15=, $1
6631; NO-SIMD128-NEXT:    i32.shr_s $push16=, $pop15, $9
6632; NO-SIMD128-NEXT:    i32.store16 0($0), $pop16
6633; NO-SIMD128-NEXT:    return
6634;
6635; NO-SIMD128-FAST-LABEL: shr_s_v8i16:
6636; NO-SIMD128-FAST:         .functype shr_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6637; NO-SIMD128-FAST-NEXT:  # %bb.0:
6638; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push1=, $1
6639; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
6640; NO-SIMD128-FAST-NEXT:    i32.and $push18=, $9, $pop0
6641; NO-SIMD128-FAST-NEXT:    local.tee $push17=, $1=, $pop18
6642; NO-SIMD128-FAST-NEXT:    i32.shr_s $push2=, $pop1, $pop17
6643; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
6644; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push3=, $2
6645; NO-SIMD128-FAST-NEXT:    i32.shr_s $push4=, $pop3, $1
6646; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop4
6647; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push5=, $3
6648; NO-SIMD128-FAST-NEXT:    i32.shr_s $push6=, $pop5, $1
6649; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop6
6650; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push7=, $4
6651; NO-SIMD128-FAST-NEXT:    i32.shr_s $push8=, $pop7, $1
6652; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop8
6653; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push9=, $5
6654; NO-SIMD128-FAST-NEXT:    i32.shr_s $push10=, $pop9, $1
6655; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop10
6656; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push11=, $6
6657; NO-SIMD128-FAST-NEXT:    i32.shr_s $push12=, $pop11, $1
6658; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop12
6659; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push13=, $7
6660; NO-SIMD128-FAST-NEXT:    i32.shr_s $push14=, $pop13, $1
6661; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop14
6662; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push15=, $8
6663; NO-SIMD128-FAST-NEXT:    i32.shr_s $push16=, $pop15, $1
6664; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop16
6665; NO-SIMD128-FAST-NEXT:    return
6666  %t = insertelement <8 x i16> undef, i16 %x, i32 0
6667  %s = shufflevector <8 x i16> %t, <8 x i16> undef,
6668    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
6669  %a = ashr <8 x i16> %v, %s
6670  ret <8 x i16> %a
6671}
6672
6673define <8 x i16> @shr_s_vec_v8i16(<8 x i16> %v, <8 x i16> %x) {
6674; SIMD128-LABEL: shr_s_vec_v8i16:
6675; SIMD128:         .functype shr_s_vec_v8i16 (v128, v128) -> (v128)
6676; SIMD128-NEXT:  # %bb.0:
6677; SIMD128-NEXT:    i16x8.extract_lane_s $push7=, $0, 0
6678; SIMD128-NEXT:    i16x8.extract_lane_u $push5=, $1, 0
6679; SIMD128-NEXT:    i32.const $push1=, 15
6680; SIMD128-NEXT:    i32.and $push6=, $pop5, $pop1
6681; SIMD128-NEXT:    i32.shr_s $push8=, $pop7, $pop6
6682; SIMD128-NEXT:    i16x8.splat $push9=, $pop8
6683; SIMD128-NEXT:    i16x8.extract_lane_s $push3=, $0, 1
6684; SIMD128-NEXT:    i16x8.extract_lane_u $push0=, $1, 1
6685; SIMD128-NEXT:    i32.const $push47=, 15
6686; SIMD128-NEXT:    i32.and $push2=, $pop0, $pop47
6687; SIMD128-NEXT:    i32.shr_s $push4=, $pop3, $pop2
6688; SIMD128-NEXT:    i16x8.replace_lane $push10=, $pop9, 1, $pop4
6689; SIMD128-NEXT:    i16x8.extract_lane_s $push13=, $0, 2
6690; SIMD128-NEXT:    i16x8.extract_lane_u $push11=, $1, 2
6691; SIMD128-NEXT:    i32.const $push46=, 15
6692; SIMD128-NEXT:    i32.and $push12=, $pop11, $pop46
6693; SIMD128-NEXT:    i32.shr_s $push14=, $pop13, $pop12
6694; SIMD128-NEXT:    i16x8.replace_lane $push15=, $pop10, 2, $pop14
6695; SIMD128-NEXT:    i16x8.extract_lane_s $push18=, $0, 3
6696; SIMD128-NEXT:    i16x8.extract_lane_u $push16=, $1, 3
6697; SIMD128-NEXT:    i32.const $push45=, 15
6698; SIMD128-NEXT:    i32.and $push17=, $pop16, $pop45
6699; SIMD128-NEXT:    i32.shr_s $push19=, $pop18, $pop17
6700; SIMD128-NEXT:    i16x8.replace_lane $push20=, $pop15, 3, $pop19
6701; SIMD128-NEXT:    i16x8.extract_lane_s $push23=, $0, 4
6702; SIMD128-NEXT:    i16x8.extract_lane_u $push21=, $1, 4
6703; SIMD128-NEXT:    i32.const $push44=, 15
6704; SIMD128-NEXT:    i32.and $push22=, $pop21, $pop44
6705; SIMD128-NEXT:    i32.shr_s $push24=, $pop23, $pop22
6706; SIMD128-NEXT:    i16x8.replace_lane $push25=, $pop20, 4, $pop24
6707; SIMD128-NEXT:    i16x8.extract_lane_s $push28=, $0, 5
6708; SIMD128-NEXT:    i16x8.extract_lane_u $push26=, $1, 5
6709; SIMD128-NEXT:    i32.const $push43=, 15
6710; SIMD128-NEXT:    i32.and $push27=, $pop26, $pop43
6711; SIMD128-NEXT:    i32.shr_s $push29=, $pop28, $pop27
6712; SIMD128-NEXT:    i16x8.replace_lane $push30=, $pop25, 5, $pop29
6713; SIMD128-NEXT:    i16x8.extract_lane_s $push33=, $0, 6
6714; SIMD128-NEXT:    i16x8.extract_lane_u $push31=, $1, 6
6715; SIMD128-NEXT:    i32.const $push42=, 15
6716; SIMD128-NEXT:    i32.and $push32=, $pop31, $pop42
6717; SIMD128-NEXT:    i32.shr_s $push34=, $pop33, $pop32
6718; SIMD128-NEXT:    i16x8.replace_lane $push35=, $pop30, 6, $pop34
6719; SIMD128-NEXT:    i16x8.extract_lane_s $push38=, $0, 7
6720; SIMD128-NEXT:    i16x8.extract_lane_u $push36=, $1, 7
6721; SIMD128-NEXT:    i32.const $push41=, 15
6722; SIMD128-NEXT:    i32.and $push37=, $pop36, $pop41
6723; SIMD128-NEXT:    i32.shr_s $push39=, $pop38, $pop37
6724; SIMD128-NEXT:    i16x8.replace_lane $push40=, $pop35, 7, $pop39
6725; SIMD128-NEXT:    return $pop40
6726;
6727; SIMD128-FAST-LABEL: shr_s_vec_v8i16:
6728; SIMD128-FAST:         .functype shr_s_vec_v8i16 (v128, v128) -> (v128)
6729; SIMD128-FAST-NEXT:  # %bb.0:
6730; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push8=, $0, 0
6731; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push6=, $1, 0
6732; SIMD128-FAST-NEXT:    i32.const $push2=, 15
6733; SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop2
6734; SIMD128-FAST-NEXT:    i32.shr_s $push9=, $pop8, $pop7
6735; SIMD128-FAST-NEXT:    i16x8.splat $push10=, $pop9
6736; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push4=, $0, 1
6737; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push1=, $1, 1
6738; SIMD128-FAST-NEXT:    i32.const $push47=, 15
6739; SIMD128-FAST-NEXT:    i32.and $push3=, $pop1, $pop47
6740; SIMD128-FAST-NEXT:    i32.shr_s $push5=, $pop4, $pop3
6741; SIMD128-FAST-NEXT:    i16x8.replace_lane $push11=, $pop10, 1, $pop5
6742; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push14=, $0, 2
6743; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push12=, $1, 2
6744; SIMD128-FAST-NEXT:    i32.const $push46=, 15
6745; SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $pop46
6746; SIMD128-FAST-NEXT:    i32.shr_s $push15=, $pop14, $pop13
6747; SIMD128-FAST-NEXT:    i16x8.replace_lane $push16=, $pop11, 2, $pop15
6748; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push19=, $0, 3
6749; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push17=, $1, 3
6750; SIMD128-FAST-NEXT:    i32.const $push45=, 15
6751; SIMD128-FAST-NEXT:    i32.and $push18=, $pop17, $pop45
6752; SIMD128-FAST-NEXT:    i32.shr_s $push20=, $pop19, $pop18
6753; SIMD128-FAST-NEXT:    i16x8.replace_lane $push21=, $pop16, 3, $pop20
6754; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push24=, $0, 4
6755; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push22=, $1, 4
6756; SIMD128-FAST-NEXT:    i32.const $push44=, 15
6757; SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop44
6758; SIMD128-FAST-NEXT:    i32.shr_s $push25=, $pop24, $pop23
6759; SIMD128-FAST-NEXT:    i16x8.replace_lane $push26=, $pop21, 4, $pop25
6760; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push29=, $0, 5
6761; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push27=, $1, 5
6762; SIMD128-FAST-NEXT:    i32.const $push43=, 15
6763; SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop43
6764; SIMD128-FAST-NEXT:    i32.shr_s $push30=, $pop29, $pop28
6765; SIMD128-FAST-NEXT:    i16x8.replace_lane $push31=, $pop26, 5, $pop30
6766; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push34=, $0, 6
6767; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push32=, $1, 6
6768; SIMD128-FAST-NEXT:    i32.const $push42=, 15
6769; SIMD128-FAST-NEXT:    i32.and $push33=, $pop32, $pop42
6770; SIMD128-FAST-NEXT:    i32.shr_s $push35=, $pop34, $pop33
6771; SIMD128-FAST-NEXT:    i16x8.replace_lane $push36=, $pop31, 6, $pop35
6772; SIMD128-FAST-NEXT:    i16x8.extract_lane_s $push39=, $0, 7
6773; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push37=, $1, 7
6774; SIMD128-FAST-NEXT:    i32.const $push41=, 15
6775; SIMD128-FAST-NEXT:    i32.and $push38=, $pop37, $pop41
6776; SIMD128-FAST-NEXT:    i32.shr_s $push40=, $pop39, $pop38
6777; SIMD128-FAST-NEXT:    i16x8.replace_lane $push0=, $pop36, 7, $pop40
6778; SIMD128-FAST-NEXT:    return $pop0
6779;
6780; NO-SIMD128-LABEL: shr_s_vec_v8i16:
6781; NO-SIMD128:         .functype shr_s_vec_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6782; NO-SIMD128-NEXT:  # %bb.0:
6783; NO-SIMD128-NEXT:    i32.extend16_s $push2=, $8
6784; NO-SIMD128-NEXT:    i32.const $push0=, 65535
6785; NO-SIMD128-NEXT:    i32.and $push1=, $16, $pop0
6786; NO-SIMD128-NEXT:    i32.shr_s $push3=, $pop2, $pop1
6787; NO-SIMD128-NEXT:    i32.store16 14($0), $pop3
6788; NO-SIMD128-NEXT:    i32.extend16_s $push5=, $7
6789; NO-SIMD128-NEXT:    i32.const $push31=, 65535
6790; NO-SIMD128-NEXT:    i32.and $push4=, $15, $pop31
6791; NO-SIMD128-NEXT:    i32.shr_s $push6=, $pop5, $pop4
6792; NO-SIMD128-NEXT:    i32.store16 12($0), $pop6
6793; NO-SIMD128-NEXT:    i32.extend16_s $push8=, $6
6794; NO-SIMD128-NEXT:    i32.const $push30=, 65535
6795; NO-SIMD128-NEXT:    i32.and $push7=, $14, $pop30
6796; NO-SIMD128-NEXT:    i32.shr_s $push9=, $pop8, $pop7
6797; NO-SIMD128-NEXT:    i32.store16 10($0), $pop9
6798; NO-SIMD128-NEXT:    i32.extend16_s $push11=, $5
6799; NO-SIMD128-NEXT:    i32.const $push29=, 65535
6800; NO-SIMD128-NEXT:    i32.and $push10=, $13, $pop29
6801; NO-SIMD128-NEXT:    i32.shr_s $push12=, $pop11, $pop10
6802; NO-SIMD128-NEXT:    i32.store16 8($0), $pop12
6803; NO-SIMD128-NEXT:    i32.extend16_s $push14=, $4
6804; NO-SIMD128-NEXT:    i32.const $push28=, 65535
6805; NO-SIMD128-NEXT:    i32.and $push13=, $12, $pop28
6806; NO-SIMD128-NEXT:    i32.shr_s $push15=, $pop14, $pop13
6807; NO-SIMD128-NEXT:    i32.store16 6($0), $pop15
6808; NO-SIMD128-NEXT:    i32.extend16_s $push17=, $3
6809; NO-SIMD128-NEXT:    i32.const $push27=, 65535
6810; NO-SIMD128-NEXT:    i32.and $push16=, $11, $pop27
6811; NO-SIMD128-NEXT:    i32.shr_s $push18=, $pop17, $pop16
6812; NO-SIMD128-NEXT:    i32.store16 4($0), $pop18
6813; NO-SIMD128-NEXT:    i32.extend16_s $push20=, $2
6814; NO-SIMD128-NEXT:    i32.const $push26=, 65535
6815; NO-SIMD128-NEXT:    i32.and $push19=, $10, $pop26
6816; NO-SIMD128-NEXT:    i32.shr_s $push21=, $pop20, $pop19
6817; NO-SIMD128-NEXT:    i32.store16 2($0), $pop21
6818; NO-SIMD128-NEXT:    i32.extend16_s $push23=, $1
6819; NO-SIMD128-NEXT:    i32.const $push25=, 65535
6820; NO-SIMD128-NEXT:    i32.and $push22=, $9, $pop25
6821; NO-SIMD128-NEXT:    i32.shr_s $push24=, $pop23, $pop22
6822; NO-SIMD128-NEXT:    i32.store16 0($0), $pop24
6823; NO-SIMD128-NEXT:    return
6824;
6825; NO-SIMD128-FAST-LABEL: shr_s_vec_v8i16:
6826; NO-SIMD128-FAST:         .functype shr_s_vec_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6827; NO-SIMD128-FAST-NEXT:  # %bb.0:
6828; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push2=, $1
6829; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
6830; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $9, $pop0
6831; NO-SIMD128-FAST-NEXT:    i32.shr_s $push3=, $pop2, $pop1
6832; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop3
6833; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push5=, $2
6834; NO-SIMD128-FAST-NEXT:    i32.const $push31=, 65535
6835; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $10, $pop31
6836; NO-SIMD128-FAST-NEXT:    i32.shr_s $push6=, $pop5, $pop4
6837; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop6
6838; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push8=, $3
6839; NO-SIMD128-FAST-NEXT:    i32.const $push30=, 65535
6840; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $11, $pop30
6841; NO-SIMD128-FAST-NEXT:    i32.shr_s $push9=, $pop8, $pop7
6842; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop9
6843; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push11=, $4
6844; NO-SIMD128-FAST-NEXT:    i32.const $push29=, 65535
6845; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $12, $pop29
6846; NO-SIMD128-FAST-NEXT:    i32.shr_s $push12=, $pop11, $pop10
6847; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop12
6848; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push14=, $5
6849; NO-SIMD128-FAST-NEXT:    i32.const $push28=, 65535
6850; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $13, $pop28
6851; NO-SIMD128-FAST-NEXT:    i32.shr_s $push15=, $pop14, $pop13
6852; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop15
6853; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push17=, $6
6854; NO-SIMD128-FAST-NEXT:    i32.const $push27=, 65535
6855; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $14, $pop27
6856; NO-SIMD128-FAST-NEXT:    i32.shr_s $push18=, $pop17, $pop16
6857; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop18
6858; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push20=, $7
6859; NO-SIMD128-FAST-NEXT:    i32.const $push26=, 65535
6860; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $15, $pop26
6861; NO-SIMD128-FAST-NEXT:    i32.shr_s $push21=, $pop20, $pop19
6862; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop21
6863; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push23=, $8
6864; NO-SIMD128-FAST-NEXT:    i32.const $push25=, 65535
6865; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $16, $pop25
6866; NO-SIMD128-FAST-NEXT:    i32.shr_s $push24=, $pop23, $pop22
6867; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop24
6868; NO-SIMD128-FAST-NEXT:    return
6869  %a = ashr <8 x i16> %v, %x
6870  ret <8 x i16> %a
6871}
6872
6873define <8 x i16> @shr_u_v8i16(<8 x i16> %v, i16 %x) {
6874; SIMD128-LABEL: shr_u_v8i16:
6875; SIMD128:         .functype shr_u_v8i16 (v128, i32) -> (v128)
6876; SIMD128-NEXT:  # %bb.0:
6877; SIMD128-NEXT:    i16x8.shr_u $push0=, $0, $1
6878; SIMD128-NEXT:    return $pop0
6879;
6880; SIMD128-FAST-LABEL: shr_u_v8i16:
6881; SIMD128-FAST:         .functype shr_u_v8i16 (v128, i32) -> (v128)
6882; SIMD128-FAST-NEXT:  # %bb.0:
6883; SIMD128-FAST-NEXT:    i16x8.shr_u $push0=, $0, $1
6884; SIMD128-FAST-NEXT:    return $pop0
6885;
6886; NO-SIMD128-LABEL: shr_u_v8i16:
6887; NO-SIMD128:         .functype shr_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6888; NO-SIMD128-NEXT:  # %bb.0:
6889; NO-SIMD128-NEXT:    i32.const $push0=, 65535
6890; NO-SIMD128-NEXT:    i32.and $push1=, $8, $pop0
6891; NO-SIMD128-NEXT:    i32.const $push26=, 65535
6892; NO-SIMD128-NEXT:    i32.and $push25=, $9, $pop26
6893; NO-SIMD128-NEXT:    local.tee $push24=, $9=, $pop25
6894; NO-SIMD128-NEXT:    i32.shr_u $push2=, $pop1, $pop24
6895; NO-SIMD128-NEXT:    i32.store16 14($0), $pop2
6896; NO-SIMD128-NEXT:    i32.const $push23=, 65535
6897; NO-SIMD128-NEXT:    i32.and $push3=, $7, $pop23
6898; NO-SIMD128-NEXT:    i32.shr_u $push4=, $pop3, $9
6899; NO-SIMD128-NEXT:    i32.store16 12($0), $pop4
6900; NO-SIMD128-NEXT:    i32.const $push22=, 65535
6901; NO-SIMD128-NEXT:    i32.and $push5=, $6, $pop22
6902; NO-SIMD128-NEXT:    i32.shr_u $push6=, $pop5, $9
6903; NO-SIMD128-NEXT:    i32.store16 10($0), $pop6
6904; NO-SIMD128-NEXT:    i32.const $push21=, 65535
6905; NO-SIMD128-NEXT:    i32.and $push7=, $5, $pop21
6906; NO-SIMD128-NEXT:    i32.shr_u $push8=, $pop7, $9
6907; NO-SIMD128-NEXT:    i32.store16 8($0), $pop8
6908; NO-SIMD128-NEXT:    i32.const $push20=, 65535
6909; NO-SIMD128-NEXT:    i32.and $push9=, $4, $pop20
6910; NO-SIMD128-NEXT:    i32.shr_u $push10=, $pop9, $9
6911; NO-SIMD128-NEXT:    i32.store16 6($0), $pop10
6912; NO-SIMD128-NEXT:    i32.const $push19=, 65535
6913; NO-SIMD128-NEXT:    i32.and $push11=, $3, $pop19
6914; NO-SIMD128-NEXT:    i32.shr_u $push12=, $pop11, $9
6915; NO-SIMD128-NEXT:    i32.store16 4($0), $pop12
6916; NO-SIMD128-NEXT:    i32.const $push18=, 65535
6917; NO-SIMD128-NEXT:    i32.and $push13=, $2, $pop18
6918; NO-SIMD128-NEXT:    i32.shr_u $push14=, $pop13, $9
6919; NO-SIMD128-NEXT:    i32.store16 2($0), $pop14
6920; NO-SIMD128-NEXT:    i32.const $push17=, 65535
6921; NO-SIMD128-NEXT:    i32.and $push15=, $1, $pop17
6922; NO-SIMD128-NEXT:    i32.shr_u $push16=, $pop15, $9
6923; NO-SIMD128-NEXT:    i32.store16 0($0), $pop16
6924; NO-SIMD128-NEXT:    return
6925;
6926; NO-SIMD128-FAST-LABEL: shr_u_v8i16:
6927; NO-SIMD128-FAST:         .functype shr_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
6928; NO-SIMD128-FAST-NEXT:  # %bb.0:
6929; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
6930; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $1, $pop0
6931; NO-SIMD128-FAST-NEXT:    i32.const $push26=, 65535
6932; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $9, $pop26
6933; NO-SIMD128-FAST-NEXT:    local.tee $push24=, $1=, $pop25
6934; NO-SIMD128-FAST-NEXT:    i32.shr_u $push2=, $pop1, $pop24
6935; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
6936; NO-SIMD128-FAST-NEXT:    i32.const $push23=, 65535
6937; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $2, $pop23
6938; NO-SIMD128-FAST-NEXT:    i32.shr_u $push4=, $pop3, $1
6939; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop4
6940; NO-SIMD128-FAST-NEXT:    i32.const $push22=, 65535
6941; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $3, $pop22
6942; NO-SIMD128-FAST-NEXT:    i32.shr_u $push6=, $pop5, $1
6943; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop6
6944; NO-SIMD128-FAST-NEXT:    i32.const $push21=, 65535
6945; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $4, $pop21
6946; NO-SIMD128-FAST-NEXT:    i32.shr_u $push8=, $pop7, $1
6947; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop8
6948; NO-SIMD128-FAST-NEXT:    i32.const $push20=, 65535
6949; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $5, $pop20
6950; NO-SIMD128-FAST-NEXT:    i32.shr_u $push10=, $pop9, $1
6951; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop10
6952; NO-SIMD128-FAST-NEXT:    i32.const $push19=, 65535
6953; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $6, $pop19
6954; NO-SIMD128-FAST-NEXT:    i32.shr_u $push12=, $pop11, $1
6955; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop12
6956; NO-SIMD128-FAST-NEXT:    i32.const $push18=, 65535
6957; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $7, $pop18
6958; NO-SIMD128-FAST-NEXT:    i32.shr_u $push14=, $pop13, $1
6959; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop14
6960; NO-SIMD128-FAST-NEXT:    i32.const $push17=, 65535
6961; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $8, $pop17
6962; NO-SIMD128-FAST-NEXT:    i32.shr_u $push16=, $pop15, $1
6963; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop16
6964; NO-SIMD128-FAST-NEXT:    return
6965  %t = insertelement <8 x i16> undef, i16 %x, i32 0
6966  %s = shufflevector <8 x i16> %t, <8 x i16> undef,
6967    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
6968  %a = lshr <8 x i16> %v, %s
6969  ret <8 x i16> %a
6970}
6971
6972define <8 x i16> @shr_u_vec_v8i16(<8 x i16> %v, <8 x i16> %x) {
6973; SIMD128-LABEL: shr_u_vec_v8i16:
6974; SIMD128:         .functype shr_u_vec_v8i16 (v128, v128) -> (v128)
6975; SIMD128-NEXT:  # %bb.0:
6976; SIMD128-NEXT:    i16x8.extract_lane_u $push7=, $0, 0
6977; SIMD128-NEXT:    i16x8.extract_lane_u $push5=, $1, 0
6978; SIMD128-NEXT:    i32.const $push1=, 15
6979; SIMD128-NEXT:    i32.and $push6=, $pop5, $pop1
6980; SIMD128-NEXT:    i32.shr_u $push8=, $pop7, $pop6
6981; SIMD128-NEXT:    i16x8.splat $push9=, $pop8
6982; SIMD128-NEXT:    i16x8.extract_lane_u $push3=, $0, 1
6983; SIMD128-NEXT:    i16x8.extract_lane_u $push0=, $1, 1
6984; SIMD128-NEXT:    i32.const $push47=, 15
6985; SIMD128-NEXT:    i32.and $push2=, $pop0, $pop47
6986; SIMD128-NEXT:    i32.shr_u $push4=, $pop3, $pop2
6987; SIMD128-NEXT:    i16x8.replace_lane $push10=, $pop9, 1, $pop4
6988; SIMD128-NEXT:    i16x8.extract_lane_u $push13=, $0, 2
6989; SIMD128-NEXT:    i16x8.extract_lane_u $push11=, $1, 2
6990; SIMD128-NEXT:    i32.const $push46=, 15
6991; SIMD128-NEXT:    i32.and $push12=, $pop11, $pop46
6992; SIMD128-NEXT:    i32.shr_u $push14=, $pop13, $pop12
6993; SIMD128-NEXT:    i16x8.replace_lane $push15=, $pop10, 2, $pop14
6994; SIMD128-NEXT:    i16x8.extract_lane_u $push18=, $0, 3
6995; SIMD128-NEXT:    i16x8.extract_lane_u $push16=, $1, 3
6996; SIMD128-NEXT:    i32.const $push45=, 15
6997; SIMD128-NEXT:    i32.and $push17=, $pop16, $pop45
6998; SIMD128-NEXT:    i32.shr_u $push19=, $pop18, $pop17
6999; SIMD128-NEXT:    i16x8.replace_lane $push20=, $pop15, 3, $pop19
7000; SIMD128-NEXT:    i16x8.extract_lane_u $push23=, $0, 4
7001; SIMD128-NEXT:    i16x8.extract_lane_u $push21=, $1, 4
7002; SIMD128-NEXT:    i32.const $push44=, 15
7003; SIMD128-NEXT:    i32.and $push22=, $pop21, $pop44
7004; SIMD128-NEXT:    i32.shr_u $push24=, $pop23, $pop22
7005; SIMD128-NEXT:    i16x8.replace_lane $push25=, $pop20, 4, $pop24
7006; SIMD128-NEXT:    i16x8.extract_lane_u $push28=, $0, 5
7007; SIMD128-NEXT:    i16x8.extract_lane_u $push26=, $1, 5
7008; SIMD128-NEXT:    i32.const $push43=, 15
7009; SIMD128-NEXT:    i32.and $push27=, $pop26, $pop43
7010; SIMD128-NEXT:    i32.shr_u $push29=, $pop28, $pop27
7011; SIMD128-NEXT:    i16x8.replace_lane $push30=, $pop25, 5, $pop29
7012; SIMD128-NEXT:    i16x8.extract_lane_u $push33=, $0, 6
7013; SIMD128-NEXT:    i16x8.extract_lane_u $push31=, $1, 6
7014; SIMD128-NEXT:    i32.const $push42=, 15
7015; SIMD128-NEXT:    i32.and $push32=, $pop31, $pop42
7016; SIMD128-NEXT:    i32.shr_u $push34=, $pop33, $pop32
7017; SIMD128-NEXT:    i16x8.replace_lane $push35=, $pop30, 6, $pop34
7018; SIMD128-NEXT:    i16x8.extract_lane_u $push38=, $0, 7
7019; SIMD128-NEXT:    i16x8.extract_lane_u $push36=, $1, 7
7020; SIMD128-NEXT:    i32.const $push41=, 15
7021; SIMD128-NEXT:    i32.and $push37=, $pop36, $pop41
7022; SIMD128-NEXT:    i32.shr_u $push39=, $pop38, $pop37
7023; SIMD128-NEXT:    i16x8.replace_lane $push40=, $pop35, 7, $pop39
7024; SIMD128-NEXT:    return $pop40
7025;
7026; SIMD128-FAST-LABEL: shr_u_vec_v8i16:
7027; SIMD128-FAST:         .functype shr_u_vec_v8i16 (v128, v128) -> (v128)
7028; SIMD128-FAST-NEXT:  # %bb.0:
7029; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push8=, $0, 0
7030; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push6=, $1, 0
7031; SIMD128-FAST-NEXT:    i32.const $push2=, 15
7032; SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop2
7033; SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop7
7034; SIMD128-FAST-NEXT:    i16x8.splat $push10=, $pop9
7035; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push4=, $0, 1
7036; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push1=, $1, 1
7037; SIMD128-FAST-NEXT:    i32.const $push47=, 15
7038; SIMD128-FAST-NEXT:    i32.and $push3=, $pop1, $pop47
7039; SIMD128-FAST-NEXT:    i32.shr_u $push5=, $pop4, $pop3
7040; SIMD128-FAST-NEXT:    i16x8.replace_lane $push11=, $pop10, 1, $pop5
7041; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push14=, $0, 2
7042; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push12=, $1, 2
7043; SIMD128-FAST-NEXT:    i32.const $push46=, 15
7044; SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $pop46
7045; SIMD128-FAST-NEXT:    i32.shr_u $push15=, $pop14, $pop13
7046; SIMD128-FAST-NEXT:    i16x8.replace_lane $push16=, $pop11, 2, $pop15
7047; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push19=, $0, 3
7048; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push17=, $1, 3
7049; SIMD128-FAST-NEXT:    i32.const $push45=, 15
7050; SIMD128-FAST-NEXT:    i32.and $push18=, $pop17, $pop45
7051; SIMD128-FAST-NEXT:    i32.shr_u $push20=, $pop19, $pop18
7052; SIMD128-FAST-NEXT:    i16x8.replace_lane $push21=, $pop16, 3, $pop20
7053; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push24=, $0, 4
7054; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push22=, $1, 4
7055; SIMD128-FAST-NEXT:    i32.const $push44=, 15
7056; SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop44
7057; SIMD128-FAST-NEXT:    i32.shr_u $push25=, $pop24, $pop23
7058; SIMD128-FAST-NEXT:    i16x8.replace_lane $push26=, $pop21, 4, $pop25
7059; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push29=, $0, 5
7060; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push27=, $1, 5
7061; SIMD128-FAST-NEXT:    i32.const $push43=, 15
7062; SIMD128-FAST-NEXT:    i32.and $push28=, $pop27, $pop43
7063; SIMD128-FAST-NEXT:    i32.shr_u $push30=, $pop29, $pop28
7064; SIMD128-FAST-NEXT:    i16x8.replace_lane $push31=, $pop26, 5, $pop30
7065; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push34=, $0, 6
7066; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push32=, $1, 6
7067; SIMD128-FAST-NEXT:    i32.const $push42=, 15
7068; SIMD128-FAST-NEXT:    i32.and $push33=, $pop32, $pop42
7069; SIMD128-FAST-NEXT:    i32.shr_u $push35=, $pop34, $pop33
7070; SIMD128-FAST-NEXT:    i16x8.replace_lane $push36=, $pop31, 6, $pop35
7071; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push39=, $0, 7
7072; SIMD128-FAST-NEXT:    i16x8.extract_lane_u $push37=, $1, 7
7073; SIMD128-FAST-NEXT:    i32.const $push41=, 15
7074; SIMD128-FAST-NEXT:    i32.and $push38=, $pop37, $pop41
7075; SIMD128-FAST-NEXT:    i32.shr_u $push40=, $pop39, $pop38
7076; SIMD128-FAST-NEXT:    i16x8.replace_lane $push0=, $pop36, 7, $pop40
7077; SIMD128-FAST-NEXT:    return $pop0
7078;
7079; NO-SIMD128-LABEL: shr_u_vec_v8i16:
7080; NO-SIMD128:         .functype shr_u_vec_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7081; NO-SIMD128-NEXT:  # %bb.0:
7082; NO-SIMD128-NEXT:    i32.const $push0=, 65535
7083; NO-SIMD128-NEXT:    i32.and $push2=, $8, $pop0
7084; NO-SIMD128-NEXT:    i32.const $push39=, 65535
7085; NO-SIMD128-NEXT:    i32.and $push1=, $16, $pop39
7086; NO-SIMD128-NEXT:    i32.shr_u $push3=, $pop2, $pop1
7087; NO-SIMD128-NEXT:    i32.store16 14($0), $pop3
7088; NO-SIMD128-NEXT:    i32.const $push38=, 65535
7089; NO-SIMD128-NEXT:    i32.and $push5=, $7, $pop38
7090; NO-SIMD128-NEXT:    i32.const $push37=, 65535
7091; NO-SIMD128-NEXT:    i32.and $push4=, $15, $pop37
7092; NO-SIMD128-NEXT:    i32.shr_u $push6=, $pop5, $pop4
7093; NO-SIMD128-NEXT:    i32.store16 12($0), $pop6
7094; NO-SIMD128-NEXT:    i32.const $push36=, 65535
7095; NO-SIMD128-NEXT:    i32.and $push8=, $6, $pop36
7096; NO-SIMD128-NEXT:    i32.const $push35=, 65535
7097; NO-SIMD128-NEXT:    i32.and $push7=, $14, $pop35
7098; NO-SIMD128-NEXT:    i32.shr_u $push9=, $pop8, $pop7
7099; NO-SIMD128-NEXT:    i32.store16 10($0), $pop9
7100; NO-SIMD128-NEXT:    i32.const $push34=, 65535
7101; NO-SIMD128-NEXT:    i32.and $push11=, $5, $pop34
7102; NO-SIMD128-NEXT:    i32.const $push33=, 65535
7103; NO-SIMD128-NEXT:    i32.and $push10=, $13, $pop33
7104; NO-SIMD128-NEXT:    i32.shr_u $push12=, $pop11, $pop10
7105; NO-SIMD128-NEXT:    i32.store16 8($0), $pop12
7106; NO-SIMD128-NEXT:    i32.const $push32=, 65535
7107; NO-SIMD128-NEXT:    i32.and $push14=, $4, $pop32
7108; NO-SIMD128-NEXT:    i32.const $push31=, 65535
7109; NO-SIMD128-NEXT:    i32.and $push13=, $12, $pop31
7110; NO-SIMD128-NEXT:    i32.shr_u $push15=, $pop14, $pop13
7111; NO-SIMD128-NEXT:    i32.store16 6($0), $pop15
7112; NO-SIMD128-NEXT:    i32.const $push30=, 65535
7113; NO-SIMD128-NEXT:    i32.and $push17=, $3, $pop30
7114; NO-SIMD128-NEXT:    i32.const $push29=, 65535
7115; NO-SIMD128-NEXT:    i32.and $push16=, $11, $pop29
7116; NO-SIMD128-NEXT:    i32.shr_u $push18=, $pop17, $pop16
7117; NO-SIMD128-NEXT:    i32.store16 4($0), $pop18
7118; NO-SIMD128-NEXT:    i32.const $push28=, 65535
7119; NO-SIMD128-NEXT:    i32.and $push20=, $2, $pop28
7120; NO-SIMD128-NEXT:    i32.const $push27=, 65535
7121; NO-SIMD128-NEXT:    i32.and $push19=, $10, $pop27
7122; NO-SIMD128-NEXT:    i32.shr_u $push21=, $pop20, $pop19
7123; NO-SIMD128-NEXT:    i32.store16 2($0), $pop21
7124; NO-SIMD128-NEXT:    i32.const $push26=, 65535
7125; NO-SIMD128-NEXT:    i32.and $push23=, $1, $pop26
7126; NO-SIMD128-NEXT:    i32.const $push25=, 65535
7127; NO-SIMD128-NEXT:    i32.and $push22=, $9, $pop25
7128; NO-SIMD128-NEXT:    i32.shr_u $push24=, $pop23, $pop22
7129; NO-SIMD128-NEXT:    i32.store16 0($0), $pop24
7130; NO-SIMD128-NEXT:    return
7131;
7132; NO-SIMD128-FAST-LABEL: shr_u_vec_v8i16:
7133; NO-SIMD128-FAST:         .functype shr_u_vec_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7134; NO-SIMD128-FAST-NEXT:  # %bb.0:
7135; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
7136; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
7137; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 65535
7138; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $9, $pop39
7139; NO-SIMD128-FAST-NEXT:    i32.shr_u $push3=, $pop2, $pop1
7140; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop3
7141; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 65535
7142; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $2, $pop38
7143; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 65535
7144; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $10, $pop37
7145; NO-SIMD128-FAST-NEXT:    i32.shr_u $push6=, $pop5, $pop4
7146; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop6
7147; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 65535
7148; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $3, $pop36
7149; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 65535
7150; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $11, $pop35
7151; NO-SIMD128-FAST-NEXT:    i32.shr_u $push9=, $pop8, $pop7
7152; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop9
7153; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 65535
7154; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $4, $pop34
7155; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 65535
7156; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $12, $pop33
7157; NO-SIMD128-FAST-NEXT:    i32.shr_u $push12=, $pop11, $pop10
7158; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop12
7159; NO-SIMD128-FAST-NEXT:    i32.const $push32=, 65535
7160; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $5, $pop32
7161; NO-SIMD128-FAST-NEXT:    i32.const $push31=, 65535
7162; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $13, $pop31
7163; NO-SIMD128-FAST-NEXT:    i32.shr_u $push15=, $pop14, $pop13
7164; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop15
7165; NO-SIMD128-FAST-NEXT:    i32.const $push30=, 65535
7166; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $6, $pop30
7167; NO-SIMD128-FAST-NEXT:    i32.const $push29=, 65535
7168; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $14, $pop29
7169; NO-SIMD128-FAST-NEXT:    i32.shr_u $push18=, $pop17, $pop16
7170; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop18
7171; NO-SIMD128-FAST-NEXT:    i32.const $push28=, 65535
7172; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $7, $pop28
7173; NO-SIMD128-FAST-NEXT:    i32.const $push27=, 65535
7174; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $15, $pop27
7175; NO-SIMD128-FAST-NEXT:    i32.shr_u $push21=, $pop20, $pop19
7176; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop21
7177; NO-SIMD128-FAST-NEXT:    i32.const $push26=, 65535
7178; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $8, $pop26
7179; NO-SIMD128-FAST-NEXT:    i32.const $push25=, 65535
7180; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $16, $pop25
7181; NO-SIMD128-FAST-NEXT:    i32.shr_u $push24=, $pop23, $pop22
7182; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop24
7183; NO-SIMD128-FAST-NEXT:    return
7184  %a = lshr <8 x i16> %v, %x
7185  ret <8 x i16> %a
7186}
7187
7188define <8 x i16> @and_v8i16(<8 x i16> %x, <8 x i16> %y) {
7189; SIMD128-LABEL: and_v8i16:
7190; SIMD128:         .functype and_v8i16 (v128, v128) -> (v128)
7191; SIMD128-NEXT:  # %bb.0:
7192; SIMD128-NEXT:    v128.and $push0=, $0, $1
7193; SIMD128-NEXT:    return $pop0
7194;
7195; SIMD128-FAST-LABEL: and_v8i16:
7196; SIMD128-FAST:         .functype and_v8i16 (v128, v128) -> (v128)
7197; SIMD128-FAST-NEXT:  # %bb.0:
7198; SIMD128-FAST-NEXT:    v128.and $push0=, $0, $1
7199; SIMD128-FAST-NEXT:    return $pop0
7200;
7201; NO-SIMD128-LABEL: and_v8i16:
7202; NO-SIMD128:         .functype and_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7203; NO-SIMD128-NEXT:  # %bb.0:
7204; NO-SIMD128-NEXT:    i32.and $push0=, $8, $16
7205; NO-SIMD128-NEXT:    i32.store16 14($0), $pop0
7206; NO-SIMD128-NEXT:    i32.and $push1=, $7, $15
7207; NO-SIMD128-NEXT:    i32.store16 12($0), $pop1
7208; NO-SIMD128-NEXT:    i32.and $push2=, $6, $14
7209; NO-SIMD128-NEXT:    i32.store16 10($0), $pop2
7210; NO-SIMD128-NEXT:    i32.and $push3=, $5, $13
7211; NO-SIMD128-NEXT:    i32.store16 8($0), $pop3
7212; NO-SIMD128-NEXT:    i32.and $push4=, $4, $12
7213; NO-SIMD128-NEXT:    i32.store16 6($0), $pop4
7214; NO-SIMD128-NEXT:    i32.and $push5=, $3, $11
7215; NO-SIMD128-NEXT:    i32.store16 4($0), $pop5
7216; NO-SIMD128-NEXT:    i32.and $push6=, $2, $10
7217; NO-SIMD128-NEXT:    i32.store16 2($0), $pop6
7218; NO-SIMD128-NEXT:    i32.and $push7=, $1, $9
7219; NO-SIMD128-NEXT:    i32.store16 0($0), $pop7
7220; NO-SIMD128-NEXT:    return
7221;
7222; NO-SIMD128-FAST-LABEL: and_v8i16:
7223; NO-SIMD128-FAST:         .functype and_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7224; NO-SIMD128-FAST-NEXT:  # %bb.0:
7225; NO-SIMD128-FAST-NEXT:    i32.and $push0=, $1, $9
7226; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop0
7227; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $2, $10
7228; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop1
7229; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $3, $11
7230; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop2
7231; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $4, $12
7232; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop3
7233; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $5, $13
7234; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop4
7235; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $6, $14
7236; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop5
7237; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $7, $15
7238; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop6
7239; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $8, $16
7240; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop7
7241; NO-SIMD128-FAST-NEXT:    return
7242  %a = and <8 x i16> %x, %y
7243  ret <8 x i16> %a
7244}
7245
7246define <8 x i16> @or_v8i16(<8 x i16> %x, <8 x i16> %y) {
7247; SIMD128-LABEL: or_v8i16:
7248; SIMD128:         .functype or_v8i16 (v128, v128) -> (v128)
7249; SIMD128-NEXT:  # %bb.0:
7250; SIMD128-NEXT:    v128.or $push0=, $0, $1
7251; SIMD128-NEXT:    return $pop0
7252;
7253; SIMD128-FAST-LABEL: or_v8i16:
7254; SIMD128-FAST:         .functype or_v8i16 (v128, v128) -> (v128)
7255; SIMD128-FAST-NEXT:  # %bb.0:
7256; SIMD128-FAST-NEXT:    v128.or $push0=, $0, $1
7257; SIMD128-FAST-NEXT:    return $pop0
7258;
7259; NO-SIMD128-LABEL: or_v8i16:
7260; NO-SIMD128:         .functype or_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7261; NO-SIMD128-NEXT:  # %bb.0:
7262; NO-SIMD128-NEXT:    i32.or $push0=, $8, $16
7263; NO-SIMD128-NEXT:    i32.store16 14($0), $pop0
7264; NO-SIMD128-NEXT:    i32.or $push1=, $7, $15
7265; NO-SIMD128-NEXT:    i32.store16 12($0), $pop1
7266; NO-SIMD128-NEXT:    i32.or $push2=, $6, $14
7267; NO-SIMD128-NEXT:    i32.store16 10($0), $pop2
7268; NO-SIMD128-NEXT:    i32.or $push3=, $5, $13
7269; NO-SIMD128-NEXT:    i32.store16 8($0), $pop3
7270; NO-SIMD128-NEXT:    i32.or $push4=, $4, $12
7271; NO-SIMD128-NEXT:    i32.store16 6($0), $pop4
7272; NO-SIMD128-NEXT:    i32.or $push5=, $3, $11
7273; NO-SIMD128-NEXT:    i32.store16 4($0), $pop5
7274; NO-SIMD128-NEXT:    i32.or $push6=, $2, $10
7275; NO-SIMD128-NEXT:    i32.store16 2($0), $pop6
7276; NO-SIMD128-NEXT:    i32.or $push7=, $1, $9
7277; NO-SIMD128-NEXT:    i32.store16 0($0), $pop7
7278; NO-SIMD128-NEXT:    return
7279;
7280; NO-SIMD128-FAST-LABEL: or_v8i16:
7281; NO-SIMD128-FAST:         .functype or_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7282; NO-SIMD128-FAST-NEXT:  # %bb.0:
7283; NO-SIMD128-FAST-NEXT:    i32.or $push0=, $1, $9
7284; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop0
7285; NO-SIMD128-FAST-NEXT:    i32.or $push1=, $2, $10
7286; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop1
7287; NO-SIMD128-FAST-NEXT:    i32.or $push2=, $3, $11
7288; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop2
7289; NO-SIMD128-FAST-NEXT:    i32.or $push3=, $4, $12
7290; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop3
7291; NO-SIMD128-FAST-NEXT:    i32.or $push4=, $5, $13
7292; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop4
7293; NO-SIMD128-FAST-NEXT:    i32.or $push5=, $6, $14
7294; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop5
7295; NO-SIMD128-FAST-NEXT:    i32.or $push6=, $7, $15
7296; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop6
7297; NO-SIMD128-FAST-NEXT:    i32.or $push7=, $8, $16
7298; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop7
7299; NO-SIMD128-FAST-NEXT:    return
7300  %a = or <8 x i16> %x, %y
7301  ret <8 x i16> %a
7302}
7303
7304define <8 x i16> @xor_v8i16(<8 x i16> %x, <8 x i16> %y) {
7305; SIMD128-LABEL: xor_v8i16:
7306; SIMD128:         .functype xor_v8i16 (v128, v128) -> (v128)
7307; SIMD128-NEXT:  # %bb.0:
7308; SIMD128-NEXT:    v128.xor $push0=, $0, $1
7309; SIMD128-NEXT:    return $pop0
7310;
7311; SIMD128-FAST-LABEL: xor_v8i16:
7312; SIMD128-FAST:         .functype xor_v8i16 (v128, v128) -> (v128)
7313; SIMD128-FAST-NEXT:  # %bb.0:
7314; SIMD128-FAST-NEXT:    v128.xor $push0=, $0, $1
7315; SIMD128-FAST-NEXT:    return $pop0
7316;
7317; NO-SIMD128-LABEL: xor_v8i16:
7318; NO-SIMD128:         .functype xor_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7319; NO-SIMD128-NEXT:  # %bb.0:
7320; NO-SIMD128-NEXT:    i32.xor $push0=, $8, $16
7321; NO-SIMD128-NEXT:    i32.store16 14($0), $pop0
7322; NO-SIMD128-NEXT:    i32.xor $push1=, $7, $15
7323; NO-SIMD128-NEXT:    i32.store16 12($0), $pop1
7324; NO-SIMD128-NEXT:    i32.xor $push2=, $6, $14
7325; NO-SIMD128-NEXT:    i32.store16 10($0), $pop2
7326; NO-SIMD128-NEXT:    i32.xor $push3=, $5, $13
7327; NO-SIMD128-NEXT:    i32.store16 8($0), $pop3
7328; NO-SIMD128-NEXT:    i32.xor $push4=, $4, $12
7329; NO-SIMD128-NEXT:    i32.store16 6($0), $pop4
7330; NO-SIMD128-NEXT:    i32.xor $push5=, $3, $11
7331; NO-SIMD128-NEXT:    i32.store16 4($0), $pop5
7332; NO-SIMD128-NEXT:    i32.xor $push6=, $2, $10
7333; NO-SIMD128-NEXT:    i32.store16 2($0), $pop6
7334; NO-SIMD128-NEXT:    i32.xor $push7=, $1, $9
7335; NO-SIMD128-NEXT:    i32.store16 0($0), $pop7
7336; NO-SIMD128-NEXT:    return
7337;
7338; NO-SIMD128-FAST-LABEL: xor_v8i16:
7339; NO-SIMD128-FAST:         .functype xor_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7340; NO-SIMD128-FAST-NEXT:  # %bb.0:
7341; NO-SIMD128-FAST-NEXT:    i32.xor $push0=, $1, $9
7342; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop0
7343; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $2, $10
7344; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop1
7345; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $3, $11
7346; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop2
7347; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $4, $12
7348; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop3
7349; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $5, $13
7350; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop4
7351; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $6, $14
7352; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop5
7353; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $7, $15
7354; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop6
7355; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $8, $16
7356; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop7
7357; NO-SIMD128-FAST-NEXT:    return
7358  %a = xor <8 x i16> %x, %y
7359  ret <8 x i16> %a
7360}
7361
7362define <8 x i16> @not_v8i16(<8 x i16> %x) {
7363; SIMD128-LABEL: not_v8i16:
7364; SIMD128:         .functype not_v8i16 (v128) -> (v128)
7365; SIMD128-NEXT:  # %bb.0:
7366; SIMD128-NEXT:    v128.not $push0=, $0
7367; SIMD128-NEXT:    return $pop0
7368;
7369; SIMD128-FAST-LABEL: not_v8i16:
7370; SIMD128-FAST:         .functype not_v8i16 (v128) -> (v128)
7371; SIMD128-FAST-NEXT:  # %bb.0:
7372; SIMD128-FAST-NEXT:    v128.not $push0=, $0
7373; SIMD128-FAST-NEXT:    return $pop0
7374;
7375; NO-SIMD128-LABEL: not_v8i16:
7376; NO-SIMD128:         .functype not_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7377; NO-SIMD128-NEXT:  # %bb.0:
7378; NO-SIMD128-NEXT:    i32.const $push0=, -1
7379; NO-SIMD128-NEXT:    i32.xor $push1=, $8, $pop0
7380; NO-SIMD128-NEXT:    i32.store16 14($0), $pop1
7381; NO-SIMD128-NEXT:    i32.const $push15=, -1
7382; NO-SIMD128-NEXT:    i32.xor $push2=, $7, $pop15
7383; NO-SIMD128-NEXT:    i32.store16 12($0), $pop2
7384; NO-SIMD128-NEXT:    i32.const $push14=, -1
7385; NO-SIMD128-NEXT:    i32.xor $push3=, $6, $pop14
7386; NO-SIMD128-NEXT:    i32.store16 10($0), $pop3
7387; NO-SIMD128-NEXT:    i32.const $push13=, -1
7388; NO-SIMD128-NEXT:    i32.xor $push4=, $5, $pop13
7389; NO-SIMD128-NEXT:    i32.store16 8($0), $pop4
7390; NO-SIMD128-NEXT:    i32.const $push12=, -1
7391; NO-SIMD128-NEXT:    i32.xor $push5=, $4, $pop12
7392; NO-SIMD128-NEXT:    i32.store16 6($0), $pop5
7393; NO-SIMD128-NEXT:    i32.const $push11=, -1
7394; NO-SIMD128-NEXT:    i32.xor $push6=, $3, $pop11
7395; NO-SIMD128-NEXT:    i32.store16 4($0), $pop6
7396; NO-SIMD128-NEXT:    i32.const $push10=, -1
7397; NO-SIMD128-NEXT:    i32.xor $push7=, $2, $pop10
7398; NO-SIMD128-NEXT:    i32.store16 2($0), $pop7
7399; NO-SIMD128-NEXT:    i32.const $push9=, -1
7400; NO-SIMD128-NEXT:    i32.xor $push8=, $1, $pop9
7401; NO-SIMD128-NEXT:    i32.store16 0($0), $pop8
7402; NO-SIMD128-NEXT:    return
7403;
7404; NO-SIMD128-FAST-LABEL: not_v8i16:
7405; NO-SIMD128-FAST:         .functype not_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7406; NO-SIMD128-FAST-NEXT:  # %bb.0:
7407; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
7408; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $1, $pop0
7409; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop1
7410; NO-SIMD128-FAST-NEXT:    i32.const $push15=, -1
7411; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $2, $pop15
7412; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop2
7413; NO-SIMD128-FAST-NEXT:    i32.const $push14=, -1
7414; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $3, $pop14
7415; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop3
7416; NO-SIMD128-FAST-NEXT:    i32.const $push13=, -1
7417; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $4, $pop13
7418; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop4
7419; NO-SIMD128-FAST-NEXT:    i32.const $push12=, -1
7420; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $5, $pop12
7421; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop5
7422; NO-SIMD128-FAST-NEXT:    i32.const $push11=, -1
7423; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $6, $pop11
7424; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop6
7425; NO-SIMD128-FAST-NEXT:    i32.const $push10=, -1
7426; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $7, $pop10
7427; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop7
7428; NO-SIMD128-FAST-NEXT:    i32.const $push9=, -1
7429; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $8, $pop9
7430; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop8
7431; NO-SIMD128-FAST-NEXT:    return
7432  %a = xor <8 x i16> %x, <i16 -1, i16 -1, i16 -1, i16 -1,
7433                          i16 -1, i16 -1, i16 -1, i16 -1>
7434  ret <8 x i16> %a
7435}
7436
7437define <8 x i16> @andnot_v8i16(<8 x i16> %x, <8 x i16> %y) {
7438; SIMD128-LABEL: andnot_v8i16:
7439; SIMD128:         .functype andnot_v8i16 (v128, v128) -> (v128)
7440; SIMD128-NEXT:  # %bb.0:
7441; SIMD128-NEXT:    v128.andnot $push0=, $0, $1
7442; SIMD128-NEXT:    return $pop0
7443;
7444; SIMD128-FAST-LABEL: andnot_v8i16:
7445; SIMD128-FAST:         .functype andnot_v8i16 (v128, v128) -> (v128)
7446; SIMD128-FAST-NEXT:  # %bb.0:
7447; SIMD128-FAST-NEXT:    v128.not $push0=, $1
7448; SIMD128-FAST-NEXT:    v128.and $push1=, $0, $pop0
7449; SIMD128-FAST-NEXT:    return $pop1
7450;
7451; NO-SIMD128-LABEL: andnot_v8i16:
7452; NO-SIMD128:         .functype andnot_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7453; NO-SIMD128-NEXT:  # %bb.0:
7454; NO-SIMD128-NEXT:    i32.const $push0=, -1
7455; NO-SIMD128-NEXT:    i32.xor $push1=, $16, $pop0
7456; NO-SIMD128-NEXT:    i32.and $push2=, $8, $pop1
7457; NO-SIMD128-NEXT:    i32.store16 14($0), $pop2
7458; NO-SIMD128-NEXT:    i32.const $push23=, -1
7459; NO-SIMD128-NEXT:    i32.xor $push3=, $15, $pop23
7460; NO-SIMD128-NEXT:    i32.and $push4=, $7, $pop3
7461; NO-SIMD128-NEXT:    i32.store16 12($0), $pop4
7462; NO-SIMD128-NEXT:    i32.const $push22=, -1
7463; NO-SIMD128-NEXT:    i32.xor $push5=, $14, $pop22
7464; NO-SIMD128-NEXT:    i32.and $push6=, $6, $pop5
7465; NO-SIMD128-NEXT:    i32.store16 10($0), $pop6
7466; NO-SIMD128-NEXT:    i32.const $push21=, -1
7467; NO-SIMD128-NEXT:    i32.xor $push7=, $13, $pop21
7468; NO-SIMD128-NEXT:    i32.and $push8=, $5, $pop7
7469; NO-SIMD128-NEXT:    i32.store16 8($0), $pop8
7470; NO-SIMD128-NEXT:    i32.const $push20=, -1
7471; NO-SIMD128-NEXT:    i32.xor $push9=, $12, $pop20
7472; NO-SIMD128-NEXT:    i32.and $push10=, $4, $pop9
7473; NO-SIMD128-NEXT:    i32.store16 6($0), $pop10
7474; NO-SIMD128-NEXT:    i32.const $push19=, -1
7475; NO-SIMD128-NEXT:    i32.xor $push11=, $11, $pop19
7476; NO-SIMD128-NEXT:    i32.and $push12=, $3, $pop11
7477; NO-SIMD128-NEXT:    i32.store16 4($0), $pop12
7478; NO-SIMD128-NEXT:    i32.const $push18=, -1
7479; NO-SIMD128-NEXT:    i32.xor $push13=, $10, $pop18
7480; NO-SIMD128-NEXT:    i32.and $push14=, $2, $pop13
7481; NO-SIMD128-NEXT:    i32.store16 2($0), $pop14
7482; NO-SIMD128-NEXT:    i32.const $push17=, -1
7483; NO-SIMD128-NEXT:    i32.xor $push15=, $9, $pop17
7484; NO-SIMD128-NEXT:    i32.and $push16=, $1, $pop15
7485; NO-SIMD128-NEXT:    i32.store16 0($0), $pop16
7486; NO-SIMD128-NEXT:    return
7487;
7488; NO-SIMD128-FAST-LABEL: andnot_v8i16:
7489; NO-SIMD128-FAST:         .functype andnot_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7490; NO-SIMD128-FAST-NEXT:  # %bb.0:
7491; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
7492; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $9, $pop0
7493; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop1
7494; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
7495; NO-SIMD128-FAST-NEXT:    i32.const $push23=, -1
7496; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $10, $pop23
7497; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $2, $pop3
7498; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop4
7499; NO-SIMD128-FAST-NEXT:    i32.const $push22=, -1
7500; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $11, $pop22
7501; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $3, $pop5
7502; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop6
7503; NO-SIMD128-FAST-NEXT:    i32.const $push21=, -1
7504; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $12, $pop21
7505; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $4, $pop7
7506; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop8
7507; NO-SIMD128-FAST-NEXT:    i32.const $push20=, -1
7508; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $13, $pop20
7509; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $5, $pop9
7510; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop10
7511; NO-SIMD128-FAST-NEXT:    i32.const $push19=, -1
7512; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $14, $pop19
7513; NO-SIMD128-FAST-NEXT:    i32.and $push12=, $6, $pop11
7514; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop12
7515; NO-SIMD128-FAST-NEXT:    i32.const $push18=, -1
7516; NO-SIMD128-FAST-NEXT:    i32.xor $push13=, $15, $pop18
7517; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $7, $pop13
7518; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop14
7519; NO-SIMD128-FAST-NEXT:    i32.const $push17=, -1
7520; NO-SIMD128-FAST-NEXT:    i32.xor $push15=, $16, $pop17
7521; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $8, $pop15
7522; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop16
7523; NO-SIMD128-FAST-NEXT:    return
7524 %inv_y = xor <8 x i16> %y,
7525   <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
7526 %a = and <8 x i16> %x, %inv_y
7527 ret <8 x i16> %a
7528}
7529
7530define <8 x i16> @bitselect_v8i16(<8 x i16> %c, <8 x i16> %v1, <8 x i16> %v2) {
7531; SIMD128-LABEL: bitselect_v8i16:
7532; SIMD128:         .functype bitselect_v8i16 (v128, v128, v128) -> (v128)
7533; SIMD128-NEXT:  # %bb.0:
7534; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
7535; SIMD128-NEXT:    return $pop0
7536;
7537; SIMD128-FAST-LABEL: bitselect_v8i16:
7538; SIMD128-FAST:         .functype bitselect_v8i16 (v128, v128, v128) -> (v128)
7539; SIMD128-FAST-NEXT:  # %bb.0:
7540; SIMD128-FAST-NEXT:    v128.and $push0=, $1, $0
7541; SIMD128-FAST-NEXT:    v128.not $push2=, $0
7542; SIMD128-FAST-NEXT:    v128.and $push3=, $2, $pop2
7543; SIMD128-FAST-NEXT:    v128.or $push1=, $pop0, $pop3
7544; SIMD128-FAST-NEXT:    return $pop1
7545;
7546; NO-SIMD128-LABEL: bitselect_v8i16:
7547; NO-SIMD128:         .functype bitselect_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7548; NO-SIMD128-NEXT:  # %bb.0:
7549; NO-SIMD128-NEXT:    i32.and $push0=, $16, $8
7550; NO-SIMD128-NEXT:    i32.const $push1=, -1
7551; NO-SIMD128-NEXT:    i32.xor $push2=, $8, $pop1
7552; NO-SIMD128-NEXT:    i32.and $push3=, $24, $pop2
7553; NO-SIMD128-NEXT:    i32.or $push4=, $pop0, $pop3
7554; NO-SIMD128-NEXT:    i32.store16 14($0), $pop4
7555; NO-SIMD128-NEXT:    i32.and $push5=, $15, $7
7556; NO-SIMD128-NEXT:    i32.const $push39=, -1
7557; NO-SIMD128-NEXT:    i32.xor $push6=, $7, $pop39
7558; NO-SIMD128-NEXT:    i32.and $push7=, $23, $pop6
7559; NO-SIMD128-NEXT:    i32.or $push8=, $pop5, $pop7
7560; NO-SIMD128-NEXT:    i32.store16 12($0), $pop8
7561; NO-SIMD128-NEXT:    i32.and $push9=, $14, $6
7562; NO-SIMD128-NEXT:    i32.const $push38=, -1
7563; NO-SIMD128-NEXT:    i32.xor $push10=, $6, $pop38
7564; NO-SIMD128-NEXT:    i32.and $push11=, $22, $pop10
7565; NO-SIMD128-NEXT:    i32.or $push12=, $pop9, $pop11
7566; NO-SIMD128-NEXT:    i32.store16 10($0), $pop12
7567; NO-SIMD128-NEXT:    i32.and $push13=, $13, $5
7568; NO-SIMD128-NEXT:    i32.const $push37=, -1
7569; NO-SIMD128-NEXT:    i32.xor $push14=, $5, $pop37
7570; NO-SIMD128-NEXT:    i32.and $push15=, $21, $pop14
7571; NO-SIMD128-NEXT:    i32.or $push16=, $pop13, $pop15
7572; NO-SIMD128-NEXT:    i32.store16 8($0), $pop16
7573; NO-SIMD128-NEXT:    i32.and $push17=, $12, $4
7574; NO-SIMD128-NEXT:    i32.const $push36=, -1
7575; NO-SIMD128-NEXT:    i32.xor $push18=, $4, $pop36
7576; NO-SIMD128-NEXT:    i32.and $push19=, $20, $pop18
7577; NO-SIMD128-NEXT:    i32.or $push20=, $pop17, $pop19
7578; NO-SIMD128-NEXT:    i32.store16 6($0), $pop20
7579; NO-SIMD128-NEXT:    i32.and $push21=, $11, $3
7580; NO-SIMD128-NEXT:    i32.const $push35=, -1
7581; NO-SIMD128-NEXT:    i32.xor $push22=, $3, $pop35
7582; NO-SIMD128-NEXT:    i32.and $push23=, $19, $pop22
7583; NO-SIMD128-NEXT:    i32.or $push24=, $pop21, $pop23
7584; NO-SIMD128-NEXT:    i32.store16 4($0), $pop24
7585; NO-SIMD128-NEXT:    i32.and $push25=, $10, $2
7586; NO-SIMD128-NEXT:    i32.const $push34=, -1
7587; NO-SIMD128-NEXT:    i32.xor $push26=, $2, $pop34
7588; NO-SIMD128-NEXT:    i32.and $push27=, $18, $pop26
7589; NO-SIMD128-NEXT:    i32.or $push28=, $pop25, $pop27
7590; NO-SIMD128-NEXT:    i32.store16 2($0), $pop28
7591; NO-SIMD128-NEXT:    i32.and $push29=, $9, $1
7592; NO-SIMD128-NEXT:    i32.const $push33=, -1
7593; NO-SIMD128-NEXT:    i32.xor $push30=, $1, $pop33
7594; NO-SIMD128-NEXT:    i32.and $push31=, $17, $pop30
7595; NO-SIMD128-NEXT:    i32.or $push32=, $pop29, $pop31
7596; NO-SIMD128-NEXT:    i32.store16 0($0), $pop32
7597; NO-SIMD128-NEXT:    return
7598;
7599; NO-SIMD128-FAST-LABEL: bitselect_v8i16:
7600; NO-SIMD128-FAST:         .functype bitselect_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7601; NO-SIMD128-FAST-NEXT:  # %bb.0:
7602; NO-SIMD128-FAST-NEXT:    i32.and $push0=, $9, $1
7603; NO-SIMD128-FAST-NEXT:    i32.const $push1=, -1
7604; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $1, $pop1
7605; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $17, $pop2
7606; NO-SIMD128-FAST-NEXT:    i32.or $push4=, $pop0, $pop3
7607; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop4
7608; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $10, $2
7609; NO-SIMD128-FAST-NEXT:    i32.const $push39=, -1
7610; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $2, $pop39
7611; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $18, $pop6
7612; NO-SIMD128-FAST-NEXT:    i32.or $push8=, $pop5, $pop7
7613; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop8
7614; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $11, $3
7615; NO-SIMD128-FAST-NEXT:    i32.const $push38=, -1
7616; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $3, $pop38
7617; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $19, $pop10
7618; NO-SIMD128-FAST-NEXT:    i32.or $push12=, $pop9, $pop11
7619; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop12
7620; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $12, $4
7621; NO-SIMD128-FAST-NEXT:    i32.const $push37=, -1
7622; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $4, $pop37
7623; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $20, $pop14
7624; NO-SIMD128-FAST-NEXT:    i32.or $push16=, $pop13, $pop15
7625; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop16
7626; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $13, $5
7627; NO-SIMD128-FAST-NEXT:    i32.const $push36=, -1
7628; NO-SIMD128-FAST-NEXT:    i32.xor $push18=, $5, $pop36
7629; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $21, $pop18
7630; NO-SIMD128-FAST-NEXT:    i32.or $push20=, $pop17, $pop19
7631; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop20
7632; NO-SIMD128-FAST-NEXT:    i32.and $push21=, $14, $6
7633; NO-SIMD128-FAST-NEXT:    i32.const $push35=, -1
7634; NO-SIMD128-FAST-NEXT:    i32.xor $push22=, $6, $pop35
7635; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $22, $pop22
7636; NO-SIMD128-FAST-NEXT:    i32.or $push24=, $pop21, $pop23
7637; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop24
7638; NO-SIMD128-FAST-NEXT:    i32.and $push25=, $15, $7
7639; NO-SIMD128-FAST-NEXT:    i32.const $push34=, -1
7640; NO-SIMD128-FAST-NEXT:    i32.xor $push26=, $7, $pop34
7641; NO-SIMD128-FAST-NEXT:    i32.and $push27=, $23, $pop26
7642; NO-SIMD128-FAST-NEXT:    i32.or $push28=, $pop25, $pop27
7643; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop28
7644; NO-SIMD128-FAST-NEXT:    i32.and $push29=, $16, $8
7645; NO-SIMD128-FAST-NEXT:    i32.const $push33=, -1
7646; NO-SIMD128-FAST-NEXT:    i32.xor $push30=, $8, $pop33
7647; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $24, $pop30
7648; NO-SIMD128-FAST-NEXT:    i32.or $push32=, $pop29, $pop31
7649; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop32
7650; NO-SIMD128-FAST-NEXT:    return
7651  %masked_v1 = and <8 x i16> %v1, %c
7652  %inv_mask = xor <8 x i16>
7653    <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>,
7654    %c
7655  %masked_v2 = and <8 x i16> %v2, %inv_mask
7656  %a = or <8 x i16> %masked_v1, %masked_v2
7657  ret <8 x i16> %a
7658}
7659
7660define <8 x i16> @bitselect_xor_v8i16(<8 x i16> %c, <8 x i16> %v1, <8 x i16> %v2) {
7661; SIMD128-LABEL: bitselect_xor_v8i16:
7662; SIMD128:         .functype bitselect_xor_v8i16 (v128, v128, v128) -> (v128)
7663; SIMD128-NEXT:  # %bb.0:
7664; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
7665; SIMD128-NEXT:    return $pop0
7666;
7667; SIMD128-FAST-LABEL: bitselect_xor_v8i16:
7668; SIMD128-FAST:         .functype bitselect_xor_v8i16 (v128, v128, v128) -> (v128)
7669; SIMD128-FAST-NEXT:  # %bb.0:
7670; SIMD128-FAST-NEXT:    v128.xor $push2=, $1, $2
7671; SIMD128-FAST-NEXT:    v128.and $push1=, $pop2, $0
7672; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop1, $2
7673; SIMD128-FAST-NEXT:    return $pop0
7674;
7675; NO-SIMD128-LABEL: bitselect_xor_v8i16:
7676; NO-SIMD128:         .functype bitselect_xor_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7677; NO-SIMD128-NEXT:  # %bb.0:
7678; NO-SIMD128-NEXT:    i32.xor $push0=, $16, $24
7679; NO-SIMD128-NEXT:    i32.and $push1=, $pop0, $8
7680; NO-SIMD128-NEXT:    i32.xor $push2=, $pop1, $24
7681; NO-SIMD128-NEXT:    i32.store16 14($0), $pop2
7682; NO-SIMD128-NEXT:    i32.xor $push3=, $15, $23
7683; NO-SIMD128-NEXT:    i32.and $push4=, $pop3, $7
7684; NO-SIMD128-NEXT:    i32.xor $push5=, $pop4, $23
7685; NO-SIMD128-NEXT:    i32.store16 12($0), $pop5
7686; NO-SIMD128-NEXT:    i32.xor $push6=, $14, $22
7687; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $6
7688; NO-SIMD128-NEXT:    i32.xor $push8=, $pop7, $22
7689; NO-SIMD128-NEXT:    i32.store16 10($0), $pop8
7690; NO-SIMD128-NEXT:    i32.xor $push9=, $13, $21
7691; NO-SIMD128-NEXT:    i32.and $push10=, $pop9, $5
7692; NO-SIMD128-NEXT:    i32.xor $push11=, $pop10, $21
7693; NO-SIMD128-NEXT:    i32.store16 8($0), $pop11
7694; NO-SIMD128-NEXT:    i32.xor $push12=, $12, $20
7695; NO-SIMD128-NEXT:    i32.and $push13=, $pop12, $4
7696; NO-SIMD128-NEXT:    i32.xor $push14=, $pop13, $20
7697; NO-SIMD128-NEXT:    i32.store16 6($0), $pop14
7698; NO-SIMD128-NEXT:    i32.xor $push15=, $11, $19
7699; NO-SIMD128-NEXT:    i32.and $push16=, $pop15, $3
7700; NO-SIMD128-NEXT:    i32.xor $push17=, $pop16, $19
7701; NO-SIMD128-NEXT:    i32.store16 4($0), $pop17
7702; NO-SIMD128-NEXT:    i32.xor $push18=, $10, $18
7703; NO-SIMD128-NEXT:    i32.and $push19=, $pop18, $2
7704; NO-SIMD128-NEXT:    i32.xor $push20=, $pop19, $18
7705; NO-SIMD128-NEXT:    i32.store16 2($0), $pop20
7706; NO-SIMD128-NEXT:    i32.xor $push21=, $9, $17
7707; NO-SIMD128-NEXT:    i32.and $push22=, $pop21, $1
7708; NO-SIMD128-NEXT:    i32.xor $push23=, $pop22, $17
7709; NO-SIMD128-NEXT:    i32.store16 0($0), $pop23
7710; NO-SIMD128-NEXT:    return
7711;
7712; NO-SIMD128-FAST-LABEL: bitselect_xor_v8i16:
7713; NO-SIMD128-FAST:         .functype bitselect_xor_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7714; NO-SIMD128-FAST-NEXT:  # %bb.0:
7715; NO-SIMD128-FAST-NEXT:    i32.xor $push0=, $9, $17
7716; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $pop0, $1
7717; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $pop1, $17
7718; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
7719; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $10, $18
7720; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $pop3, $2
7721; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $pop4, $18
7722; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop5
7723; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $11, $19
7724; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $3
7725; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $pop7, $19
7726; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop8
7727; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $12, $20
7728; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $pop9, $4
7729; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $pop10, $20
7730; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop11
7731; NO-SIMD128-FAST-NEXT:    i32.xor $push12=, $13, $21
7732; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $pop12, $5
7733; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $pop13, $21
7734; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop14
7735; NO-SIMD128-FAST-NEXT:    i32.xor $push15=, $14, $22
7736; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $pop15, $6
7737; NO-SIMD128-FAST-NEXT:    i32.xor $push17=, $pop16, $22
7738; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop17
7739; NO-SIMD128-FAST-NEXT:    i32.xor $push18=, $15, $23
7740; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $pop18, $7
7741; NO-SIMD128-FAST-NEXT:    i32.xor $push20=, $pop19, $23
7742; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop20
7743; NO-SIMD128-FAST-NEXT:    i32.xor $push21=, $16, $24
7744; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $pop21, $8
7745; NO-SIMD128-FAST-NEXT:    i32.xor $push23=, $pop22, $24
7746; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop23
7747; NO-SIMD128-FAST-NEXT:    return
7748 %xor1 = xor <8 x i16> %v1, %v2
7749 %and = and <8 x i16> %xor1, %c
7750 %a = xor <8 x i16> %and, %v2
7751 ret <8 x i16> %a
7752}
7753
7754define <8 x i16> @bitselect_xor_reversed_v8i16(<8 x i16> %c, <8 x i16> %v1, <8 x i16> %v2) {
7755; SIMD128-LABEL: bitselect_xor_reversed_v8i16:
7756; SIMD128:         .functype bitselect_xor_reversed_v8i16 (v128, v128, v128) -> (v128)
7757; SIMD128-NEXT:  # %bb.0:
7758; SIMD128-NEXT:    v128.bitselect $push0=, $2, $1, $0
7759; SIMD128-NEXT:    return $pop0
7760;
7761; SIMD128-FAST-LABEL: bitselect_xor_reversed_v8i16:
7762; SIMD128-FAST:         .functype bitselect_xor_reversed_v8i16 (v128, v128, v128) -> (v128)
7763; SIMD128-FAST-NEXT:  # %bb.0:
7764; SIMD128-FAST-NEXT:    v128.xor $push1=, $1, $2
7765; SIMD128-FAST-NEXT:    v128.not $push2=, $0
7766; SIMD128-FAST-NEXT:    v128.and $push3=, $pop1, $pop2
7767; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop3, $2
7768; SIMD128-FAST-NEXT:    return $pop0
7769;
7770; NO-SIMD128-LABEL: bitselect_xor_reversed_v8i16:
7771; NO-SIMD128:         .functype bitselect_xor_reversed_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7772; NO-SIMD128-NEXT:  # %bb.0:
7773; NO-SIMD128-NEXT:    i32.xor $push2=, $16, $24
7774; NO-SIMD128-NEXT:    i32.const $push0=, -1
7775; NO-SIMD128-NEXT:    i32.xor $push1=, $8, $pop0
7776; NO-SIMD128-NEXT:    i32.and $push3=, $pop2, $pop1
7777; NO-SIMD128-NEXT:    i32.xor $push4=, $pop3, $24
7778; NO-SIMD128-NEXT:    i32.store16 14($0), $pop4
7779; NO-SIMD128-NEXT:    i32.xor $push6=, $15, $23
7780; NO-SIMD128-NEXT:    i32.const $push39=, -1
7781; NO-SIMD128-NEXT:    i32.xor $push5=, $7, $pop39
7782; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $pop5
7783; NO-SIMD128-NEXT:    i32.xor $push8=, $pop7, $23
7784; NO-SIMD128-NEXT:    i32.store16 12($0), $pop8
7785; NO-SIMD128-NEXT:    i32.xor $push10=, $14, $22
7786; NO-SIMD128-NEXT:    i32.const $push38=, -1
7787; NO-SIMD128-NEXT:    i32.xor $push9=, $6, $pop38
7788; NO-SIMD128-NEXT:    i32.and $push11=, $pop10, $pop9
7789; NO-SIMD128-NEXT:    i32.xor $push12=, $pop11, $22
7790; NO-SIMD128-NEXT:    i32.store16 10($0), $pop12
7791; NO-SIMD128-NEXT:    i32.xor $push14=, $13, $21
7792; NO-SIMD128-NEXT:    i32.const $push37=, -1
7793; NO-SIMD128-NEXT:    i32.xor $push13=, $5, $pop37
7794; NO-SIMD128-NEXT:    i32.and $push15=, $pop14, $pop13
7795; NO-SIMD128-NEXT:    i32.xor $push16=, $pop15, $21
7796; NO-SIMD128-NEXT:    i32.store16 8($0), $pop16
7797; NO-SIMD128-NEXT:    i32.xor $push18=, $12, $20
7798; NO-SIMD128-NEXT:    i32.const $push36=, -1
7799; NO-SIMD128-NEXT:    i32.xor $push17=, $4, $pop36
7800; NO-SIMD128-NEXT:    i32.and $push19=, $pop18, $pop17
7801; NO-SIMD128-NEXT:    i32.xor $push20=, $pop19, $20
7802; NO-SIMD128-NEXT:    i32.store16 6($0), $pop20
7803; NO-SIMD128-NEXT:    i32.xor $push22=, $11, $19
7804; NO-SIMD128-NEXT:    i32.const $push35=, -1
7805; NO-SIMD128-NEXT:    i32.xor $push21=, $3, $pop35
7806; NO-SIMD128-NEXT:    i32.and $push23=, $pop22, $pop21
7807; NO-SIMD128-NEXT:    i32.xor $push24=, $pop23, $19
7808; NO-SIMD128-NEXT:    i32.store16 4($0), $pop24
7809; NO-SIMD128-NEXT:    i32.xor $push26=, $10, $18
7810; NO-SIMD128-NEXT:    i32.const $push34=, -1
7811; NO-SIMD128-NEXT:    i32.xor $push25=, $2, $pop34
7812; NO-SIMD128-NEXT:    i32.and $push27=, $pop26, $pop25
7813; NO-SIMD128-NEXT:    i32.xor $push28=, $pop27, $18
7814; NO-SIMD128-NEXT:    i32.store16 2($0), $pop28
7815; NO-SIMD128-NEXT:    i32.xor $push30=, $9, $17
7816; NO-SIMD128-NEXT:    i32.const $push33=, -1
7817; NO-SIMD128-NEXT:    i32.xor $push29=, $1, $pop33
7818; NO-SIMD128-NEXT:    i32.and $push31=, $pop30, $pop29
7819; NO-SIMD128-NEXT:    i32.xor $push32=, $pop31, $17
7820; NO-SIMD128-NEXT:    i32.store16 0($0), $pop32
7821; NO-SIMD128-NEXT:    return
7822;
7823; NO-SIMD128-FAST-LABEL: bitselect_xor_reversed_v8i16:
7824; NO-SIMD128-FAST:         .functype bitselect_xor_reversed_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7825; NO-SIMD128-FAST-NEXT:  # %bb.0:
7826; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $9, $17
7827; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
7828; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $1, $pop0
7829; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $pop2, $pop1
7830; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $pop3, $17
7831; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop4
7832; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $10, $18
7833; NO-SIMD128-FAST-NEXT:    i32.const $push39=, -1
7834; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $2, $pop39
7835; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop5
7836; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $pop7, $18
7837; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop8
7838; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $11, $19
7839; NO-SIMD128-FAST-NEXT:    i32.const $push38=, -1
7840; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $3, $pop38
7841; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $pop10, $pop9
7842; NO-SIMD128-FAST-NEXT:    i32.xor $push12=, $pop11, $19
7843; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop12
7844; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $12, $20
7845; NO-SIMD128-FAST-NEXT:    i32.const $push37=, -1
7846; NO-SIMD128-FAST-NEXT:    i32.xor $push13=, $4, $pop37
7847; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $pop14, $pop13
7848; NO-SIMD128-FAST-NEXT:    i32.xor $push16=, $pop15, $20
7849; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop16
7850; NO-SIMD128-FAST-NEXT:    i32.xor $push18=, $13, $21
7851; NO-SIMD128-FAST-NEXT:    i32.const $push36=, -1
7852; NO-SIMD128-FAST-NEXT:    i32.xor $push17=, $5, $pop36
7853; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $pop18, $pop17
7854; NO-SIMD128-FAST-NEXT:    i32.xor $push20=, $pop19, $21
7855; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop20
7856; NO-SIMD128-FAST-NEXT:    i32.xor $push22=, $14, $22
7857; NO-SIMD128-FAST-NEXT:    i32.const $push35=, -1
7858; NO-SIMD128-FAST-NEXT:    i32.xor $push21=, $6, $pop35
7859; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $pop22, $pop21
7860; NO-SIMD128-FAST-NEXT:    i32.xor $push24=, $pop23, $22
7861; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop24
7862; NO-SIMD128-FAST-NEXT:    i32.xor $push26=, $15, $23
7863; NO-SIMD128-FAST-NEXT:    i32.const $push34=, -1
7864; NO-SIMD128-FAST-NEXT:    i32.xor $push25=, $7, $pop34
7865; NO-SIMD128-FAST-NEXT:    i32.and $push27=, $pop26, $pop25
7866; NO-SIMD128-FAST-NEXT:    i32.xor $push28=, $pop27, $23
7867; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop28
7868; NO-SIMD128-FAST-NEXT:    i32.xor $push30=, $16, $24
7869; NO-SIMD128-FAST-NEXT:    i32.const $push33=, -1
7870; NO-SIMD128-FAST-NEXT:    i32.xor $push29=, $8, $pop33
7871; NO-SIMD128-FAST-NEXT:    i32.and $push31=, $pop30, $pop29
7872; NO-SIMD128-FAST-NEXT:    i32.xor $push32=, $pop31, $24
7873; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop32
7874; NO-SIMD128-FAST-NEXT:    return
7875 %xor1 = xor <8 x i16> %v1, %v2
7876 %notc = xor <8 x i16> %c, <i16 -1, i16 -1, i16 -1, i16 -1,
7877                            i16 -1, i16 -1, i16 -1, i16 -1>
7878 %and = and <8 x i16> %xor1, %notc
7879 %a = xor <8 x i16> %and, %v2
7880 ret <8 x i16> %a
7881}
7882
7883define <8 x i16> @extmul_low_s_v8i16(<16 x i8> %v1, <16 x i8> %v2) {
7884; SIMD128-LABEL: extmul_low_s_v8i16:
7885; SIMD128:         .functype extmul_low_s_v8i16 (v128, v128) -> (v128)
7886; SIMD128-NEXT:  # %bb.0:
7887; SIMD128-NEXT:    i16x8.extmul_low_i8x16_s $push0=, $0, $1
7888; SIMD128-NEXT:    return $pop0
7889;
7890; SIMD128-FAST-LABEL: extmul_low_s_v8i16:
7891; SIMD128-FAST:         .functype extmul_low_s_v8i16 (v128, v128) -> (v128)
7892; SIMD128-FAST-NEXT:  # %bb.0:
7893; SIMD128-FAST-NEXT:    i16x8.extend_low_i8x16_s $push0=, $0
7894; SIMD128-FAST-NEXT:    i16x8.extend_low_i8x16_s $push1=, $1
7895; SIMD128-FAST-NEXT:    i16x8.mul $push2=, $pop0, $pop1
7896; SIMD128-FAST-NEXT:    return $pop2
7897;
7898; NO-SIMD128-LABEL: extmul_low_s_v8i16:
7899; NO-SIMD128:         .functype extmul_low_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7900; NO-SIMD128-NEXT:  # %bb.0:
7901; NO-SIMD128-NEXT:    i32.extend8_s $push1=, $8
7902; NO-SIMD128-NEXT:    i32.extend8_s $push0=, $24
7903; NO-SIMD128-NEXT:    i32.mul $push2=, $pop1, $pop0
7904; NO-SIMD128-NEXT:    i32.store16 14($0), $pop2
7905; NO-SIMD128-NEXT:    i32.extend8_s $push4=, $7
7906; NO-SIMD128-NEXT:    i32.extend8_s $push3=, $23
7907; NO-SIMD128-NEXT:    i32.mul $push5=, $pop4, $pop3
7908; NO-SIMD128-NEXT:    i32.store16 12($0), $pop5
7909; NO-SIMD128-NEXT:    i32.extend8_s $push7=, $6
7910; NO-SIMD128-NEXT:    i32.extend8_s $push6=, $22
7911; NO-SIMD128-NEXT:    i32.mul $push8=, $pop7, $pop6
7912; NO-SIMD128-NEXT:    i32.store16 10($0), $pop8
7913; NO-SIMD128-NEXT:    i32.extend8_s $push10=, $5
7914; NO-SIMD128-NEXT:    i32.extend8_s $push9=, $21
7915; NO-SIMD128-NEXT:    i32.mul $push11=, $pop10, $pop9
7916; NO-SIMD128-NEXT:    i32.store16 8($0), $pop11
7917; NO-SIMD128-NEXT:    i32.extend8_s $push13=, $4
7918; NO-SIMD128-NEXT:    i32.extend8_s $push12=, $20
7919; NO-SIMD128-NEXT:    i32.mul $push14=, $pop13, $pop12
7920; NO-SIMD128-NEXT:    i32.store16 6($0), $pop14
7921; NO-SIMD128-NEXT:    i32.extend8_s $push16=, $3
7922; NO-SIMD128-NEXT:    i32.extend8_s $push15=, $19
7923; NO-SIMD128-NEXT:    i32.mul $push17=, $pop16, $pop15
7924; NO-SIMD128-NEXT:    i32.store16 4($0), $pop17
7925; NO-SIMD128-NEXT:    i32.extend8_s $push19=, $2
7926; NO-SIMD128-NEXT:    i32.extend8_s $push18=, $18
7927; NO-SIMD128-NEXT:    i32.mul $push20=, $pop19, $pop18
7928; NO-SIMD128-NEXT:    i32.store16 2($0), $pop20
7929; NO-SIMD128-NEXT:    i32.extend8_s $push22=, $1
7930; NO-SIMD128-NEXT:    i32.extend8_s $push21=, $17
7931; NO-SIMD128-NEXT:    i32.mul $push23=, $pop22, $pop21
7932; NO-SIMD128-NEXT:    i32.store16 0($0), $pop23
7933; NO-SIMD128-NEXT:    return
7934;
7935; NO-SIMD128-FAST-LABEL: extmul_low_s_v8i16:
7936; NO-SIMD128-FAST:         .functype extmul_low_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7937; NO-SIMD128-FAST-NEXT:  # %bb.0:
7938; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push1=, $1
7939; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push0=, $17
7940; NO-SIMD128-FAST-NEXT:    i32.mul $push2=, $pop1, $pop0
7941; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
7942; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push4=, $2
7943; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push3=, $18
7944; NO-SIMD128-FAST-NEXT:    i32.mul $push5=, $pop4, $pop3
7945; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop5
7946; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push7=, $3
7947; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push6=, $19
7948; NO-SIMD128-FAST-NEXT:    i32.mul $push8=, $pop7, $pop6
7949; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop8
7950; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push10=, $4
7951; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push9=, $20
7952; NO-SIMD128-FAST-NEXT:    i32.mul $push11=, $pop10, $pop9
7953; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop11
7954; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push13=, $5
7955; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push12=, $21
7956; NO-SIMD128-FAST-NEXT:    i32.mul $push14=, $pop13, $pop12
7957; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop14
7958; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push16=, $6
7959; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push15=, $22
7960; NO-SIMD128-FAST-NEXT:    i32.mul $push17=, $pop16, $pop15
7961; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop17
7962; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push19=, $7
7963; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push18=, $23
7964; NO-SIMD128-FAST-NEXT:    i32.mul $push20=, $pop19, $pop18
7965; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop20
7966; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push22=, $8
7967; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push21=, $24
7968; NO-SIMD128-FAST-NEXT:    i32.mul $push23=, $pop22, $pop21
7969; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop23
7970; NO-SIMD128-FAST-NEXT:    return
7971  %low1 = shufflevector <16 x i8> %v1, <16 x i8> undef,
7972           <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
7973  %low2 = shufflevector <16 x i8> %v2, <16 x i8> undef,
7974           <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
7975  %extended1 = sext <8 x i8> %low1 to <8 x i16>
7976  %extended2 = sext <8 x i8> %low2 to <8 x i16>
7977  %a = mul <8 x i16> %extended1, %extended2
7978  ret <8 x i16> %a
7979}
7980
7981define <8 x i16> @extmul_high_s_v8i16(<16 x i8> %v1, <16 x i8> %v2) {
7982; SIMD128-LABEL: extmul_high_s_v8i16:
7983; SIMD128:         .functype extmul_high_s_v8i16 (v128, v128) -> (v128)
7984; SIMD128-NEXT:  # %bb.0:
7985; SIMD128-NEXT:    i16x8.extmul_high_i8x16_s $push0=, $0, $1
7986; SIMD128-NEXT:    return $pop0
7987;
7988; SIMD128-FAST-LABEL: extmul_high_s_v8i16:
7989; SIMD128-FAST:         .functype extmul_high_s_v8i16 (v128, v128) -> (v128)
7990; SIMD128-FAST-NEXT:  # %bb.0:
7991; SIMD128-FAST-NEXT:    i16x8.extend_high_i8x16_s $push0=, $0
7992; SIMD128-FAST-NEXT:    i16x8.extend_high_i8x16_s $push1=, $1
7993; SIMD128-FAST-NEXT:    i16x8.mul $push2=, $pop0, $pop1
7994; SIMD128-FAST-NEXT:    return $pop2
7995;
7996; NO-SIMD128-LABEL: extmul_high_s_v8i16:
7997; NO-SIMD128:         .functype extmul_high_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
7998; NO-SIMD128-NEXT:  # %bb.0:
7999; NO-SIMD128-NEXT:    i32.extend8_s $push1=, $16
8000; NO-SIMD128-NEXT:    i32.extend8_s $push0=, $32
8001; NO-SIMD128-NEXT:    i32.mul $push2=, $pop1, $pop0
8002; NO-SIMD128-NEXT:    i32.store16 14($0), $pop2
8003; NO-SIMD128-NEXT:    i32.extend8_s $push4=, $15
8004; NO-SIMD128-NEXT:    i32.extend8_s $push3=, $31
8005; NO-SIMD128-NEXT:    i32.mul $push5=, $pop4, $pop3
8006; NO-SIMD128-NEXT:    i32.store16 12($0), $pop5
8007; NO-SIMD128-NEXT:    i32.extend8_s $push7=, $14
8008; NO-SIMD128-NEXT:    i32.extend8_s $push6=, $30
8009; NO-SIMD128-NEXT:    i32.mul $push8=, $pop7, $pop6
8010; NO-SIMD128-NEXT:    i32.store16 10($0), $pop8
8011; NO-SIMD128-NEXT:    i32.extend8_s $push10=, $13
8012; NO-SIMD128-NEXT:    i32.extend8_s $push9=, $29
8013; NO-SIMD128-NEXT:    i32.mul $push11=, $pop10, $pop9
8014; NO-SIMD128-NEXT:    i32.store16 8($0), $pop11
8015; NO-SIMD128-NEXT:    i32.extend8_s $push13=, $12
8016; NO-SIMD128-NEXT:    i32.extend8_s $push12=, $28
8017; NO-SIMD128-NEXT:    i32.mul $push14=, $pop13, $pop12
8018; NO-SIMD128-NEXT:    i32.store16 6($0), $pop14
8019; NO-SIMD128-NEXT:    i32.extend8_s $push16=, $11
8020; NO-SIMD128-NEXT:    i32.extend8_s $push15=, $27
8021; NO-SIMD128-NEXT:    i32.mul $push17=, $pop16, $pop15
8022; NO-SIMD128-NEXT:    i32.store16 4($0), $pop17
8023; NO-SIMD128-NEXT:    i32.extend8_s $push19=, $10
8024; NO-SIMD128-NEXT:    i32.extend8_s $push18=, $26
8025; NO-SIMD128-NEXT:    i32.mul $push20=, $pop19, $pop18
8026; NO-SIMD128-NEXT:    i32.store16 2($0), $pop20
8027; NO-SIMD128-NEXT:    i32.extend8_s $push22=, $9
8028; NO-SIMD128-NEXT:    i32.extend8_s $push21=, $25
8029; NO-SIMD128-NEXT:    i32.mul $push23=, $pop22, $pop21
8030; NO-SIMD128-NEXT:    i32.store16 0($0), $pop23
8031; NO-SIMD128-NEXT:    return
8032;
8033; NO-SIMD128-FAST-LABEL: extmul_high_s_v8i16:
8034; NO-SIMD128-FAST:         .functype extmul_high_s_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8035; NO-SIMD128-FAST-NEXT:  # %bb.0:
8036; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push1=, $9
8037; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push0=, $25
8038; NO-SIMD128-FAST-NEXT:    i32.mul $push2=, $pop1, $pop0
8039; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop2
8040; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push4=, $10
8041; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push3=, $26
8042; NO-SIMD128-FAST-NEXT:    i32.mul $push5=, $pop4, $pop3
8043; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop5
8044; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push7=, $11
8045; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push6=, $27
8046; NO-SIMD128-FAST-NEXT:    i32.mul $push8=, $pop7, $pop6
8047; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop8
8048; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push10=, $12
8049; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push9=, $28
8050; NO-SIMD128-FAST-NEXT:    i32.mul $push11=, $pop10, $pop9
8051; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop11
8052; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push13=, $13
8053; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push12=, $29
8054; NO-SIMD128-FAST-NEXT:    i32.mul $push14=, $pop13, $pop12
8055; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop14
8056; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push16=, $14
8057; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push15=, $30
8058; NO-SIMD128-FAST-NEXT:    i32.mul $push17=, $pop16, $pop15
8059; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop17
8060; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push19=, $15
8061; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push18=, $31
8062; NO-SIMD128-FAST-NEXT:    i32.mul $push20=, $pop19, $pop18
8063; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop20
8064; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push22=, $16
8065; NO-SIMD128-FAST-NEXT:    i32.extend8_s $push21=, $32
8066; NO-SIMD128-FAST-NEXT:    i32.mul $push23=, $pop22, $pop21
8067; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop23
8068; NO-SIMD128-FAST-NEXT:    return
8069  %high1 = shufflevector <16 x i8> %v1, <16 x i8> undef,
8070           <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
8071  %high2 = shufflevector <16 x i8> %v2, <16 x i8> undef,
8072           <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
8073  %extended1 = sext <8 x i8> %high1 to <8 x i16>
8074  %extended2 = sext <8 x i8> %high2 to <8 x i16>
8075  %a = mul <8 x i16> %extended1, %extended2
8076  ret <8 x i16> %a
8077}
8078
8079define <8 x i16> @extmul_low_u_v8i16(<16 x i8> %v1, <16 x i8> %v2) {
8080; SIMD128-LABEL: extmul_low_u_v8i16:
8081; SIMD128:         .functype extmul_low_u_v8i16 (v128, v128) -> (v128)
8082; SIMD128-NEXT:  # %bb.0:
8083; SIMD128-NEXT:    i16x8.extmul_low_i8x16_u $push0=, $0, $1
8084; SIMD128-NEXT:    return $pop0
8085;
8086; SIMD128-FAST-LABEL: extmul_low_u_v8i16:
8087; SIMD128-FAST:         .functype extmul_low_u_v8i16 (v128, v128) -> (v128)
8088; SIMD128-FAST-NEXT:  # %bb.0:
8089; SIMD128-FAST-NEXT:    i16x8.extend_low_i8x16_u $push0=, $0
8090; SIMD128-FAST-NEXT:    i16x8.extend_low_i8x16_u $push1=, $1
8091; SIMD128-FAST-NEXT:    i16x8.mul $push2=, $pop0, $pop1
8092; SIMD128-FAST-NEXT:    return $pop2
8093;
8094; NO-SIMD128-LABEL: extmul_low_u_v8i16:
8095; NO-SIMD128:         .functype extmul_low_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8096; NO-SIMD128-NEXT:  # %bb.0:
8097; NO-SIMD128-NEXT:    i32.const $push0=, 255
8098; NO-SIMD128-NEXT:    i32.and $push2=, $8, $pop0
8099; NO-SIMD128-NEXT:    i32.const $push39=, 255
8100; NO-SIMD128-NEXT:    i32.and $push1=, $24, $pop39
8101; NO-SIMD128-NEXT:    i32.mul $push3=, $pop2, $pop1
8102; NO-SIMD128-NEXT:    i32.store16 14($0), $pop3
8103; NO-SIMD128-NEXT:    i32.const $push38=, 255
8104; NO-SIMD128-NEXT:    i32.and $push5=, $7, $pop38
8105; NO-SIMD128-NEXT:    i32.const $push37=, 255
8106; NO-SIMD128-NEXT:    i32.and $push4=, $23, $pop37
8107; NO-SIMD128-NEXT:    i32.mul $push6=, $pop5, $pop4
8108; NO-SIMD128-NEXT:    i32.store16 12($0), $pop6
8109; NO-SIMD128-NEXT:    i32.const $push36=, 255
8110; NO-SIMD128-NEXT:    i32.and $push8=, $6, $pop36
8111; NO-SIMD128-NEXT:    i32.const $push35=, 255
8112; NO-SIMD128-NEXT:    i32.and $push7=, $22, $pop35
8113; NO-SIMD128-NEXT:    i32.mul $push9=, $pop8, $pop7
8114; NO-SIMD128-NEXT:    i32.store16 10($0), $pop9
8115; NO-SIMD128-NEXT:    i32.const $push34=, 255
8116; NO-SIMD128-NEXT:    i32.and $push11=, $5, $pop34
8117; NO-SIMD128-NEXT:    i32.const $push33=, 255
8118; NO-SIMD128-NEXT:    i32.and $push10=, $21, $pop33
8119; NO-SIMD128-NEXT:    i32.mul $push12=, $pop11, $pop10
8120; NO-SIMD128-NEXT:    i32.store16 8($0), $pop12
8121; NO-SIMD128-NEXT:    i32.const $push32=, 255
8122; NO-SIMD128-NEXT:    i32.and $push14=, $4, $pop32
8123; NO-SIMD128-NEXT:    i32.const $push31=, 255
8124; NO-SIMD128-NEXT:    i32.and $push13=, $20, $pop31
8125; NO-SIMD128-NEXT:    i32.mul $push15=, $pop14, $pop13
8126; NO-SIMD128-NEXT:    i32.store16 6($0), $pop15
8127; NO-SIMD128-NEXT:    i32.const $push30=, 255
8128; NO-SIMD128-NEXT:    i32.and $push17=, $3, $pop30
8129; NO-SIMD128-NEXT:    i32.const $push29=, 255
8130; NO-SIMD128-NEXT:    i32.and $push16=, $19, $pop29
8131; NO-SIMD128-NEXT:    i32.mul $push18=, $pop17, $pop16
8132; NO-SIMD128-NEXT:    i32.store16 4($0), $pop18
8133; NO-SIMD128-NEXT:    i32.const $push28=, 255
8134; NO-SIMD128-NEXT:    i32.and $push20=, $2, $pop28
8135; NO-SIMD128-NEXT:    i32.const $push27=, 255
8136; NO-SIMD128-NEXT:    i32.and $push19=, $18, $pop27
8137; NO-SIMD128-NEXT:    i32.mul $push21=, $pop20, $pop19
8138; NO-SIMD128-NEXT:    i32.store16 2($0), $pop21
8139; NO-SIMD128-NEXT:    i32.const $push26=, 255
8140; NO-SIMD128-NEXT:    i32.and $push23=, $1, $pop26
8141; NO-SIMD128-NEXT:    i32.const $push25=, 255
8142; NO-SIMD128-NEXT:    i32.and $push22=, $17, $pop25
8143; NO-SIMD128-NEXT:    i32.mul $push24=, $pop23, $pop22
8144; NO-SIMD128-NEXT:    i32.store16 0($0), $pop24
8145; NO-SIMD128-NEXT:    return
8146;
8147; NO-SIMD128-FAST-LABEL: extmul_low_u_v8i16:
8148; NO-SIMD128-FAST:         .functype extmul_low_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8149; NO-SIMD128-FAST-NEXT:  # %bb.0:
8150; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
8151; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
8152; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 255
8153; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $17, $pop39
8154; NO-SIMD128-FAST-NEXT:    i32.mul $push3=, $pop2, $pop1
8155; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop3
8156; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 255
8157; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $2, $pop38
8158; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 255
8159; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $18, $pop37
8160; NO-SIMD128-FAST-NEXT:    i32.mul $push6=, $pop5, $pop4
8161; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop6
8162; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 255
8163; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $3, $pop36
8164; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 255
8165; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $19, $pop35
8166; NO-SIMD128-FAST-NEXT:    i32.mul $push9=, $pop8, $pop7
8167; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop9
8168; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 255
8169; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $4, $pop34
8170; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 255
8171; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $20, $pop33
8172; NO-SIMD128-FAST-NEXT:    i32.mul $push12=, $pop11, $pop10
8173; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop12
8174; NO-SIMD128-FAST-NEXT:    i32.const $push32=, 255
8175; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $5, $pop32
8176; NO-SIMD128-FAST-NEXT:    i32.const $push31=, 255
8177; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $21, $pop31
8178; NO-SIMD128-FAST-NEXT:    i32.mul $push15=, $pop14, $pop13
8179; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop15
8180; NO-SIMD128-FAST-NEXT:    i32.const $push30=, 255
8181; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $6, $pop30
8182; NO-SIMD128-FAST-NEXT:    i32.const $push29=, 255
8183; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $22, $pop29
8184; NO-SIMD128-FAST-NEXT:    i32.mul $push18=, $pop17, $pop16
8185; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop18
8186; NO-SIMD128-FAST-NEXT:    i32.const $push28=, 255
8187; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $7, $pop28
8188; NO-SIMD128-FAST-NEXT:    i32.const $push27=, 255
8189; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $23, $pop27
8190; NO-SIMD128-FAST-NEXT:    i32.mul $push21=, $pop20, $pop19
8191; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop21
8192; NO-SIMD128-FAST-NEXT:    i32.const $push26=, 255
8193; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $8, $pop26
8194; NO-SIMD128-FAST-NEXT:    i32.const $push25=, 255
8195; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $24, $pop25
8196; NO-SIMD128-FAST-NEXT:    i32.mul $push24=, $pop23, $pop22
8197; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop24
8198; NO-SIMD128-FAST-NEXT:    return
8199  %low1 = shufflevector <16 x i8> %v1, <16 x i8> undef,
8200           <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
8201  %low2 = shufflevector <16 x i8> %v2, <16 x i8> undef,
8202           <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
8203  %extended1 = zext <8 x i8> %low1 to <8 x i16>
8204  %extended2 = zext <8 x i8> %low2 to <8 x i16>
8205  %a = mul <8 x i16> %extended1, %extended2
8206  ret <8 x i16> %a
8207}
8208
8209define <8 x i16> @extmul_high_u_v8i16(<16 x i8> %v1, <16 x i8> %v2) {
8210; SIMD128-LABEL: extmul_high_u_v8i16:
8211; SIMD128:         .functype extmul_high_u_v8i16 (v128, v128) -> (v128)
8212; SIMD128-NEXT:  # %bb.0:
8213; SIMD128-NEXT:    i16x8.extmul_high_i8x16_u $push0=, $0, $1
8214; SIMD128-NEXT:    return $pop0
8215;
8216; SIMD128-FAST-LABEL: extmul_high_u_v8i16:
8217; SIMD128-FAST:         .functype extmul_high_u_v8i16 (v128, v128) -> (v128)
8218; SIMD128-FAST-NEXT:  # %bb.0:
8219; SIMD128-FAST-NEXT:    i16x8.extend_high_i8x16_u $push0=, $0
8220; SIMD128-FAST-NEXT:    i16x8.extend_high_i8x16_u $push1=, $1
8221; SIMD128-FAST-NEXT:    i16x8.mul $push2=, $pop0, $pop1
8222; SIMD128-FAST-NEXT:    return $pop2
8223;
8224; NO-SIMD128-LABEL: extmul_high_u_v8i16:
8225; NO-SIMD128:         .functype extmul_high_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8226; NO-SIMD128-NEXT:  # %bb.0:
8227; NO-SIMD128-NEXT:    i32.const $push0=, 255
8228; NO-SIMD128-NEXT:    i32.and $push2=, $16, $pop0
8229; NO-SIMD128-NEXT:    i32.const $push39=, 255
8230; NO-SIMD128-NEXT:    i32.and $push1=, $32, $pop39
8231; NO-SIMD128-NEXT:    i32.mul $push3=, $pop2, $pop1
8232; NO-SIMD128-NEXT:    i32.store16 14($0), $pop3
8233; NO-SIMD128-NEXT:    i32.const $push38=, 255
8234; NO-SIMD128-NEXT:    i32.and $push5=, $15, $pop38
8235; NO-SIMD128-NEXT:    i32.const $push37=, 255
8236; NO-SIMD128-NEXT:    i32.and $push4=, $31, $pop37
8237; NO-SIMD128-NEXT:    i32.mul $push6=, $pop5, $pop4
8238; NO-SIMD128-NEXT:    i32.store16 12($0), $pop6
8239; NO-SIMD128-NEXT:    i32.const $push36=, 255
8240; NO-SIMD128-NEXT:    i32.and $push8=, $14, $pop36
8241; NO-SIMD128-NEXT:    i32.const $push35=, 255
8242; NO-SIMD128-NEXT:    i32.and $push7=, $30, $pop35
8243; NO-SIMD128-NEXT:    i32.mul $push9=, $pop8, $pop7
8244; NO-SIMD128-NEXT:    i32.store16 10($0), $pop9
8245; NO-SIMD128-NEXT:    i32.const $push34=, 255
8246; NO-SIMD128-NEXT:    i32.and $push11=, $13, $pop34
8247; NO-SIMD128-NEXT:    i32.const $push33=, 255
8248; NO-SIMD128-NEXT:    i32.and $push10=, $29, $pop33
8249; NO-SIMD128-NEXT:    i32.mul $push12=, $pop11, $pop10
8250; NO-SIMD128-NEXT:    i32.store16 8($0), $pop12
8251; NO-SIMD128-NEXT:    i32.const $push32=, 255
8252; NO-SIMD128-NEXT:    i32.and $push14=, $12, $pop32
8253; NO-SIMD128-NEXT:    i32.const $push31=, 255
8254; NO-SIMD128-NEXT:    i32.and $push13=, $28, $pop31
8255; NO-SIMD128-NEXT:    i32.mul $push15=, $pop14, $pop13
8256; NO-SIMD128-NEXT:    i32.store16 6($0), $pop15
8257; NO-SIMD128-NEXT:    i32.const $push30=, 255
8258; NO-SIMD128-NEXT:    i32.and $push17=, $11, $pop30
8259; NO-SIMD128-NEXT:    i32.const $push29=, 255
8260; NO-SIMD128-NEXT:    i32.and $push16=, $27, $pop29
8261; NO-SIMD128-NEXT:    i32.mul $push18=, $pop17, $pop16
8262; NO-SIMD128-NEXT:    i32.store16 4($0), $pop18
8263; NO-SIMD128-NEXT:    i32.const $push28=, 255
8264; NO-SIMD128-NEXT:    i32.and $push20=, $10, $pop28
8265; NO-SIMD128-NEXT:    i32.const $push27=, 255
8266; NO-SIMD128-NEXT:    i32.and $push19=, $26, $pop27
8267; NO-SIMD128-NEXT:    i32.mul $push21=, $pop20, $pop19
8268; NO-SIMD128-NEXT:    i32.store16 2($0), $pop21
8269; NO-SIMD128-NEXT:    i32.const $push26=, 255
8270; NO-SIMD128-NEXT:    i32.and $push23=, $9, $pop26
8271; NO-SIMD128-NEXT:    i32.const $push25=, 255
8272; NO-SIMD128-NEXT:    i32.and $push22=, $25, $pop25
8273; NO-SIMD128-NEXT:    i32.mul $push24=, $pop23, $pop22
8274; NO-SIMD128-NEXT:    i32.store16 0($0), $pop24
8275; NO-SIMD128-NEXT:    return
8276;
8277; NO-SIMD128-FAST-LABEL: extmul_high_u_v8i16:
8278; NO-SIMD128-FAST:         .functype extmul_high_u_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8279; NO-SIMD128-FAST-NEXT:  # %bb.0:
8280; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 255
8281; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $9, $pop0
8282; NO-SIMD128-FAST-NEXT:    i32.const $push39=, 255
8283; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $25, $pop39
8284; NO-SIMD128-FAST-NEXT:    i32.mul $push3=, $pop2, $pop1
8285; NO-SIMD128-FAST-NEXT:    i32.store16 0($0), $pop3
8286; NO-SIMD128-FAST-NEXT:    i32.const $push38=, 255
8287; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $10, $pop38
8288; NO-SIMD128-FAST-NEXT:    i32.const $push37=, 255
8289; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $26, $pop37
8290; NO-SIMD128-FAST-NEXT:    i32.mul $push6=, $pop5, $pop4
8291; NO-SIMD128-FAST-NEXT:    i32.store16 2($0), $pop6
8292; NO-SIMD128-FAST-NEXT:    i32.const $push36=, 255
8293; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $11, $pop36
8294; NO-SIMD128-FAST-NEXT:    i32.const $push35=, 255
8295; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $27, $pop35
8296; NO-SIMD128-FAST-NEXT:    i32.mul $push9=, $pop8, $pop7
8297; NO-SIMD128-FAST-NEXT:    i32.store16 4($0), $pop9
8298; NO-SIMD128-FAST-NEXT:    i32.const $push34=, 255
8299; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $12, $pop34
8300; NO-SIMD128-FAST-NEXT:    i32.const $push33=, 255
8301; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $28, $pop33
8302; NO-SIMD128-FAST-NEXT:    i32.mul $push12=, $pop11, $pop10
8303; NO-SIMD128-FAST-NEXT:    i32.store16 6($0), $pop12
8304; NO-SIMD128-FAST-NEXT:    i32.const $push32=, 255
8305; NO-SIMD128-FAST-NEXT:    i32.and $push14=, $13, $pop32
8306; NO-SIMD128-FAST-NEXT:    i32.const $push31=, 255
8307; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $29, $pop31
8308; NO-SIMD128-FAST-NEXT:    i32.mul $push15=, $pop14, $pop13
8309; NO-SIMD128-FAST-NEXT:    i32.store16 8($0), $pop15
8310; NO-SIMD128-FAST-NEXT:    i32.const $push30=, 255
8311; NO-SIMD128-FAST-NEXT:    i32.and $push17=, $14, $pop30
8312; NO-SIMD128-FAST-NEXT:    i32.const $push29=, 255
8313; NO-SIMD128-FAST-NEXT:    i32.and $push16=, $30, $pop29
8314; NO-SIMD128-FAST-NEXT:    i32.mul $push18=, $pop17, $pop16
8315; NO-SIMD128-FAST-NEXT:    i32.store16 10($0), $pop18
8316; NO-SIMD128-FAST-NEXT:    i32.const $push28=, 255
8317; NO-SIMD128-FAST-NEXT:    i32.and $push20=, $15, $pop28
8318; NO-SIMD128-FAST-NEXT:    i32.const $push27=, 255
8319; NO-SIMD128-FAST-NEXT:    i32.and $push19=, $31, $pop27
8320; NO-SIMD128-FAST-NEXT:    i32.mul $push21=, $pop20, $pop19
8321; NO-SIMD128-FAST-NEXT:    i32.store16 12($0), $pop21
8322; NO-SIMD128-FAST-NEXT:    i32.const $push26=, 255
8323; NO-SIMD128-FAST-NEXT:    i32.and $push23=, $16, $pop26
8324; NO-SIMD128-FAST-NEXT:    i32.const $push25=, 255
8325; NO-SIMD128-FAST-NEXT:    i32.and $push22=, $32, $pop25
8326; NO-SIMD128-FAST-NEXT:    i32.mul $push24=, $pop23, $pop22
8327; NO-SIMD128-FAST-NEXT:    i32.store16 14($0), $pop24
8328; NO-SIMD128-FAST-NEXT:    return
8329  %high1 = shufflevector <16 x i8> %v1, <16 x i8> undef,
8330           <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
8331  %high2 = shufflevector <16 x i8> %v2, <16 x i8> undef,
8332           <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
8333  %extended1 = zext <8 x i8> %high1 to <8 x i16>
8334  %extended2 = zext <8 x i8> %high2 to <8 x i16>
8335  %a = mul <8 x i16> %extended1, %extended2
8336  ret <8 x i16> %a
8337}
8338
8339; ==============================================================================
8340; 4 x i32
8341; ==============================================================================
8342define <4 x i32> @add_v4i32(<4 x i32> %x, <4 x i32> %y) {
8343; SIMD128-LABEL: add_v4i32:
8344; SIMD128:         .functype add_v4i32 (v128, v128) -> (v128)
8345; SIMD128-NEXT:  # %bb.0:
8346; SIMD128-NEXT:    i32x4.add $push0=, $0, $1
8347; SIMD128-NEXT:    return $pop0
8348;
8349; SIMD128-FAST-LABEL: add_v4i32:
8350; SIMD128-FAST:         .functype add_v4i32 (v128, v128) -> (v128)
8351; SIMD128-FAST-NEXT:  # %bb.0:
8352; SIMD128-FAST-NEXT:    i32x4.add $push0=, $0, $1
8353; SIMD128-FAST-NEXT:    return $pop0
8354;
8355; NO-SIMD128-LABEL: add_v4i32:
8356; NO-SIMD128:         .functype add_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8357; NO-SIMD128-NEXT:  # %bb.0:
8358; NO-SIMD128-NEXT:    i32.add $push0=, $4, $8
8359; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
8360; NO-SIMD128-NEXT:    i32.add $push1=, $3, $7
8361; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
8362; NO-SIMD128-NEXT:    i32.add $push2=, $2, $6
8363; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
8364; NO-SIMD128-NEXT:    i32.add $push3=, $1, $5
8365; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
8366; NO-SIMD128-NEXT:    return
8367;
8368; NO-SIMD128-FAST-LABEL: add_v4i32:
8369; NO-SIMD128-FAST:         .functype add_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8370; NO-SIMD128-FAST-NEXT:  # %bb.0:
8371; NO-SIMD128-FAST-NEXT:    i32.add $push0=, $1, $5
8372; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
8373; NO-SIMD128-FAST-NEXT:    i32.add $push1=, $2, $6
8374; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
8375; NO-SIMD128-FAST-NEXT:    i32.add $push2=, $3, $7
8376; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
8377; NO-SIMD128-FAST-NEXT:    i32.add $push3=, $4, $8
8378; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
8379; NO-SIMD128-FAST-NEXT:    return
8380  %a = add <4 x i32> %x, %y
8381  ret <4 x i32> %a
8382}
8383
8384define <4 x i32> @sub_v4i32(<4 x i32> %x, <4 x i32> %y) {
8385; SIMD128-LABEL: sub_v4i32:
8386; SIMD128:         .functype sub_v4i32 (v128, v128) -> (v128)
8387; SIMD128-NEXT:  # %bb.0:
8388; SIMD128-NEXT:    i32x4.sub $push0=, $0, $1
8389; SIMD128-NEXT:    return $pop0
8390;
8391; SIMD128-FAST-LABEL: sub_v4i32:
8392; SIMD128-FAST:         .functype sub_v4i32 (v128, v128) -> (v128)
8393; SIMD128-FAST-NEXT:  # %bb.0:
8394; SIMD128-FAST-NEXT:    i32x4.sub $push0=, $0, $1
8395; SIMD128-FAST-NEXT:    return $pop0
8396;
8397; NO-SIMD128-LABEL: sub_v4i32:
8398; NO-SIMD128:         .functype sub_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8399; NO-SIMD128-NEXT:  # %bb.0:
8400; NO-SIMD128-NEXT:    i32.sub $push0=, $4, $8
8401; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
8402; NO-SIMD128-NEXT:    i32.sub $push1=, $3, $7
8403; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
8404; NO-SIMD128-NEXT:    i32.sub $push2=, $2, $6
8405; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
8406; NO-SIMD128-NEXT:    i32.sub $push3=, $1, $5
8407; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
8408; NO-SIMD128-NEXT:    return
8409;
8410; NO-SIMD128-FAST-LABEL: sub_v4i32:
8411; NO-SIMD128-FAST:         .functype sub_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8412; NO-SIMD128-FAST-NEXT:  # %bb.0:
8413; NO-SIMD128-FAST-NEXT:    i32.sub $push0=, $1, $5
8414; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
8415; NO-SIMD128-FAST-NEXT:    i32.sub $push1=, $2, $6
8416; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
8417; NO-SIMD128-FAST-NEXT:    i32.sub $push2=, $3, $7
8418; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
8419; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $4, $8
8420; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
8421; NO-SIMD128-FAST-NEXT:    return
8422  %a = sub <4 x i32> %x, %y
8423  ret <4 x i32> %a
8424}
8425
8426define <4 x i32> @mul_v4i32(<4 x i32> %x, <4 x i32> %y) {
8427; SIMD128-LABEL: mul_v4i32:
8428; SIMD128:         .functype mul_v4i32 (v128, v128) -> (v128)
8429; SIMD128-NEXT:  # %bb.0:
8430; SIMD128-NEXT:    i32x4.mul $push0=, $0, $1
8431; SIMD128-NEXT:    return $pop0
8432;
8433; SIMD128-FAST-LABEL: mul_v4i32:
8434; SIMD128-FAST:         .functype mul_v4i32 (v128, v128) -> (v128)
8435; SIMD128-FAST-NEXT:  # %bb.0:
8436; SIMD128-FAST-NEXT:    i32x4.mul $push0=, $0, $1
8437; SIMD128-FAST-NEXT:    return $pop0
8438;
8439; NO-SIMD128-LABEL: mul_v4i32:
8440; NO-SIMD128:         .functype mul_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8441; NO-SIMD128-NEXT:  # %bb.0:
8442; NO-SIMD128-NEXT:    i32.mul $push0=, $4, $8
8443; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
8444; NO-SIMD128-NEXT:    i32.mul $push1=, $3, $7
8445; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
8446; NO-SIMD128-NEXT:    i32.mul $push2=, $2, $6
8447; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
8448; NO-SIMD128-NEXT:    i32.mul $push3=, $1, $5
8449; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
8450; NO-SIMD128-NEXT:    return
8451;
8452; NO-SIMD128-FAST-LABEL: mul_v4i32:
8453; NO-SIMD128-FAST:         .functype mul_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8454; NO-SIMD128-FAST-NEXT:  # %bb.0:
8455; NO-SIMD128-FAST-NEXT:    i32.mul $push0=, $1, $5
8456; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
8457; NO-SIMD128-FAST-NEXT:    i32.mul $push1=, $2, $6
8458; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
8459; NO-SIMD128-FAST-NEXT:    i32.mul $push2=, $3, $7
8460; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
8461; NO-SIMD128-FAST-NEXT:    i32.mul $push3=, $4, $8
8462; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
8463; NO-SIMD128-FAST-NEXT:    return
8464  %a = mul <4 x i32> %x, %y
8465  ret <4 x i32> %a
8466}
8467
8468define <4 x i32> @min_s_v4i32(<4 x i32> %x, <4 x i32> %y) {
8469; SIMD128-LABEL: min_s_v4i32:
8470; SIMD128:         .functype min_s_v4i32 (v128, v128) -> (v128)
8471; SIMD128-NEXT:  # %bb.0:
8472; SIMD128-NEXT:    i32x4.min_s $push0=, $0, $1
8473; SIMD128-NEXT:    return $pop0
8474;
8475; SIMD128-FAST-LABEL: min_s_v4i32:
8476; SIMD128-FAST:         .functype min_s_v4i32 (v128, v128) -> (v128)
8477; SIMD128-FAST-NEXT:  # %bb.0:
8478; SIMD128-FAST-NEXT:    i32x4.min_s $push0=, $0, $1
8479; SIMD128-FAST-NEXT:    return $pop0
8480;
8481; NO-SIMD128-LABEL: min_s_v4i32:
8482; NO-SIMD128:         .functype min_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8483; NO-SIMD128-NEXT:  # %bb.0:
8484; NO-SIMD128-NEXT:    i32.lt_s $push0=, $4, $8
8485; NO-SIMD128-NEXT:    i32.select $push1=, $4, $8, $pop0
8486; NO-SIMD128-NEXT:    i32.store 12($0), $pop1
8487; NO-SIMD128-NEXT:    i32.lt_s $push2=, $3, $7
8488; NO-SIMD128-NEXT:    i32.select $push3=, $3, $7, $pop2
8489; NO-SIMD128-NEXT:    i32.store 8($0), $pop3
8490; NO-SIMD128-NEXT:    i32.lt_s $push4=, $2, $6
8491; NO-SIMD128-NEXT:    i32.select $push5=, $2, $6, $pop4
8492; NO-SIMD128-NEXT:    i32.store 4($0), $pop5
8493; NO-SIMD128-NEXT:    i32.lt_s $push6=, $1, $5
8494; NO-SIMD128-NEXT:    i32.select $push7=, $1, $5, $pop6
8495; NO-SIMD128-NEXT:    i32.store 0($0), $pop7
8496; NO-SIMD128-NEXT:    return
8497;
8498; NO-SIMD128-FAST-LABEL: min_s_v4i32:
8499; NO-SIMD128-FAST:         .functype min_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8500; NO-SIMD128-FAST-NEXT:  # %bb.0:
8501; NO-SIMD128-FAST-NEXT:    i32.lt_s $push0=, $1, $5
8502; NO-SIMD128-FAST-NEXT:    i32.select $push1=, $1, $5, $pop0
8503; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop1
8504; NO-SIMD128-FAST-NEXT:    i32.lt_s $push2=, $2, $6
8505; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $2, $6, $pop2
8506; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop3
8507; NO-SIMD128-FAST-NEXT:    i32.lt_s $push4=, $3, $7
8508; NO-SIMD128-FAST-NEXT:    i32.select $push5=, $3, $7, $pop4
8509; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop5
8510; NO-SIMD128-FAST-NEXT:    i32.lt_s $push6=, $4, $8
8511; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $4, $8, $pop6
8512; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop7
8513; NO-SIMD128-FAST-NEXT:    return
8514  %c = icmp slt <4 x i32> %x, %y
8515  %a = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
8516  ret <4 x i32> %a
8517}
8518
8519define <4 x i32> @min_u_v4i32(<4 x i32> %x, <4 x i32> %y) {
8520; SIMD128-LABEL: min_u_v4i32:
8521; SIMD128:         .functype min_u_v4i32 (v128, v128) -> (v128)
8522; SIMD128-NEXT:  # %bb.0:
8523; SIMD128-NEXT:    i32x4.min_u $push0=, $0, $1
8524; SIMD128-NEXT:    return $pop0
8525;
8526; SIMD128-FAST-LABEL: min_u_v4i32:
8527; SIMD128-FAST:         .functype min_u_v4i32 (v128, v128) -> (v128)
8528; SIMD128-FAST-NEXT:  # %bb.0:
8529; SIMD128-FAST-NEXT:    i32x4.min_u $push0=, $0, $1
8530; SIMD128-FAST-NEXT:    return $pop0
8531;
8532; NO-SIMD128-LABEL: min_u_v4i32:
8533; NO-SIMD128:         .functype min_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8534; NO-SIMD128-NEXT:  # %bb.0:
8535; NO-SIMD128-NEXT:    i32.lt_u $push0=, $4, $8
8536; NO-SIMD128-NEXT:    i32.select $push1=, $4, $8, $pop0
8537; NO-SIMD128-NEXT:    i32.store 12($0), $pop1
8538; NO-SIMD128-NEXT:    i32.lt_u $push2=, $3, $7
8539; NO-SIMD128-NEXT:    i32.select $push3=, $3, $7, $pop2
8540; NO-SIMD128-NEXT:    i32.store 8($0), $pop3
8541; NO-SIMD128-NEXT:    i32.lt_u $push4=, $2, $6
8542; NO-SIMD128-NEXT:    i32.select $push5=, $2, $6, $pop4
8543; NO-SIMD128-NEXT:    i32.store 4($0), $pop5
8544; NO-SIMD128-NEXT:    i32.lt_u $push6=, $1, $5
8545; NO-SIMD128-NEXT:    i32.select $push7=, $1, $5, $pop6
8546; NO-SIMD128-NEXT:    i32.store 0($0), $pop7
8547; NO-SIMD128-NEXT:    return
8548;
8549; NO-SIMD128-FAST-LABEL: min_u_v4i32:
8550; NO-SIMD128-FAST:         .functype min_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8551; NO-SIMD128-FAST-NEXT:  # %bb.0:
8552; NO-SIMD128-FAST-NEXT:    i32.lt_u $push0=, $1, $5
8553; NO-SIMD128-FAST-NEXT:    i32.select $push1=, $1, $5, $pop0
8554; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop1
8555; NO-SIMD128-FAST-NEXT:    i32.lt_u $push2=, $2, $6
8556; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $2, $6, $pop2
8557; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop3
8558; NO-SIMD128-FAST-NEXT:    i32.lt_u $push4=, $3, $7
8559; NO-SIMD128-FAST-NEXT:    i32.select $push5=, $3, $7, $pop4
8560; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop5
8561; NO-SIMD128-FAST-NEXT:    i32.lt_u $push6=, $4, $8
8562; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $4, $8, $pop6
8563; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop7
8564; NO-SIMD128-FAST-NEXT:    return
8565  %c = icmp ult <4 x i32> %x, %y
8566  %a = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
8567  ret <4 x i32> %a
8568}
8569
8570define <4 x i32> @max_s_v4i32(<4 x i32> %x, <4 x i32> %y) {
8571; SIMD128-LABEL: max_s_v4i32:
8572; SIMD128:         .functype max_s_v4i32 (v128, v128) -> (v128)
8573; SIMD128-NEXT:  # %bb.0:
8574; SIMD128-NEXT:    i32x4.max_s $push0=, $0, $1
8575; SIMD128-NEXT:    return $pop0
8576;
8577; SIMD128-FAST-LABEL: max_s_v4i32:
8578; SIMD128-FAST:         .functype max_s_v4i32 (v128, v128) -> (v128)
8579; SIMD128-FAST-NEXT:  # %bb.0:
8580; SIMD128-FAST-NEXT:    i32x4.max_s $push0=, $0, $1
8581; SIMD128-FAST-NEXT:    return $pop0
8582;
8583; NO-SIMD128-LABEL: max_s_v4i32:
8584; NO-SIMD128:         .functype max_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8585; NO-SIMD128-NEXT:  # %bb.0:
8586; NO-SIMD128-NEXT:    i32.gt_s $push0=, $4, $8
8587; NO-SIMD128-NEXT:    i32.select $push1=, $4, $8, $pop0
8588; NO-SIMD128-NEXT:    i32.store 12($0), $pop1
8589; NO-SIMD128-NEXT:    i32.gt_s $push2=, $3, $7
8590; NO-SIMD128-NEXT:    i32.select $push3=, $3, $7, $pop2
8591; NO-SIMD128-NEXT:    i32.store 8($0), $pop3
8592; NO-SIMD128-NEXT:    i32.gt_s $push4=, $2, $6
8593; NO-SIMD128-NEXT:    i32.select $push5=, $2, $6, $pop4
8594; NO-SIMD128-NEXT:    i32.store 4($0), $pop5
8595; NO-SIMD128-NEXT:    i32.gt_s $push6=, $1, $5
8596; NO-SIMD128-NEXT:    i32.select $push7=, $1, $5, $pop6
8597; NO-SIMD128-NEXT:    i32.store 0($0), $pop7
8598; NO-SIMD128-NEXT:    return
8599;
8600; NO-SIMD128-FAST-LABEL: max_s_v4i32:
8601; NO-SIMD128-FAST:         .functype max_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8602; NO-SIMD128-FAST-NEXT:  # %bb.0:
8603; NO-SIMD128-FAST-NEXT:    i32.gt_s $push0=, $1, $5
8604; NO-SIMD128-FAST-NEXT:    i32.select $push1=, $1, $5, $pop0
8605; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop1
8606; NO-SIMD128-FAST-NEXT:    i32.gt_s $push2=, $2, $6
8607; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $2, $6, $pop2
8608; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop3
8609; NO-SIMD128-FAST-NEXT:    i32.gt_s $push4=, $3, $7
8610; NO-SIMD128-FAST-NEXT:    i32.select $push5=, $3, $7, $pop4
8611; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop5
8612; NO-SIMD128-FAST-NEXT:    i32.gt_s $push6=, $4, $8
8613; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $4, $8, $pop6
8614; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop7
8615; NO-SIMD128-FAST-NEXT:    return
8616  %c = icmp sgt <4 x i32> %x, %y
8617  %a = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
8618  ret <4 x i32> %a
8619}
8620
8621define <4 x i32> @max_u_v4i32(<4 x i32> %x, <4 x i32> %y) {
8622; SIMD128-LABEL: max_u_v4i32:
8623; SIMD128:         .functype max_u_v4i32 (v128, v128) -> (v128)
8624; SIMD128-NEXT:  # %bb.0:
8625; SIMD128-NEXT:    i32x4.max_u $push0=, $0, $1
8626; SIMD128-NEXT:    return $pop0
8627;
8628; SIMD128-FAST-LABEL: max_u_v4i32:
8629; SIMD128-FAST:         .functype max_u_v4i32 (v128, v128) -> (v128)
8630; SIMD128-FAST-NEXT:  # %bb.0:
8631; SIMD128-FAST-NEXT:    i32x4.max_u $push0=, $0, $1
8632; SIMD128-FAST-NEXT:    return $pop0
8633;
8634; NO-SIMD128-LABEL: max_u_v4i32:
8635; NO-SIMD128:         .functype max_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8636; NO-SIMD128-NEXT:  # %bb.0:
8637; NO-SIMD128-NEXT:    i32.gt_u $push0=, $4, $8
8638; NO-SIMD128-NEXT:    i32.select $push1=, $4, $8, $pop0
8639; NO-SIMD128-NEXT:    i32.store 12($0), $pop1
8640; NO-SIMD128-NEXT:    i32.gt_u $push2=, $3, $7
8641; NO-SIMD128-NEXT:    i32.select $push3=, $3, $7, $pop2
8642; NO-SIMD128-NEXT:    i32.store 8($0), $pop3
8643; NO-SIMD128-NEXT:    i32.gt_u $push4=, $2, $6
8644; NO-SIMD128-NEXT:    i32.select $push5=, $2, $6, $pop4
8645; NO-SIMD128-NEXT:    i32.store 4($0), $pop5
8646; NO-SIMD128-NEXT:    i32.gt_u $push6=, $1, $5
8647; NO-SIMD128-NEXT:    i32.select $push7=, $1, $5, $pop6
8648; NO-SIMD128-NEXT:    i32.store 0($0), $pop7
8649; NO-SIMD128-NEXT:    return
8650;
8651; NO-SIMD128-FAST-LABEL: max_u_v4i32:
8652; NO-SIMD128-FAST:         .functype max_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8653; NO-SIMD128-FAST-NEXT:  # %bb.0:
8654; NO-SIMD128-FAST-NEXT:    i32.gt_u $push0=, $1, $5
8655; NO-SIMD128-FAST-NEXT:    i32.select $push1=, $1, $5, $pop0
8656; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop1
8657; NO-SIMD128-FAST-NEXT:    i32.gt_u $push2=, $2, $6
8658; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $2, $6, $pop2
8659; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop3
8660; NO-SIMD128-FAST-NEXT:    i32.gt_u $push4=, $3, $7
8661; NO-SIMD128-FAST-NEXT:    i32.select $push5=, $3, $7, $pop4
8662; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop5
8663; NO-SIMD128-FAST-NEXT:    i32.gt_u $push6=, $4, $8
8664; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $4, $8, $pop6
8665; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop7
8666; NO-SIMD128-FAST-NEXT:    return
8667  %c = icmp ugt <4 x i32> %x, %y
8668  %a = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
8669  ret <4 x i32> %a
8670}
8671
8672define <4 x i32> @abs_v4i32(<4 x i32> %x) {
8673; SIMD128-LABEL: abs_v4i32:
8674; SIMD128:         .functype abs_v4i32 (v128) -> (v128)
8675; SIMD128-NEXT:  # %bb.0:
8676; SIMD128-NEXT:    i32x4.abs $push0=, $0
8677; SIMD128-NEXT:    return $pop0
8678;
8679; SIMD128-FAST-LABEL: abs_v4i32:
8680; SIMD128-FAST:         .functype abs_v4i32 (v128) -> (v128)
8681; SIMD128-FAST-NEXT:  # %bb.0:
8682; SIMD128-FAST-NEXT:    i32x4.abs $push0=, $0
8683; SIMD128-FAST-NEXT:    return $pop0
8684;
8685; NO-SIMD128-LABEL: abs_v4i32:
8686; NO-SIMD128:         .functype abs_v4i32 (i32, i32, i32, i32, i32) -> ()
8687; NO-SIMD128-NEXT:  # %bb.0:
8688; NO-SIMD128-NEXT:    i32.const $push0=, 31
8689; NO-SIMD128-NEXT:    i32.shr_s $push19=, $4, $pop0
8690; NO-SIMD128-NEXT:    local.tee $push18=, $5=, $pop19
8691; NO-SIMD128-NEXT:    i32.xor $push1=, $4, $pop18
8692; NO-SIMD128-NEXT:    i32.sub $push2=, $pop1, $5
8693; NO-SIMD128-NEXT:    i32.store 12($0), $pop2
8694; NO-SIMD128-NEXT:    i32.const $push17=, 31
8695; NO-SIMD128-NEXT:    i32.shr_s $push16=, $3, $pop17
8696; NO-SIMD128-NEXT:    local.tee $push15=, $4=, $pop16
8697; NO-SIMD128-NEXT:    i32.xor $push3=, $3, $pop15
8698; NO-SIMD128-NEXT:    i32.sub $push4=, $pop3, $4
8699; NO-SIMD128-NEXT:    i32.store 8($0), $pop4
8700; NO-SIMD128-NEXT:    i32.const $push14=, 31
8701; NO-SIMD128-NEXT:    i32.shr_s $push13=, $2, $pop14
8702; NO-SIMD128-NEXT:    local.tee $push12=, $4=, $pop13
8703; NO-SIMD128-NEXT:    i32.xor $push5=, $2, $pop12
8704; NO-SIMD128-NEXT:    i32.sub $push6=, $pop5, $4
8705; NO-SIMD128-NEXT:    i32.store 4($0), $pop6
8706; NO-SIMD128-NEXT:    i32.const $push11=, 31
8707; NO-SIMD128-NEXT:    i32.shr_s $push10=, $1, $pop11
8708; NO-SIMD128-NEXT:    local.tee $push9=, $4=, $pop10
8709; NO-SIMD128-NEXT:    i32.xor $push7=, $1, $pop9
8710; NO-SIMD128-NEXT:    i32.sub $push8=, $pop7, $4
8711; NO-SIMD128-NEXT:    i32.store 0($0), $pop8
8712; NO-SIMD128-NEXT:    return
8713;
8714; NO-SIMD128-FAST-LABEL: abs_v4i32:
8715; NO-SIMD128-FAST:         .functype abs_v4i32 (i32, i32, i32, i32, i32) -> ()
8716; NO-SIMD128-FAST-NEXT:  # %bb.0:
8717; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 31
8718; NO-SIMD128-FAST-NEXT:    i32.shr_s $push19=, $1, $pop0
8719; NO-SIMD128-FAST-NEXT:    local.tee $push18=, $5=, $pop19
8720; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $1, $pop18
8721; NO-SIMD128-FAST-NEXT:    i32.sub $push2=, $pop1, $5
8722; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop2
8723; NO-SIMD128-FAST-NEXT:    i32.const $push17=, 31
8724; NO-SIMD128-FAST-NEXT:    i32.shr_s $push16=, $2, $pop17
8725; NO-SIMD128-FAST-NEXT:    local.tee $push15=, $1=, $pop16
8726; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $2, $pop15
8727; NO-SIMD128-FAST-NEXT:    i32.sub $push4=, $pop3, $1
8728; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop4
8729; NO-SIMD128-FAST-NEXT:    i32.const $push14=, 31
8730; NO-SIMD128-FAST-NEXT:    i32.shr_s $push13=, $3, $pop14
8731; NO-SIMD128-FAST-NEXT:    local.tee $push12=, $2=, $pop13
8732; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $3, $pop12
8733; NO-SIMD128-FAST-NEXT:    i32.sub $push6=, $pop5, $2
8734; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop6
8735; NO-SIMD128-FAST-NEXT:    i32.const $push11=, 31
8736; NO-SIMD128-FAST-NEXT:    i32.shr_s $push10=, $4, $pop11
8737; NO-SIMD128-FAST-NEXT:    local.tee $push9=, $3=, $pop10
8738; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $4, $pop9
8739; NO-SIMD128-FAST-NEXT:    i32.sub $push8=, $pop7, $3
8740; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop8
8741; NO-SIMD128-FAST-NEXT:    return
8742  %a = sub <4 x i32> zeroinitializer, %x
8743  %b = icmp slt <4 x i32> %x, zeroinitializer
8744  %c = select <4 x i1> %b, <4 x i32> %a, <4 x i32> %x
8745  ret <4 x i32> %c
8746}
8747
8748define <4 x i32> @neg_v4i32(<4 x i32> %x) {
8749; SIMD128-LABEL: neg_v4i32:
8750; SIMD128:         .functype neg_v4i32 (v128) -> (v128)
8751; SIMD128-NEXT:  # %bb.0:
8752; SIMD128-NEXT:    i32x4.neg $push0=, $0
8753; SIMD128-NEXT:    return $pop0
8754;
8755; SIMD128-FAST-LABEL: neg_v4i32:
8756; SIMD128-FAST:         .functype neg_v4i32 (v128) -> (v128)
8757; SIMD128-FAST-NEXT:  # %bb.0:
8758; SIMD128-FAST-NEXT:    i32x4.neg $push0=, $0
8759; SIMD128-FAST-NEXT:    return $pop0
8760;
8761; NO-SIMD128-LABEL: neg_v4i32:
8762; NO-SIMD128:         .functype neg_v4i32 (i32, i32, i32, i32, i32) -> ()
8763; NO-SIMD128-NEXT:  # %bb.0:
8764; NO-SIMD128-NEXT:    i32.const $push0=, 0
8765; NO-SIMD128-NEXT:    i32.sub $push1=, $pop0, $4
8766; NO-SIMD128-NEXT:    i32.store 12($0), $pop1
8767; NO-SIMD128-NEXT:    i32.const $push7=, 0
8768; NO-SIMD128-NEXT:    i32.sub $push2=, $pop7, $3
8769; NO-SIMD128-NEXT:    i32.store 8($0), $pop2
8770; NO-SIMD128-NEXT:    i32.const $push6=, 0
8771; NO-SIMD128-NEXT:    i32.sub $push3=, $pop6, $2
8772; NO-SIMD128-NEXT:    i32.store 4($0), $pop3
8773; NO-SIMD128-NEXT:    i32.const $push5=, 0
8774; NO-SIMD128-NEXT:    i32.sub $push4=, $pop5, $1
8775; NO-SIMD128-NEXT:    i32.store 0($0), $pop4
8776; NO-SIMD128-NEXT:    return
8777;
8778; NO-SIMD128-FAST-LABEL: neg_v4i32:
8779; NO-SIMD128-FAST:         .functype neg_v4i32 (i32, i32, i32, i32, i32) -> ()
8780; NO-SIMD128-FAST-NEXT:  # %bb.0:
8781; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 0
8782; NO-SIMD128-FAST-NEXT:    i32.sub $push1=, $pop0, $1
8783; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop1
8784; NO-SIMD128-FAST-NEXT:    i32.const $push7=, 0
8785; NO-SIMD128-FAST-NEXT:    i32.sub $push2=, $pop7, $2
8786; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop2
8787; NO-SIMD128-FAST-NEXT:    i32.const $push6=, 0
8788; NO-SIMD128-FAST-NEXT:    i32.sub $push3=, $pop6, $3
8789; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop3
8790; NO-SIMD128-FAST-NEXT:    i32.const $push5=, 0
8791; NO-SIMD128-FAST-NEXT:    i32.sub $push4=, $pop5, $4
8792; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop4
8793; NO-SIMD128-FAST-NEXT:    return
8794  %a = sub <4 x i32> <i32 0, i32 0, i32 0, i32 0>, %x
8795  ret <4 x i32> %a
8796}
8797
8798define <4 x i32> @shl_v4i32(<4 x i32> %v, i32 %x) {
8799; SIMD128-LABEL: shl_v4i32:
8800; SIMD128:         .functype shl_v4i32 (v128, i32) -> (v128)
8801; SIMD128-NEXT:  # %bb.0:
8802; SIMD128-NEXT:    i32x4.shl $push0=, $0, $1
8803; SIMD128-NEXT:    return $pop0
8804;
8805; SIMD128-FAST-LABEL: shl_v4i32:
8806; SIMD128-FAST:         .functype shl_v4i32 (v128, i32) -> (v128)
8807; SIMD128-FAST-NEXT:  # %bb.0:
8808; SIMD128-FAST-NEXT:    i32x4.shl $push0=, $0, $1
8809; SIMD128-FAST-NEXT:    return $pop0
8810;
8811; NO-SIMD128-LABEL: shl_v4i32:
8812; NO-SIMD128:         .functype shl_v4i32 (i32, i32, i32, i32, i32, i32) -> ()
8813; NO-SIMD128-NEXT:  # %bb.0:
8814; NO-SIMD128-NEXT:    i32.shl $push0=, $4, $5
8815; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
8816; NO-SIMD128-NEXT:    i32.shl $push1=, $3, $5
8817; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
8818; NO-SIMD128-NEXT:    i32.shl $push2=, $2, $5
8819; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
8820; NO-SIMD128-NEXT:    i32.shl $push3=, $1, $5
8821; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
8822; NO-SIMD128-NEXT:    return
8823;
8824; NO-SIMD128-FAST-LABEL: shl_v4i32:
8825; NO-SIMD128-FAST:         .functype shl_v4i32 (i32, i32, i32, i32, i32, i32) -> ()
8826; NO-SIMD128-FAST-NEXT:  # %bb.0:
8827; NO-SIMD128-FAST-NEXT:    i32.shl $push0=, $1, $5
8828; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
8829; NO-SIMD128-FAST-NEXT:    i32.shl $push1=, $2, $5
8830; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
8831; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $3, $5
8832; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
8833; NO-SIMD128-FAST-NEXT:    i32.shl $push3=, $4, $5
8834; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
8835; NO-SIMD128-FAST-NEXT:    return
8836  %t = insertelement <4 x i32> undef, i32 %x, i32 0
8837  %s = shufflevector <4 x i32> %t, <4 x i32> undef,
8838    <4 x i32> <i32 0, i32 0, i32 0, i32 0>
8839  %a = shl <4 x i32> %v, %s
8840  ret <4 x i32> %a
8841}
8842
8843define <4 x i32> @shl_const_v4i32(<4 x i32> %v) {
8844; SIMD128-LABEL: shl_const_v4i32:
8845; SIMD128:         .functype shl_const_v4i32 (v128) -> (v128)
8846; SIMD128-NEXT:  # %bb.0:
8847; SIMD128-NEXT:    i32.const $push0=, 5
8848; SIMD128-NEXT:    i32x4.shl $push1=, $0, $pop0
8849; SIMD128-NEXT:    return $pop1
8850;
8851; SIMD128-FAST-LABEL: shl_const_v4i32:
8852; SIMD128-FAST:         .functype shl_const_v4i32 (v128) -> (v128)
8853; SIMD128-FAST-NEXT:  # %bb.0:
8854; SIMD128-FAST-NEXT:    i32.const $push1=, 5
8855; SIMD128-FAST-NEXT:    i32x4.shl $push0=, $0, $pop1
8856; SIMD128-FAST-NEXT:    return $pop0
8857;
8858; NO-SIMD128-LABEL: shl_const_v4i32:
8859; NO-SIMD128:         .functype shl_const_v4i32 (i32, i32, i32, i32, i32) -> ()
8860; NO-SIMD128-NEXT:  # %bb.0:
8861; NO-SIMD128-NEXT:    i32.const $push0=, 5
8862; NO-SIMD128-NEXT:    i32.shl $push1=, $4, $pop0
8863; NO-SIMD128-NEXT:    i32.store 12($0), $pop1
8864; NO-SIMD128-NEXT:    i32.const $push7=, 5
8865; NO-SIMD128-NEXT:    i32.shl $push2=, $3, $pop7
8866; NO-SIMD128-NEXT:    i32.store 8($0), $pop2
8867; NO-SIMD128-NEXT:    i32.const $push6=, 5
8868; NO-SIMD128-NEXT:    i32.shl $push3=, $2, $pop6
8869; NO-SIMD128-NEXT:    i32.store 4($0), $pop3
8870; NO-SIMD128-NEXT:    i32.const $push5=, 5
8871; NO-SIMD128-NEXT:    i32.shl $push4=, $1, $pop5
8872; NO-SIMD128-NEXT:    i32.store 0($0), $pop4
8873; NO-SIMD128-NEXT:    return
8874;
8875; NO-SIMD128-FAST-LABEL: shl_const_v4i32:
8876; NO-SIMD128-FAST:         .functype shl_const_v4i32 (i32, i32, i32, i32, i32) -> ()
8877; NO-SIMD128-FAST-NEXT:  # %bb.0:
8878; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 5
8879; NO-SIMD128-FAST-NEXT:    i32.shl $push1=, $1, $pop0
8880; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop1
8881; NO-SIMD128-FAST-NEXT:    i32.const $push7=, 5
8882; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $2, $pop7
8883; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop2
8884; NO-SIMD128-FAST-NEXT:    i32.const $push6=, 5
8885; NO-SIMD128-FAST-NEXT:    i32.shl $push3=, $3, $pop6
8886; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop3
8887; NO-SIMD128-FAST-NEXT:    i32.const $push5=, 5
8888; NO-SIMD128-FAST-NEXT:    i32.shl $push4=, $4, $pop5
8889; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop4
8890; NO-SIMD128-FAST-NEXT:    return
8891  %a = shl <4 x i32> %v, <i32 5, i32 5, i32 5, i32 5>
8892  ret <4 x i32> %a
8893}
8894
8895define <4 x i32> @shl_vec_v4i32(<4 x i32> %v, <4 x i32> %x) {
8896; SIMD128-LABEL: shl_vec_v4i32:
8897; SIMD128:         .functype shl_vec_v4i32 (v128, v128) -> (v128)
8898; SIMD128-NEXT:  # %bb.0:
8899; SIMD128-NEXT:    i32x4.extract_lane $push4=, $0, 0
8900; SIMD128-NEXT:    i32x4.extract_lane $push3=, $1, 0
8901; SIMD128-NEXT:    i32.shl $push5=, $pop4, $pop3
8902; SIMD128-NEXT:    i32x4.splat $push6=, $pop5
8903; SIMD128-NEXT:    i32x4.extract_lane $push1=, $0, 1
8904; SIMD128-NEXT:    i32x4.extract_lane $push0=, $1, 1
8905; SIMD128-NEXT:    i32.shl $push2=, $pop1, $pop0
8906; SIMD128-NEXT:    i32x4.replace_lane $push7=, $pop6, 1, $pop2
8907; SIMD128-NEXT:    i32x4.extract_lane $push9=, $0, 2
8908; SIMD128-NEXT:    i32x4.extract_lane $push8=, $1, 2
8909; SIMD128-NEXT:    i32.shl $push10=, $pop9, $pop8
8910; SIMD128-NEXT:    i32x4.replace_lane $push11=, $pop7, 2, $pop10
8911; SIMD128-NEXT:    i32x4.extract_lane $push13=, $0, 3
8912; SIMD128-NEXT:    i32x4.extract_lane $push12=, $1, 3
8913; SIMD128-NEXT:    i32.shl $push14=, $pop13, $pop12
8914; SIMD128-NEXT:    i32x4.replace_lane $push15=, $pop11, 3, $pop14
8915; SIMD128-NEXT:    return $pop15
8916;
8917; SIMD128-FAST-LABEL: shl_vec_v4i32:
8918; SIMD128-FAST:         .functype shl_vec_v4i32 (v128, v128) -> (v128)
8919; SIMD128-FAST-NEXT:  # %bb.0:
8920; SIMD128-FAST-NEXT:    i32x4.extract_lane $push5=, $0, 0
8921; SIMD128-FAST-NEXT:    i32x4.extract_lane $push4=, $1, 0
8922; SIMD128-FAST-NEXT:    i32.shl $push6=, $pop5, $pop4
8923; SIMD128-FAST-NEXT:    i32x4.splat $push7=, $pop6
8924; SIMD128-FAST-NEXT:    i32x4.extract_lane $push2=, $0, 1
8925; SIMD128-FAST-NEXT:    i32x4.extract_lane $push1=, $1, 1
8926; SIMD128-FAST-NEXT:    i32.shl $push3=, $pop2, $pop1
8927; SIMD128-FAST-NEXT:    i32x4.replace_lane $push8=, $pop7, 1, $pop3
8928; SIMD128-FAST-NEXT:    i32x4.extract_lane $push10=, $0, 2
8929; SIMD128-FAST-NEXT:    i32x4.extract_lane $push9=, $1, 2
8930; SIMD128-FAST-NEXT:    i32.shl $push11=, $pop10, $pop9
8931; SIMD128-FAST-NEXT:    i32x4.replace_lane $push12=, $pop8, 2, $pop11
8932; SIMD128-FAST-NEXT:    i32x4.extract_lane $push14=, $0, 3
8933; SIMD128-FAST-NEXT:    i32x4.extract_lane $push13=, $1, 3
8934; SIMD128-FAST-NEXT:    i32.shl $push15=, $pop14, $pop13
8935; SIMD128-FAST-NEXT:    i32x4.replace_lane $push0=, $pop12, 3, $pop15
8936; SIMD128-FAST-NEXT:    return $pop0
8937;
8938; NO-SIMD128-LABEL: shl_vec_v4i32:
8939; NO-SIMD128:         .functype shl_vec_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8940; NO-SIMD128-NEXT:  # %bb.0:
8941; NO-SIMD128-NEXT:    i32.shl $push0=, $4, $8
8942; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
8943; NO-SIMD128-NEXT:    i32.shl $push1=, $3, $7
8944; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
8945; NO-SIMD128-NEXT:    i32.shl $push2=, $2, $6
8946; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
8947; NO-SIMD128-NEXT:    i32.shl $push3=, $1, $5
8948; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
8949; NO-SIMD128-NEXT:    return
8950;
8951; NO-SIMD128-FAST-LABEL: shl_vec_v4i32:
8952; NO-SIMD128-FAST:         .functype shl_vec_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
8953; NO-SIMD128-FAST-NEXT:  # %bb.0:
8954; NO-SIMD128-FAST-NEXT:    i32.shl $push0=, $1, $5
8955; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
8956; NO-SIMD128-FAST-NEXT:    i32.shl $push1=, $2, $6
8957; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
8958; NO-SIMD128-FAST-NEXT:    i32.shl $push2=, $3, $7
8959; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
8960; NO-SIMD128-FAST-NEXT:    i32.shl $push3=, $4, $8
8961; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
8962; NO-SIMD128-FAST-NEXT:    return
8963  %a = shl <4 x i32> %v, %x
8964  ret <4 x i32> %a
8965}
8966
8967define <4 x i32> @shr_s_v4i32(<4 x i32> %v, i32 %x) {
8968; SIMD128-LABEL: shr_s_v4i32:
8969; SIMD128:         .functype shr_s_v4i32 (v128, i32) -> (v128)
8970; SIMD128-NEXT:  # %bb.0:
8971; SIMD128-NEXT:    i32x4.shr_s $push0=, $0, $1
8972; SIMD128-NEXT:    return $pop0
8973;
8974; SIMD128-FAST-LABEL: shr_s_v4i32:
8975; SIMD128-FAST:         .functype shr_s_v4i32 (v128, i32) -> (v128)
8976; SIMD128-FAST-NEXT:  # %bb.0:
8977; SIMD128-FAST-NEXT:    i32x4.shr_s $push0=, $0, $1
8978; SIMD128-FAST-NEXT:    return $pop0
8979;
8980; NO-SIMD128-LABEL: shr_s_v4i32:
8981; NO-SIMD128:         .functype shr_s_v4i32 (i32, i32, i32, i32, i32, i32) -> ()
8982; NO-SIMD128-NEXT:  # %bb.0:
8983; NO-SIMD128-NEXT:    i32.shr_s $push0=, $4, $5
8984; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
8985; NO-SIMD128-NEXT:    i32.shr_s $push1=, $3, $5
8986; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
8987; NO-SIMD128-NEXT:    i32.shr_s $push2=, $2, $5
8988; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
8989; NO-SIMD128-NEXT:    i32.shr_s $push3=, $1, $5
8990; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
8991; NO-SIMD128-NEXT:    return
8992;
8993; NO-SIMD128-FAST-LABEL: shr_s_v4i32:
8994; NO-SIMD128-FAST:         .functype shr_s_v4i32 (i32, i32, i32, i32, i32, i32) -> ()
8995; NO-SIMD128-FAST-NEXT:  # %bb.0:
8996; NO-SIMD128-FAST-NEXT:    i32.shr_s $push0=, $1, $5
8997; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
8998; NO-SIMD128-FAST-NEXT:    i32.shr_s $push1=, $2, $5
8999; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
9000; NO-SIMD128-FAST-NEXT:    i32.shr_s $push2=, $3, $5
9001; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
9002; NO-SIMD128-FAST-NEXT:    i32.shr_s $push3=, $4, $5
9003; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
9004; NO-SIMD128-FAST-NEXT:    return
9005  %t = insertelement <4 x i32> undef, i32 %x, i32 0
9006  %s = shufflevector <4 x i32> %t, <4 x i32> undef,
9007    <4 x i32> <i32 0, i32 0, i32 0, i32 0>
9008  %a = ashr <4 x i32> %v, %s
9009  ret <4 x i32> %a
9010}
9011
9012define <4 x i32> @shr_s_vec_v4i32(<4 x i32> %v, <4 x i32> %x) {
9013; SIMD128-LABEL: shr_s_vec_v4i32:
9014; SIMD128:         .functype shr_s_vec_v4i32 (v128, v128) -> (v128)
9015; SIMD128-NEXT:  # %bb.0:
9016; SIMD128-NEXT:    i32x4.extract_lane $push4=, $0, 0
9017; SIMD128-NEXT:    i32x4.extract_lane $push3=, $1, 0
9018; SIMD128-NEXT:    i32.shr_s $push5=, $pop4, $pop3
9019; SIMD128-NEXT:    i32x4.splat $push6=, $pop5
9020; SIMD128-NEXT:    i32x4.extract_lane $push1=, $0, 1
9021; SIMD128-NEXT:    i32x4.extract_lane $push0=, $1, 1
9022; SIMD128-NEXT:    i32.shr_s $push2=, $pop1, $pop0
9023; SIMD128-NEXT:    i32x4.replace_lane $push7=, $pop6, 1, $pop2
9024; SIMD128-NEXT:    i32x4.extract_lane $push9=, $0, 2
9025; SIMD128-NEXT:    i32x4.extract_lane $push8=, $1, 2
9026; SIMD128-NEXT:    i32.shr_s $push10=, $pop9, $pop8
9027; SIMD128-NEXT:    i32x4.replace_lane $push11=, $pop7, 2, $pop10
9028; SIMD128-NEXT:    i32x4.extract_lane $push13=, $0, 3
9029; SIMD128-NEXT:    i32x4.extract_lane $push12=, $1, 3
9030; SIMD128-NEXT:    i32.shr_s $push14=, $pop13, $pop12
9031; SIMD128-NEXT:    i32x4.replace_lane $push15=, $pop11, 3, $pop14
9032; SIMD128-NEXT:    return $pop15
9033;
9034; SIMD128-FAST-LABEL: shr_s_vec_v4i32:
9035; SIMD128-FAST:         .functype shr_s_vec_v4i32 (v128, v128) -> (v128)
9036; SIMD128-FAST-NEXT:  # %bb.0:
9037; SIMD128-FAST-NEXT:    i32x4.extract_lane $push5=, $0, 0
9038; SIMD128-FAST-NEXT:    i32x4.extract_lane $push4=, $1, 0
9039; SIMD128-FAST-NEXT:    i32.shr_s $push6=, $pop5, $pop4
9040; SIMD128-FAST-NEXT:    i32x4.splat $push7=, $pop6
9041; SIMD128-FAST-NEXT:    i32x4.extract_lane $push2=, $0, 1
9042; SIMD128-FAST-NEXT:    i32x4.extract_lane $push1=, $1, 1
9043; SIMD128-FAST-NEXT:    i32.shr_s $push3=, $pop2, $pop1
9044; SIMD128-FAST-NEXT:    i32x4.replace_lane $push8=, $pop7, 1, $pop3
9045; SIMD128-FAST-NEXT:    i32x4.extract_lane $push10=, $0, 2
9046; SIMD128-FAST-NEXT:    i32x4.extract_lane $push9=, $1, 2
9047; SIMD128-FAST-NEXT:    i32.shr_s $push11=, $pop10, $pop9
9048; SIMD128-FAST-NEXT:    i32x4.replace_lane $push12=, $pop8, 2, $pop11
9049; SIMD128-FAST-NEXT:    i32x4.extract_lane $push14=, $0, 3
9050; SIMD128-FAST-NEXT:    i32x4.extract_lane $push13=, $1, 3
9051; SIMD128-FAST-NEXT:    i32.shr_s $push15=, $pop14, $pop13
9052; SIMD128-FAST-NEXT:    i32x4.replace_lane $push0=, $pop12, 3, $pop15
9053; SIMD128-FAST-NEXT:    return $pop0
9054;
9055; NO-SIMD128-LABEL: shr_s_vec_v4i32:
9056; NO-SIMD128:         .functype shr_s_vec_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9057; NO-SIMD128-NEXT:  # %bb.0:
9058; NO-SIMD128-NEXT:    i32.shr_s $push0=, $4, $8
9059; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
9060; NO-SIMD128-NEXT:    i32.shr_s $push1=, $3, $7
9061; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
9062; NO-SIMD128-NEXT:    i32.shr_s $push2=, $2, $6
9063; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
9064; NO-SIMD128-NEXT:    i32.shr_s $push3=, $1, $5
9065; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
9066; NO-SIMD128-NEXT:    return
9067;
9068; NO-SIMD128-FAST-LABEL: shr_s_vec_v4i32:
9069; NO-SIMD128-FAST:         .functype shr_s_vec_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9070; NO-SIMD128-FAST-NEXT:  # %bb.0:
9071; NO-SIMD128-FAST-NEXT:    i32.shr_s $push0=, $1, $5
9072; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
9073; NO-SIMD128-FAST-NEXT:    i32.shr_s $push1=, $2, $6
9074; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
9075; NO-SIMD128-FAST-NEXT:    i32.shr_s $push2=, $3, $7
9076; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
9077; NO-SIMD128-FAST-NEXT:    i32.shr_s $push3=, $4, $8
9078; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
9079; NO-SIMD128-FAST-NEXT:    return
9080  %a = ashr <4 x i32> %v, %x
9081  ret <4 x i32> %a
9082}
9083
9084define <4 x i32> @shr_u_v4i32(<4 x i32> %v, i32 %x) {
9085; SIMD128-LABEL: shr_u_v4i32:
9086; SIMD128:         .functype shr_u_v4i32 (v128, i32) -> (v128)
9087; SIMD128-NEXT:  # %bb.0:
9088; SIMD128-NEXT:    i32x4.shr_u $push0=, $0, $1
9089; SIMD128-NEXT:    return $pop0
9090;
9091; SIMD128-FAST-LABEL: shr_u_v4i32:
9092; SIMD128-FAST:         .functype shr_u_v4i32 (v128, i32) -> (v128)
9093; SIMD128-FAST-NEXT:  # %bb.0:
9094; SIMD128-FAST-NEXT:    i32x4.shr_u $push0=, $0, $1
9095; SIMD128-FAST-NEXT:    return $pop0
9096;
9097; NO-SIMD128-LABEL: shr_u_v4i32:
9098; NO-SIMD128:         .functype shr_u_v4i32 (i32, i32, i32, i32, i32, i32) -> ()
9099; NO-SIMD128-NEXT:  # %bb.0:
9100; NO-SIMD128-NEXT:    i32.shr_u $push0=, $4, $5
9101; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
9102; NO-SIMD128-NEXT:    i32.shr_u $push1=, $3, $5
9103; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
9104; NO-SIMD128-NEXT:    i32.shr_u $push2=, $2, $5
9105; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
9106; NO-SIMD128-NEXT:    i32.shr_u $push3=, $1, $5
9107; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
9108; NO-SIMD128-NEXT:    return
9109;
9110; NO-SIMD128-FAST-LABEL: shr_u_v4i32:
9111; NO-SIMD128-FAST:         .functype shr_u_v4i32 (i32, i32, i32, i32, i32, i32) -> ()
9112; NO-SIMD128-FAST-NEXT:  # %bb.0:
9113; NO-SIMD128-FAST-NEXT:    i32.shr_u $push0=, $1, $5
9114; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
9115; NO-SIMD128-FAST-NEXT:    i32.shr_u $push1=, $2, $5
9116; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
9117; NO-SIMD128-FAST-NEXT:    i32.shr_u $push2=, $3, $5
9118; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
9119; NO-SIMD128-FAST-NEXT:    i32.shr_u $push3=, $4, $5
9120; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
9121; NO-SIMD128-FAST-NEXT:    return
9122  %t = insertelement <4 x i32> undef, i32 %x, i32 0
9123  %s = shufflevector <4 x i32> %t, <4 x i32> undef,
9124    <4 x i32> <i32 0, i32 0, i32 0, i32 0>
9125  %a = lshr <4 x i32> %v, %s
9126  ret <4 x i32> %a
9127}
9128
9129define <4 x i32> @shr_u_vec_v4i32(<4 x i32> %v, <4 x i32> %x) {
9130; SIMD128-LABEL: shr_u_vec_v4i32:
9131; SIMD128:         .functype shr_u_vec_v4i32 (v128, v128) -> (v128)
9132; SIMD128-NEXT:  # %bb.0:
9133; SIMD128-NEXT:    i32x4.extract_lane $push4=, $0, 0
9134; SIMD128-NEXT:    i32x4.extract_lane $push3=, $1, 0
9135; SIMD128-NEXT:    i32.shr_u $push5=, $pop4, $pop3
9136; SIMD128-NEXT:    i32x4.splat $push6=, $pop5
9137; SIMD128-NEXT:    i32x4.extract_lane $push1=, $0, 1
9138; SIMD128-NEXT:    i32x4.extract_lane $push0=, $1, 1
9139; SIMD128-NEXT:    i32.shr_u $push2=, $pop1, $pop0
9140; SIMD128-NEXT:    i32x4.replace_lane $push7=, $pop6, 1, $pop2
9141; SIMD128-NEXT:    i32x4.extract_lane $push9=, $0, 2
9142; SIMD128-NEXT:    i32x4.extract_lane $push8=, $1, 2
9143; SIMD128-NEXT:    i32.shr_u $push10=, $pop9, $pop8
9144; SIMD128-NEXT:    i32x4.replace_lane $push11=, $pop7, 2, $pop10
9145; SIMD128-NEXT:    i32x4.extract_lane $push13=, $0, 3
9146; SIMD128-NEXT:    i32x4.extract_lane $push12=, $1, 3
9147; SIMD128-NEXT:    i32.shr_u $push14=, $pop13, $pop12
9148; SIMD128-NEXT:    i32x4.replace_lane $push15=, $pop11, 3, $pop14
9149; SIMD128-NEXT:    return $pop15
9150;
9151; SIMD128-FAST-LABEL: shr_u_vec_v4i32:
9152; SIMD128-FAST:         .functype shr_u_vec_v4i32 (v128, v128) -> (v128)
9153; SIMD128-FAST-NEXT:  # %bb.0:
9154; SIMD128-FAST-NEXT:    i32x4.extract_lane $push5=, $0, 0
9155; SIMD128-FAST-NEXT:    i32x4.extract_lane $push4=, $1, 0
9156; SIMD128-FAST-NEXT:    i32.shr_u $push6=, $pop5, $pop4
9157; SIMD128-FAST-NEXT:    i32x4.splat $push7=, $pop6
9158; SIMD128-FAST-NEXT:    i32x4.extract_lane $push2=, $0, 1
9159; SIMD128-FAST-NEXT:    i32x4.extract_lane $push1=, $1, 1
9160; SIMD128-FAST-NEXT:    i32.shr_u $push3=, $pop2, $pop1
9161; SIMD128-FAST-NEXT:    i32x4.replace_lane $push8=, $pop7, 1, $pop3
9162; SIMD128-FAST-NEXT:    i32x4.extract_lane $push10=, $0, 2
9163; SIMD128-FAST-NEXT:    i32x4.extract_lane $push9=, $1, 2
9164; SIMD128-FAST-NEXT:    i32.shr_u $push11=, $pop10, $pop9
9165; SIMD128-FAST-NEXT:    i32x4.replace_lane $push12=, $pop8, 2, $pop11
9166; SIMD128-FAST-NEXT:    i32x4.extract_lane $push14=, $0, 3
9167; SIMD128-FAST-NEXT:    i32x4.extract_lane $push13=, $1, 3
9168; SIMD128-FAST-NEXT:    i32.shr_u $push15=, $pop14, $pop13
9169; SIMD128-FAST-NEXT:    i32x4.replace_lane $push0=, $pop12, 3, $pop15
9170; SIMD128-FAST-NEXT:    return $pop0
9171;
9172; NO-SIMD128-LABEL: shr_u_vec_v4i32:
9173; NO-SIMD128:         .functype shr_u_vec_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9174; NO-SIMD128-NEXT:  # %bb.0:
9175; NO-SIMD128-NEXT:    i32.shr_u $push0=, $4, $8
9176; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
9177; NO-SIMD128-NEXT:    i32.shr_u $push1=, $3, $7
9178; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
9179; NO-SIMD128-NEXT:    i32.shr_u $push2=, $2, $6
9180; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
9181; NO-SIMD128-NEXT:    i32.shr_u $push3=, $1, $5
9182; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
9183; NO-SIMD128-NEXT:    return
9184;
9185; NO-SIMD128-FAST-LABEL: shr_u_vec_v4i32:
9186; NO-SIMD128-FAST:         .functype shr_u_vec_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9187; NO-SIMD128-FAST-NEXT:  # %bb.0:
9188; NO-SIMD128-FAST-NEXT:    i32.shr_u $push0=, $1, $5
9189; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
9190; NO-SIMD128-FAST-NEXT:    i32.shr_u $push1=, $2, $6
9191; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
9192; NO-SIMD128-FAST-NEXT:    i32.shr_u $push2=, $3, $7
9193; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
9194; NO-SIMD128-FAST-NEXT:    i32.shr_u $push3=, $4, $8
9195; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
9196; NO-SIMD128-FAST-NEXT:    return
9197  %a = lshr <4 x i32> %v, %x
9198  ret <4 x i32> %a
9199}
9200
9201define <4 x i32> @and_v4i32(<4 x i32> %x, <4 x i32> %y) {
9202; SIMD128-LABEL: and_v4i32:
9203; SIMD128:         .functype and_v4i32 (v128, v128) -> (v128)
9204; SIMD128-NEXT:  # %bb.0:
9205; SIMD128-NEXT:    v128.and $push0=, $0, $1
9206; SIMD128-NEXT:    return $pop0
9207;
9208; SIMD128-FAST-LABEL: and_v4i32:
9209; SIMD128-FAST:         .functype and_v4i32 (v128, v128) -> (v128)
9210; SIMD128-FAST-NEXT:  # %bb.0:
9211; SIMD128-FAST-NEXT:    v128.and $push0=, $0, $1
9212; SIMD128-FAST-NEXT:    return $pop0
9213;
9214; NO-SIMD128-LABEL: and_v4i32:
9215; NO-SIMD128:         .functype and_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9216; NO-SIMD128-NEXT:  # %bb.0:
9217; NO-SIMD128-NEXT:    i32.and $push0=, $4, $8
9218; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
9219; NO-SIMD128-NEXT:    i32.and $push1=, $3, $7
9220; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
9221; NO-SIMD128-NEXT:    i32.and $push2=, $2, $6
9222; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
9223; NO-SIMD128-NEXT:    i32.and $push3=, $1, $5
9224; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
9225; NO-SIMD128-NEXT:    return
9226;
9227; NO-SIMD128-FAST-LABEL: and_v4i32:
9228; NO-SIMD128-FAST:         .functype and_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9229; NO-SIMD128-FAST-NEXT:  # %bb.0:
9230; NO-SIMD128-FAST-NEXT:    i32.and $push0=, $1, $5
9231; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
9232; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $2, $6
9233; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
9234; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $3, $7
9235; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
9236; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $4, $8
9237; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
9238; NO-SIMD128-FAST-NEXT:    return
9239  %a = and <4 x i32> %x, %y
9240  ret <4 x i32> %a
9241}
9242
9243define <4 x i32> @or_v4i32(<4 x i32> %x, <4 x i32> %y) {
9244; SIMD128-LABEL: or_v4i32:
9245; SIMD128:         .functype or_v4i32 (v128, v128) -> (v128)
9246; SIMD128-NEXT:  # %bb.0:
9247; SIMD128-NEXT:    v128.or $push0=, $0, $1
9248; SIMD128-NEXT:    return $pop0
9249;
9250; SIMD128-FAST-LABEL: or_v4i32:
9251; SIMD128-FAST:         .functype or_v4i32 (v128, v128) -> (v128)
9252; SIMD128-FAST-NEXT:  # %bb.0:
9253; SIMD128-FAST-NEXT:    v128.or $push0=, $0, $1
9254; SIMD128-FAST-NEXT:    return $pop0
9255;
9256; NO-SIMD128-LABEL: or_v4i32:
9257; NO-SIMD128:         .functype or_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9258; NO-SIMD128-NEXT:  # %bb.0:
9259; NO-SIMD128-NEXT:    i32.or $push0=, $4, $8
9260; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
9261; NO-SIMD128-NEXT:    i32.or $push1=, $3, $7
9262; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
9263; NO-SIMD128-NEXT:    i32.or $push2=, $2, $6
9264; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
9265; NO-SIMD128-NEXT:    i32.or $push3=, $1, $5
9266; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
9267; NO-SIMD128-NEXT:    return
9268;
9269; NO-SIMD128-FAST-LABEL: or_v4i32:
9270; NO-SIMD128-FAST:         .functype or_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9271; NO-SIMD128-FAST-NEXT:  # %bb.0:
9272; NO-SIMD128-FAST-NEXT:    i32.or $push0=, $1, $5
9273; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
9274; NO-SIMD128-FAST-NEXT:    i32.or $push1=, $2, $6
9275; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
9276; NO-SIMD128-FAST-NEXT:    i32.or $push2=, $3, $7
9277; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
9278; NO-SIMD128-FAST-NEXT:    i32.or $push3=, $4, $8
9279; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
9280; NO-SIMD128-FAST-NEXT:    return
9281  %a = or <4 x i32> %x, %y
9282  ret <4 x i32> %a
9283}
9284
9285define <4 x i32> @xor_v4i32(<4 x i32> %x, <4 x i32> %y) {
9286; SIMD128-LABEL: xor_v4i32:
9287; SIMD128:         .functype xor_v4i32 (v128, v128) -> (v128)
9288; SIMD128-NEXT:  # %bb.0:
9289; SIMD128-NEXT:    v128.xor $push0=, $0, $1
9290; SIMD128-NEXT:    return $pop0
9291;
9292; SIMD128-FAST-LABEL: xor_v4i32:
9293; SIMD128-FAST:         .functype xor_v4i32 (v128, v128) -> (v128)
9294; SIMD128-FAST-NEXT:  # %bb.0:
9295; SIMD128-FAST-NEXT:    v128.xor $push0=, $0, $1
9296; SIMD128-FAST-NEXT:    return $pop0
9297;
9298; NO-SIMD128-LABEL: xor_v4i32:
9299; NO-SIMD128:         .functype xor_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9300; NO-SIMD128-NEXT:  # %bb.0:
9301; NO-SIMD128-NEXT:    i32.xor $push0=, $4, $8
9302; NO-SIMD128-NEXT:    i32.store 12($0), $pop0
9303; NO-SIMD128-NEXT:    i32.xor $push1=, $3, $7
9304; NO-SIMD128-NEXT:    i32.store 8($0), $pop1
9305; NO-SIMD128-NEXT:    i32.xor $push2=, $2, $6
9306; NO-SIMD128-NEXT:    i32.store 4($0), $pop2
9307; NO-SIMD128-NEXT:    i32.xor $push3=, $1, $5
9308; NO-SIMD128-NEXT:    i32.store 0($0), $pop3
9309; NO-SIMD128-NEXT:    return
9310;
9311; NO-SIMD128-FAST-LABEL: xor_v4i32:
9312; NO-SIMD128-FAST:         .functype xor_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9313; NO-SIMD128-FAST-NEXT:  # %bb.0:
9314; NO-SIMD128-FAST-NEXT:    i32.xor $push0=, $1, $5
9315; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop0
9316; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $2, $6
9317; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop1
9318; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $3, $7
9319; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop2
9320; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $4, $8
9321; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop3
9322; NO-SIMD128-FAST-NEXT:    return
9323  %a = xor <4 x i32> %x, %y
9324  ret <4 x i32> %a
9325}
9326
9327define <4 x i32> @not_v4i32(<4 x i32> %x) {
9328; SIMD128-LABEL: not_v4i32:
9329; SIMD128:         .functype not_v4i32 (v128) -> (v128)
9330; SIMD128-NEXT:  # %bb.0:
9331; SIMD128-NEXT:    v128.not $push0=, $0
9332; SIMD128-NEXT:    return $pop0
9333;
9334; SIMD128-FAST-LABEL: not_v4i32:
9335; SIMD128-FAST:         .functype not_v4i32 (v128) -> (v128)
9336; SIMD128-FAST-NEXT:  # %bb.0:
9337; SIMD128-FAST-NEXT:    v128.not $push0=, $0
9338; SIMD128-FAST-NEXT:    return $pop0
9339;
9340; NO-SIMD128-LABEL: not_v4i32:
9341; NO-SIMD128:         .functype not_v4i32 (i32, i32, i32, i32, i32) -> ()
9342; NO-SIMD128-NEXT:  # %bb.0:
9343; NO-SIMD128-NEXT:    i32.const $push0=, -1
9344; NO-SIMD128-NEXT:    i32.xor $push1=, $4, $pop0
9345; NO-SIMD128-NEXT:    i32.store 12($0), $pop1
9346; NO-SIMD128-NEXT:    i32.const $push7=, -1
9347; NO-SIMD128-NEXT:    i32.xor $push2=, $3, $pop7
9348; NO-SIMD128-NEXT:    i32.store 8($0), $pop2
9349; NO-SIMD128-NEXT:    i32.const $push6=, -1
9350; NO-SIMD128-NEXT:    i32.xor $push3=, $2, $pop6
9351; NO-SIMD128-NEXT:    i32.store 4($0), $pop3
9352; NO-SIMD128-NEXT:    i32.const $push5=, -1
9353; NO-SIMD128-NEXT:    i32.xor $push4=, $1, $pop5
9354; NO-SIMD128-NEXT:    i32.store 0($0), $pop4
9355; NO-SIMD128-NEXT:    return
9356;
9357; NO-SIMD128-FAST-LABEL: not_v4i32:
9358; NO-SIMD128-FAST:         .functype not_v4i32 (i32, i32, i32, i32, i32) -> ()
9359; NO-SIMD128-FAST-NEXT:  # %bb.0:
9360; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
9361; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $1, $pop0
9362; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop1
9363; NO-SIMD128-FAST-NEXT:    i32.const $push7=, -1
9364; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $2, $pop7
9365; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop2
9366; NO-SIMD128-FAST-NEXT:    i32.const $push6=, -1
9367; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $3, $pop6
9368; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop3
9369; NO-SIMD128-FAST-NEXT:    i32.const $push5=, -1
9370; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $4, $pop5
9371; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop4
9372; NO-SIMD128-FAST-NEXT:    return
9373  %a = xor <4 x i32> %x, <i32 -1, i32 -1, i32 -1, i32 -1>
9374  ret <4 x i32> %a
9375}
9376
9377define <4 x i32> @andnot_v4i32(<4 x i32> %x, <4 x i32> %y) {
9378; SIMD128-LABEL: andnot_v4i32:
9379; SIMD128:         .functype andnot_v4i32 (v128, v128) -> (v128)
9380; SIMD128-NEXT:  # %bb.0:
9381; SIMD128-NEXT:    v128.andnot $push0=, $0, $1
9382; SIMD128-NEXT:    return $pop0
9383;
9384; SIMD128-FAST-LABEL: andnot_v4i32:
9385; SIMD128-FAST:         .functype andnot_v4i32 (v128, v128) -> (v128)
9386; SIMD128-FAST-NEXT:  # %bb.0:
9387; SIMD128-FAST-NEXT:    v128.not $push0=, $1
9388; SIMD128-FAST-NEXT:    v128.and $push1=, $0, $pop0
9389; SIMD128-FAST-NEXT:    return $pop1
9390;
9391; NO-SIMD128-LABEL: andnot_v4i32:
9392; NO-SIMD128:         .functype andnot_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9393; NO-SIMD128-NEXT:  # %bb.0:
9394; NO-SIMD128-NEXT:    i32.const $push0=, -1
9395; NO-SIMD128-NEXT:    i32.xor $push1=, $8, $pop0
9396; NO-SIMD128-NEXT:    i32.and $push2=, $4, $pop1
9397; NO-SIMD128-NEXT:    i32.store 12($0), $pop2
9398; NO-SIMD128-NEXT:    i32.const $push11=, -1
9399; NO-SIMD128-NEXT:    i32.xor $push3=, $7, $pop11
9400; NO-SIMD128-NEXT:    i32.and $push4=, $3, $pop3
9401; NO-SIMD128-NEXT:    i32.store 8($0), $pop4
9402; NO-SIMD128-NEXT:    i32.const $push10=, -1
9403; NO-SIMD128-NEXT:    i32.xor $push5=, $6, $pop10
9404; NO-SIMD128-NEXT:    i32.and $push6=, $2, $pop5
9405; NO-SIMD128-NEXT:    i32.store 4($0), $pop6
9406; NO-SIMD128-NEXT:    i32.const $push9=, -1
9407; NO-SIMD128-NEXT:    i32.xor $push7=, $5, $pop9
9408; NO-SIMD128-NEXT:    i32.and $push8=, $1, $pop7
9409; NO-SIMD128-NEXT:    i32.store 0($0), $pop8
9410; NO-SIMD128-NEXT:    return
9411;
9412; NO-SIMD128-FAST-LABEL: andnot_v4i32:
9413; NO-SIMD128-FAST:         .functype andnot_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9414; NO-SIMD128-FAST-NEXT:  # %bb.0:
9415; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
9416; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $5, $pop0
9417; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop1
9418; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop2
9419; NO-SIMD128-FAST-NEXT:    i32.const $push11=, -1
9420; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $6, $pop11
9421; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $2, $pop3
9422; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop4
9423; NO-SIMD128-FAST-NEXT:    i32.const $push10=, -1
9424; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $7, $pop10
9425; NO-SIMD128-FAST-NEXT:    i32.and $push6=, $3, $pop5
9426; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop6
9427; NO-SIMD128-FAST-NEXT:    i32.const $push9=, -1
9428; NO-SIMD128-FAST-NEXT:    i32.xor $push7=, $8, $pop9
9429; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $4, $pop7
9430; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop8
9431; NO-SIMD128-FAST-NEXT:    return
9432 %inv_y = xor <4 x i32> %y, <i32 -1, i32 -1, i32 -1, i32 -1>
9433 %a = and <4 x i32> %x, %inv_y
9434 ret <4 x i32> %a
9435}
9436
9437define <4 x i32> @bitselect_v4i32(<4 x i32> %c, <4 x i32> %v1, <4 x i32> %v2) {
9438; SIMD128-LABEL: bitselect_v4i32:
9439; SIMD128:         .functype bitselect_v4i32 (v128, v128, v128) -> (v128)
9440; SIMD128-NEXT:  # %bb.0:
9441; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
9442; SIMD128-NEXT:    return $pop0
9443;
9444; SIMD128-FAST-LABEL: bitselect_v4i32:
9445; SIMD128-FAST:         .functype bitselect_v4i32 (v128, v128, v128) -> (v128)
9446; SIMD128-FAST-NEXT:  # %bb.0:
9447; SIMD128-FAST-NEXT:    v128.not $push2=, $0
9448; SIMD128-FAST-NEXT:    v128.and $push3=, $pop2, $2
9449; SIMD128-FAST-NEXT:    v128.and $push0=, $0, $1
9450; SIMD128-FAST-NEXT:    v128.or $push1=, $pop3, $pop0
9451; SIMD128-FAST-NEXT:    return $pop1
9452;
9453; NO-SIMD128-LABEL: bitselect_v4i32:
9454; NO-SIMD128:         .functype bitselect_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9455; NO-SIMD128-NEXT:  # %bb.0:
9456; NO-SIMD128-NEXT:    i32.const $push1=, -1
9457; NO-SIMD128-NEXT:    i32.xor $push2=, $4, $pop1
9458; NO-SIMD128-NEXT:    i32.and $push3=, $pop2, $12
9459; NO-SIMD128-NEXT:    i32.and $push0=, $4, $8
9460; NO-SIMD128-NEXT:    i32.or $push4=, $pop3, $pop0
9461; NO-SIMD128-NEXT:    i32.store 12($0), $pop4
9462; NO-SIMD128-NEXT:    i32.const $push19=, -1
9463; NO-SIMD128-NEXT:    i32.xor $push6=, $3, $pop19
9464; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $11
9465; NO-SIMD128-NEXT:    i32.and $push5=, $3, $7
9466; NO-SIMD128-NEXT:    i32.or $push8=, $pop7, $pop5
9467; NO-SIMD128-NEXT:    i32.store 8($0), $pop8
9468; NO-SIMD128-NEXT:    i32.const $push18=, -1
9469; NO-SIMD128-NEXT:    i32.xor $push10=, $2, $pop18
9470; NO-SIMD128-NEXT:    i32.and $push11=, $pop10, $10
9471; NO-SIMD128-NEXT:    i32.and $push9=, $2, $6
9472; NO-SIMD128-NEXT:    i32.or $push12=, $pop11, $pop9
9473; NO-SIMD128-NEXT:    i32.store 4($0), $pop12
9474; NO-SIMD128-NEXT:    i32.const $push17=, -1
9475; NO-SIMD128-NEXT:    i32.xor $push14=, $1, $pop17
9476; NO-SIMD128-NEXT:    i32.and $push15=, $pop14, $9
9477; NO-SIMD128-NEXT:    i32.and $push13=, $1, $5
9478; NO-SIMD128-NEXT:    i32.or $push16=, $pop15, $pop13
9479; NO-SIMD128-NEXT:    i32.store 0($0), $pop16
9480; NO-SIMD128-NEXT:    return
9481;
9482; NO-SIMD128-FAST-LABEL: bitselect_v4i32:
9483; NO-SIMD128-FAST:         .functype bitselect_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9484; NO-SIMD128-FAST-NEXT:  # %bb.0:
9485; NO-SIMD128-FAST-NEXT:    i32.const $push1=, -1
9486; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $1, $pop1
9487; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $pop2, $9
9488; NO-SIMD128-FAST-NEXT:    i32.and $push0=, $1, $5
9489; NO-SIMD128-FAST-NEXT:    i32.or $push4=, $pop3, $pop0
9490; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop4
9491; NO-SIMD128-FAST-NEXT:    i32.const $push19=, -1
9492; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $2, $pop19
9493; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $10
9494; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $2, $6
9495; NO-SIMD128-FAST-NEXT:    i32.or $push8=, $pop7, $pop5
9496; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop8
9497; NO-SIMD128-FAST-NEXT:    i32.const $push18=, -1
9498; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $3, $pop18
9499; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $pop10, $11
9500; NO-SIMD128-FAST-NEXT:    i32.and $push9=, $3, $7
9501; NO-SIMD128-FAST-NEXT:    i32.or $push12=, $pop11, $pop9
9502; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop12
9503; NO-SIMD128-FAST-NEXT:    i32.const $push17=, -1
9504; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $4, $pop17
9505; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $pop14, $12
9506; NO-SIMD128-FAST-NEXT:    i32.and $push13=, $4, $8
9507; NO-SIMD128-FAST-NEXT:    i32.or $push16=, $pop15, $pop13
9508; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop16
9509; NO-SIMD128-FAST-NEXT:    return
9510  %masked_v1 = and <4 x i32> %c, %v1
9511  %inv_mask = xor <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>, %c
9512  %masked_v2 = and <4 x i32> %inv_mask, %v2
9513  %a = or <4 x i32> %masked_v2, %masked_v1
9514  ret <4 x i32> %a
9515}
9516
9517define <4 x i32> @bitselect_xor_v4i32(<4 x i32> %c, <4 x i32> %v1, <4 x i32> %v2) {
9518; SIMD128-LABEL: bitselect_xor_v4i32:
9519; SIMD128:         .functype bitselect_xor_v4i32 (v128, v128, v128) -> (v128)
9520; SIMD128-NEXT:  # %bb.0:
9521; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
9522; SIMD128-NEXT:    return $pop0
9523;
9524; SIMD128-FAST-LABEL: bitselect_xor_v4i32:
9525; SIMD128-FAST:         .functype bitselect_xor_v4i32 (v128, v128, v128) -> (v128)
9526; SIMD128-FAST-NEXT:  # %bb.0:
9527; SIMD128-FAST-NEXT:    v128.xor $push2=, $1, $2
9528; SIMD128-FAST-NEXT:    v128.and $push1=, $pop2, $0
9529; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop1, $2
9530; SIMD128-FAST-NEXT:    return $pop0
9531;
9532; NO-SIMD128-LABEL: bitselect_xor_v4i32:
9533; NO-SIMD128:         .functype bitselect_xor_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9534; NO-SIMD128-NEXT:  # %bb.0:
9535; NO-SIMD128-NEXT:    i32.xor $push0=, $8, $12
9536; NO-SIMD128-NEXT:    i32.and $push1=, $pop0, $4
9537; NO-SIMD128-NEXT:    i32.xor $push2=, $pop1, $12
9538; NO-SIMD128-NEXT:    i32.store 12($0), $pop2
9539; NO-SIMD128-NEXT:    i32.xor $push3=, $7, $11
9540; NO-SIMD128-NEXT:    i32.and $push4=, $pop3, $3
9541; NO-SIMD128-NEXT:    i32.xor $push5=, $pop4, $11
9542; NO-SIMD128-NEXT:    i32.store 8($0), $pop5
9543; NO-SIMD128-NEXT:    i32.xor $push6=, $6, $10
9544; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $2
9545; NO-SIMD128-NEXT:    i32.xor $push8=, $pop7, $10
9546; NO-SIMD128-NEXT:    i32.store 4($0), $pop8
9547; NO-SIMD128-NEXT:    i32.xor $push9=, $5, $9
9548; NO-SIMD128-NEXT:    i32.and $push10=, $pop9, $1
9549; NO-SIMD128-NEXT:    i32.xor $push11=, $pop10, $9
9550; NO-SIMD128-NEXT:    i32.store 0($0), $pop11
9551; NO-SIMD128-NEXT:    return
9552;
9553; NO-SIMD128-FAST-LABEL: bitselect_xor_v4i32:
9554; NO-SIMD128-FAST:         .functype bitselect_xor_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9555; NO-SIMD128-FAST-NEXT:  # %bb.0:
9556; NO-SIMD128-FAST-NEXT:    i32.xor $push0=, $5, $9
9557; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $pop0, $1
9558; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $pop1, $9
9559; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop2
9560; NO-SIMD128-FAST-NEXT:    i32.xor $push3=, $6, $10
9561; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $pop3, $2
9562; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $pop4, $10
9563; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop5
9564; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $7, $11
9565; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $3
9566; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $pop7, $11
9567; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop8
9568; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $8, $12
9569; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $pop9, $4
9570; NO-SIMD128-FAST-NEXT:    i32.xor $push11=, $pop10, $12
9571; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop11
9572; NO-SIMD128-FAST-NEXT:    return
9573 %xor1 = xor <4 x i32> %v1, %v2
9574 %and = and <4 x i32> %xor1, %c
9575 %a = xor <4 x i32> %and, %v2
9576 ret <4 x i32> %a
9577}
9578
9579define <4 x i32> @bitselect_xor_reversed_v4i32(<4 x i32> %c, <4 x i32> %v1, <4 x i32> %v2) {
9580; SIMD128-LABEL: bitselect_xor_reversed_v4i32:
9581; SIMD128:         .functype bitselect_xor_reversed_v4i32 (v128, v128, v128) -> (v128)
9582; SIMD128-NEXT:  # %bb.0:
9583; SIMD128-NEXT:    v128.bitselect $push0=, $2, $1, $0
9584; SIMD128-NEXT:    return $pop0
9585;
9586; SIMD128-FAST-LABEL: bitselect_xor_reversed_v4i32:
9587; SIMD128-FAST:         .functype bitselect_xor_reversed_v4i32 (v128, v128, v128) -> (v128)
9588; SIMD128-FAST-NEXT:  # %bb.0:
9589; SIMD128-FAST-NEXT:    v128.xor $push1=, $1, $2
9590; SIMD128-FAST-NEXT:    v128.not $push2=, $0
9591; SIMD128-FAST-NEXT:    v128.and $push3=, $pop1, $pop2
9592; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop3, $2
9593; SIMD128-FAST-NEXT:    return $pop0
9594;
9595; NO-SIMD128-LABEL: bitselect_xor_reversed_v4i32:
9596; NO-SIMD128:         .functype bitselect_xor_reversed_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9597; NO-SIMD128-NEXT:  # %bb.0:
9598; NO-SIMD128-NEXT:    i32.xor $push2=, $8, $12
9599; NO-SIMD128-NEXT:    i32.const $push0=, -1
9600; NO-SIMD128-NEXT:    i32.xor $push1=, $4, $pop0
9601; NO-SIMD128-NEXT:    i32.and $push3=, $pop2, $pop1
9602; NO-SIMD128-NEXT:    i32.xor $push4=, $pop3, $12
9603; NO-SIMD128-NEXT:    i32.store 12($0), $pop4
9604; NO-SIMD128-NEXT:    i32.xor $push6=, $7, $11
9605; NO-SIMD128-NEXT:    i32.const $push19=, -1
9606; NO-SIMD128-NEXT:    i32.xor $push5=, $3, $pop19
9607; NO-SIMD128-NEXT:    i32.and $push7=, $pop6, $pop5
9608; NO-SIMD128-NEXT:    i32.xor $push8=, $pop7, $11
9609; NO-SIMD128-NEXT:    i32.store 8($0), $pop8
9610; NO-SIMD128-NEXT:    i32.xor $push10=, $6, $10
9611; NO-SIMD128-NEXT:    i32.const $push18=, -1
9612; NO-SIMD128-NEXT:    i32.xor $push9=, $2, $pop18
9613; NO-SIMD128-NEXT:    i32.and $push11=, $pop10, $pop9
9614; NO-SIMD128-NEXT:    i32.xor $push12=, $pop11, $10
9615; NO-SIMD128-NEXT:    i32.store 4($0), $pop12
9616; NO-SIMD128-NEXT:    i32.xor $push14=, $5, $9
9617; NO-SIMD128-NEXT:    i32.const $push17=, -1
9618; NO-SIMD128-NEXT:    i32.xor $push13=, $1, $pop17
9619; NO-SIMD128-NEXT:    i32.and $push15=, $pop14, $pop13
9620; NO-SIMD128-NEXT:    i32.xor $push16=, $pop15, $9
9621; NO-SIMD128-NEXT:    i32.store 0($0), $pop16
9622; NO-SIMD128-NEXT:    return
9623;
9624; NO-SIMD128-FAST-LABEL: bitselect_xor_reversed_v4i32:
9625; NO-SIMD128-FAST:         .functype bitselect_xor_reversed_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9626; NO-SIMD128-FAST-NEXT:  # %bb.0:
9627; NO-SIMD128-FAST-NEXT:    i32.xor $push2=, $5, $9
9628; NO-SIMD128-FAST-NEXT:    i32.const $push0=, -1
9629; NO-SIMD128-FAST-NEXT:    i32.xor $push1=, $1, $pop0
9630; NO-SIMD128-FAST-NEXT:    i32.and $push3=, $pop2, $pop1
9631; NO-SIMD128-FAST-NEXT:    i32.xor $push4=, $pop3, $9
9632; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop4
9633; NO-SIMD128-FAST-NEXT:    i32.xor $push6=, $6, $10
9634; NO-SIMD128-FAST-NEXT:    i32.const $push19=, -1
9635; NO-SIMD128-FAST-NEXT:    i32.xor $push5=, $2, $pop19
9636; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $pop6, $pop5
9637; NO-SIMD128-FAST-NEXT:    i32.xor $push8=, $pop7, $10
9638; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop8
9639; NO-SIMD128-FAST-NEXT:    i32.xor $push10=, $7, $11
9640; NO-SIMD128-FAST-NEXT:    i32.const $push18=, -1
9641; NO-SIMD128-FAST-NEXT:    i32.xor $push9=, $3, $pop18
9642; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $pop10, $pop9
9643; NO-SIMD128-FAST-NEXT:    i32.xor $push12=, $pop11, $11
9644; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop12
9645; NO-SIMD128-FAST-NEXT:    i32.xor $push14=, $8, $12
9646; NO-SIMD128-FAST-NEXT:    i32.const $push17=, -1
9647; NO-SIMD128-FAST-NEXT:    i32.xor $push13=, $4, $pop17
9648; NO-SIMD128-FAST-NEXT:    i32.and $push15=, $pop14, $pop13
9649; NO-SIMD128-FAST-NEXT:    i32.xor $push16=, $pop15, $12
9650; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop16
9651; NO-SIMD128-FAST-NEXT:    return
9652 %xor1 = xor <4 x i32> %v1, %v2
9653 %notc = xor <4 x i32> %c, <i32 -1, i32 -1, i32 -1, i32 -1>
9654 %and = and <4 x i32> %xor1, %notc
9655 %a = xor <4 x i32> %and, %v2
9656 ret <4 x i32> %a
9657}
9658
9659define <4 x i32> @extmul_low_s_v4i32(<8 x i16> %v1, <8 x i16> %v2) {
9660; SIMD128-LABEL: extmul_low_s_v4i32:
9661; SIMD128:         .functype extmul_low_s_v4i32 (v128, v128) -> (v128)
9662; SIMD128-NEXT:  # %bb.0:
9663; SIMD128-NEXT:    i32x4.extmul_low_i16x8_s $push0=, $0, $1
9664; SIMD128-NEXT:    return $pop0
9665;
9666; SIMD128-FAST-LABEL: extmul_low_s_v4i32:
9667; SIMD128-FAST:         .functype extmul_low_s_v4i32 (v128, v128) -> (v128)
9668; SIMD128-FAST-NEXT:  # %bb.0:
9669; SIMD128-FAST-NEXT:    i32x4.extend_low_i16x8_s $push0=, $0
9670; SIMD128-FAST-NEXT:    i32x4.extend_low_i16x8_s $push1=, $1
9671; SIMD128-FAST-NEXT:    i32x4.mul $push2=, $pop0, $pop1
9672; SIMD128-FAST-NEXT:    return $pop2
9673;
9674; NO-SIMD128-LABEL: extmul_low_s_v4i32:
9675; NO-SIMD128:         .functype extmul_low_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9676; NO-SIMD128-NEXT:  # %bb.0:
9677; NO-SIMD128-NEXT:    i32.extend16_s $push1=, $4
9678; NO-SIMD128-NEXT:    i32.extend16_s $push0=, $12
9679; NO-SIMD128-NEXT:    i32.mul $push2=, $pop1, $pop0
9680; NO-SIMD128-NEXT:    i32.store 12($0), $pop2
9681; NO-SIMD128-NEXT:    i32.extend16_s $push4=, $3
9682; NO-SIMD128-NEXT:    i32.extend16_s $push3=, $11
9683; NO-SIMD128-NEXT:    i32.mul $push5=, $pop4, $pop3
9684; NO-SIMD128-NEXT:    i32.store 8($0), $pop5
9685; NO-SIMD128-NEXT:    i32.extend16_s $push7=, $2
9686; NO-SIMD128-NEXT:    i32.extend16_s $push6=, $10
9687; NO-SIMD128-NEXT:    i32.mul $push8=, $pop7, $pop6
9688; NO-SIMD128-NEXT:    i32.store 4($0), $pop8
9689; NO-SIMD128-NEXT:    i32.extend16_s $push10=, $1
9690; NO-SIMD128-NEXT:    i32.extend16_s $push9=, $9
9691; NO-SIMD128-NEXT:    i32.mul $push11=, $pop10, $pop9
9692; NO-SIMD128-NEXT:    i32.store 0($0), $pop11
9693; NO-SIMD128-NEXT:    return
9694;
9695; NO-SIMD128-FAST-LABEL: extmul_low_s_v4i32:
9696; NO-SIMD128-FAST:         .functype extmul_low_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9697; NO-SIMD128-FAST-NEXT:  # %bb.0:
9698; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push1=, $1
9699; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push0=, $9
9700; NO-SIMD128-FAST-NEXT:    i32.mul $push2=, $pop1, $pop0
9701; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop2
9702; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push4=, $2
9703; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push3=, $10
9704; NO-SIMD128-FAST-NEXT:    i32.mul $push5=, $pop4, $pop3
9705; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop5
9706; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push7=, $3
9707; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push6=, $11
9708; NO-SIMD128-FAST-NEXT:    i32.mul $push8=, $pop7, $pop6
9709; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop8
9710; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push10=, $4
9711; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push9=, $12
9712; NO-SIMD128-FAST-NEXT:    i32.mul $push11=, $pop10, $pop9
9713; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop11
9714; NO-SIMD128-FAST-NEXT:    return
9715  %low1 = shufflevector <8 x i16> %v1, <8 x i16> undef,
9716           <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9717  %low2 = shufflevector <8 x i16> %v2, <8 x i16> undef,
9718           <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9719  %extended1 = sext <4 x i16> %low1 to <4 x i32>
9720  %extended2 = sext <4 x i16> %low2 to <4 x i32>
9721  %a = mul <4 x i32> %extended1, %extended2
9722  ret <4 x i32> %a
9723}
9724
9725define <4 x i32> @extmul_high_s_v4i32(<8 x i16> %v1, <8 x i16> %v2) {
9726; SIMD128-LABEL: extmul_high_s_v4i32:
9727; SIMD128:         .functype extmul_high_s_v4i32 (v128, v128) -> (v128)
9728; SIMD128-NEXT:  # %bb.0:
9729; SIMD128-NEXT:    i32x4.extmul_high_i16x8_s $push0=, $0, $1
9730; SIMD128-NEXT:    return $pop0
9731;
9732; SIMD128-FAST-LABEL: extmul_high_s_v4i32:
9733; SIMD128-FAST:         .functype extmul_high_s_v4i32 (v128, v128) -> (v128)
9734; SIMD128-FAST-NEXT:  # %bb.0:
9735; SIMD128-FAST-NEXT:    i32x4.extend_high_i16x8_s $push0=, $0
9736; SIMD128-FAST-NEXT:    i32x4.extend_high_i16x8_s $push1=, $1
9737; SIMD128-FAST-NEXT:    i32x4.mul $push2=, $pop0, $pop1
9738; SIMD128-FAST-NEXT:    return $pop2
9739;
9740; NO-SIMD128-LABEL: extmul_high_s_v4i32:
9741; NO-SIMD128:         .functype extmul_high_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9742; NO-SIMD128-NEXT:  # %bb.0:
9743; NO-SIMD128-NEXT:    i32.extend16_s $push1=, $8
9744; NO-SIMD128-NEXT:    i32.extend16_s $push0=, $16
9745; NO-SIMD128-NEXT:    i32.mul $push2=, $pop1, $pop0
9746; NO-SIMD128-NEXT:    i32.store 12($0), $pop2
9747; NO-SIMD128-NEXT:    i32.extend16_s $push4=, $7
9748; NO-SIMD128-NEXT:    i32.extend16_s $push3=, $15
9749; NO-SIMD128-NEXT:    i32.mul $push5=, $pop4, $pop3
9750; NO-SIMD128-NEXT:    i32.store 8($0), $pop5
9751; NO-SIMD128-NEXT:    i32.extend16_s $push7=, $6
9752; NO-SIMD128-NEXT:    i32.extend16_s $push6=, $14
9753; NO-SIMD128-NEXT:    i32.mul $push8=, $pop7, $pop6
9754; NO-SIMD128-NEXT:    i32.store 4($0), $pop8
9755; NO-SIMD128-NEXT:    i32.extend16_s $push10=, $5
9756; NO-SIMD128-NEXT:    i32.extend16_s $push9=, $13
9757; NO-SIMD128-NEXT:    i32.mul $push11=, $pop10, $pop9
9758; NO-SIMD128-NEXT:    i32.store 0($0), $pop11
9759; NO-SIMD128-NEXT:    return
9760;
9761; NO-SIMD128-FAST-LABEL: extmul_high_s_v4i32:
9762; NO-SIMD128-FAST:         .functype extmul_high_s_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9763; NO-SIMD128-FAST-NEXT:  # %bb.0:
9764; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push1=, $5
9765; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push0=, $13
9766; NO-SIMD128-FAST-NEXT:    i32.mul $push2=, $pop1, $pop0
9767; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop2
9768; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push4=, $6
9769; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push3=, $14
9770; NO-SIMD128-FAST-NEXT:    i32.mul $push5=, $pop4, $pop3
9771; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop5
9772; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push7=, $7
9773; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push6=, $15
9774; NO-SIMD128-FAST-NEXT:    i32.mul $push8=, $pop7, $pop6
9775; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop8
9776; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push10=, $8
9777; NO-SIMD128-FAST-NEXT:    i32.extend16_s $push9=, $16
9778; NO-SIMD128-FAST-NEXT:    i32.mul $push11=, $pop10, $pop9
9779; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop11
9780; NO-SIMD128-FAST-NEXT:    return
9781  %high1 = shufflevector <8 x i16> %v1, <8 x i16> undef,
9782           <4 x i32> <i32 4, i32 5, i32 6, i32 7>
9783  %high2 = shufflevector <8 x i16> %v2, <8 x i16> undef,
9784           <4 x i32> <i32 4, i32 5, i32 6, i32 7>
9785  %extended1 = sext <4 x i16> %high1 to <4 x i32>
9786  %extended2 = sext <4 x i16> %high2 to <4 x i32>
9787  %a = mul <4 x i32> %extended1, %extended2
9788  ret <4 x i32> %a
9789}
9790
9791define <4 x i32> @extmul_low_u_v4i32(<8 x i16> %v1, <8 x i16> %v2) {
9792; SIMD128-LABEL: extmul_low_u_v4i32:
9793; SIMD128:         .functype extmul_low_u_v4i32 (v128, v128) -> (v128)
9794; SIMD128-NEXT:  # %bb.0:
9795; SIMD128-NEXT:    i32x4.extmul_low_i16x8_u $push0=, $0, $1
9796; SIMD128-NEXT:    return $pop0
9797;
9798; SIMD128-FAST-LABEL: extmul_low_u_v4i32:
9799; SIMD128-FAST:         .functype extmul_low_u_v4i32 (v128, v128) -> (v128)
9800; SIMD128-FAST-NEXT:  # %bb.0:
9801; SIMD128-FAST-NEXT:    i32x4.extend_low_i16x8_u $push0=, $0
9802; SIMD128-FAST-NEXT:    i32x4.extend_low_i16x8_u $push1=, $1
9803; SIMD128-FAST-NEXT:    i32x4.mul $push2=, $pop0, $pop1
9804; SIMD128-FAST-NEXT:    return $pop2
9805;
9806; NO-SIMD128-LABEL: extmul_low_u_v4i32:
9807; NO-SIMD128:         .functype extmul_low_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9808; NO-SIMD128-NEXT:  # %bb.0:
9809; NO-SIMD128-NEXT:    i32.const $push0=, 65535
9810; NO-SIMD128-NEXT:    i32.and $push2=, $4, $pop0
9811; NO-SIMD128-NEXT:    i32.const $push19=, 65535
9812; NO-SIMD128-NEXT:    i32.and $push1=, $12, $pop19
9813; NO-SIMD128-NEXT:    i32.mul $push3=, $pop2, $pop1
9814; NO-SIMD128-NEXT:    i32.store 12($0), $pop3
9815; NO-SIMD128-NEXT:    i32.const $push18=, 65535
9816; NO-SIMD128-NEXT:    i32.and $push5=, $3, $pop18
9817; NO-SIMD128-NEXT:    i32.const $push17=, 65535
9818; NO-SIMD128-NEXT:    i32.and $push4=, $11, $pop17
9819; NO-SIMD128-NEXT:    i32.mul $push6=, $pop5, $pop4
9820; NO-SIMD128-NEXT:    i32.store 8($0), $pop6
9821; NO-SIMD128-NEXT:    i32.const $push16=, 65535
9822; NO-SIMD128-NEXT:    i32.and $push8=, $2, $pop16
9823; NO-SIMD128-NEXT:    i32.const $push15=, 65535
9824; NO-SIMD128-NEXT:    i32.and $push7=, $10, $pop15
9825; NO-SIMD128-NEXT:    i32.mul $push9=, $pop8, $pop7
9826; NO-SIMD128-NEXT:    i32.store 4($0), $pop9
9827; NO-SIMD128-NEXT:    i32.const $push14=, 65535
9828; NO-SIMD128-NEXT:    i32.and $push11=, $1, $pop14
9829; NO-SIMD128-NEXT:    i32.const $push13=, 65535
9830; NO-SIMD128-NEXT:    i32.and $push10=, $9, $pop13
9831; NO-SIMD128-NEXT:    i32.mul $push12=, $pop11, $pop10
9832; NO-SIMD128-NEXT:    i32.store 0($0), $pop12
9833; NO-SIMD128-NEXT:    return
9834;
9835; NO-SIMD128-FAST-LABEL: extmul_low_u_v4i32:
9836; NO-SIMD128-FAST:         .functype extmul_low_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9837; NO-SIMD128-FAST-NEXT:  # %bb.0:
9838; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
9839; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $1, $pop0
9840; NO-SIMD128-FAST-NEXT:    i32.const $push19=, 65535
9841; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $9, $pop19
9842; NO-SIMD128-FAST-NEXT:    i32.mul $push3=, $pop2, $pop1
9843; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop3
9844; NO-SIMD128-FAST-NEXT:    i32.const $push18=, 65535
9845; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $2, $pop18
9846; NO-SIMD128-FAST-NEXT:    i32.const $push17=, 65535
9847; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $10, $pop17
9848; NO-SIMD128-FAST-NEXT:    i32.mul $push6=, $pop5, $pop4
9849; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop6
9850; NO-SIMD128-FAST-NEXT:    i32.const $push16=, 65535
9851; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $3, $pop16
9852; NO-SIMD128-FAST-NEXT:    i32.const $push15=, 65535
9853; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $11, $pop15
9854; NO-SIMD128-FAST-NEXT:    i32.mul $push9=, $pop8, $pop7
9855; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop9
9856; NO-SIMD128-FAST-NEXT:    i32.const $push14=, 65535
9857; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $4, $pop14
9858; NO-SIMD128-FAST-NEXT:    i32.const $push13=, 65535
9859; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $12, $pop13
9860; NO-SIMD128-FAST-NEXT:    i32.mul $push12=, $pop11, $pop10
9861; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop12
9862; NO-SIMD128-FAST-NEXT:    return
9863  %low1 = shufflevector <8 x i16> %v1, <8 x i16> undef,
9864           <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9865  %low2 = shufflevector <8 x i16> %v2, <8 x i16> undef,
9866           <4 x i32> <i32 0, i32 1, i32 2, i32 3>
9867  %extended1 = zext <4 x i16> %low1 to <4 x i32>
9868  %extended2 = zext <4 x i16> %low2 to <4 x i32>
9869  %a = mul <4 x i32> %extended1, %extended2
9870  ret <4 x i32> %a
9871}
9872
9873define <4 x i32> @extmul_high_u_v4i32(<8 x i16> %v1, <8 x i16> %v2) {
9874; SIMD128-LABEL: extmul_high_u_v4i32:
9875; SIMD128:         .functype extmul_high_u_v4i32 (v128, v128) -> (v128)
9876; SIMD128-NEXT:  # %bb.0:
9877; SIMD128-NEXT:    i32x4.extmul_high_i16x8_u $push0=, $0, $1
9878; SIMD128-NEXT:    return $pop0
9879;
9880; SIMD128-FAST-LABEL: extmul_high_u_v4i32:
9881; SIMD128-FAST:         .functype extmul_high_u_v4i32 (v128, v128) -> (v128)
9882; SIMD128-FAST-NEXT:  # %bb.0:
9883; SIMD128-FAST-NEXT:    i32x4.extend_high_i16x8_u $push0=, $0
9884; SIMD128-FAST-NEXT:    i32x4.extend_high_i16x8_u $push1=, $1
9885; SIMD128-FAST-NEXT:    i32x4.mul $push2=, $pop0, $pop1
9886; SIMD128-FAST-NEXT:    return $pop2
9887;
9888; NO-SIMD128-LABEL: extmul_high_u_v4i32:
9889; NO-SIMD128:         .functype extmul_high_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9890; NO-SIMD128-NEXT:  # %bb.0:
9891; NO-SIMD128-NEXT:    i32.const $push0=, 65535
9892; NO-SIMD128-NEXT:    i32.and $push2=, $8, $pop0
9893; NO-SIMD128-NEXT:    i32.const $push19=, 65535
9894; NO-SIMD128-NEXT:    i32.and $push1=, $16, $pop19
9895; NO-SIMD128-NEXT:    i32.mul $push3=, $pop2, $pop1
9896; NO-SIMD128-NEXT:    i32.store 12($0), $pop3
9897; NO-SIMD128-NEXT:    i32.const $push18=, 65535
9898; NO-SIMD128-NEXT:    i32.and $push5=, $7, $pop18
9899; NO-SIMD128-NEXT:    i32.const $push17=, 65535
9900; NO-SIMD128-NEXT:    i32.and $push4=, $15, $pop17
9901; NO-SIMD128-NEXT:    i32.mul $push6=, $pop5, $pop4
9902; NO-SIMD128-NEXT:    i32.store 8($0), $pop6
9903; NO-SIMD128-NEXT:    i32.const $push16=, 65535
9904; NO-SIMD128-NEXT:    i32.and $push8=, $6, $pop16
9905; NO-SIMD128-NEXT:    i32.const $push15=, 65535
9906; NO-SIMD128-NEXT:    i32.and $push7=, $14, $pop15
9907; NO-SIMD128-NEXT:    i32.mul $push9=, $pop8, $pop7
9908; NO-SIMD128-NEXT:    i32.store 4($0), $pop9
9909; NO-SIMD128-NEXT:    i32.const $push14=, 65535
9910; NO-SIMD128-NEXT:    i32.and $push11=, $5, $pop14
9911; NO-SIMD128-NEXT:    i32.const $push13=, 65535
9912; NO-SIMD128-NEXT:    i32.and $push10=, $13, $pop13
9913; NO-SIMD128-NEXT:    i32.mul $push12=, $pop11, $pop10
9914; NO-SIMD128-NEXT:    i32.store 0($0), $pop12
9915; NO-SIMD128-NEXT:    return
9916;
9917; NO-SIMD128-FAST-LABEL: extmul_high_u_v4i32:
9918; NO-SIMD128-FAST:         .functype extmul_high_u_v4i32 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
9919; NO-SIMD128-FAST-NEXT:  # %bb.0:
9920; NO-SIMD128-FAST-NEXT:    i32.const $push0=, 65535
9921; NO-SIMD128-FAST-NEXT:    i32.and $push2=, $5, $pop0
9922; NO-SIMD128-FAST-NEXT:    i32.const $push19=, 65535
9923; NO-SIMD128-FAST-NEXT:    i32.and $push1=, $13, $pop19
9924; NO-SIMD128-FAST-NEXT:    i32.mul $push3=, $pop2, $pop1
9925; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop3
9926; NO-SIMD128-FAST-NEXT:    i32.const $push18=, 65535
9927; NO-SIMD128-FAST-NEXT:    i32.and $push5=, $6, $pop18
9928; NO-SIMD128-FAST-NEXT:    i32.const $push17=, 65535
9929; NO-SIMD128-FAST-NEXT:    i32.and $push4=, $14, $pop17
9930; NO-SIMD128-FAST-NEXT:    i32.mul $push6=, $pop5, $pop4
9931; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop6
9932; NO-SIMD128-FAST-NEXT:    i32.const $push16=, 65535
9933; NO-SIMD128-FAST-NEXT:    i32.and $push8=, $7, $pop16
9934; NO-SIMD128-FAST-NEXT:    i32.const $push15=, 65535
9935; NO-SIMD128-FAST-NEXT:    i32.and $push7=, $15, $pop15
9936; NO-SIMD128-FAST-NEXT:    i32.mul $push9=, $pop8, $pop7
9937; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop9
9938; NO-SIMD128-FAST-NEXT:    i32.const $push14=, 65535
9939; NO-SIMD128-FAST-NEXT:    i32.and $push11=, $8, $pop14
9940; NO-SIMD128-FAST-NEXT:    i32.const $push13=, 65535
9941; NO-SIMD128-FAST-NEXT:    i32.and $push10=, $16, $pop13
9942; NO-SIMD128-FAST-NEXT:    i32.mul $push12=, $pop11, $pop10
9943; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop12
9944; NO-SIMD128-FAST-NEXT:    return
9945  %high1 = shufflevector <8 x i16> %v1, <8 x i16> undef,
9946           <4 x i32> <i32 4, i32 5, i32 6, i32 7>
9947  %high2 = shufflevector <8 x i16> %v2, <8 x i16> undef,
9948           <4 x i32> <i32 4, i32 5, i32 6, i32 7>
9949  %extended1 = zext <4 x i16> %high1 to <4 x i32>
9950  %extended2 = zext <4 x i16> %high2 to <4 x i32>
9951  %a = mul <4 x i32> %extended1, %extended2
9952  ret <4 x i32> %a
9953}
9954
9955; ==============================================================================
9956; 2 x i64
9957; ==============================================================================
9958define <2 x i64> @add_v2i64(<2 x i64> %x, <2 x i64> %y) {
9959; SIMD128-LABEL: add_v2i64:
9960; SIMD128:         .functype add_v2i64 (v128, v128) -> (v128)
9961; SIMD128-NEXT:  # %bb.0:
9962; SIMD128-NEXT:    i64x2.add $push0=, $0, $1
9963; SIMD128-NEXT:    return $pop0
9964;
9965; SIMD128-FAST-LABEL: add_v2i64:
9966; SIMD128-FAST:         .functype add_v2i64 (v128, v128) -> (v128)
9967; SIMD128-FAST-NEXT:  # %bb.0:
9968; SIMD128-FAST-NEXT:    i64x2.add $push0=, $0, $1
9969; SIMD128-FAST-NEXT:    return $pop0
9970;
9971; NO-SIMD128-LABEL: add_v2i64:
9972; NO-SIMD128:         .functype add_v2i64 (i32, i64, i64, i64, i64) -> ()
9973; NO-SIMD128-NEXT:  # %bb.0:
9974; NO-SIMD128-NEXT:    i64.add $push0=, $2, $4
9975; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
9976; NO-SIMD128-NEXT:    i64.add $push1=, $1, $3
9977; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
9978; NO-SIMD128-NEXT:    return
9979;
9980; NO-SIMD128-FAST-LABEL: add_v2i64:
9981; NO-SIMD128-FAST:         .functype add_v2i64 (i32, i64, i64, i64, i64) -> ()
9982; NO-SIMD128-FAST-NEXT:  # %bb.0:
9983; NO-SIMD128-FAST-NEXT:    i64.add $push0=, $1, $3
9984; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
9985; NO-SIMD128-FAST-NEXT:    i64.add $push1=, $2, $4
9986; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
9987; NO-SIMD128-FAST-NEXT:    return
9988  %a = add <2 x i64> %x, %y
9989  ret <2 x i64> %a
9990}
9991
9992define <2 x i64> @sub_v2i64(<2 x i64> %x, <2 x i64> %y) {
9993; SIMD128-LABEL: sub_v2i64:
9994; SIMD128:         .functype sub_v2i64 (v128, v128) -> (v128)
9995; SIMD128-NEXT:  # %bb.0:
9996; SIMD128-NEXT:    i64x2.sub $push0=, $0, $1
9997; SIMD128-NEXT:    return $pop0
9998;
9999; SIMD128-FAST-LABEL: sub_v2i64:
10000; SIMD128-FAST:         .functype sub_v2i64 (v128, v128) -> (v128)
10001; SIMD128-FAST-NEXT:  # %bb.0:
10002; SIMD128-FAST-NEXT:    i64x2.sub $push0=, $0, $1
10003; SIMD128-FAST-NEXT:    return $pop0
10004;
10005; NO-SIMD128-LABEL: sub_v2i64:
10006; NO-SIMD128:         .functype sub_v2i64 (i32, i64, i64, i64, i64) -> ()
10007; NO-SIMD128-NEXT:  # %bb.0:
10008; NO-SIMD128-NEXT:    i64.sub $push0=, $2, $4
10009; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10010; NO-SIMD128-NEXT:    i64.sub $push1=, $1, $3
10011; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10012; NO-SIMD128-NEXT:    return
10013;
10014; NO-SIMD128-FAST-LABEL: sub_v2i64:
10015; NO-SIMD128-FAST:         .functype sub_v2i64 (i32, i64, i64, i64, i64) -> ()
10016; NO-SIMD128-FAST-NEXT:  # %bb.0:
10017; NO-SIMD128-FAST-NEXT:    i64.sub $push0=, $1, $3
10018; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10019; NO-SIMD128-FAST-NEXT:    i64.sub $push1=, $2, $4
10020; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10021; NO-SIMD128-FAST-NEXT:    return
10022  %a = sub <2 x i64> %x, %y
10023  ret <2 x i64> %a
10024}
10025
10026define <2 x i64> @mul_v2i64(<2 x i64> %x, <2 x i64> %y) {
10027; SIMD128-LABEL: mul_v2i64:
10028; SIMD128:         .functype mul_v2i64 (v128, v128) -> (v128)
10029; SIMD128-NEXT:  # %bb.0:
10030; SIMD128-NEXT:    i64x2.mul $push0=, $0, $1
10031; SIMD128-NEXT:    return $pop0
10032;
10033; SIMD128-FAST-LABEL: mul_v2i64:
10034; SIMD128-FAST:         .functype mul_v2i64 (v128, v128) -> (v128)
10035; SIMD128-FAST-NEXT:  # %bb.0:
10036; SIMD128-FAST-NEXT:    i64x2.mul $push0=, $0, $1
10037; SIMD128-FAST-NEXT:    return $pop0
10038;
10039; NO-SIMD128-LABEL: mul_v2i64:
10040; NO-SIMD128:         .functype mul_v2i64 (i32, i64, i64, i64, i64) -> ()
10041; NO-SIMD128-NEXT:  # %bb.0:
10042; NO-SIMD128-NEXT:    i64.mul $push0=, $2, $4
10043; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10044; NO-SIMD128-NEXT:    i64.mul $push1=, $1, $3
10045; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10046; NO-SIMD128-NEXT:    return
10047;
10048; NO-SIMD128-FAST-LABEL: mul_v2i64:
10049; NO-SIMD128-FAST:         .functype mul_v2i64 (i32, i64, i64, i64, i64) -> ()
10050; NO-SIMD128-FAST-NEXT:  # %bb.0:
10051; NO-SIMD128-FAST-NEXT:    i64.mul $push0=, $1, $3
10052; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10053; NO-SIMD128-FAST-NEXT:    i64.mul $push1=, $2, $4
10054; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10055; NO-SIMD128-FAST-NEXT:    return
10056  %a = mul <2 x i64> %x, %y
10057  ret <2 x i64> %a
10058}
10059
10060define <2 x i64> @abs_v2i64(<2 x i64> %x) {
10061; SIMD128-LABEL: abs_v2i64:
10062; SIMD128:         .functype abs_v2i64 (v128) -> (v128)
10063; SIMD128-NEXT:  # %bb.0:
10064; SIMD128-NEXT:    i64x2.abs $push0=, $0
10065; SIMD128-NEXT:    return $pop0
10066;
10067; SIMD128-FAST-LABEL: abs_v2i64:
10068; SIMD128-FAST:         .functype abs_v2i64 (v128) -> (v128)
10069; SIMD128-FAST-NEXT:  # %bb.0:
10070; SIMD128-FAST-NEXT:    i64x2.abs $push0=, $0
10071; SIMD128-FAST-NEXT:    return $pop0
10072;
10073; NO-SIMD128-LABEL: abs_v2i64:
10074; NO-SIMD128:         .functype abs_v2i64 (i32, i64, i64) -> ()
10075; NO-SIMD128-NEXT:  # %bb.0:
10076; NO-SIMD128-NEXT:    i64.const $push0=, 63
10077; NO-SIMD128-NEXT:    i64.shr_s $push9=, $2, $pop0
10078; NO-SIMD128-NEXT:    local.tee $push8=, $3=, $pop9
10079; NO-SIMD128-NEXT:    i64.xor $push1=, $2, $pop8
10080; NO-SIMD128-NEXT:    i64.sub $push2=, $pop1, $3
10081; NO-SIMD128-NEXT:    i64.store 8($0), $pop2
10082; NO-SIMD128-NEXT:    i64.const $push7=, 63
10083; NO-SIMD128-NEXT:    i64.shr_s $push6=, $1, $pop7
10084; NO-SIMD128-NEXT:    local.tee $push5=, $2=, $pop6
10085; NO-SIMD128-NEXT:    i64.xor $push3=, $1, $pop5
10086; NO-SIMD128-NEXT:    i64.sub $push4=, $pop3, $2
10087; NO-SIMD128-NEXT:    i64.store 0($0), $pop4
10088; NO-SIMD128-NEXT:    return
10089;
10090; NO-SIMD128-FAST-LABEL: abs_v2i64:
10091; NO-SIMD128-FAST:         .functype abs_v2i64 (i32, i64, i64) -> ()
10092; NO-SIMD128-FAST-NEXT:  # %bb.0:
10093; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 63
10094; NO-SIMD128-FAST-NEXT:    i64.shr_s $push9=, $1, $pop0
10095; NO-SIMD128-FAST-NEXT:    local.tee $push8=, $3=, $pop9
10096; NO-SIMD128-FAST-NEXT:    i64.xor $push1=, $1, $pop8
10097; NO-SIMD128-FAST-NEXT:    i64.sub $push2=, $pop1, $3
10098; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop2
10099; NO-SIMD128-FAST-NEXT:    i64.const $push7=, 63
10100; NO-SIMD128-FAST-NEXT:    i64.shr_s $push6=, $2, $pop7
10101; NO-SIMD128-FAST-NEXT:    local.tee $push5=, $1=, $pop6
10102; NO-SIMD128-FAST-NEXT:    i64.xor $push3=, $2, $pop5
10103; NO-SIMD128-FAST-NEXT:    i64.sub $push4=, $pop3, $1
10104; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop4
10105; NO-SIMD128-FAST-NEXT:    return
10106  %a = sub <2 x i64> zeroinitializer, %x
10107  %b = icmp slt <2 x i64> %x, zeroinitializer
10108  %c = select <2 x i1> %b, <2 x i64> %a, <2 x i64> %x
10109  ret <2 x i64> %c
10110}
10111
10112define <2 x i64> @neg_v2i64(<2 x i64> %x) {
10113; SIMD128-LABEL: neg_v2i64:
10114; SIMD128:         .functype neg_v2i64 (v128) -> (v128)
10115; SIMD128-NEXT:  # %bb.0:
10116; SIMD128-NEXT:    i64x2.neg $push0=, $0
10117; SIMD128-NEXT:    return $pop0
10118;
10119; SIMD128-FAST-LABEL: neg_v2i64:
10120; SIMD128-FAST:         .functype neg_v2i64 (v128) -> (v128)
10121; SIMD128-FAST-NEXT:  # %bb.0:
10122; SIMD128-FAST-NEXT:    i64x2.neg $push0=, $0
10123; SIMD128-FAST-NEXT:    return $pop0
10124;
10125; NO-SIMD128-LABEL: neg_v2i64:
10126; NO-SIMD128:         .functype neg_v2i64 (i32, i64, i64) -> ()
10127; NO-SIMD128-NEXT:  # %bb.0:
10128; NO-SIMD128-NEXT:    i64.const $push0=, 0
10129; NO-SIMD128-NEXT:    i64.sub $push1=, $pop0, $2
10130; NO-SIMD128-NEXT:    i64.store 8($0), $pop1
10131; NO-SIMD128-NEXT:    i64.const $push3=, 0
10132; NO-SIMD128-NEXT:    i64.sub $push2=, $pop3, $1
10133; NO-SIMD128-NEXT:    i64.store 0($0), $pop2
10134; NO-SIMD128-NEXT:    return
10135;
10136; NO-SIMD128-FAST-LABEL: neg_v2i64:
10137; NO-SIMD128-FAST:         .functype neg_v2i64 (i32, i64, i64) -> ()
10138; NO-SIMD128-FAST-NEXT:  # %bb.0:
10139; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 0
10140; NO-SIMD128-FAST-NEXT:    i64.sub $push1=, $pop0, $1
10141; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10142; NO-SIMD128-FAST-NEXT:    i64.const $push3=, 0
10143; NO-SIMD128-FAST-NEXT:    i64.sub $push2=, $pop3, $2
10144; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop2
10145; NO-SIMD128-FAST-NEXT:    return
10146  %a = sub <2 x i64> <i64 0, i64 0>, %x
10147  ret <2 x i64> %a
10148}
10149
10150define <2 x i64> @shl_v2i64(<2 x i64> %v, i32 %x) {
10151; SIMD128-LABEL: shl_v2i64:
10152; SIMD128:         .functype shl_v2i64 (v128, i32) -> (v128)
10153; SIMD128-NEXT:  # %bb.0:
10154; SIMD128-NEXT:    i64x2.shl $push0=, $0, $1
10155; SIMD128-NEXT:    return $pop0
10156;
10157; SIMD128-FAST-LABEL: shl_v2i64:
10158; SIMD128-FAST:         .functype shl_v2i64 (v128, i32) -> (v128)
10159; SIMD128-FAST-NEXT:  # %bb.0:
10160; SIMD128-FAST-NEXT:    i64x2.shl $push0=, $0, $1
10161; SIMD128-FAST-NEXT:    return $pop0
10162;
10163; NO-SIMD128-LABEL: shl_v2i64:
10164; NO-SIMD128:         .functype shl_v2i64 (i32, i64, i64, i32) -> ()
10165; NO-SIMD128-NEXT:  # %bb.0:
10166; NO-SIMD128-NEXT:    i64.extend_i32_u $push3=, $3
10167; NO-SIMD128-NEXT:    local.tee $push2=, $4=, $pop3
10168; NO-SIMD128-NEXT:    i64.shl $push0=, $2, $pop2
10169; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10170; NO-SIMD128-NEXT:    i64.shl $push1=, $1, $4
10171; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10172; NO-SIMD128-NEXT:    return
10173;
10174; NO-SIMD128-FAST-LABEL: shl_v2i64:
10175; NO-SIMD128-FAST:         .functype shl_v2i64 (i32, i64, i64, i32) -> ()
10176; NO-SIMD128-FAST-NEXT:  # %bb.0:
10177; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push3=, $3
10178; NO-SIMD128-FAST-NEXT:    local.tee $push2=, $4=, $pop3
10179; NO-SIMD128-FAST-NEXT:    i64.shl $push0=, $2, $pop2
10180; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
10181; NO-SIMD128-FAST-NEXT:    i64.shl $push1=, $1, $4
10182; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10183; NO-SIMD128-FAST-NEXT:    return
10184  %x2 = zext i32 %x to i64
10185  %t = insertelement <2 x i64> undef, i64 %x2, i32 0
10186  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10187  %a = shl <2 x i64> %v, %s
10188  ret <2 x i64> %a
10189}
10190
10191define <2 x i64> @shl_sext_v2i64(<2 x i64> %v, i32 %x) {
10192; SIMD128-LABEL: shl_sext_v2i64:
10193; SIMD128:         .functype shl_sext_v2i64 (v128, i32) -> (v128)
10194; SIMD128-NEXT:  # %bb.0:
10195; SIMD128-NEXT:    i64x2.shl $push0=, $0, $1
10196; SIMD128-NEXT:    return $pop0
10197;
10198; SIMD128-FAST-LABEL: shl_sext_v2i64:
10199; SIMD128-FAST:         .functype shl_sext_v2i64 (v128, i32) -> (v128)
10200; SIMD128-FAST-NEXT:  # %bb.0:
10201; SIMD128-FAST-NEXT:    i64x2.shl $push0=, $0, $1
10202; SIMD128-FAST-NEXT:    return $pop0
10203;
10204; NO-SIMD128-LABEL: shl_sext_v2i64:
10205; NO-SIMD128:         .functype shl_sext_v2i64 (i32, i64, i64, i32) -> ()
10206; NO-SIMD128-NEXT:  # %bb.0:
10207; NO-SIMD128-NEXT:    i64.extend_i32_s $push3=, $3
10208; NO-SIMD128-NEXT:    local.tee $push2=, $4=, $pop3
10209; NO-SIMD128-NEXT:    i64.shl $push0=, $2, $pop2
10210; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10211; NO-SIMD128-NEXT:    i64.shl $push1=, $1, $4
10212; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10213; NO-SIMD128-NEXT:    return
10214;
10215; NO-SIMD128-FAST-LABEL: shl_sext_v2i64:
10216; NO-SIMD128-FAST:         .functype shl_sext_v2i64 (i32, i64, i64, i32) -> ()
10217; NO-SIMD128-FAST-NEXT:  # %bb.0:
10218; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push3=, $3
10219; NO-SIMD128-FAST-NEXT:    local.tee $push2=, $4=, $pop3
10220; NO-SIMD128-FAST-NEXT:    i64.shl $push0=, $2, $pop2
10221; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
10222; NO-SIMD128-FAST-NEXT:    i64.shl $push1=, $1, $4
10223; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10224; NO-SIMD128-FAST-NEXT:    return
10225  %x2 = sext i32 %x to i64
10226  %t = insertelement <2 x i64> undef, i64 %x2, i32 0
10227  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10228  %a = shl <2 x i64> %v, %s
10229  ret <2 x i64> %a
10230}
10231
10232define <2 x i64> @shl_noext_v2i64(<2 x i64> %v, i64 %x) {
10233; SIMD128-LABEL: shl_noext_v2i64:
10234; SIMD128:         .functype shl_noext_v2i64 (v128, i64) -> (v128)
10235; SIMD128-NEXT:  # %bb.0:
10236; SIMD128-NEXT:    i32.wrap_i64 $push0=, $1
10237; SIMD128-NEXT:    i64x2.shl $push1=, $0, $pop0
10238; SIMD128-NEXT:    return $pop1
10239;
10240; SIMD128-FAST-LABEL: shl_noext_v2i64:
10241; SIMD128-FAST:         .functype shl_noext_v2i64 (v128, i64) -> (v128)
10242; SIMD128-FAST-NEXT:  # %bb.0:
10243; SIMD128-FAST-NEXT:    i32.wrap_i64 $push1=, $1
10244; SIMD128-FAST-NEXT:    i64x2.shl $push0=, $0, $pop1
10245; SIMD128-FAST-NEXT:    return $pop0
10246;
10247; NO-SIMD128-LABEL: shl_noext_v2i64:
10248; NO-SIMD128:         .functype shl_noext_v2i64 (i32, i64, i64, i64) -> ()
10249; NO-SIMD128-NEXT:  # %bb.0:
10250; NO-SIMD128-NEXT:    i64.shl $push0=, $2, $3
10251; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10252; NO-SIMD128-NEXT:    i64.shl $push1=, $1, $3
10253; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10254; NO-SIMD128-NEXT:    return
10255;
10256; NO-SIMD128-FAST-LABEL: shl_noext_v2i64:
10257; NO-SIMD128-FAST:         .functype shl_noext_v2i64 (i32, i64, i64, i64) -> ()
10258; NO-SIMD128-FAST-NEXT:  # %bb.0:
10259; NO-SIMD128-FAST-NEXT:    i64.shl $push0=, $1, $3
10260; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10261; NO-SIMD128-FAST-NEXT:    i64.shl $push1=, $2, $3
10262; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10263; NO-SIMD128-FAST-NEXT:    return
10264  %t = insertelement <2 x i64> undef, i64 %x, i32 0
10265  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10266  %a = shl <2 x i64> %v, %s
10267  ret <2 x i64> %a
10268}
10269
10270define <2 x i64> @shl_const_v2i64(<2 x i64> %v) {
10271; SIMD128-LABEL: shl_const_v2i64:
10272; SIMD128:         .functype shl_const_v2i64 (v128) -> (v128)
10273; SIMD128-NEXT:  # %bb.0:
10274; SIMD128-NEXT:    i32.const $push0=, 5
10275; SIMD128-NEXT:    i64x2.shl $push1=, $0, $pop0
10276; SIMD128-NEXT:    return $pop1
10277;
10278; SIMD128-FAST-LABEL: shl_const_v2i64:
10279; SIMD128-FAST:         .functype shl_const_v2i64 (v128) -> (v128)
10280; SIMD128-FAST-NEXT:  # %bb.0:
10281; SIMD128-FAST-NEXT:    i32.const $push1=, 5
10282; SIMD128-FAST-NEXT:    i64x2.shl $push0=, $0, $pop1
10283; SIMD128-FAST-NEXT:    return $pop0
10284;
10285; NO-SIMD128-LABEL: shl_const_v2i64:
10286; NO-SIMD128:         .functype shl_const_v2i64 (i32, i64, i64) -> ()
10287; NO-SIMD128-NEXT:  # %bb.0:
10288; NO-SIMD128-NEXT:    i64.const $push0=, 5
10289; NO-SIMD128-NEXT:    i64.shl $push1=, $2, $pop0
10290; NO-SIMD128-NEXT:    i64.store 8($0), $pop1
10291; NO-SIMD128-NEXT:    i64.const $push3=, 5
10292; NO-SIMD128-NEXT:    i64.shl $push2=, $1, $pop3
10293; NO-SIMD128-NEXT:    i64.store 0($0), $pop2
10294; NO-SIMD128-NEXT:    return
10295;
10296; NO-SIMD128-FAST-LABEL: shl_const_v2i64:
10297; NO-SIMD128-FAST:         .functype shl_const_v2i64 (i32, i64, i64) -> ()
10298; NO-SIMD128-FAST-NEXT:  # %bb.0:
10299; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 5
10300; NO-SIMD128-FAST-NEXT:    i64.shl $push1=, $1, $pop0
10301; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10302; NO-SIMD128-FAST-NEXT:    i64.const $push3=, 5
10303; NO-SIMD128-FAST-NEXT:    i64.shl $push2=, $2, $pop3
10304; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop2
10305; NO-SIMD128-FAST-NEXT:    return
10306  %a = shl <2 x i64> %v, <i64 5, i64 5>
10307  ret <2 x i64> %a
10308}
10309
10310define <2 x i64> @shl_vec_v2i64(<2 x i64> %v, <2 x i64> %x) {
10311; SIMD128-LABEL: shl_vec_v2i64:
10312; SIMD128:         .functype shl_vec_v2i64 (v128, v128) -> (v128)
10313; SIMD128-NEXT:  # %bb.0:
10314; SIMD128-NEXT:    i64x2.extract_lane $push4=, $0, 0
10315; SIMD128-NEXT:    i64x2.extract_lane $push3=, $1, 0
10316; SIMD128-NEXT:    i64.shl $push5=, $pop4, $pop3
10317; SIMD128-NEXT:    i64x2.splat $push6=, $pop5
10318; SIMD128-NEXT:    i64x2.extract_lane $push1=, $0, 1
10319; SIMD128-NEXT:    i64x2.extract_lane $push0=, $1, 1
10320; SIMD128-NEXT:    i64.shl $push2=, $pop1, $pop0
10321; SIMD128-NEXT:    i64x2.replace_lane $push7=, $pop6, 1, $pop2
10322; SIMD128-NEXT:    return $pop7
10323;
10324; SIMD128-FAST-LABEL: shl_vec_v2i64:
10325; SIMD128-FAST:         .functype shl_vec_v2i64 (v128, v128) -> (v128)
10326; SIMD128-FAST-NEXT:  # %bb.0:
10327; SIMD128-FAST-NEXT:    i64x2.extract_lane $push5=, $0, 0
10328; SIMD128-FAST-NEXT:    i64x2.extract_lane $push4=, $1, 0
10329; SIMD128-FAST-NEXT:    i64.shl $push6=, $pop5, $pop4
10330; SIMD128-FAST-NEXT:    i64x2.splat $push7=, $pop6
10331; SIMD128-FAST-NEXT:    i64x2.extract_lane $push2=, $0, 1
10332; SIMD128-FAST-NEXT:    i64x2.extract_lane $push1=, $1, 1
10333; SIMD128-FAST-NEXT:    i64.shl $push3=, $pop2, $pop1
10334; SIMD128-FAST-NEXT:    i64x2.replace_lane $push0=, $pop7, 1, $pop3
10335; SIMD128-FAST-NEXT:    return $pop0
10336;
10337; NO-SIMD128-LABEL: shl_vec_v2i64:
10338; NO-SIMD128:         .functype shl_vec_v2i64 (i32, i64, i64, i64, i64) -> ()
10339; NO-SIMD128-NEXT:  # %bb.0:
10340; NO-SIMD128-NEXT:    i64.shl $push0=, $2, $4
10341; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10342; NO-SIMD128-NEXT:    i64.shl $push1=, $1, $3
10343; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10344; NO-SIMD128-NEXT:    return
10345;
10346; NO-SIMD128-FAST-LABEL: shl_vec_v2i64:
10347; NO-SIMD128-FAST:         .functype shl_vec_v2i64 (i32, i64, i64, i64, i64) -> ()
10348; NO-SIMD128-FAST-NEXT:  # %bb.0:
10349; NO-SIMD128-FAST-NEXT:    i64.shl $push0=, $1, $3
10350; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10351; NO-SIMD128-FAST-NEXT:    i64.shl $push1=, $2, $4
10352; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10353; NO-SIMD128-FAST-NEXT:    return
10354  %a = shl <2 x i64> %v, %x
10355  ret <2 x i64> %a
10356}
10357
10358define <2 x i64> @shr_s_v2i64(<2 x i64> %v, i32 %x) {
10359; SIMD128-LABEL: shr_s_v2i64:
10360; SIMD128:         .functype shr_s_v2i64 (v128, i32) -> (v128)
10361; SIMD128-NEXT:  # %bb.0:
10362; SIMD128-NEXT:    i64x2.shr_s $push0=, $0, $1
10363; SIMD128-NEXT:    return $pop0
10364;
10365; SIMD128-FAST-LABEL: shr_s_v2i64:
10366; SIMD128-FAST:         .functype shr_s_v2i64 (v128, i32) -> (v128)
10367; SIMD128-FAST-NEXT:  # %bb.0:
10368; SIMD128-FAST-NEXT:    i64x2.shr_s $push0=, $0, $1
10369; SIMD128-FAST-NEXT:    return $pop0
10370;
10371; NO-SIMD128-LABEL: shr_s_v2i64:
10372; NO-SIMD128:         .functype shr_s_v2i64 (i32, i64, i64, i32) -> ()
10373; NO-SIMD128-NEXT:  # %bb.0:
10374; NO-SIMD128-NEXT:    i64.extend_i32_u $push3=, $3
10375; NO-SIMD128-NEXT:    local.tee $push2=, $4=, $pop3
10376; NO-SIMD128-NEXT:    i64.shr_s $push0=, $2, $pop2
10377; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10378; NO-SIMD128-NEXT:    i64.shr_s $push1=, $1, $4
10379; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10380; NO-SIMD128-NEXT:    return
10381;
10382; NO-SIMD128-FAST-LABEL: shr_s_v2i64:
10383; NO-SIMD128-FAST:         .functype shr_s_v2i64 (i32, i64, i64, i32) -> ()
10384; NO-SIMD128-FAST-NEXT:  # %bb.0:
10385; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push3=, $3
10386; NO-SIMD128-FAST-NEXT:    local.tee $push2=, $4=, $pop3
10387; NO-SIMD128-FAST-NEXT:    i64.shr_s $push0=, $2, $pop2
10388; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
10389; NO-SIMD128-FAST-NEXT:    i64.shr_s $push1=, $1, $4
10390; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10391; NO-SIMD128-FAST-NEXT:    return
10392  %x2 = zext i32 %x to i64
10393  %t = insertelement <2 x i64> undef, i64 %x2, i32 0
10394  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10395  %a = ashr <2 x i64> %v, %s
10396  ret <2 x i64> %a
10397}
10398
10399define <2 x i64> @shr_s_sext_v2i64(<2 x i64> %v, i32 %x) {
10400; SIMD128-LABEL: shr_s_sext_v2i64:
10401; SIMD128:         .functype shr_s_sext_v2i64 (v128, i32) -> (v128)
10402; SIMD128-NEXT:  # %bb.0:
10403; SIMD128-NEXT:    i64x2.shr_s $push0=, $0, $1
10404; SIMD128-NEXT:    return $pop0
10405;
10406; SIMD128-FAST-LABEL: shr_s_sext_v2i64:
10407; SIMD128-FAST:         .functype shr_s_sext_v2i64 (v128, i32) -> (v128)
10408; SIMD128-FAST-NEXT:  # %bb.0:
10409; SIMD128-FAST-NEXT:    i64x2.shr_s $push0=, $0, $1
10410; SIMD128-FAST-NEXT:    return $pop0
10411;
10412; NO-SIMD128-LABEL: shr_s_sext_v2i64:
10413; NO-SIMD128:         .functype shr_s_sext_v2i64 (i32, i64, i64, i32) -> ()
10414; NO-SIMD128-NEXT:  # %bb.0:
10415; NO-SIMD128-NEXT:    i64.extend_i32_s $push3=, $3
10416; NO-SIMD128-NEXT:    local.tee $push2=, $4=, $pop3
10417; NO-SIMD128-NEXT:    i64.shr_s $push0=, $2, $pop2
10418; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10419; NO-SIMD128-NEXT:    i64.shr_s $push1=, $1, $4
10420; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10421; NO-SIMD128-NEXT:    return
10422;
10423; NO-SIMD128-FAST-LABEL: shr_s_sext_v2i64:
10424; NO-SIMD128-FAST:         .functype shr_s_sext_v2i64 (i32, i64, i64, i32) -> ()
10425; NO-SIMD128-FAST-NEXT:  # %bb.0:
10426; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push3=, $3
10427; NO-SIMD128-FAST-NEXT:    local.tee $push2=, $4=, $pop3
10428; NO-SIMD128-FAST-NEXT:    i64.shr_s $push0=, $2, $pop2
10429; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
10430; NO-SIMD128-FAST-NEXT:    i64.shr_s $push1=, $1, $4
10431; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10432; NO-SIMD128-FAST-NEXT:    return
10433  %x2 = sext i32 %x to i64
10434  %t = insertelement <2 x i64> undef, i64 %x2, i32 0
10435  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10436  %a = ashr <2 x i64> %v, %s
10437  ret <2 x i64> %a
10438}
10439
10440define <2 x i64> @shr_s_noext_v2i64(<2 x i64> %v, i64 %x) {
10441; SIMD128-LABEL: shr_s_noext_v2i64:
10442; SIMD128:         .functype shr_s_noext_v2i64 (v128, i64) -> (v128)
10443; SIMD128-NEXT:  # %bb.0:
10444; SIMD128-NEXT:    i32.wrap_i64 $push0=, $1
10445; SIMD128-NEXT:    i64x2.shr_s $push1=, $0, $pop0
10446; SIMD128-NEXT:    return $pop1
10447;
10448; SIMD128-FAST-LABEL: shr_s_noext_v2i64:
10449; SIMD128-FAST:         .functype shr_s_noext_v2i64 (v128, i64) -> (v128)
10450; SIMD128-FAST-NEXT:  # %bb.0:
10451; SIMD128-FAST-NEXT:    i32.wrap_i64 $push1=, $1
10452; SIMD128-FAST-NEXT:    i64x2.shr_s $push0=, $0, $pop1
10453; SIMD128-FAST-NEXT:    return $pop0
10454;
10455; NO-SIMD128-LABEL: shr_s_noext_v2i64:
10456; NO-SIMD128:         .functype shr_s_noext_v2i64 (i32, i64, i64, i64) -> ()
10457; NO-SIMD128-NEXT:  # %bb.0:
10458; NO-SIMD128-NEXT:    i64.shr_s $push0=, $2, $3
10459; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10460; NO-SIMD128-NEXT:    i64.shr_s $push1=, $1, $3
10461; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10462; NO-SIMD128-NEXT:    return
10463;
10464; NO-SIMD128-FAST-LABEL: shr_s_noext_v2i64:
10465; NO-SIMD128-FAST:         .functype shr_s_noext_v2i64 (i32, i64, i64, i64) -> ()
10466; NO-SIMD128-FAST-NEXT:  # %bb.0:
10467; NO-SIMD128-FAST-NEXT:    i64.shr_s $push0=, $1, $3
10468; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10469; NO-SIMD128-FAST-NEXT:    i64.shr_s $push1=, $2, $3
10470; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10471; NO-SIMD128-FAST-NEXT:    return
10472  %t = insertelement <2 x i64> undef, i64 %x, i32 0
10473  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10474  %a = ashr <2 x i64> %v, %s
10475  ret <2 x i64> %a
10476}
10477
10478define <2 x i64> @shr_s_const_v2i64(<2 x i64> %v) {
10479; SIMD128-LABEL: shr_s_const_v2i64:
10480; SIMD128:         .functype shr_s_const_v2i64 (v128) -> (v128)
10481; SIMD128-NEXT:  # %bb.0:
10482; SIMD128-NEXT:    i32.const $push0=, 5
10483; SIMD128-NEXT:    i64x2.shr_s $push1=, $0, $pop0
10484; SIMD128-NEXT:    return $pop1
10485;
10486; SIMD128-FAST-LABEL: shr_s_const_v2i64:
10487; SIMD128-FAST:         .functype shr_s_const_v2i64 (v128) -> (v128)
10488; SIMD128-FAST-NEXT:  # %bb.0:
10489; SIMD128-FAST-NEXT:    i32.const $push1=, 5
10490; SIMD128-FAST-NEXT:    i64x2.shr_s $push0=, $0, $pop1
10491; SIMD128-FAST-NEXT:    return $pop0
10492;
10493; NO-SIMD128-LABEL: shr_s_const_v2i64:
10494; NO-SIMD128:         .functype shr_s_const_v2i64 (i32, i64, i64) -> ()
10495; NO-SIMD128-NEXT:  # %bb.0:
10496; NO-SIMD128-NEXT:    i64.const $push0=, 5
10497; NO-SIMD128-NEXT:    i64.shr_s $push1=, $2, $pop0
10498; NO-SIMD128-NEXT:    i64.store 8($0), $pop1
10499; NO-SIMD128-NEXT:    i64.const $push3=, 5
10500; NO-SIMD128-NEXT:    i64.shr_s $push2=, $1, $pop3
10501; NO-SIMD128-NEXT:    i64.store 0($0), $pop2
10502; NO-SIMD128-NEXT:    return
10503;
10504; NO-SIMD128-FAST-LABEL: shr_s_const_v2i64:
10505; NO-SIMD128-FAST:         .functype shr_s_const_v2i64 (i32, i64, i64) -> ()
10506; NO-SIMD128-FAST-NEXT:  # %bb.0:
10507; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 5
10508; NO-SIMD128-FAST-NEXT:    i64.shr_s $push1=, $1, $pop0
10509; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10510; NO-SIMD128-FAST-NEXT:    i64.const $push3=, 5
10511; NO-SIMD128-FAST-NEXT:    i64.shr_s $push2=, $2, $pop3
10512; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop2
10513; NO-SIMD128-FAST-NEXT:    return
10514  %a = ashr <2 x i64> %v, <i64 5, i64 5>
10515  ret <2 x i64> %a
10516}
10517
10518define <2 x i64> @shr_s_vec_v2i64(<2 x i64> %v, <2 x i64> %x) {
10519; SIMD128-LABEL: shr_s_vec_v2i64:
10520; SIMD128:         .functype shr_s_vec_v2i64 (v128, v128) -> (v128)
10521; SIMD128-NEXT:  # %bb.0:
10522; SIMD128-NEXT:    i64x2.extract_lane $push4=, $0, 0
10523; SIMD128-NEXT:    i64x2.extract_lane $push3=, $1, 0
10524; SIMD128-NEXT:    i64.shr_s $push5=, $pop4, $pop3
10525; SIMD128-NEXT:    i64x2.splat $push6=, $pop5
10526; SIMD128-NEXT:    i64x2.extract_lane $push1=, $0, 1
10527; SIMD128-NEXT:    i64x2.extract_lane $push0=, $1, 1
10528; SIMD128-NEXT:    i64.shr_s $push2=, $pop1, $pop0
10529; SIMD128-NEXT:    i64x2.replace_lane $push7=, $pop6, 1, $pop2
10530; SIMD128-NEXT:    return $pop7
10531;
10532; SIMD128-FAST-LABEL: shr_s_vec_v2i64:
10533; SIMD128-FAST:         .functype shr_s_vec_v2i64 (v128, v128) -> (v128)
10534; SIMD128-FAST-NEXT:  # %bb.0:
10535; SIMD128-FAST-NEXT:    i64x2.extract_lane $push5=, $0, 0
10536; SIMD128-FAST-NEXT:    i64x2.extract_lane $push4=, $1, 0
10537; SIMD128-FAST-NEXT:    i64.shr_s $push6=, $pop5, $pop4
10538; SIMD128-FAST-NEXT:    i64x2.splat $push7=, $pop6
10539; SIMD128-FAST-NEXT:    i64x2.extract_lane $push2=, $0, 1
10540; SIMD128-FAST-NEXT:    i64x2.extract_lane $push1=, $1, 1
10541; SIMD128-FAST-NEXT:    i64.shr_s $push3=, $pop2, $pop1
10542; SIMD128-FAST-NEXT:    i64x2.replace_lane $push0=, $pop7, 1, $pop3
10543; SIMD128-FAST-NEXT:    return $pop0
10544;
10545; NO-SIMD128-LABEL: shr_s_vec_v2i64:
10546; NO-SIMD128:         .functype shr_s_vec_v2i64 (i32, i64, i64, i64, i64) -> ()
10547; NO-SIMD128-NEXT:  # %bb.0:
10548; NO-SIMD128-NEXT:    i64.shr_s $push0=, $2, $4
10549; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10550; NO-SIMD128-NEXT:    i64.shr_s $push1=, $1, $3
10551; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10552; NO-SIMD128-NEXT:    return
10553;
10554; NO-SIMD128-FAST-LABEL: shr_s_vec_v2i64:
10555; NO-SIMD128-FAST:         .functype shr_s_vec_v2i64 (i32, i64, i64, i64, i64) -> ()
10556; NO-SIMD128-FAST-NEXT:  # %bb.0:
10557; NO-SIMD128-FAST-NEXT:    i64.shr_s $push0=, $1, $3
10558; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10559; NO-SIMD128-FAST-NEXT:    i64.shr_s $push1=, $2, $4
10560; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10561; NO-SIMD128-FAST-NEXT:    return
10562  %a = ashr <2 x i64> %v, %x
10563  ret <2 x i64> %a
10564}
10565
10566define <2 x i64> @shr_u_v2i64(<2 x i64> %v, i32 %x) {
10567; SIMD128-LABEL: shr_u_v2i64:
10568; SIMD128:         .functype shr_u_v2i64 (v128, i32) -> (v128)
10569; SIMD128-NEXT:  # %bb.0:
10570; SIMD128-NEXT:    i64x2.shr_u $push0=, $0, $1
10571; SIMD128-NEXT:    return $pop0
10572;
10573; SIMD128-FAST-LABEL: shr_u_v2i64:
10574; SIMD128-FAST:         .functype shr_u_v2i64 (v128, i32) -> (v128)
10575; SIMD128-FAST-NEXT:  # %bb.0:
10576; SIMD128-FAST-NEXT:    i64x2.shr_u $push0=, $0, $1
10577; SIMD128-FAST-NEXT:    return $pop0
10578;
10579; NO-SIMD128-LABEL: shr_u_v2i64:
10580; NO-SIMD128:         .functype shr_u_v2i64 (i32, i64, i64, i32) -> ()
10581; NO-SIMD128-NEXT:  # %bb.0:
10582; NO-SIMD128-NEXT:    i64.extend_i32_u $push3=, $3
10583; NO-SIMD128-NEXT:    local.tee $push2=, $4=, $pop3
10584; NO-SIMD128-NEXT:    i64.shr_u $push0=, $2, $pop2
10585; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10586; NO-SIMD128-NEXT:    i64.shr_u $push1=, $1, $4
10587; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10588; NO-SIMD128-NEXT:    return
10589;
10590; NO-SIMD128-FAST-LABEL: shr_u_v2i64:
10591; NO-SIMD128-FAST:         .functype shr_u_v2i64 (i32, i64, i64, i32) -> ()
10592; NO-SIMD128-FAST-NEXT:  # %bb.0:
10593; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push3=, $3
10594; NO-SIMD128-FAST-NEXT:    local.tee $push2=, $4=, $pop3
10595; NO-SIMD128-FAST-NEXT:    i64.shr_u $push0=, $2, $pop2
10596; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
10597; NO-SIMD128-FAST-NEXT:    i64.shr_u $push1=, $1, $4
10598; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10599; NO-SIMD128-FAST-NEXT:    return
10600  %x2 = zext i32 %x to i64
10601  %t = insertelement <2 x i64> undef, i64 %x2, i32 0
10602  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10603  %a = lshr <2 x i64> %v, %s
10604  ret <2 x i64> %a
10605}
10606
10607define <2 x i64> @shr_u_sext_v2i64(<2 x i64> %v, i32 %x) {
10608; SIMD128-LABEL: shr_u_sext_v2i64:
10609; SIMD128:         .functype shr_u_sext_v2i64 (v128, i32) -> (v128)
10610; SIMD128-NEXT:  # %bb.0:
10611; SIMD128-NEXT:    i64x2.shr_u $push0=, $0, $1
10612; SIMD128-NEXT:    return $pop0
10613;
10614; SIMD128-FAST-LABEL: shr_u_sext_v2i64:
10615; SIMD128-FAST:         .functype shr_u_sext_v2i64 (v128, i32) -> (v128)
10616; SIMD128-FAST-NEXT:  # %bb.0:
10617; SIMD128-FAST-NEXT:    i64x2.shr_u $push0=, $0, $1
10618; SIMD128-FAST-NEXT:    return $pop0
10619;
10620; NO-SIMD128-LABEL: shr_u_sext_v2i64:
10621; NO-SIMD128:         .functype shr_u_sext_v2i64 (i32, i64, i64, i32) -> ()
10622; NO-SIMD128-NEXT:  # %bb.0:
10623; NO-SIMD128-NEXT:    i64.extend_i32_s $push3=, $3
10624; NO-SIMD128-NEXT:    local.tee $push2=, $4=, $pop3
10625; NO-SIMD128-NEXT:    i64.shr_u $push0=, $2, $pop2
10626; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10627; NO-SIMD128-NEXT:    i64.shr_u $push1=, $1, $4
10628; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10629; NO-SIMD128-NEXT:    return
10630;
10631; NO-SIMD128-FAST-LABEL: shr_u_sext_v2i64:
10632; NO-SIMD128-FAST:         .functype shr_u_sext_v2i64 (i32, i64, i64, i32) -> ()
10633; NO-SIMD128-FAST-NEXT:  # %bb.0:
10634; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push3=, $3
10635; NO-SIMD128-FAST-NEXT:    local.tee $push2=, $4=, $pop3
10636; NO-SIMD128-FAST-NEXT:    i64.shr_u $push0=, $2, $pop2
10637; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
10638; NO-SIMD128-FAST-NEXT:    i64.shr_u $push1=, $1, $4
10639; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10640; NO-SIMD128-FAST-NEXT:    return
10641  %x2 = sext i32 %x to i64
10642  %t = insertelement <2 x i64> undef, i64 %x2, i32 0
10643  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10644  %a = lshr <2 x i64> %v, %s
10645  ret <2 x i64> %a
10646}
10647
10648define <2 x i64> @shr_u_noext_v2i64(<2 x i64> %v, i64 %x) {
10649; SIMD128-LABEL: shr_u_noext_v2i64:
10650; SIMD128:         .functype shr_u_noext_v2i64 (v128, i64) -> (v128)
10651; SIMD128-NEXT:  # %bb.0:
10652; SIMD128-NEXT:    i32.wrap_i64 $push0=, $1
10653; SIMD128-NEXT:    i64x2.shr_u $push1=, $0, $pop0
10654; SIMD128-NEXT:    return $pop1
10655;
10656; SIMD128-FAST-LABEL: shr_u_noext_v2i64:
10657; SIMD128-FAST:         .functype shr_u_noext_v2i64 (v128, i64) -> (v128)
10658; SIMD128-FAST-NEXT:  # %bb.0:
10659; SIMD128-FAST-NEXT:    i32.wrap_i64 $push1=, $1
10660; SIMD128-FAST-NEXT:    i64x2.shr_u $push0=, $0, $pop1
10661; SIMD128-FAST-NEXT:    return $pop0
10662;
10663; NO-SIMD128-LABEL: shr_u_noext_v2i64:
10664; NO-SIMD128:         .functype shr_u_noext_v2i64 (i32, i64, i64, i64) -> ()
10665; NO-SIMD128-NEXT:  # %bb.0:
10666; NO-SIMD128-NEXT:    i64.shr_u $push0=, $2, $3
10667; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10668; NO-SIMD128-NEXT:    i64.shr_u $push1=, $1, $3
10669; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10670; NO-SIMD128-NEXT:    return
10671;
10672; NO-SIMD128-FAST-LABEL: shr_u_noext_v2i64:
10673; NO-SIMD128-FAST:         .functype shr_u_noext_v2i64 (i32, i64, i64, i64) -> ()
10674; NO-SIMD128-FAST-NEXT:  # %bb.0:
10675; NO-SIMD128-FAST-NEXT:    i64.shr_u $push0=, $1, $3
10676; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10677; NO-SIMD128-FAST-NEXT:    i64.shr_u $push1=, $2, $3
10678; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10679; NO-SIMD128-FAST-NEXT:    return
10680  %t = insertelement <2 x i64> undef, i64 %x, i32 0
10681  %s = shufflevector <2 x i64> %t, <2 x i64> undef, <2 x i32> <i32 0, i32 0>
10682  %a = lshr <2 x i64> %v, %s
10683  ret <2 x i64> %a
10684}
10685
10686define <2 x i64> @shr_u_const_v2i64(<2 x i64> %v) {
10687; SIMD128-LABEL: shr_u_const_v2i64:
10688; SIMD128:         .functype shr_u_const_v2i64 (v128) -> (v128)
10689; SIMD128-NEXT:  # %bb.0:
10690; SIMD128-NEXT:    i32.const $push0=, 5
10691; SIMD128-NEXT:    i64x2.shr_u $push1=, $0, $pop0
10692; SIMD128-NEXT:    return $pop1
10693;
10694; SIMD128-FAST-LABEL: shr_u_const_v2i64:
10695; SIMD128-FAST:         .functype shr_u_const_v2i64 (v128) -> (v128)
10696; SIMD128-FAST-NEXT:  # %bb.0:
10697; SIMD128-FAST-NEXT:    i32.const $push1=, 5
10698; SIMD128-FAST-NEXT:    i64x2.shr_u $push0=, $0, $pop1
10699; SIMD128-FAST-NEXT:    return $pop0
10700;
10701; NO-SIMD128-LABEL: shr_u_const_v2i64:
10702; NO-SIMD128:         .functype shr_u_const_v2i64 (i32, i64, i64) -> ()
10703; NO-SIMD128-NEXT:  # %bb.0:
10704; NO-SIMD128-NEXT:    i64.const $push0=, 5
10705; NO-SIMD128-NEXT:    i64.shr_u $push1=, $2, $pop0
10706; NO-SIMD128-NEXT:    i64.store 8($0), $pop1
10707; NO-SIMD128-NEXT:    i64.const $push3=, 5
10708; NO-SIMD128-NEXT:    i64.shr_u $push2=, $1, $pop3
10709; NO-SIMD128-NEXT:    i64.store 0($0), $pop2
10710; NO-SIMD128-NEXT:    return
10711;
10712; NO-SIMD128-FAST-LABEL: shr_u_const_v2i64:
10713; NO-SIMD128-FAST:         .functype shr_u_const_v2i64 (i32, i64, i64) -> ()
10714; NO-SIMD128-FAST-NEXT:  # %bb.0:
10715; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 5
10716; NO-SIMD128-FAST-NEXT:    i64.shr_u $push1=, $1, $pop0
10717; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10718; NO-SIMD128-FAST-NEXT:    i64.const $push3=, 5
10719; NO-SIMD128-FAST-NEXT:    i64.shr_u $push2=, $2, $pop3
10720; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop2
10721; NO-SIMD128-FAST-NEXT:    return
10722  %a = lshr <2 x i64> %v, <i64 5, i64 5>
10723  ret <2 x i64> %a
10724}
10725
10726define <2 x i64> @shr_u_vec_v2i64(<2 x i64> %v, <2 x i64> %x) {
10727; SIMD128-LABEL: shr_u_vec_v2i64:
10728; SIMD128:         .functype shr_u_vec_v2i64 (v128, v128) -> (v128)
10729; SIMD128-NEXT:  # %bb.0:
10730; SIMD128-NEXT:    i64x2.extract_lane $push4=, $0, 0
10731; SIMD128-NEXT:    i64x2.extract_lane $push3=, $1, 0
10732; SIMD128-NEXT:    i64.shr_u $push5=, $pop4, $pop3
10733; SIMD128-NEXT:    i64x2.splat $push6=, $pop5
10734; SIMD128-NEXT:    i64x2.extract_lane $push1=, $0, 1
10735; SIMD128-NEXT:    i64x2.extract_lane $push0=, $1, 1
10736; SIMD128-NEXT:    i64.shr_u $push2=, $pop1, $pop0
10737; SIMD128-NEXT:    i64x2.replace_lane $push7=, $pop6, 1, $pop2
10738; SIMD128-NEXT:    return $pop7
10739;
10740; SIMD128-FAST-LABEL: shr_u_vec_v2i64:
10741; SIMD128-FAST:         .functype shr_u_vec_v2i64 (v128, v128) -> (v128)
10742; SIMD128-FAST-NEXT:  # %bb.0:
10743; SIMD128-FAST-NEXT:    i64x2.extract_lane $push5=, $0, 0
10744; SIMD128-FAST-NEXT:    i64x2.extract_lane $push4=, $1, 0
10745; SIMD128-FAST-NEXT:    i64.shr_u $push6=, $pop5, $pop4
10746; SIMD128-FAST-NEXT:    i64x2.splat $push7=, $pop6
10747; SIMD128-FAST-NEXT:    i64x2.extract_lane $push2=, $0, 1
10748; SIMD128-FAST-NEXT:    i64x2.extract_lane $push1=, $1, 1
10749; SIMD128-FAST-NEXT:    i64.shr_u $push3=, $pop2, $pop1
10750; SIMD128-FAST-NEXT:    i64x2.replace_lane $push0=, $pop7, 1, $pop3
10751; SIMD128-FAST-NEXT:    return $pop0
10752;
10753; NO-SIMD128-LABEL: shr_u_vec_v2i64:
10754; NO-SIMD128:         .functype shr_u_vec_v2i64 (i32, i64, i64, i64, i64) -> ()
10755; NO-SIMD128-NEXT:  # %bb.0:
10756; NO-SIMD128-NEXT:    i64.shr_u $push0=, $2, $4
10757; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10758; NO-SIMD128-NEXT:    i64.shr_u $push1=, $1, $3
10759; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10760; NO-SIMD128-NEXT:    return
10761;
10762; NO-SIMD128-FAST-LABEL: shr_u_vec_v2i64:
10763; NO-SIMD128-FAST:         .functype shr_u_vec_v2i64 (i32, i64, i64, i64, i64) -> ()
10764; NO-SIMD128-FAST-NEXT:  # %bb.0:
10765; NO-SIMD128-FAST-NEXT:    i64.shr_u $push0=, $1, $3
10766; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10767; NO-SIMD128-FAST-NEXT:    i64.shr_u $push1=, $2, $4
10768; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10769; NO-SIMD128-FAST-NEXT:    return
10770  %a = lshr <2 x i64> %v, %x
10771  ret <2 x i64> %a
10772}
10773
10774define <2 x i64> @and_v2i64(<2 x i64> %x, <2 x i64> %y) {
10775; SIMD128-LABEL: and_v2i64:
10776; SIMD128:         .functype and_v2i64 (v128, v128) -> (v128)
10777; SIMD128-NEXT:  # %bb.0:
10778; SIMD128-NEXT:    v128.and $push0=, $0, $1
10779; SIMD128-NEXT:    return $pop0
10780;
10781; SIMD128-FAST-LABEL: and_v2i64:
10782; SIMD128-FAST:         .functype and_v2i64 (v128, v128) -> (v128)
10783; SIMD128-FAST-NEXT:  # %bb.0:
10784; SIMD128-FAST-NEXT:    v128.and $push0=, $0, $1
10785; SIMD128-FAST-NEXT:    return $pop0
10786;
10787; NO-SIMD128-LABEL: and_v2i64:
10788; NO-SIMD128:         .functype and_v2i64 (i32, i64, i64, i64, i64) -> ()
10789; NO-SIMD128-NEXT:  # %bb.0:
10790; NO-SIMD128-NEXT:    i64.and $push0=, $2, $4
10791; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10792; NO-SIMD128-NEXT:    i64.and $push1=, $1, $3
10793; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10794; NO-SIMD128-NEXT:    return
10795;
10796; NO-SIMD128-FAST-LABEL: and_v2i64:
10797; NO-SIMD128-FAST:         .functype and_v2i64 (i32, i64, i64, i64, i64) -> ()
10798; NO-SIMD128-FAST-NEXT:  # %bb.0:
10799; NO-SIMD128-FAST-NEXT:    i64.and $push0=, $1, $3
10800; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10801; NO-SIMD128-FAST-NEXT:    i64.and $push1=, $2, $4
10802; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10803; NO-SIMD128-FAST-NEXT:    return
10804  %a = and <2 x i64> %x, %y
10805  ret <2 x i64> %a
10806}
10807
10808define <2 x i64> @or_v2i64(<2 x i64> %x, <2 x i64> %y) {
10809; SIMD128-LABEL: or_v2i64:
10810; SIMD128:         .functype or_v2i64 (v128, v128) -> (v128)
10811; SIMD128-NEXT:  # %bb.0:
10812; SIMD128-NEXT:    v128.or $push0=, $0, $1
10813; SIMD128-NEXT:    return $pop0
10814;
10815; SIMD128-FAST-LABEL: or_v2i64:
10816; SIMD128-FAST:         .functype or_v2i64 (v128, v128) -> (v128)
10817; SIMD128-FAST-NEXT:  # %bb.0:
10818; SIMD128-FAST-NEXT:    v128.or $push0=, $0, $1
10819; SIMD128-FAST-NEXT:    return $pop0
10820;
10821; NO-SIMD128-LABEL: or_v2i64:
10822; NO-SIMD128:         .functype or_v2i64 (i32, i64, i64, i64, i64) -> ()
10823; NO-SIMD128-NEXT:  # %bb.0:
10824; NO-SIMD128-NEXT:    i64.or $push0=, $2, $4
10825; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10826; NO-SIMD128-NEXT:    i64.or $push1=, $1, $3
10827; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10828; NO-SIMD128-NEXT:    return
10829;
10830; NO-SIMD128-FAST-LABEL: or_v2i64:
10831; NO-SIMD128-FAST:         .functype or_v2i64 (i32, i64, i64, i64, i64) -> ()
10832; NO-SIMD128-FAST-NEXT:  # %bb.0:
10833; NO-SIMD128-FAST-NEXT:    i64.or $push0=, $1, $3
10834; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10835; NO-SIMD128-FAST-NEXT:    i64.or $push1=, $2, $4
10836; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10837; NO-SIMD128-FAST-NEXT:    return
10838  %a = or <2 x i64> %x, %y
10839  ret <2 x i64> %a
10840}
10841
10842define <2 x i64> @xor_v2i64(<2 x i64> %x, <2 x i64> %y) {
10843; SIMD128-LABEL: xor_v2i64:
10844; SIMD128:         .functype xor_v2i64 (v128, v128) -> (v128)
10845; SIMD128-NEXT:  # %bb.0:
10846; SIMD128-NEXT:    v128.xor $push0=, $0, $1
10847; SIMD128-NEXT:    return $pop0
10848;
10849; SIMD128-FAST-LABEL: xor_v2i64:
10850; SIMD128-FAST:         .functype xor_v2i64 (v128, v128) -> (v128)
10851; SIMD128-FAST-NEXT:  # %bb.0:
10852; SIMD128-FAST-NEXT:    v128.xor $push0=, $0, $1
10853; SIMD128-FAST-NEXT:    return $pop0
10854;
10855; NO-SIMD128-LABEL: xor_v2i64:
10856; NO-SIMD128:         .functype xor_v2i64 (i32, i64, i64, i64, i64) -> ()
10857; NO-SIMD128-NEXT:  # %bb.0:
10858; NO-SIMD128-NEXT:    i64.xor $push0=, $2, $4
10859; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
10860; NO-SIMD128-NEXT:    i64.xor $push1=, $1, $3
10861; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
10862; NO-SIMD128-NEXT:    return
10863;
10864; NO-SIMD128-FAST-LABEL: xor_v2i64:
10865; NO-SIMD128-FAST:         .functype xor_v2i64 (i32, i64, i64, i64, i64) -> ()
10866; NO-SIMD128-FAST-NEXT:  # %bb.0:
10867; NO-SIMD128-FAST-NEXT:    i64.xor $push0=, $1, $3
10868; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop0
10869; NO-SIMD128-FAST-NEXT:    i64.xor $push1=, $2, $4
10870; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop1
10871; NO-SIMD128-FAST-NEXT:    return
10872  %a = xor <2 x i64> %x, %y
10873  ret <2 x i64> %a
10874}
10875
10876define <2 x i64> @not_v2i64(<2 x i64> %x) {
10877; SIMD128-LABEL: not_v2i64:
10878; SIMD128:         .functype not_v2i64 (v128) -> (v128)
10879; SIMD128-NEXT:  # %bb.0:
10880; SIMD128-NEXT:    v128.not $push0=, $0
10881; SIMD128-NEXT:    return $pop0
10882;
10883; SIMD128-FAST-LABEL: not_v2i64:
10884; SIMD128-FAST:         .functype not_v2i64 (v128) -> (v128)
10885; SIMD128-FAST-NEXT:  # %bb.0:
10886; SIMD128-FAST-NEXT:    v128.not $push0=, $0
10887; SIMD128-FAST-NEXT:    return $pop0
10888;
10889; NO-SIMD128-LABEL: not_v2i64:
10890; NO-SIMD128:         .functype not_v2i64 (i32, i64, i64) -> ()
10891; NO-SIMD128-NEXT:  # %bb.0:
10892; NO-SIMD128-NEXT:    i64.const $push0=, -1
10893; NO-SIMD128-NEXT:    i64.xor $push1=, $2, $pop0
10894; NO-SIMD128-NEXT:    i64.store 8($0), $pop1
10895; NO-SIMD128-NEXT:    i64.const $push3=, -1
10896; NO-SIMD128-NEXT:    i64.xor $push2=, $1, $pop3
10897; NO-SIMD128-NEXT:    i64.store 0($0), $pop2
10898; NO-SIMD128-NEXT:    return
10899;
10900; NO-SIMD128-FAST-LABEL: not_v2i64:
10901; NO-SIMD128-FAST:         .functype not_v2i64 (i32, i64, i64) -> ()
10902; NO-SIMD128-FAST-NEXT:  # %bb.0:
10903; NO-SIMD128-FAST-NEXT:    i64.const $push0=, -1
10904; NO-SIMD128-FAST-NEXT:    i64.xor $push1=, $1, $pop0
10905; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
10906; NO-SIMD128-FAST-NEXT:    i64.const $push3=, -1
10907; NO-SIMD128-FAST-NEXT:    i64.xor $push2=, $2, $pop3
10908; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop2
10909; NO-SIMD128-FAST-NEXT:    return
10910  %a = xor <2 x i64> %x, <i64 -1, i64 -1>
10911  ret <2 x i64> %a
10912}
10913
10914define <2 x i64> @andnot_v2i64(<2 x i64> %x, <2 x i64> %y) {
10915; SIMD128-LABEL: andnot_v2i64:
10916; SIMD128:         .functype andnot_v2i64 (v128, v128) -> (v128)
10917; SIMD128-NEXT:  # %bb.0:
10918; SIMD128-NEXT:    v128.andnot $push0=, $0, $1
10919; SIMD128-NEXT:    return $pop0
10920;
10921; SIMD128-FAST-LABEL: andnot_v2i64:
10922; SIMD128-FAST:         .functype andnot_v2i64 (v128, v128) -> (v128)
10923; SIMD128-FAST-NEXT:  # %bb.0:
10924; SIMD128-FAST-NEXT:    v128.not $push0=, $1
10925; SIMD128-FAST-NEXT:    v128.and $push1=, $0, $pop0
10926; SIMD128-FAST-NEXT:    return $pop1
10927;
10928; NO-SIMD128-LABEL: andnot_v2i64:
10929; NO-SIMD128:         .functype andnot_v2i64 (i32, i64, i64, i64, i64) -> ()
10930; NO-SIMD128-NEXT:  # %bb.0:
10931; NO-SIMD128-NEXT:    i64.const $push0=, -1
10932; NO-SIMD128-NEXT:    i64.xor $push1=, $4, $pop0
10933; NO-SIMD128-NEXT:    i64.and $push2=, $2, $pop1
10934; NO-SIMD128-NEXT:    i64.store 8($0), $pop2
10935; NO-SIMD128-NEXT:    i64.const $push5=, -1
10936; NO-SIMD128-NEXT:    i64.xor $push3=, $3, $pop5
10937; NO-SIMD128-NEXT:    i64.and $push4=, $1, $pop3
10938; NO-SIMD128-NEXT:    i64.store 0($0), $pop4
10939; NO-SIMD128-NEXT:    return
10940;
10941; NO-SIMD128-FAST-LABEL: andnot_v2i64:
10942; NO-SIMD128-FAST:         .functype andnot_v2i64 (i32, i64, i64, i64, i64) -> ()
10943; NO-SIMD128-FAST-NEXT:  # %bb.0:
10944; NO-SIMD128-FAST-NEXT:    i64.const $push0=, -1
10945; NO-SIMD128-FAST-NEXT:    i64.xor $push1=, $3, $pop0
10946; NO-SIMD128-FAST-NEXT:    i64.and $push2=, $1, $pop1
10947; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop2
10948; NO-SIMD128-FAST-NEXT:    i64.const $push5=, -1
10949; NO-SIMD128-FAST-NEXT:    i64.xor $push3=, $4, $pop5
10950; NO-SIMD128-FAST-NEXT:    i64.and $push4=, $2, $pop3
10951; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop4
10952; NO-SIMD128-FAST-NEXT:    return
10953 %inv_y = xor <2 x i64> %y, <i64 -1, i64 -1>
10954 %a = and <2 x i64> %x, %inv_y
10955 ret <2 x i64> %a
10956}
10957
10958define <2 x i64> @bitselect_v2i64(<2 x i64> %c, <2 x i64> %v1, <2 x i64> %v2) {
10959; SIMD128-LABEL: bitselect_v2i64:
10960; SIMD128:         .functype bitselect_v2i64 (v128, v128, v128) -> (v128)
10961; SIMD128-NEXT:  # %bb.0:
10962; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
10963; SIMD128-NEXT:    return $pop0
10964;
10965; SIMD128-FAST-LABEL: bitselect_v2i64:
10966; SIMD128-FAST:         .functype bitselect_v2i64 (v128, v128, v128) -> (v128)
10967; SIMD128-FAST-NEXT:  # %bb.0:
10968; SIMD128-FAST-NEXT:    v128.not $push2=, $0
10969; SIMD128-FAST-NEXT:    v128.and $push3=, $2, $pop2
10970; SIMD128-FAST-NEXT:    v128.and $push0=, $1, $0
10971; SIMD128-FAST-NEXT:    v128.or $push1=, $pop3, $pop0
10972; SIMD128-FAST-NEXT:    return $pop1
10973;
10974; NO-SIMD128-LABEL: bitselect_v2i64:
10975; NO-SIMD128:         .functype bitselect_v2i64 (i32, i64, i64, i64, i64, i64, i64) -> ()
10976; NO-SIMD128-NEXT:  # %bb.0:
10977; NO-SIMD128-NEXT:    i64.const $push1=, -1
10978; NO-SIMD128-NEXT:    i64.xor $push2=, $2, $pop1
10979; NO-SIMD128-NEXT:    i64.and $push3=, $6, $pop2
10980; NO-SIMD128-NEXT:    i64.and $push0=, $4, $2
10981; NO-SIMD128-NEXT:    i64.or $push4=, $pop3, $pop0
10982; NO-SIMD128-NEXT:    i64.store 8($0), $pop4
10983; NO-SIMD128-NEXT:    i64.const $push9=, -1
10984; NO-SIMD128-NEXT:    i64.xor $push6=, $1, $pop9
10985; NO-SIMD128-NEXT:    i64.and $push7=, $5, $pop6
10986; NO-SIMD128-NEXT:    i64.and $push5=, $3, $1
10987; NO-SIMD128-NEXT:    i64.or $push8=, $pop7, $pop5
10988; NO-SIMD128-NEXT:    i64.store 0($0), $pop8
10989; NO-SIMD128-NEXT:    return
10990;
10991; NO-SIMD128-FAST-LABEL: bitselect_v2i64:
10992; NO-SIMD128-FAST:         .functype bitselect_v2i64 (i32, i64, i64, i64, i64, i64, i64) -> ()
10993; NO-SIMD128-FAST-NEXT:  # %bb.0:
10994; NO-SIMD128-FAST-NEXT:    i64.const $push1=, -1
10995; NO-SIMD128-FAST-NEXT:    i64.xor $push2=, $1, $pop1
10996; NO-SIMD128-FAST-NEXT:    i64.and $push3=, $5, $pop2
10997; NO-SIMD128-FAST-NEXT:    i64.and $push0=, $3, $1
10998; NO-SIMD128-FAST-NEXT:    i64.or $push4=, $pop3, $pop0
10999; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop4
11000; NO-SIMD128-FAST-NEXT:    i64.const $push9=, -1
11001; NO-SIMD128-FAST-NEXT:    i64.xor $push6=, $2, $pop9
11002; NO-SIMD128-FAST-NEXT:    i64.and $push7=, $6, $pop6
11003; NO-SIMD128-FAST-NEXT:    i64.and $push5=, $4, $2
11004; NO-SIMD128-FAST-NEXT:    i64.or $push8=, $pop7, $pop5
11005; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop8
11006; NO-SIMD128-FAST-NEXT:    return
11007  %masked_v1 = and <2 x i64> %v1, %c
11008  %inv_mask = xor <2 x i64> <i64 -1, i64 -1>, %c
11009  %masked_v2 = and <2 x i64> %v2, %inv_mask
11010  %a = or <2 x i64> %masked_v2, %masked_v1
11011  ret <2 x i64> %a
11012}
11013
11014define <2 x i64> @bitselect_xor_v2i64(<2 x i64> %c, <2 x i64> %v1, <2 x i64> %v2) {
11015; SIMD128-LABEL: bitselect_xor_v2i64:
11016; SIMD128:         .functype bitselect_xor_v2i64 (v128, v128, v128) -> (v128)
11017; SIMD128-NEXT:  # %bb.0:
11018; SIMD128-NEXT:    v128.bitselect $push0=, $1, $2, $0
11019; SIMD128-NEXT:    return $pop0
11020;
11021; SIMD128-FAST-LABEL: bitselect_xor_v2i64:
11022; SIMD128-FAST:         .functype bitselect_xor_v2i64 (v128, v128, v128) -> (v128)
11023; SIMD128-FAST-NEXT:  # %bb.0:
11024; SIMD128-FAST-NEXT:    v128.xor $push2=, $1, $2
11025; SIMD128-FAST-NEXT:    v128.and $push1=, $pop2, $0
11026; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop1, $2
11027; SIMD128-FAST-NEXT:    return $pop0
11028;
11029; NO-SIMD128-LABEL: bitselect_xor_v2i64:
11030; NO-SIMD128:         .functype bitselect_xor_v2i64 (i32, i64, i64, i64, i64, i64, i64) -> ()
11031; NO-SIMD128-NEXT:  # %bb.0:
11032; NO-SIMD128-NEXT:    i64.xor $push0=, $4, $6
11033; NO-SIMD128-NEXT:    i64.and $push1=, $pop0, $2
11034; NO-SIMD128-NEXT:    i64.xor $push2=, $pop1, $6
11035; NO-SIMD128-NEXT:    i64.store 8($0), $pop2
11036; NO-SIMD128-NEXT:    i64.xor $push3=, $3, $5
11037; NO-SIMD128-NEXT:    i64.and $push4=, $pop3, $1
11038; NO-SIMD128-NEXT:    i64.xor $push5=, $pop4, $5
11039; NO-SIMD128-NEXT:    i64.store 0($0), $pop5
11040; NO-SIMD128-NEXT:    return
11041;
11042; NO-SIMD128-FAST-LABEL: bitselect_xor_v2i64:
11043; NO-SIMD128-FAST:         .functype bitselect_xor_v2i64 (i32, i64, i64, i64, i64, i64, i64) -> ()
11044; NO-SIMD128-FAST-NEXT:  # %bb.0:
11045; NO-SIMD128-FAST-NEXT:    i64.xor $push0=, $3, $5
11046; NO-SIMD128-FAST-NEXT:    i64.and $push1=, $pop0, $1
11047; NO-SIMD128-FAST-NEXT:    i64.xor $push2=, $pop1, $5
11048; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop2
11049; NO-SIMD128-FAST-NEXT:    i64.xor $push3=, $4, $6
11050; NO-SIMD128-FAST-NEXT:    i64.and $push4=, $pop3, $2
11051; NO-SIMD128-FAST-NEXT:    i64.xor $push5=, $pop4, $6
11052; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop5
11053; NO-SIMD128-FAST-NEXT:    return
11054 %xor1 = xor <2 x i64> %v1, %v2
11055 %and = and <2 x i64> %xor1, %c
11056 %a = xor <2 x i64> %and, %v2
11057 ret <2 x i64> %a
11058}
11059
11060define <2 x i64> @bitselect_xor_reversed_v2i64(<2 x i64> %c, <2 x i64> %v1, <2 x i64> %v2) {
11061; SIMD128-LABEL: bitselect_xor_reversed_v2i64:
11062; SIMD128:         .functype bitselect_xor_reversed_v2i64 (v128, v128, v128) -> (v128)
11063; SIMD128-NEXT:  # %bb.0:
11064; SIMD128-NEXT:    v128.bitselect $push0=, $2, $1, $0
11065; SIMD128-NEXT:    return $pop0
11066;
11067; SIMD128-FAST-LABEL: bitselect_xor_reversed_v2i64:
11068; SIMD128-FAST:         .functype bitselect_xor_reversed_v2i64 (v128, v128, v128) -> (v128)
11069; SIMD128-FAST-NEXT:  # %bb.0:
11070; SIMD128-FAST-NEXT:    v128.xor $push1=, $1, $2
11071; SIMD128-FAST-NEXT:    v128.not $push2=, $0
11072; SIMD128-FAST-NEXT:    v128.and $push3=, $pop1, $pop2
11073; SIMD128-FAST-NEXT:    v128.xor $push0=, $pop3, $2
11074; SIMD128-FAST-NEXT:    return $pop0
11075;
11076; NO-SIMD128-LABEL: bitselect_xor_reversed_v2i64:
11077; NO-SIMD128:         .functype bitselect_xor_reversed_v2i64 (i32, i64, i64, i64, i64, i64, i64) -> ()
11078; NO-SIMD128-NEXT:  # %bb.0:
11079; NO-SIMD128-NEXT:    i64.xor $push2=, $4, $6
11080; NO-SIMD128-NEXT:    i64.const $push0=, -1
11081; NO-SIMD128-NEXT:    i64.xor $push1=, $2, $pop0
11082; NO-SIMD128-NEXT:    i64.and $push3=, $pop2, $pop1
11083; NO-SIMD128-NEXT:    i64.xor $push4=, $pop3, $6
11084; NO-SIMD128-NEXT:    i64.store 8($0), $pop4
11085; NO-SIMD128-NEXT:    i64.xor $push6=, $3, $5
11086; NO-SIMD128-NEXT:    i64.const $push9=, -1
11087; NO-SIMD128-NEXT:    i64.xor $push5=, $1, $pop9
11088; NO-SIMD128-NEXT:    i64.and $push7=, $pop6, $pop5
11089; NO-SIMD128-NEXT:    i64.xor $push8=, $pop7, $5
11090; NO-SIMD128-NEXT:    i64.store 0($0), $pop8
11091; NO-SIMD128-NEXT:    return
11092;
11093; NO-SIMD128-FAST-LABEL: bitselect_xor_reversed_v2i64:
11094; NO-SIMD128-FAST:         .functype bitselect_xor_reversed_v2i64 (i32, i64, i64, i64, i64, i64, i64) -> ()
11095; NO-SIMD128-FAST-NEXT:  # %bb.0:
11096; NO-SIMD128-FAST-NEXT:    i64.xor $push2=, $3, $5
11097; NO-SIMD128-FAST-NEXT:    i64.const $push0=, -1
11098; NO-SIMD128-FAST-NEXT:    i64.xor $push1=, $1, $pop0
11099; NO-SIMD128-FAST-NEXT:    i64.and $push3=, $pop2, $pop1
11100; NO-SIMD128-FAST-NEXT:    i64.xor $push4=, $pop3, $5
11101; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop4
11102; NO-SIMD128-FAST-NEXT:    i64.xor $push6=, $4, $6
11103; NO-SIMD128-FAST-NEXT:    i64.const $push9=, -1
11104; NO-SIMD128-FAST-NEXT:    i64.xor $push5=, $2, $pop9
11105; NO-SIMD128-FAST-NEXT:    i64.and $push7=, $pop6, $pop5
11106; NO-SIMD128-FAST-NEXT:    i64.xor $push8=, $pop7, $6
11107; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop8
11108; NO-SIMD128-FAST-NEXT:    return
11109 %xor1 = xor <2 x i64> %v1, %v2
11110 %notc = xor <2 x i64> %c, <i64 -1, i64 -1>
11111 %and = and <2 x i64> %xor1, %notc
11112 %a = xor <2 x i64> %and, %v2
11113 ret <2 x i64> %a
11114}
11115
11116define <2 x i64> @extmul_low_s_v2i64(<4 x i32> %v1, <4 x i32> %v2) {
11117; SIMD128-LABEL: extmul_low_s_v2i64:
11118; SIMD128:         .functype extmul_low_s_v2i64 (v128, v128) -> (v128)
11119; SIMD128-NEXT:  # %bb.0:
11120; SIMD128-NEXT:    i64x2.extmul_low_i32x4_s $push0=, $0, $1
11121; SIMD128-NEXT:    return $pop0
11122;
11123; SIMD128-FAST-LABEL: extmul_low_s_v2i64:
11124; SIMD128-FAST:         .functype extmul_low_s_v2i64 (v128, v128) -> (v128)
11125; SIMD128-FAST-NEXT:  # %bb.0:
11126; SIMD128-FAST-NEXT:    i64x2.extend_low_i32x4_s $push0=, $0
11127; SIMD128-FAST-NEXT:    i64x2.extend_low_i32x4_s $push1=, $1
11128; SIMD128-FAST-NEXT:    i64x2.mul $push2=, $pop0, $pop1
11129; SIMD128-FAST-NEXT:    return $pop2
11130;
11131; NO-SIMD128-LABEL: extmul_low_s_v2i64:
11132; NO-SIMD128:         .functype extmul_low_s_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11133; NO-SIMD128-NEXT:  # %bb.0:
11134; NO-SIMD128-NEXT:    i64.extend_i32_s $push1=, $2
11135; NO-SIMD128-NEXT:    i64.extend_i32_s $push0=, $6
11136; NO-SIMD128-NEXT:    i64.mul $push2=, $pop1, $pop0
11137; NO-SIMD128-NEXT:    i64.store 8($0), $pop2
11138; NO-SIMD128-NEXT:    i64.extend_i32_s $push4=, $1
11139; NO-SIMD128-NEXT:    i64.extend_i32_s $push3=, $5
11140; NO-SIMD128-NEXT:    i64.mul $push5=, $pop4, $pop3
11141; NO-SIMD128-NEXT:    i64.store 0($0), $pop5
11142; NO-SIMD128-NEXT:    return
11143;
11144; NO-SIMD128-FAST-LABEL: extmul_low_s_v2i64:
11145; NO-SIMD128-FAST:         .functype extmul_low_s_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11146; NO-SIMD128-FAST-NEXT:  # %bb.0:
11147; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push1=, $1
11148; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push0=, $5
11149; NO-SIMD128-FAST-NEXT:    i64.mul $push2=, $pop1, $pop0
11150; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop2
11151; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push4=, $2
11152; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push3=, $6
11153; NO-SIMD128-FAST-NEXT:    i64.mul $push5=, $pop4, $pop3
11154; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop5
11155; NO-SIMD128-FAST-NEXT:    return
11156  %low1 = shufflevector <4 x i32> %v1, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
11157  %low2 = shufflevector <4 x i32> %v2, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
11158  %extended1 = sext <2 x i32> %low1 to <2 x i64>
11159  %extended2 = sext <2 x i32> %low2 to <2 x i64>
11160  %a = mul <2 x i64> %extended1, %extended2
11161  ret <2 x i64> %a
11162}
11163
11164define <2 x i64> @extmul_high_s_v2i64(<4 x i32> %v1, <4 x i32> %v2) {
11165; SIMD128-LABEL: extmul_high_s_v2i64:
11166; SIMD128:         .functype extmul_high_s_v2i64 (v128, v128) -> (v128)
11167; SIMD128-NEXT:  # %bb.0:
11168; SIMD128-NEXT:    i64x2.extmul_high_i32x4_s $push0=, $0, $1
11169; SIMD128-NEXT:    return $pop0
11170;
11171; SIMD128-FAST-LABEL: extmul_high_s_v2i64:
11172; SIMD128-FAST:         .functype extmul_high_s_v2i64 (v128, v128) -> (v128)
11173; SIMD128-FAST-NEXT:  # %bb.0:
11174; SIMD128-FAST-NEXT:    i64x2.extend_high_i32x4_s $push0=, $0
11175; SIMD128-FAST-NEXT:    i64x2.extend_high_i32x4_s $push1=, $1
11176; SIMD128-FAST-NEXT:    i64x2.mul $push2=, $pop0, $pop1
11177; SIMD128-FAST-NEXT:    return $pop2
11178;
11179; NO-SIMD128-LABEL: extmul_high_s_v2i64:
11180; NO-SIMD128:         .functype extmul_high_s_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11181; NO-SIMD128-NEXT:  # %bb.0:
11182; NO-SIMD128-NEXT:    i64.extend_i32_s $push1=, $4
11183; NO-SIMD128-NEXT:    i64.extend_i32_s $push0=, $8
11184; NO-SIMD128-NEXT:    i64.mul $push2=, $pop1, $pop0
11185; NO-SIMD128-NEXT:    i64.store 8($0), $pop2
11186; NO-SIMD128-NEXT:    i64.extend_i32_s $push4=, $3
11187; NO-SIMD128-NEXT:    i64.extend_i32_s $push3=, $7
11188; NO-SIMD128-NEXT:    i64.mul $push5=, $pop4, $pop3
11189; NO-SIMD128-NEXT:    i64.store 0($0), $pop5
11190; NO-SIMD128-NEXT:    return
11191;
11192; NO-SIMD128-FAST-LABEL: extmul_high_s_v2i64:
11193; NO-SIMD128-FAST:         .functype extmul_high_s_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11194; NO-SIMD128-FAST-NEXT:  # %bb.0:
11195; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push1=, $3
11196; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push0=, $7
11197; NO-SIMD128-FAST-NEXT:    i64.mul $push2=, $pop1, $pop0
11198; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop2
11199; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push4=, $4
11200; NO-SIMD128-FAST-NEXT:    i64.extend_i32_s $push3=, $8
11201; NO-SIMD128-FAST-NEXT:    i64.mul $push5=, $pop4, $pop3
11202; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop5
11203; NO-SIMD128-FAST-NEXT:    return
11204  %high1 = shufflevector <4 x i32> %v1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
11205  %high2 = shufflevector <4 x i32> %v2, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
11206  %extended1 = sext <2 x i32> %high1 to <2 x i64>
11207  %extended2 = sext <2 x i32> %high2 to <2 x i64>
11208  %a = mul <2 x i64> %extended1, %extended2
11209  ret <2 x i64> %a
11210}
11211
11212define <2 x i64> @extmul_low_u_v2i64(<4 x i32> %v1, <4 x i32> %v2) {
11213; SIMD128-LABEL: extmul_low_u_v2i64:
11214; SIMD128:         .functype extmul_low_u_v2i64 (v128, v128) -> (v128)
11215; SIMD128-NEXT:  # %bb.0:
11216; SIMD128-NEXT:    i64x2.extmul_low_i32x4_u $push0=, $0, $1
11217; SIMD128-NEXT:    return $pop0
11218;
11219; SIMD128-FAST-LABEL: extmul_low_u_v2i64:
11220; SIMD128-FAST:         .functype extmul_low_u_v2i64 (v128, v128) -> (v128)
11221; SIMD128-FAST-NEXT:  # %bb.0:
11222; SIMD128-FAST-NEXT:    i64x2.extend_low_i32x4_u $push0=, $0
11223; SIMD128-FAST-NEXT:    i64x2.extend_low_i32x4_u $push1=, $1
11224; SIMD128-FAST-NEXT:    i64x2.mul $push2=, $pop0, $pop1
11225; SIMD128-FAST-NEXT:    return $pop2
11226;
11227; NO-SIMD128-LABEL: extmul_low_u_v2i64:
11228; NO-SIMD128:         .functype extmul_low_u_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11229; NO-SIMD128-NEXT:  # %bb.0:
11230; NO-SIMD128-NEXT:    i64.extend_i32_u $push1=, $2
11231; NO-SIMD128-NEXT:    i64.extend_i32_u $push0=, $6
11232; NO-SIMD128-NEXT:    i64.mul $push2=, $pop1, $pop0
11233; NO-SIMD128-NEXT:    i64.store 8($0), $pop2
11234; NO-SIMD128-NEXT:    i64.extend_i32_u $push4=, $1
11235; NO-SIMD128-NEXT:    i64.extend_i32_u $push3=, $5
11236; NO-SIMD128-NEXT:    i64.mul $push5=, $pop4, $pop3
11237; NO-SIMD128-NEXT:    i64.store 0($0), $pop5
11238; NO-SIMD128-NEXT:    return
11239;
11240; NO-SIMD128-FAST-LABEL: extmul_low_u_v2i64:
11241; NO-SIMD128-FAST:         .functype extmul_low_u_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11242; NO-SIMD128-FAST-NEXT:  # %bb.0:
11243; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push1=, $1
11244; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push0=, $5
11245; NO-SIMD128-FAST-NEXT:    i64.mul $push2=, $pop1, $pop0
11246; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop2
11247; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push4=, $2
11248; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push3=, $6
11249; NO-SIMD128-FAST-NEXT:    i64.mul $push5=, $pop4, $pop3
11250; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop5
11251; NO-SIMD128-FAST-NEXT:    return
11252  %low1 = shufflevector <4 x i32> %v1, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
11253  %low2 = shufflevector <4 x i32> %v2, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
11254  %extended1 = zext <2 x i32> %low1 to <2 x i64>
11255  %extended2 = zext <2 x i32> %low2 to <2 x i64>
11256  %a = mul <2 x i64> %extended1, %extended2
11257  ret <2 x i64> %a
11258}
11259
11260define <2 x i64> @extmul_high_u_v2i64(<4 x i32> %v1, <4 x i32> %v2) {
11261; SIMD128-LABEL: extmul_high_u_v2i64:
11262; SIMD128:         .functype extmul_high_u_v2i64 (v128, v128) -> (v128)
11263; SIMD128-NEXT:  # %bb.0:
11264; SIMD128-NEXT:    i64x2.extmul_high_i32x4_u $push0=, $0, $1
11265; SIMD128-NEXT:    return $pop0
11266;
11267; SIMD128-FAST-LABEL: extmul_high_u_v2i64:
11268; SIMD128-FAST:         .functype extmul_high_u_v2i64 (v128, v128) -> (v128)
11269; SIMD128-FAST-NEXT:  # %bb.0:
11270; SIMD128-FAST-NEXT:    i64x2.extend_high_i32x4_u $push0=, $0
11271; SIMD128-FAST-NEXT:    i64x2.extend_high_i32x4_u $push1=, $1
11272; SIMD128-FAST-NEXT:    i64x2.mul $push2=, $pop0, $pop1
11273; SIMD128-FAST-NEXT:    return $pop2
11274;
11275; NO-SIMD128-LABEL: extmul_high_u_v2i64:
11276; NO-SIMD128:         .functype extmul_high_u_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11277; NO-SIMD128-NEXT:  # %bb.0:
11278; NO-SIMD128-NEXT:    i64.extend_i32_u $push1=, $4
11279; NO-SIMD128-NEXT:    i64.extend_i32_u $push0=, $8
11280; NO-SIMD128-NEXT:    i64.mul $push2=, $pop1, $pop0
11281; NO-SIMD128-NEXT:    i64.store 8($0), $pop2
11282; NO-SIMD128-NEXT:    i64.extend_i32_u $push4=, $3
11283; NO-SIMD128-NEXT:    i64.extend_i32_u $push3=, $7
11284; NO-SIMD128-NEXT:    i64.mul $push5=, $pop4, $pop3
11285; NO-SIMD128-NEXT:    i64.store 0($0), $pop5
11286; NO-SIMD128-NEXT:    return
11287;
11288; NO-SIMD128-FAST-LABEL: extmul_high_u_v2i64:
11289; NO-SIMD128-FAST:         .functype extmul_high_u_v2i64 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
11290; NO-SIMD128-FAST-NEXT:  # %bb.0:
11291; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push1=, $3
11292; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push0=, $7
11293; NO-SIMD128-FAST-NEXT:    i64.mul $push2=, $pop1, $pop0
11294; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop2
11295; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push4=, $4
11296; NO-SIMD128-FAST-NEXT:    i64.extend_i32_u $push3=, $8
11297; NO-SIMD128-FAST-NEXT:    i64.mul $push5=, $pop4, $pop3
11298; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop5
11299; NO-SIMD128-FAST-NEXT:    return
11300  %high1 = shufflevector <4 x i32> %v1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
11301  %high2 = shufflevector <4 x i32> %v2, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
11302  %extended1 = zext <2 x i32> %high1 to <2 x i64>
11303  %extended2 = zext <2 x i32> %high2 to <2 x i64>
11304  %a = mul <2 x i64> %extended1, %extended2
11305  ret <2 x i64> %a
11306}
11307
11308; ==============================================================================
11309; 4 x float
11310; ==============================================================================
11311define <4 x float> @neg_v4f32(<4 x float> %x) {
11312  ; nsz makes this semantically equivalent to flipping sign bit
11313; SIMD128-LABEL: neg_v4f32:
11314; SIMD128:         .functype neg_v4f32 (v128) -> (v128)
11315; SIMD128-NEXT:  # %bb.0:
11316; SIMD128-NEXT:    f32x4.neg $push0=, $0
11317; SIMD128-NEXT:    return $pop0
11318;
11319; SIMD128-FAST-LABEL: neg_v4f32:
11320; SIMD128-FAST:         .functype neg_v4f32 (v128) -> (v128)
11321; SIMD128-FAST-NEXT:  # %bb.0:
11322; SIMD128-FAST-NEXT:    f32x4.neg $push0=, $0
11323; SIMD128-FAST-NEXT:    return $pop0
11324;
11325; NO-SIMD128-LABEL: neg_v4f32:
11326; NO-SIMD128:         .functype neg_v4f32 (i32, f32, f32, f32, f32) -> ()
11327; NO-SIMD128-NEXT:  # %bb.0:
11328; NO-SIMD128-NEXT:    f32.neg $push0=, $4
11329; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
11330; NO-SIMD128-NEXT:    f32.neg $push1=, $3
11331; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
11332; NO-SIMD128-NEXT:    f32.neg $push2=, $2
11333; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
11334; NO-SIMD128-NEXT:    f32.neg $push3=, $1
11335; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
11336; NO-SIMD128-NEXT:    return
11337;
11338; NO-SIMD128-FAST-LABEL: neg_v4f32:
11339; NO-SIMD128-FAST:         .functype neg_v4f32 (i32, f32, f32, f32, f32) -> ()
11340; NO-SIMD128-FAST-NEXT:  # %bb.0:
11341; NO-SIMD128-FAST-NEXT:    f32.neg $push0=, $1
11342; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
11343; NO-SIMD128-FAST-NEXT:    f32.neg $push1=, $2
11344; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
11345; NO-SIMD128-FAST-NEXT:    f32.neg $push2=, $3
11346; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
11347; NO-SIMD128-FAST-NEXT:    f32.neg $push3=, $4
11348; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
11349; NO-SIMD128-FAST-NEXT:    return
11350  %a = fsub nsz <4 x float> <float 0.0, float 0.0, float 0.0, float 0.0>, %x
11351  ret <4 x float> %a
11352}
11353
11354declare <4 x float> @llvm.fabs.v4f32(<4 x float>) nounwind readnone
11355define <4 x float> @abs_v4f32(<4 x float> %x) {
11356; SIMD128-LABEL: abs_v4f32:
11357; SIMD128:         .functype abs_v4f32 (v128) -> (v128)
11358; SIMD128-NEXT:  # %bb.0:
11359; SIMD128-NEXT:    f32x4.abs $push0=, $0
11360; SIMD128-NEXT:    return $pop0
11361;
11362; SIMD128-FAST-LABEL: abs_v4f32:
11363; SIMD128-FAST:         .functype abs_v4f32 (v128) -> (v128)
11364; SIMD128-FAST-NEXT:  # %bb.0:
11365; SIMD128-FAST-NEXT:    f32x4.abs $push0=, $0
11366; SIMD128-FAST-NEXT:    return $pop0
11367;
11368; NO-SIMD128-LABEL: abs_v4f32:
11369; NO-SIMD128:         .functype abs_v4f32 (i32, f32, f32, f32, f32) -> ()
11370; NO-SIMD128-NEXT:  # %bb.0:
11371; NO-SIMD128-NEXT:    f32.abs $push0=, $4
11372; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
11373; NO-SIMD128-NEXT:    f32.abs $push1=, $3
11374; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
11375; NO-SIMD128-NEXT:    f32.abs $push2=, $2
11376; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
11377; NO-SIMD128-NEXT:    f32.abs $push3=, $1
11378; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
11379; NO-SIMD128-NEXT:    return
11380;
11381; NO-SIMD128-FAST-LABEL: abs_v4f32:
11382; NO-SIMD128-FAST:         .functype abs_v4f32 (i32, f32, f32, f32, f32) -> ()
11383; NO-SIMD128-FAST-NEXT:  # %bb.0:
11384; NO-SIMD128-FAST-NEXT:    f32.abs $push0=, $1
11385; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
11386; NO-SIMD128-FAST-NEXT:    f32.abs $push1=, $2
11387; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
11388; NO-SIMD128-FAST-NEXT:    f32.abs $push2=, $3
11389; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
11390; NO-SIMD128-FAST-NEXT:    f32.abs $push3=, $4
11391; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
11392; NO-SIMD128-FAST-NEXT:    return
11393  %a = call <4 x float> @llvm.fabs.v4f32(<4 x float> %x)
11394  ret <4 x float> %a
11395}
11396
11397define <4 x float> @min_unordered_v4f32(<4 x float> %x) {
11398; SIMD128-LABEL: min_unordered_v4f32:
11399; SIMD128:         .functype min_unordered_v4f32 (v128) -> (v128)
11400; SIMD128-NEXT:  # %bb.0:
11401; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11402; SIMD128-NEXT:    f32x4.pmin $push1=, $0, $pop0
11403; SIMD128-NEXT:    return $pop1
11404;
11405; SIMD128-FAST-LABEL: min_unordered_v4f32:
11406; SIMD128-FAST:         .functype min_unordered_v4f32 (v128) -> (v128)
11407; SIMD128-FAST-NEXT:  # %bb.0:
11408; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11409; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $0, $pop1
11410; SIMD128-FAST-NEXT:    return $pop0
11411;
11412; NO-SIMD128-LABEL: min_unordered_v4f32:
11413; NO-SIMD128:         .functype min_unordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11414; NO-SIMD128-NEXT:  # %bb.0:
11415; NO-SIMD128-NEXT:    f32.const $push0=, 0x1.4p2
11416; NO-SIMD128-NEXT:    f32.const $push15=, 0x1.4p2
11417; NO-SIMD128-NEXT:    f32.gt $push1=, $4, $pop15
11418; NO-SIMD128-NEXT:    f32.select $push2=, $pop0, $4, $pop1
11419; NO-SIMD128-NEXT:    f32.store 12($0), $pop2
11420; NO-SIMD128-NEXT:    f32.const $push14=, 0x1.4p2
11421; NO-SIMD128-NEXT:    f32.const $push13=, 0x1.4p2
11422; NO-SIMD128-NEXT:    f32.gt $push3=, $3, $pop13
11423; NO-SIMD128-NEXT:    f32.select $push4=, $pop14, $3, $pop3
11424; NO-SIMD128-NEXT:    f32.store 8($0), $pop4
11425; NO-SIMD128-NEXT:    f32.const $push12=, 0x1.4p2
11426; NO-SIMD128-NEXT:    f32.const $push11=, 0x1.4p2
11427; NO-SIMD128-NEXT:    f32.gt $push5=, $2, $pop11
11428; NO-SIMD128-NEXT:    f32.select $push6=, $pop12, $2, $pop5
11429; NO-SIMD128-NEXT:    f32.store 4($0), $pop6
11430; NO-SIMD128-NEXT:    f32.const $push10=, 0x1.4p2
11431; NO-SIMD128-NEXT:    f32.const $push9=, 0x1.4p2
11432; NO-SIMD128-NEXT:    f32.gt $push7=, $1, $pop9
11433; NO-SIMD128-NEXT:    f32.select $push8=, $pop10, $1, $pop7
11434; NO-SIMD128-NEXT:    f32.store 0($0), $pop8
11435; NO-SIMD128-NEXT:    return
11436;
11437; NO-SIMD128-FAST-LABEL: min_unordered_v4f32:
11438; NO-SIMD128-FAST:         .functype min_unordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11439; NO-SIMD128-FAST-NEXT:  # %bb.0:
11440; NO-SIMD128-FAST-NEXT:    f32.const $push0=, 0x1.4p2
11441; NO-SIMD128-FAST-NEXT:    f32.const $push15=, 0x1.4p2
11442; NO-SIMD128-FAST-NEXT:    f32.gt $push1=, $1, $pop15
11443; NO-SIMD128-FAST-NEXT:    f32.select $push2=, $pop0, $1, $pop1
11444; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop2
11445; NO-SIMD128-FAST-NEXT:    f32.const $push14=, 0x1.4p2
11446; NO-SIMD128-FAST-NEXT:    f32.const $push13=, 0x1.4p2
11447; NO-SIMD128-FAST-NEXT:    f32.gt $push3=, $2, $pop13
11448; NO-SIMD128-FAST-NEXT:    f32.select $push4=, $pop14, $2, $pop3
11449; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop4
11450; NO-SIMD128-FAST-NEXT:    f32.const $push12=, 0x1.4p2
11451; NO-SIMD128-FAST-NEXT:    f32.const $push11=, 0x1.4p2
11452; NO-SIMD128-FAST-NEXT:    f32.gt $push5=, $3, $pop11
11453; NO-SIMD128-FAST-NEXT:    f32.select $push6=, $pop12, $3, $pop5
11454; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop6
11455; NO-SIMD128-FAST-NEXT:    f32.const $push10=, 0x1.4p2
11456; NO-SIMD128-FAST-NEXT:    f32.const $push9=, 0x1.4p2
11457; NO-SIMD128-FAST-NEXT:    f32.gt $push7=, $4, $pop9
11458; NO-SIMD128-FAST-NEXT:    f32.select $push8=, $pop10, $4, $pop7
11459; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop8
11460; NO-SIMD128-FAST-NEXT:    return
11461  %cmps = fcmp ule <4 x float> %x, <float 5., float 5., float 5., float 5.>
11462  %a = select <4 x i1> %cmps, <4 x float> %x,
11463    <4 x float> <float 5., float 5., float 5., float 5.>
11464  ret <4 x float> %a
11465}
11466
11467define <4 x float> @max_unordered_v4f32(<4 x float> %x) {
11468; SIMD128-LABEL: max_unordered_v4f32:
11469; SIMD128:         .functype max_unordered_v4f32 (v128) -> (v128)
11470; SIMD128-NEXT:  # %bb.0:
11471; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11472; SIMD128-NEXT:    f32x4.pmax $push1=, $0, $pop0
11473; SIMD128-NEXT:    return $pop1
11474;
11475; SIMD128-FAST-LABEL: max_unordered_v4f32:
11476; SIMD128-FAST:         .functype max_unordered_v4f32 (v128) -> (v128)
11477; SIMD128-FAST-NEXT:  # %bb.0:
11478; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11479; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $pop1
11480; SIMD128-FAST-NEXT:    return $pop0
11481;
11482; NO-SIMD128-LABEL: max_unordered_v4f32:
11483; NO-SIMD128:         .functype max_unordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11484; NO-SIMD128-NEXT:  # %bb.0:
11485; NO-SIMD128-NEXT:    f32.const $push0=, 0x1.4p2
11486; NO-SIMD128-NEXT:    f32.const $push15=, 0x1.4p2
11487; NO-SIMD128-NEXT:    f32.lt $push1=, $4, $pop15
11488; NO-SIMD128-NEXT:    f32.select $push2=, $pop0, $4, $pop1
11489; NO-SIMD128-NEXT:    f32.store 12($0), $pop2
11490; NO-SIMD128-NEXT:    f32.const $push14=, 0x1.4p2
11491; NO-SIMD128-NEXT:    f32.const $push13=, 0x1.4p2
11492; NO-SIMD128-NEXT:    f32.lt $push3=, $3, $pop13
11493; NO-SIMD128-NEXT:    f32.select $push4=, $pop14, $3, $pop3
11494; NO-SIMD128-NEXT:    f32.store 8($0), $pop4
11495; NO-SIMD128-NEXT:    f32.const $push12=, 0x1.4p2
11496; NO-SIMD128-NEXT:    f32.const $push11=, 0x1.4p2
11497; NO-SIMD128-NEXT:    f32.lt $push5=, $2, $pop11
11498; NO-SIMD128-NEXT:    f32.select $push6=, $pop12, $2, $pop5
11499; NO-SIMD128-NEXT:    f32.store 4($0), $pop6
11500; NO-SIMD128-NEXT:    f32.const $push10=, 0x1.4p2
11501; NO-SIMD128-NEXT:    f32.const $push9=, 0x1.4p2
11502; NO-SIMD128-NEXT:    f32.lt $push7=, $1, $pop9
11503; NO-SIMD128-NEXT:    f32.select $push8=, $pop10, $1, $pop7
11504; NO-SIMD128-NEXT:    f32.store 0($0), $pop8
11505; NO-SIMD128-NEXT:    return
11506;
11507; NO-SIMD128-FAST-LABEL: max_unordered_v4f32:
11508; NO-SIMD128-FAST:         .functype max_unordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11509; NO-SIMD128-FAST-NEXT:  # %bb.0:
11510; NO-SIMD128-FAST-NEXT:    f32.const $push0=, 0x1.4p2
11511; NO-SIMD128-FAST-NEXT:    f32.const $push15=, 0x1.4p2
11512; NO-SIMD128-FAST-NEXT:    f32.lt $push1=, $1, $pop15
11513; NO-SIMD128-FAST-NEXT:    f32.select $push2=, $pop0, $1, $pop1
11514; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop2
11515; NO-SIMD128-FAST-NEXT:    f32.const $push14=, 0x1.4p2
11516; NO-SIMD128-FAST-NEXT:    f32.const $push13=, 0x1.4p2
11517; NO-SIMD128-FAST-NEXT:    f32.lt $push3=, $2, $pop13
11518; NO-SIMD128-FAST-NEXT:    f32.select $push4=, $pop14, $2, $pop3
11519; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop4
11520; NO-SIMD128-FAST-NEXT:    f32.const $push12=, 0x1.4p2
11521; NO-SIMD128-FAST-NEXT:    f32.const $push11=, 0x1.4p2
11522; NO-SIMD128-FAST-NEXT:    f32.lt $push5=, $3, $pop11
11523; NO-SIMD128-FAST-NEXT:    f32.select $push6=, $pop12, $3, $pop5
11524; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop6
11525; NO-SIMD128-FAST-NEXT:    f32.const $push10=, 0x1.4p2
11526; NO-SIMD128-FAST-NEXT:    f32.const $push9=, 0x1.4p2
11527; NO-SIMD128-FAST-NEXT:    f32.lt $push7=, $4, $pop9
11528; NO-SIMD128-FAST-NEXT:    f32.select $push8=, $pop10, $4, $pop7
11529; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop8
11530; NO-SIMD128-FAST-NEXT:    return
11531  %cmps = fcmp uge <4 x float> %x, <float 5., float 5., float 5., float 5.>
11532  %a = select <4 x i1> %cmps, <4 x float> %x,
11533    <4 x float> <float 5., float 5., float 5., float 5.>
11534  ret <4 x float> %a
11535}
11536
11537define <4 x float> @min_ordered_v4f32(<4 x float> %x) {
11538; SIMD128-LABEL: min_ordered_v4f32:
11539; SIMD128:         .functype min_ordered_v4f32 (v128) -> (v128)
11540; SIMD128-NEXT:  # %bb.0:
11541; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11542; SIMD128-NEXT:    f32x4.pmin $push1=, $0, $pop0
11543; SIMD128-NEXT:    return $pop1
11544;
11545; SIMD128-FAST-LABEL: min_ordered_v4f32:
11546; SIMD128-FAST:         .functype min_ordered_v4f32 (v128) -> (v128)
11547; SIMD128-FAST-NEXT:  # %bb.0:
11548; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11549; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $0, $pop1
11550; SIMD128-FAST-NEXT:    return $pop0
11551;
11552; NO-SIMD128-LABEL: min_ordered_v4f32:
11553; NO-SIMD128:         .functype min_ordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11554; NO-SIMD128-NEXT:  # %bb.0:
11555; NO-SIMD128-NEXT:    f32.const $push0=, 0x1.4p2
11556; NO-SIMD128-NEXT:    f32.const $push15=, 0x1.4p2
11557; NO-SIMD128-NEXT:    f32.ge $push1=, $4, $pop15
11558; NO-SIMD128-NEXT:    f32.select $push2=, $pop0, $4, $pop1
11559; NO-SIMD128-NEXT:    f32.store 12($0), $pop2
11560; NO-SIMD128-NEXT:    f32.const $push14=, 0x1.4p2
11561; NO-SIMD128-NEXT:    f32.const $push13=, 0x1.4p2
11562; NO-SIMD128-NEXT:    f32.ge $push3=, $3, $pop13
11563; NO-SIMD128-NEXT:    f32.select $push4=, $pop14, $3, $pop3
11564; NO-SIMD128-NEXT:    f32.store 8($0), $pop4
11565; NO-SIMD128-NEXT:    f32.const $push12=, 0x1.4p2
11566; NO-SIMD128-NEXT:    f32.const $push11=, 0x1.4p2
11567; NO-SIMD128-NEXT:    f32.ge $push5=, $2, $pop11
11568; NO-SIMD128-NEXT:    f32.select $push6=, $pop12, $2, $pop5
11569; NO-SIMD128-NEXT:    f32.store 4($0), $pop6
11570; NO-SIMD128-NEXT:    f32.const $push10=, 0x1.4p2
11571; NO-SIMD128-NEXT:    f32.const $push9=, 0x1.4p2
11572; NO-SIMD128-NEXT:    f32.ge $push7=, $1, $pop9
11573; NO-SIMD128-NEXT:    f32.select $push8=, $pop10, $1, $pop7
11574; NO-SIMD128-NEXT:    f32.store 0($0), $pop8
11575; NO-SIMD128-NEXT:    return
11576;
11577; NO-SIMD128-FAST-LABEL: min_ordered_v4f32:
11578; NO-SIMD128-FAST:         .functype min_ordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11579; NO-SIMD128-FAST-NEXT:  # %bb.0:
11580; NO-SIMD128-FAST-NEXT:    f32.const $push0=, 0x1.4p2
11581; NO-SIMD128-FAST-NEXT:    f32.const $push15=, 0x1.4p2
11582; NO-SIMD128-FAST-NEXT:    f32.ge $push1=, $1, $pop15
11583; NO-SIMD128-FAST-NEXT:    f32.select $push2=, $pop0, $1, $pop1
11584; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop2
11585; NO-SIMD128-FAST-NEXT:    f32.const $push14=, 0x1.4p2
11586; NO-SIMD128-FAST-NEXT:    f32.const $push13=, 0x1.4p2
11587; NO-SIMD128-FAST-NEXT:    f32.ge $push3=, $2, $pop13
11588; NO-SIMD128-FAST-NEXT:    f32.select $push4=, $pop14, $2, $pop3
11589; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop4
11590; NO-SIMD128-FAST-NEXT:    f32.const $push12=, 0x1.4p2
11591; NO-SIMD128-FAST-NEXT:    f32.const $push11=, 0x1.4p2
11592; NO-SIMD128-FAST-NEXT:    f32.ge $push5=, $3, $pop11
11593; NO-SIMD128-FAST-NEXT:    f32.select $push6=, $pop12, $3, $pop5
11594; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop6
11595; NO-SIMD128-FAST-NEXT:    f32.const $push10=, 0x1.4p2
11596; NO-SIMD128-FAST-NEXT:    f32.const $push9=, 0x1.4p2
11597; NO-SIMD128-FAST-NEXT:    f32.ge $push7=, $4, $pop9
11598; NO-SIMD128-FAST-NEXT:    f32.select $push8=, $pop10, $4, $pop7
11599; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop8
11600; NO-SIMD128-FAST-NEXT:    return
11601  %cmps = fcmp ole <4 x float> <float 5., float 5., float 5., float 5.>, %x
11602  %a = select <4 x i1> %cmps,
11603    <4 x float> <float 5., float 5., float 5., float 5.>, <4 x float> %x
11604  ret <4 x float> %a
11605}
11606
11607define <4 x float> @max_ordered_v4f32(<4 x float> %x) {
11608; SIMD128-LABEL: max_ordered_v4f32:
11609; SIMD128:         .functype max_ordered_v4f32 (v128) -> (v128)
11610; SIMD128-NEXT:  # %bb.0:
11611; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11612; SIMD128-NEXT:    f32x4.pmax $push1=, $0, $pop0
11613; SIMD128-NEXT:    return $pop1
11614;
11615; SIMD128-FAST-LABEL: max_ordered_v4f32:
11616; SIMD128-FAST:         .functype max_ordered_v4f32 (v128) -> (v128)
11617; SIMD128-FAST-NEXT:  # %bb.0:
11618; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
11619; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $pop1
11620; SIMD128-FAST-NEXT:    return $pop0
11621;
11622; NO-SIMD128-LABEL: max_ordered_v4f32:
11623; NO-SIMD128:         .functype max_ordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11624; NO-SIMD128-NEXT:  # %bb.0:
11625; NO-SIMD128-NEXT:    f32.const $push0=, 0x1.4p2
11626; NO-SIMD128-NEXT:    f32.const $push15=, 0x1.4p2
11627; NO-SIMD128-NEXT:    f32.le $push1=, $4, $pop15
11628; NO-SIMD128-NEXT:    f32.select $push2=, $pop0, $4, $pop1
11629; NO-SIMD128-NEXT:    f32.store 12($0), $pop2
11630; NO-SIMD128-NEXT:    f32.const $push14=, 0x1.4p2
11631; NO-SIMD128-NEXT:    f32.const $push13=, 0x1.4p2
11632; NO-SIMD128-NEXT:    f32.le $push3=, $3, $pop13
11633; NO-SIMD128-NEXT:    f32.select $push4=, $pop14, $3, $pop3
11634; NO-SIMD128-NEXT:    f32.store 8($0), $pop4
11635; NO-SIMD128-NEXT:    f32.const $push12=, 0x1.4p2
11636; NO-SIMD128-NEXT:    f32.const $push11=, 0x1.4p2
11637; NO-SIMD128-NEXT:    f32.le $push5=, $2, $pop11
11638; NO-SIMD128-NEXT:    f32.select $push6=, $pop12, $2, $pop5
11639; NO-SIMD128-NEXT:    f32.store 4($0), $pop6
11640; NO-SIMD128-NEXT:    f32.const $push10=, 0x1.4p2
11641; NO-SIMD128-NEXT:    f32.const $push9=, 0x1.4p2
11642; NO-SIMD128-NEXT:    f32.le $push7=, $1, $pop9
11643; NO-SIMD128-NEXT:    f32.select $push8=, $pop10, $1, $pop7
11644; NO-SIMD128-NEXT:    f32.store 0($0), $pop8
11645; NO-SIMD128-NEXT:    return
11646;
11647; NO-SIMD128-FAST-LABEL: max_ordered_v4f32:
11648; NO-SIMD128-FAST:         .functype max_ordered_v4f32 (i32, f32, f32, f32, f32) -> ()
11649; NO-SIMD128-FAST-NEXT:  # %bb.0:
11650; NO-SIMD128-FAST-NEXT:    f32.const $push0=, 0x1.4p2
11651; NO-SIMD128-FAST-NEXT:    f32.const $push15=, 0x1.4p2
11652; NO-SIMD128-FAST-NEXT:    f32.le $push1=, $1, $pop15
11653; NO-SIMD128-FAST-NEXT:    f32.select $push2=, $pop0, $1, $pop1
11654; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop2
11655; NO-SIMD128-FAST-NEXT:    f32.const $push14=, 0x1.4p2
11656; NO-SIMD128-FAST-NEXT:    f32.const $push13=, 0x1.4p2
11657; NO-SIMD128-FAST-NEXT:    f32.le $push3=, $2, $pop13
11658; NO-SIMD128-FAST-NEXT:    f32.select $push4=, $pop14, $2, $pop3
11659; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop4
11660; NO-SIMD128-FAST-NEXT:    f32.const $push12=, 0x1.4p2
11661; NO-SIMD128-FAST-NEXT:    f32.const $push11=, 0x1.4p2
11662; NO-SIMD128-FAST-NEXT:    f32.le $push5=, $3, $pop11
11663; NO-SIMD128-FAST-NEXT:    f32.select $push6=, $pop12, $3, $pop5
11664; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop6
11665; NO-SIMD128-FAST-NEXT:    f32.const $push10=, 0x1.4p2
11666; NO-SIMD128-FAST-NEXT:    f32.const $push9=, 0x1.4p2
11667; NO-SIMD128-FAST-NEXT:    f32.le $push7=, $4, $pop9
11668; NO-SIMD128-FAST-NEXT:    f32.select $push8=, $pop10, $4, $pop7
11669; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop8
11670; NO-SIMD128-FAST-NEXT:    return
11671  %cmps = fcmp oge <4 x float> <float 5., float 5., float 5., float 5.>, %x
11672  %a = select <4 x i1> %cmps,
11673    <4 x float> <float 5., float 5., float 5., float 5.>, <4 x float> %x
11674  ret <4 x float> %a
11675}
11676
11677declare <4 x float> @llvm.minimum.v4f32(<4 x float>, <4 x float>)
11678define <4 x float> @min_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
11679; SIMD128-LABEL: min_intrinsic_v4f32:
11680; SIMD128:         .functype min_intrinsic_v4f32 (v128, v128) -> (v128)
11681; SIMD128-NEXT:  # %bb.0:
11682; SIMD128-NEXT:    f32x4.min $push0=, $0, $1
11683; SIMD128-NEXT:    return $pop0
11684;
11685; SIMD128-FAST-LABEL: min_intrinsic_v4f32:
11686; SIMD128-FAST:         .functype min_intrinsic_v4f32 (v128, v128) -> (v128)
11687; SIMD128-FAST-NEXT:  # %bb.0:
11688; SIMD128-FAST-NEXT:    f32x4.min $push0=, $0, $1
11689; SIMD128-FAST-NEXT:    return $pop0
11690;
11691; NO-SIMD128-LABEL: min_intrinsic_v4f32:
11692; NO-SIMD128:         .functype min_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
11693; NO-SIMD128-NEXT:  # %bb.0:
11694; NO-SIMD128-NEXT:    f32.min $push0=, $4, $8
11695; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
11696; NO-SIMD128-NEXT:    f32.min $push1=, $3, $7
11697; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
11698; NO-SIMD128-NEXT:    f32.min $push2=, $2, $6
11699; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
11700; NO-SIMD128-NEXT:    f32.min $push3=, $1, $5
11701; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
11702; NO-SIMD128-NEXT:    return
11703;
11704; NO-SIMD128-FAST-LABEL: min_intrinsic_v4f32:
11705; NO-SIMD128-FAST:         .functype min_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
11706; NO-SIMD128-FAST-NEXT:  # %bb.0:
11707; NO-SIMD128-FAST-NEXT:    f32.min $push0=, $1, $5
11708; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
11709; NO-SIMD128-FAST-NEXT:    f32.min $push1=, $2, $6
11710; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
11711; NO-SIMD128-FAST-NEXT:    f32.min $push2=, $3, $7
11712; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
11713; NO-SIMD128-FAST-NEXT:    f32.min $push3=, $4, $8
11714; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
11715; NO-SIMD128-FAST-NEXT:    return
11716  %a = call <4 x float> @llvm.minimum.v4f32(<4 x float> %x, <4 x float> %y)
11717  ret <4 x float> %a
11718}
11719
11720declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)
11721define <4 x float> @minnum_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
11722; SIMD128-LABEL: minnum_intrinsic_v4f32:
11723; SIMD128:         .functype minnum_intrinsic_v4f32 (v128, v128) -> (v128)
11724; SIMD128-NEXT:  # %bb.0:
11725; SIMD128-NEXT:    f32x4.extract_lane $push27=, $0, 0
11726; SIMD128-NEXT:    local.tee $push26=, $3=, $pop27
11727; SIMD128-NEXT:    f32x4.extract_lane $push25=, $1, 0
11728; SIMD128-NEXT:    local.tee $push24=, $2=, $pop25
11729; SIMD128-NEXT:    f32.lt $push2=, $3, $2
11730; SIMD128-NEXT:    f32.select $push3=, $pop26, $pop24, $pop2
11731; SIMD128-NEXT:    f32x4.splat $push4=, $pop3
11732; SIMD128-NEXT:    f32x4.extract_lane $push23=, $0, 1
11733; SIMD128-NEXT:    local.tee $push22=, $3=, $pop23
11734; SIMD128-NEXT:    f32x4.extract_lane $push21=, $1, 1
11735; SIMD128-NEXT:    local.tee $push20=, $2=, $pop21
11736; SIMD128-NEXT:    f32.lt $push0=, $3, $2
11737; SIMD128-NEXT:    f32.select $push1=, $pop22, $pop20, $pop0
11738; SIMD128-NEXT:    f32x4.replace_lane $push5=, $pop4, 1, $pop1
11739; SIMD128-NEXT:    f32x4.extract_lane $push19=, $0, 2
11740; SIMD128-NEXT:    local.tee $push18=, $3=, $pop19
11741; SIMD128-NEXT:    f32x4.extract_lane $push17=, $1, 2
11742; SIMD128-NEXT:    local.tee $push16=, $2=, $pop17
11743; SIMD128-NEXT:    f32.lt $push6=, $3, $2
11744; SIMD128-NEXT:    f32.select $push7=, $pop18, $pop16, $pop6
11745; SIMD128-NEXT:    f32x4.replace_lane $push8=, $pop5, 2, $pop7
11746; SIMD128-NEXT:    f32x4.extract_lane $push15=, $0, 3
11747; SIMD128-NEXT:    local.tee $push14=, $3=, $pop15
11748; SIMD128-NEXT:    f32x4.extract_lane $push13=, $1, 3
11749; SIMD128-NEXT:    local.tee $push12=, $2=, $pop13
11750; SIMD128-NEXT:    f32.lt $push9=, $3, $2
11751; SIMD128-NEXT:    f32.select $push10=, $pop14, $pop12, $pop9
11752; SIMD128-NEXT:    f32x4.replace_lane $push11=, $pop8, 3, $pop10
11753; SIMD128-NEXT:    return $pop11
11754;
11755; SIMD128-FAST-LABEL: minnum_intrinsic_v4f32:
11756; SIMD128-FAST:         .functype minnum_intrinsic_v4f32 (v128, v128) -> (v128)
11757; SIMD128-FAST-NEXT:  # %bb.0:
11758; SIMD128-FAST-NEXT:    f32x4.extract_lane $push27=, $0, 0
11759; SIMD128-FAST-NEXT:    local.tee $push26=, $3=, $pop27
11760; SIMD128-FAST-NEXT:    f32x4.extract_lane $push25=, $1, 0
11761; SIMD128-FAST-NEXT:    local.tee $push24=, $2=, $pop25
11762; SIMD128-FAST-NEXT:    f32.lt $push3=, $3, $2
11763; SIMD128-FAST-NEXT:    f32.select $push4=, $pop26, $pop24, $pop3
11764; SIMD128-FAST-NEXT:    f32x4.splat $push5=, $pop4
11765; SIMD128-FAST-NEXT:    f32x4.extract_lane $push23=, $0, 1
11766; SIMD128-FAST-NEXT:    local.tee $push22=, $3=, $pop23
11767; SIMD128-FAST-NEXT:    f32x4.extract_lane $push21=, $1, 1
11768; SIMD128-FAST-NEXT:    local.tee $push20=, $2=, $pop21
11769; SIMD128-FAST-NEXT:    f32.lt $push1=, $3, $2
11770; SIMD128-FAST-NEXT:    f32.select $push2=, $pop22, $pop20, $pop1
11771; SIMD128-FAST-NEXT:    f32x4.replace_lane $push6=, $pop5, 1, $pop2
11772; SIMD128-FAST-NEXT:    f32x4.extract_lane $push19=, $0, 2
11773; SIMD128-FAST-NEXT:    local.tee $push18=, $3=, $pop19
11774; SIMD128-FAST-NEXT:    f32x4.extract_lane $push17=, $1, 2
11775; SIMD128-FAST-NEXT:    local.tee $push16=, $2=, $pop17
11776; SIMD128-FAST-NEXT:    f32.lt $push7=, $3, $2
11777; SIMD128-FAST-NEXT:    f32.select $push8=, $pop18, $pop16, $pop7
11778; SIMD128-FAST-NEXT:    f32x4.replace_lane $push9=, $pop6, 2, $pop8
11779; SIMD128-FAST-NEXT:    f32x4.extract_lane $push15=, $0, 3
11780; SIMD128-FAST-NEXT:    local.tee $push14=, $3=, $pop15
11781; SIMD128-FAST-NEXT:    f32x4.extract_lane $push13=, $1, 3
11782; SIMD128-FAST-NEXT:    local.tee $push12=, $2=, $pop13
11783; SIMD128-FAST-NEXT:    f32.lt $push10=, $3, $2
11784; SIMD128-FAST-NEXT:    f32.select $push11=, $pop14, $pop12, $pop10
11785; SIMD128-FAST-NEXT:    f32x4.replace_lane $push0=, $pop9, 3, $pop11
11786; SIMD128-FAST-NEXT:    return $pop0
11787;
11788; NO-SIMD128-LABEL: minnum_intrinsic_v4f32:
11789; NO-SIMD128:         .functype minnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
11790; NO-SIMD128-NEXT:  # %bb.0:
11791; NO-SIMD128-NEXT:    f32.lt $push0=, $4, $8
11792; NO-SIMD128-NEXT:    f32.select $push1=, $4, $8, $pop0
11793; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
11794; NO-SIMD128-NEXT:    f32.lt $push2=, $3, $7
11795; NO-SIMD128-NEXT:    f32.select $push3=, $3, $7, $pop2
11796; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
11797; NO-SIMD128-NEXT:    f32.lt $push4=, $2, $6
11798; NO-SIMD128-NEXT:    f32.select $push5=, $2, $6, $pop4
11799; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
11800; NO-SIMD128-NEXT:    f32.lt $push6=, $1, $5
11801; NO-SIMD128-NEXT:    f32.select $push7=, $1, $5, $pop6
11802; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
11803; NO-SIMD128-NEXT:    return
11804;
11805; NO-SIMD128-FAST-LABEL: minnum_intrinsic_v4f32:
11806; NO-SIMD128-FAST:         .functype minnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
11807; NO-SIMD128-FAST-NEXT:  # %bb.0:
11808; NO-SIMD128-FAST-NEXT:    f32.lt $push0=, $1, $5
11809; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $1, $5, $pop0
11810; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
11811; NO-SIMD128-FAST-NEXT:    f32.lt $push2=, $2, $6
11812; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $2, $6, $pop2
11813; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
11814; NO-SIMD128-FAST-NEXT:    f32.lt $push4=, $3, $7
11815; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $3, $7, $pop4
11816; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
11817; NO-SIMD128-FAST-NEXT:    f32.lt $push6=, $4, $8
11818; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $4, $8, $pop6
11819; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
11820; NO-SIMD128-FAST-NEXT:    return
11821  %a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float> %y)
11822  ret <4 x float> %a
11823}
11824
11825define <4 x float> @minnum_nsz_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
11826; SIMD128-LABEL: minnum_nsz_intrinsic_v4f32:
11827; SIMD128:         .functype minnum_nsz_intrinsic_v4f32 (v128, v128) -> (v128)
11828; SIMD128-NEXT:  # %bb.0:
11829; SIMD128-NEXT:    f32x4.min $push0=, $0, $1
11830; SIMD128-NEXT:    return $pop0
11831;
11832; SIMD128-FAST-LABEL: minnum_nsz_intrinsic_v4f32:
11833; SIMD128-FAST:         .functype minnum_nsz_intrinsic_v4f32 (v128, v128) -> (v128)
11834; SIMD128-FAST-NEXT:  # %bb.0:
11835; SIMD128-FAST-NEXT:    f32x4.min $push0=, $0, $1
11836; SIMD128-FAST-NEXT:    return $pop0
11837;
11838; NO-SIMD128-LABEL: minnum_nsz_intrinsic_v4f32:
11839; NO-SIMD128:         .functype minnum_nsz_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
11840; NO-SIMD128-NEXT:  # %bb.0:
11841; NO-SIMD128-NEXT:    f32.min $push0=, $4, $8
11842; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
11843; NO-SIMD128-NEXT:    f32.min $push1=, $3, $7
11844; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
11845; NO-SIMD128-NEXT:    f32.min $push2=, $2, $6
11846; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
11847; NO-SIMD128-NEXT:    f32.min $push3=, $1, $5
11848; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
11849; NO-SIMD128-NEXT:    return
11850;
11851; NO-SIMD128-FAST-LABEL: minnum_nsz_intrinsic_v4f32:
11852; NO-SIMD128-FAST:         .functype minnum_nsz_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
11853; NO-SIMD128-FAST-NEXT:  # %bb.0:
11854; NO-SIMD128-FAST-NEXT:    f32.min $push0=, $1, $5
11855; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
11856; NO-SIMD128-FAST-NEXT:    f32.min $push1=, $2, $6
11857; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
11858; NO-SIMD128-FAST-NEXT:    f32.min $push2=, $3, $7
11859; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
11860; NO-SIMD128-FAST-NEXT:    f32.min $push3=, $4, $8
11861; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
11862; NO-SIMD128-FAST-NEXT:    return
11863  %a = call nnan nsz <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float> %y)
11864  ret <4 x float> %a
11865}
11866
11867define <4 x float> @fminnumv432_non_zero_intrinsic(<4 x float> %x) {
11868; SIMD128-LABEL: fminnumv432_non_zero_intrinsic:
11869; SIMD128:         .functype fminnumv432_non_zero_intrinsic (v128) -> (v128)
11870; SIMD128-NEXT:  # %bb.0:
11871; SIMD128-NEXT:    v128.const $push0=, -0x1p0, -0x1p0, -0x1p0, -0x1p0
11872; SIMD128-NEXT:    f32x4.min $push1=, $0, $pop0
11873; SIMD128-NEXT:    return $pop1
11874;
11875; SIMD128-FAST-LABEL: fminnumv432_non_zero_intrinsic:
11876; SIMD128-FAST:         .functype fminnumv432_non_zero_intrinsic (v128) -> (v128)
11877; SIMD128-FAST-NEXT:  # %bb.0:
11878; SIMD128-FAST-NEXT:    v128.const $push1=, -0x1p0, -0x1p0, -0x1p0, -0x1p0
11879; SIMD128-FAST-NEXT:    f32x4.min $push0=, $0, $pop1
11880; SIMD128-FAST-NEXT:    return $pop0
11881;
11882; NO-SIMD128-LABEL: fminnumv432_non_zero_intrinsic:
11883; NO-SIMD128:         .functype fminnumv432_non_zero_intrinsic (i32, f32, f32, f32, f32) -> ()
11884; NO-SIMD128-NEXT:  # %bb.0:
11885; NO-SIMD128-NEXT:    f32.const $push0=, -0x1p0
11886; NO-SIMD128-NEXT:    f32.min $push1=, $4, $pop0
11887; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
11888; NO-SIMD128-NEXT:    f32.const $push7=, -0x1p0
11889; NO-SIMD128-NEXT:    f32.min $push2=, $3, $pop7
11890; NO-SIMD128-NEXT:    f32.store 8($0), $pop2
11891; NO-SIMD128-NEXT:    f32.const $push6=, -0x1p0
11892; NO-SIMD128-NEXT:    f32.min $push3=, $2, $pop6
11893; NO-SIMD128-NEXT:    f32.store 4($0), $pop3
11894; NO-SIMD128-NEXT:    f32.const $push5=, -0x1p0
11895; NO-SIMD128-NEXT:    f32.min $push4=, $1, $pop5
11896; NO-SIMD128-NEXT:    f32.store 0($0), $pop4
11897; NO-SIMD128-NEXT:    return
11898;
11899; NO-SIMD128-FAST-LABEL: fminnumv432_non_zero_intrinsic:
11900; NO-SIMD128-FAST:         .functype fminnumv432_non_zero_intrinsic (i32, f32, f32, f32, f32) -> ()
11901; NO-SIMD128-FAST-NEXT:  # %bb.0:
11902; NO-SIMD128-FAST-NEXT:    f32.const $push0=, -0x1p0
11903; NO-SIMD128-FAST-NEXT:    f32.min $push1=, $1, $pop0
11904; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
11905; NO-SIMD128-FAST-NEXT:    f32.const $push7=, -0x1p0
11906; NO-SIMD128-FAST-NEXT:    f32.min $push2=, $2, $pop7
11907; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop2
11908; NO-SIMD128-FAST-NEXT:    f32.const $push6=, -0x1p0
11909; NO-SIMD128-FAST-NEXT:    f32.min $push3=, $3, $pop6
11910; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop3
11911; NO-SIMD128-FAST-NEXT:    f32.const $push5=, -0x1p0
11912; NO-SIMD128-FAST-NEXT:    f32.min $push4=, $4, $pop5
11913; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop4
11914; NO-SIMD128-FAST-NEXT:    return
11915  %a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float -1.0, float -1.0, float -1.0>)
11916  ret <4 x float> %a
11917}
11918
11919define <4 x float> @fminnumv432_one_zero_intrinsic(<4 x float> %x) {
11920; SIMD128-LABEL: fminnumv432_one_zero_intrinsic:
11921; SIMD128:         .functype fminnumv432_one_zero_intrinsic (v128) -> (v128)
11922; SIMD128-NEXT:  # %bb.0:
11923; SIMD128-NEXT:    f32x4.extract_lane $push27=, $0, 0
11924; SIMD128-NEXT:    local.tee $push26=, $1=, $pop27
11925; SIMD128-NEXT:    f32.const $push3=, -0x1p0
11926; SIMD128-NEXT:    f32.const $push25=, -0x1p0
11927; SIMD128-NEXT:    f32.lt $push4=, $1, $pop25
11928; SIMD128-NEXT:    f32.select $push5=, $pop26, $pop3, $pop4
11929; SIMD128-NEXT:    f32x4.splat $push6=, $pop5
11930; SIMD128-NEXT:    f32x4.extract_lane $push24=, $0, 1
11931; SIMD128-NEXT:    local.tee $push23=, $1=, $pop24
11932; SIMD128-NEXT:    f32.const $push0=, 0x0p0
11933; SIMD128-NEXT:    f32.const $push22=, 0x0p0
11934; SIMD128-NEXT:    f32.lt $push1=, $1, $pop22
11935; SIMD128-NEXT:    f32.select $push2=, $pop23, $pop0, $pop1
11936; SIMD128-NEXT:    f32x4.replace_lane $push7=, $pop6, 1, $pop2
11937; SIMD128-NEXT:    f32x4.extract_lane $push21=, $0, 2
11938; SIMD128-NEXT:    local.tee $push20=, $1=, $pop21
11939; SIMD128-NEXT:    f32.const $push19=, -0x1p0
11940; SIMD128-NEXT:    f32.const $push18=, -0x1p0
11941; SIMD128-NEXT:    f32.lt $push8=, $1, $pop18
11942; SIMD128-NEXT:    f32.select $push9=, $pop20, $pop19, $pop8
11943; SIMD128-NEXT:    f32x4.replace_lane $push10=, $pop7, 2, $pop9
11944; SIMD128-NEXT:    f32x4.extract_lane $push17=, $0, 3
11945; SIMD128-NEXT:    local.tee $push16=, $1=, $pop17
11946; SIMD128-NEXT:    f32.const $push15=, -0x1p0
11947; SIMD128-NEXT:    f32.const $push14=, -0x1p0
11948; SIMD128-NEXT:    f32.lt $push11=, $1, $pop14
11949; SIMD128-NEXT:    f32.select $push12=, $pop16, $pop15, $pop11
11950; SIMD128-NEXT:    f32x4.replace_lane $push13=, $pop10, 3, $pop12
11951; SIMD128-NEXT:    return $pop13
11952;
11953; SIMD128-FAST-LABEL: fminnumv432_one_zero_intrinsic:
11954; SIMD128-FAST:         .functype fminnumv432_one_zero_intrinsic (v128) -> (v128)
11955; SIMD128-FAST-NEXT:  # %bb.0:
11956; SIMD128-FAST-NEXT:    f32x4.extract_lane $push27=, $0, 0
11957; SIMD128-FAST-NEXT:    local.tee $push26=, $1=, $pop27
11958; SIMD128-FAST-NEXT:    f32.const $push4=, -0x1p0
11959; SIMD128-FAST-NEXT:    f32.const $push25=, -0x1p0
11960; SIMD128-FAST-NEXT:    f32.lt $push5=, $1, $pop25
11961; SIMD128-FAST-NEXT:    f32.select $push6=, $pop26, $pop4, $pop5
11962; SIMD128-FAST-NEXT:    f32x4.splat $push7=, $pop6
11963; SIMD128-FAST-NEXT:    f32x4.extract_lane $push24=, $0, 1
11964; SIMD128-FAST-NEXT:    local.tee $push23=, $1=, $pop24
11965; SIMD128-FAST-NEXT:    f32.const $push1=, 0x0p0
11966; SIMD128-FAST-NEXT:    f32.const $push22=, 0x0p0
11967; SIMD128-FAST-NEXT:    f32.lt $push2=, $1, $pop22
11968; SIMD128-FAST-NEXT:    f32.select $push3=, $pop23, $pop1, $pop2
11969; SIMD128-FAST-NEXT:    f32x4.replace_lane $push8=, $pop7, 1, $pop3
11970; SIMD128-FAST-NEXT:    f32x4.extract_lane $push21=, $0, 2
11971; SIMD128-FAST-NEXT:    local.tee $push20=, $1=, $pop21
11972; SIMD128-FAST-NEXT:    f32.const $push19=, -0x1p0
11973; SIMD128-FAST-NEXT:    f32.const $push18=, -0x1p0
11974; SIMD128-FAST-NEXT:    f32.lt $push9=, $1, $pop18
11975; SIMD128-FAST-NEXT:    f32.select $push10=, $pop20, $pop19, $pop9
11976; SIMD128-FAST-NEXT:    f32x4.replace_lane $push11=, $pop8, 2, $pop10
11977; SIMD128-FAST-NEXT:    f32x4.extract_lane $push17=, $0, 3
11978; SIMD128-FAST-NEXT:    local.tee $push16=, $1=, $pop17
11979; SIMD128-FAST-NEXT:    f32.const $push15=, -0x1p0
11980; SIMD128-FAST-NEXT:    f32.const $push14=, -0x1p0
11981; SIMD128-FAST-NEXT:    f32.lt $push12=, $1, $pop14
11982; SIMD128-FAST-NEXT:    f32.select $push13=, $pop16, $pop15, $pop12
11983; SIMD128-FAST-NEXT:    f32x4.replace_lane $push0=, $pop11, 3, $pop13
11984; SIMD128-FAST-NEXT:    return $pop0
11985;
11986; NO-SIMD128-LABEL: fminnumv432_one_zero_intrinsic:
11987; NO-SIMD128:         .functype fminnumv432_one_zero_intrinsic (i32, f32, f32, f32, f32) -> ()
11988; NO-SIMD128-NEXT:  # %bb.0:
11989; NO-SIMD128-NEXT:    f32.const $push0=, -0x1p0
11990; NO-SIMD128-NEXT:    f32.min $push1=, $4, $pop0
11991; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
11992; NO-SIMD128-NEXT:    f32.const $push9=, -0x1p0
11993; NO-SIMD128-NEXT:    f32.min $push2=, $3, $pop9
11994; NO-SIMD128-NEXT:    f32.store 8($0), $pop2
11995; NO-SIMD128-NEXT:    f32.const $push3=, 0x0p0
11996; NO-SIMD128-NEXT:    f32.const $push8=, 0x0p0
11997; NO-SIMD128-NEXT:    f32.lt $push4=, $2, $pop8
11998; NO-SIMD128-NEXT:    f32.select $push5=, $2, $pop3, $pop4
11999; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12000; NO-SIMD128-NEXT:    f32.const $push7=, -0x1p0
12001; NO-SIMD128-NEXT:    f32.min $push6=, $1, $pop7
12002; NO-SIMD128-NEXT:    f32.store 0($0), $pop6
12003; NO-SIMD128-NEXT:    return
12004;
12005; NO-SIMD128-FAST-LABEL: fminnumv432_one_zero_intrinsic:
12006; NO-SIMD128-FAST:         .functype fminnumv432_one_zero_intrinsic (i32, f32, f32, f32, f32) -> ()
12007; NO-SIMD128-FAST-NEXT:  # %bb.0:
12008; NO-SIMD128-FAST-NEXT:    f32.const $push0=, -0x1p0
12009; NO-SIMD128-FAST-NEXT:    f32.min $push1=, $1, $pop0
12010; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12011; NO-SIMD128-FAST-NEXT:    f32.const $push9=, -0x1p0
12012; NO-SIMD128-FAST-NEXT:    f32.min $push2=, $3, $pop9
12013; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
12014; NO-SIMD128-FAST-NEXT:    f32.const $push3=, 0x0p0
12015; NO-SIMD128-FAST-NEXT:    f32.const $push8=, 0x0p0
12016; NO-SIMD128-FAST-NEXT:    f32.lt $push4=, $2, $pop8
12017; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $2, $pop3, $pop4
12018; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop5
12019; NO-SIMD128-FAST-NEXT:    f32.const $push7=, -0x1p0
12020; NO-SIMD128-FAST-NEXT:    f32.min $push6=, $4, $pop7
12021; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop6
12022; NO-SIMD128-FAST-NEXT:    return
12023  %a = call nnan <4 x float> @llvm.minnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float 0.0, float -1.0, float -1.0>)
12024  ret <4 x float> %a
12025}
12026
12027declare <4 x float> @llvm.maximum.v4f32(<4 x float>, <4 x float>)
12028define <4 x float> @max_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
12029; SIMD128-LABEL: max_intrinsic_v4f32:
12030; SIMD128:         .functype max_intrinsic_v4f32 (v128, v128) -> (v128)
12031; SIMD128-NEXT:  # %bb.0:
12032; SIMD128-NEXT:    f32x4.max $push0=, $0, $1
12033; SIMD128-NEXT:    return $pop0
12034;
12035; SIMD128-FAST-LABEL: max_intrinsic_v4f32:
12036; SIMD128-FAST:         .functype max_intrinsic_v4f32 (v128, v128) -> (v128)
12037; SIMD128-FAST-NEXT:  # %bb.0:
12038; SIMD128-FAST-NEXT:    f32x4.max $push0=, $0, $1
12039; SIMD128-FAST-NEXT:    return $pop0
12040;
12041; NO-SIMD128-LABEL: max_intrinsic_v4f32:
12042; NO-SIMD128:         .functype max_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12043; NO-SIMD128-NEXT:  # %bb.0:
12044; NO-SIMD128-NEXT:    f32.max $push0=, $4, $8
12045; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
12046; NO-SIMD128-NEXT:    f32.max $push1=, $3, $7
12047; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
12048; NO-SIMD128-NEXT:    f32.max $push2=, $2, $6
12049; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
12050; NO-SIMD128-NEXT:    f32.max $push3=, $1, $5
12051; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
12052; NO-SIMD128-NEXT:    return
12053;
12054; NO-SIMD128-FAST-LABEL: max_intrinsic_v4f32:
12055; NO-SIMD128-FAST:         .functype max_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12056; NO-SIMD128-FAST-NEXT:  # %bb.0:
12057; NO-SIMD128-FAST-NEXT:    f32.max $push0=, $1, $5
12058; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
12059; NO-SIMD128-FAST-NEXT:    f32.max $push1=, $2, $6
12060; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
12061; NO-SIMD128-FAST-NEXT:    f32.max $push2=, $3, $7
12062; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
12063; NO-SIMD128-FAST-NEXT:    f32.max $push3=, $4, $8
12064; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
12065; NO-SIMD128-FAST-NEXT:    return
12066  %a = call <4 x float> @llvm.maximum.v4f32(<4 x float> %x, <4 x float> %y)
12067  ret <4 x float> %a
12068}
12069
12070declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>)
12071define <4 x float> @maxnum_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
12072; SIMD128-LABEL: maxnum_intrinsic_v4f32:
12073; SIMD128:         .functype maxnum_intrinsic_v4f32 (v128, v128) -> (v128)
12074; SIMD128-NEXT:  # %bb.0:
12075; SIMD128-NEXT:    f32x4.extract_lane $push27=, $0, 0
12076; SIMD128-NEXT:    local.tee $push26=, $3=, $pop27
12077; SIMD128-NEXT:    f32x4.extract_lane $push25=, $1, 0
12078; SIMD128-NEXT:    local.tee $push24=, $2=, $pop25
12079; SIMD128-NEXT:    f32.gt $push2=, $3, $2
12080; SIMD128-NEXT:    f32.select $push3=, $pop26, $pop24, $pop2
12081; SIMD128-NEXT:    f32x4.splat $push4=, $pop3
12082; SIMD128-NEXT:    f32x4.extract_lane $push23=, $0, 1
12083; SIMD128-NEXT:    local.tee $push22=, $3=, $pop23
12084; SIMD128-NEXT:    f32x4.extract_lane $push21=, $1, 1
12085; SIMD128-NEXT:    local.tee $push20=, $2=, $pop21
12086; SIMD128-NEXT:    f32.gt $push0=, $3, $2
12087; SIMD128-NEXT:    f32.select $push1=, $pop22, $pop20, $pop0
12088; SIMD128-NEXT:    f32x4.replace_lane $push5=, $pop4, 1, $pop1
12089; SIMD128-NEXT:    f32x4.extract_lane $push19=, $0, 2
12090; SIMD128-NEXT:    local.tee $push18=, $3=, $pop19
12091; SIMD128-NEXT:    f32x4.extract_lane $push17=, $1, 2
12092; SIMD128-NEXT:    local.tee $push16=, $2=, $pop17
12093; SIMD128-NEXT:    f32.gt $push6=, $3, $2
12094; SIMD128-NEXT:    f32.select $push7=, $pop18, $pop16, $pop6
12095; SIMD128-NEXT:    f32x4.replace_lane $push8=, $pop5, 2, $pop7
12096; SIMD128-NEXT:    f32x4.extract_lane $push15=, $0, 3
12097; SIMD128-NEXT:    local.tee $push14=, $3=, $pop15
12098; SIMD128-NEXT:    f32x4.extract_lane $push13=, $1, 3
12099; SIMD128-NEXT:    local.tee $push12=, $2=, $pop13
12100; SIMD128-NEXT:    f32.gt $push9=, $3, $2
12101; SIMD128-NEXT:    f32.select $push10=, $pop14, $pop12, $pop9
12102; SIMD128-NEXT:    f32x4.replace_lane $push11=, $pop8, 3, $pop10
12103; SIMD128-NEXT:    return $pop11
12104;
12105; SIMD128-FAST-LABEL: maxnum_intrinsic_v4f32:
12106; SIMD128-FAST:         .functype maxnum_intrinsic_v4f32 (v128, v128) -> (v128)
12107; SIMD128-FAST-NEXT:  # %bb.0:
12108; SIMD128-FAST-NEXT:    f32x4.extract_lane $push27=, $0, 0
12109; SIMD128-FAST-NEXT:    local.tee $push26=, $3=, $pop27
12110; SIMD128-FAST-NEXT:    f32x4.extract_lane $push25=, $1, 0
12111; SIMD128-FAST-NEXT:    local.tee $push24=, $2=, $pop25
12112; SIMD128-FAST-NEXT:    f32.gt $push3=, $3, $2
12113; SIMD128-FAST-NEXT:    f32.select $push4=, $pop26, $pop24, $pop3
12114; SIMD128-FAST-NEXT:    f32x4.splat $push5=, $pop4
12115; SIMD128-FAST-NEXT:    f32x4.extract_lane $push23=, $0, 1
12116; SIMD128-FAST-NEXT:    local.tee $push22=, $3=, $pop23
12117; SIMD128-FAST-NEXT:    f32x4.extract_lane $push21=, $1, 1
12118; SIMD128-FAST-NEXT:    local.tee $push20=, $2=, $pop21
12119; SIMD128-FAST-NEXT:    f32.gt $push1=, $3, $2
12120; SIMD128-FAST-NEXT:    f32.select $push2=, $pop22, $pop20, $pop1
12121; SIMD128-FAST-NEXT:    f32x4.replace_lane $push6=, $pop5, 1, $pop2
12122; SIMD128-FAST-NEXT:    f32x4.extract_lane $push19=, $0, 2
12123; SIMD128-FAST-NEXT:    local.tee $push18=, $3=, $pop19
12124; SIMD128-FAST-NEXT:    f32x4.extract_lane $push17=, $1, 2
12125; SIMD128-FAST-NEXT:    local.tee $push16=, $2=, $pop17
12126; SIMD128-FAST-NEXT:    f32.gt $push7=, $3, $2
12127; SIMD128-FAST-NEXT:    f32.select $push8=, $pop18, $pop16, $pop7
12128; SIMD128-FAST-NEXT:    f32x4.replace_lane $push9=, $pop6, 2, $pop8
12129; SIMD128-FAST-NEXT:    f32x4.extract_lane $push15=, $0, 3
12130; SIMD128-FAST-NEXT:    local.tee $push14=, $3=, $pop15
12131; SIMD128-FAST-NEXT:    f32x4.extract_lane $push13=, $1, 3
12132; SIMD128-FAST-NEXT:    local.tee $push12=, $2=, $pop13
12133; SIMD128-FAST-NEXT:    f32.gt $push10=, $3, $2
12134; SIMD128-FAST-NEXT:    f32.select $push11=, $pop14, $pop12, $pop10
12135; SIMD128-FAST-NEXT:    f32x4.replace_lane $push0=, $pop9, 3, $pop11
12136; SIMD128-FAST-NEXT:    return $pop0
12137;
12138; NO-SIMD128-LABEL: maxnum_intrinsic_v4f32:
12139; NO-SIMD128:         .functype maxnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12140; NO-SIMD128-NEXT:  # %bb.0:
12141; NO-SIMD128-NEXT:    f32.gt $push0=, $4, $8
12142; NO-SIMD128-NEXT:    f32.select $push1=, $4, $8, $pop0
12143; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12144; NO-SIMD128-NEXT:    f32.gt $push2=, $3, $7
12145; NO-SIMD128-NEXT:    f32.select $push3=, $3, $7, $pop2
12146; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12147; NO-SIMD128-NEXT:    f32.gt $push4=, $2, $6
12148; NO-SIMD128-NEXT:    f32.select $push5=, $2, $6, $pop4
12149; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12150; NO-SIMD128-NEXT:    f32.gt $push6=, $1, $5
12151; NO-SIMD128-NEXT:    f32.select $push7=, $1, $5, $pop6
12152; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12153; NO-SIMD128-NEXT:    return
12154;
12155; NO-SIMD128-FAST-LABEL: maxnum_intrinsic_v4f32:
12156; NO-SIMD128-FAST:         .functype maxnum_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12157; NO-SIMD128-FAST-NEXT:  # %bb.0:
12158; NO-SIMD128-FAST-NEXT:    f32.gt $push0=, $1, $5
12159; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $1, $5, $pop0
12160; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12161; NO-SIMD128-FAST-NEXT:    f32.gt $push2=, $2, $6
12162; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $2, $6, $pop2
12163; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12164; NO-SIMD128-FAST-NEXT:    f32.gt $push4=, $3, $7
12165; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $3, $7, $pop4
12166; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12167; NO-SIMD128-FAST-NEXT:    f32.gt $push6=, $4, $8
12168; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $4, $8, $pop6
12169; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12170; NO-SIMD128-FAST-NEXT:    return
12171  %a = call nnan <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float> %y)
12172  ret <4 x float> %a
12173}
12174
12175define <4 x float> @maxnum_nsz_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
12176; SIMD128-LABEL: maxnum_nsz_intrinsic_v4f32:
12177; SIMD128:         .functype maxnum_nsz_intrinsic_v4f32 (v128, v128) -> (v128)
12178; SIMD128-NEXT:  # %bb.0:
12179; SIMD128-NEXT:    f32x4.max $push0=, $0, $1
12180; SIMD128-NEXT:    return $pop0
12181;
12182; SIMD128-FAST-LABEL: maxnum_nsz_intrinsic_v4f32:
12183; SIMD128-FAST:         .functype maxnum_nsz_intrinsic_v4f32 (v128, v128) -> (v128)
12184; SIMD128-FAST-NEXT:  # %bb.0:
12185; SIMD128-FAST-NEXT:    f32x4.max $push0=, $0, $1
12186; SIMD128-FAST-NEXT:    return $pop0
12187;
12188; NO-SIMD128-LABEL: maxnum_nsz_intrinsic_v4f32:
12189; NO-SIMD128:         .functype maxnum_nsz_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12190; NO-SIMD128-NEXT:  # %bb.0:
12191; NO-SIMD128-NEXT:    f32.max $push0=, $4, $8
12192; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
12193; NO-SIMD128-NEXT:    f32.max $push1=, $3, $7
12194; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
12195; NO-SIMD128-NEXT:    f32.max $push2=, $2, $6
12196; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
12197; NO-SIMD128-NEXT:    f32.max $push3=, $1, $5
12198; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
12199; NO-SIMD128-NEXT:    return
12200;
12201; NO-SIMD128-FAST-LABEL: maxnum_nsz_intrinsic_v4f32:
12202; NO-SIMD128-FAST:         .functype maxnum_nsz_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12203; NO-SIMD128-FAST-NEXT:  # %bb.0:
12204; NO-SIMD128-FAST-NEXT:    f32.max $push0=, $1, $5
12205; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
12206; NO-SIMD128-FAST-NEXT:    f32.max $push1=, $2, $6
12207; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
12208; NO-SIMD128-FAST-NEXT:    f32.max $push2=, $3, $7
12209; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
12210; NO-SIMD128-FAST-NEXT:    f32.max $push3=, $4, $8
12211; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
12212; NO-SIMD128-FAST-NEXT:    return
12213  %a = call nnan nsz <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float> %y)
12214  ret <4 x float> %a
12215}
12216
12217define <4 x float> @maxnum_one_zero_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
12218; SIMD128-LABEL: maxnum_one_zero_intrinsic_v4f32:
12219; SIMD128:         .functype maxnum_one_zero_intrinsic_v4f32 (v128, v128) -> (v128)
12220; SIMD128-NEXT:  # %bb.0:
12221; SIMD128-NEXT:    f32x4.extract_lane $push27=, $0, 0
12222; SIMD128-NEXT:    local.tee $push26=, $2=, $pop27
12223; SIMD128-NEXT:    f32.const $push3=, -0x1p0
12224; SIMD128-NEXT:    f32.const $push25=, -0x1p0
12225; SIMD128-NEXT:    f32.gt $push4=, $2, $pop25
12226; SIMD128-NEXT:    f32.select $push5=, $pop26, $pop3, $pop4
12227; SIMD128-NEXT:    f32x4.splat $push6=, $pop5
12228; SIMD128-NEXT:    f32x4.extract_lane $push24=, $0, 1
12229; SIMD128-NEXT:    local.tee $push23=, $2=, $pop24
12230; SIMD128-NEXT:    f32.const $push0=, 0x0p0
12231; SIMD128-NEXT:    f32.const $push22=, 0x0p0
12232; SIMD128-NEXT:    f32.gt $push1=, $2, $pop22
12233; SIMD128-NEXT:    f32.select $push2=, $pop23, $pop0, $pop1
12234; SIMD128-NEXT:    f32x4.replace_lane $push7=, $pop6, 1, $pop2
12235; SIMD128-NEXT:    f32x4.extract_lane $push21=, $0, 2
12236; SIMD128-NEXT:    local.tee $push20=, $2=, $pop21
12237; SIMD128-NEXT:    f32.const $push19=, -0x1p0
12238; SIMD128-NEXT:    f32.const $push18=, -0x1p0
12239; SIMD128-NEXT:    f32.gt $push8=, $2, $pop18
12240; SIMD128-NEXT:    f32.select $push9=, $pop20, $pop19, $pop8
12241; SIMD128-NEXT:    f32x4.replace_lane $push10=, $pop7, 2, $pop9
12242; SIMD128-NEXT:    f32x4.extract_lane $push17=, $0, 3
12243; SIMD128-NEXT:    local.tee $push16=, $2=, $pop17
12244; SIMD128-NEXT:    f32.const $push15=, -0x1p0
12245; SIMD128-NEXT:    f32.const $push14=, -0x1p0
12246; SIMD128-NEXT:    f32.gt $push11=, $2, $pop14
12247; SIMD128-NEXT:    f32.select $push12=, $pop16, $pop15, $pop11
12248; SIMD128-NEXT:    f32x4.replace_lane $push13=, $pop10, 3, $pop12
12249; SIMD128-NEXT:    return $pop13
12250;
12251; SIMD128-FAST-LABEL: maxnum_one_zero_intrinsic_v4f32:
12252; SIMD128-FAST:         .functype maxnum_one_zero_intrinsic_v4f32 (v128, v128) -> (v128)
12253; SIMD128-FAST-NEXT:  # %bb.0:
12254; SIMD128-FAST-NEXT:    f32x4.extract_lane $push27=, $0, 0
12255; SIMD128-FAST-NEXT:    local.tee $push26=, $2=, $pop27
12256; SIMD128-FAST-NEXT:    f32.const $push4=, -0x1p0
12257; SIMD128-FAST-NEXT:    f32.const $push25=, -0x1p0
12258; SIMD128-FAST-NEXT:    f32.gt $push5=, $2, $pop25
12259; SIMD128-FAST-NEXT:    f32.select $push6=, $pop26, $pop4, $pop5
12260; SIMD128-FAST-NEXT:    f32x4.splat $push7=, $pop6
12261; SIMD128-FAST-NEXT:    f32x4.extract_lane $push24=, $0, 1
12262; SIMD128-FAST-NEXT:    local.tee $push23=, $2=, $pop24
12263; SIMD128-FAST-NEXT:    f32.const $push1=, 0x0p0
12264; SIMD128-FAST-NEXT:    f32.const $push22=, 0x0p0
12265; SIMD128-FAST-NEXT:    f32.gt $push2=, $2, $pop22
12266; SIMD128-FAST-NEXT:    f32.select $push3=, $pop23, $pop1, $pop2
12267; SIMD128-FAST-NEXT:    f32x4.replace_lane $push8=, $pop7, 1, $pop3
12268; SIMD128-FAST-NEXT:    f32x4.extract_lane $push21=, $0, 2
12269; SIMD128-FAST-NEXT:    local.tee $push20=, $2=, $pop21
12270; SIMD128-FAST-NEXT:    f32.const $push19=, -0x1p0
12271; SIMD128-FAST-NEXT:    f32.const $push18=, -0x1p0
12272; SIMD128-FAST-NEXT:    f32.gt $push9=, $2, $pop18
12273; SIMD128-FAST-NEXT:    f32.select $push10=, $pop20, $pop19, $pop9
12274; SIMD128-FAST-NEXT:    f32x4.replace_lane $push11=, $pop8, 2, $pop10
12275; SIMD128-FAST-NEXT:    f32x4.extract_lane $push17=, $0, 3
12276; SIMD128-FAST-NEXT:    local.tee $push16=, $2=, $pop17
12277; SIMD128-FAST-NEXT:    f32.const $push15=, -0x1p0
12278; SIMD128-FAST-NEXT:    f32.const $push14=, -0x1p0
12279; SIMD128-FAST-NEXT:    f32.gt $push12=, $2, $pop14
12280; SIMD128-FAST-NEXT:    f32.select $push13=, $pop16, $pop15, $pop12
12281; SIMD128-FAST-NEXT:    f32x4.replace_lane $push0=, $pop11, 3, $pop13
12282; SIMD128-FAST-NEXT:    return $pop0
12283;
12284; NO-SIMD128-LABEL: maxnum_one_zero_intrinsic_v4f32:
12285; NO-SIMD128:         .functype maxnum_one_zero_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12286; NO-SIMD128-NEXT:  # %bb.0:
12287; NO-SIMD128-NEXT:    f32.const $push0=, -0x1p0
12288; NO-SIMD128-NEXT:    f32.max $push1=, $4, $pop0
12289; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12290; NO-SIMD128-NEXT:    f32.const $push9=, -0x1p0
12291; NO-SIMD128-NEXT:    f32.max $push2=, $3, $pop9
12292; NO-SIMD128-NEXT:    f32.store 8($0), $pop2
12293; NO-SIMD128-NEXT:    f32.const $push3=, 0x0p0
12294; NO-SIMD128-NEXT:    f32.const $push8=, 0x0p0
12295; NO-SIMD128-NEXT:    f32.gt $push4=, $2, $pop8
12296; NO-SIMD128-NEXT:    f32.select $push5=, $2, $pop3, $pop4
12297; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12298; NO-SIMD128-NEXT:    f32.const $push7=, -0x1p0
12299; NO-SIMD128-NEXT:    f32.max $push6=, $1, $pop7
12300; NO-SIMD128-NEXT:    f32.store 0($0), $pop6
12301; NO-SIMD128-NEXT:    return
12302;
12303; NO-SIMD128-FAST-LABEL: maxnum_one_zero_intrinsic_v4f32:
12304; NO-SIMD128-FAST:         .functype maxnum_one_zero_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12305; NO-SIMD128-FAST-NEXT:  # %bb.0:
12306; NO-SIMD128-FAST-NEXT:    f32.const $push0=, -0x1p0
12307; NO-SIMD128-FAST-NEXT:    f32.max $push1=, $1, $pop0
12308; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12309; NO-SIMD128-FAST-NEXT:    f32.const $push9=, -0x1p0
12310; NO-SIMD128-FAST-NEXT:    f32.max $push2=, $3, $pop9
12311; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
12312; NO-SIMD128-FAST-NEXT:    f32.const $push3=, 0x0p0
12313; NO-SIMD128-FAST-NEXT:    f32.const $push8=, 0x0p0
12314; NO-SIMD128-FAST-NEXT:    f32.gt $push4=, $2, $pop8
12315; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $2, $pop3, $pop4
12316; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop5
12317; NO-SIMD128-FAST-NEXT:    f32.const $push7=, -0x1p0
12318; NO-SIMD128-FAST-NEXT:    f32.max $push6=, $4, $pop7
12319; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop6
12320; NO-SIMD128-FAST-NEXT:    return
12321  %a = call nnan <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float 0.0, float -1.0, float -1.0>)
12322  ret <4 x float> %a
12323}
12324
12325define <4 x float> @maxnum_non_zero_intrinsic_v4f32(<4 x float> %x, <4 x float> %y) {
12326; SIMD128-LABEL: maxnum_non_zero_intrinsic_v4f32:
12327; SIMD128:         .functype maxnum_non_zero_intrinsic_v4f32 (v128, v128) -> (v128)
12328; SIMD128-NEXT:  # %bb.0:
12329; SIMD128-NEXT:    v128.const $push0=, -0x1p0, 0x1p0, -0x1p0, -0x1p0
12330; SIMD128-NEXT:    f32x4.max $push1=, $0, $pop0
12331; SIMD128-NEXT:    return $pop1
12332;
12333; SIMD128-FAST-LABEL: maxnum_non_zero_intrinsic_v4f32:
12334; SIMD128-FAST:         .functype maxnum_non_zero_intrinsic_v4f32 (v128, v128) -> (v128)
12335; SIMD128-FAST-NEXT:  # %bb.0:
12336; SIMD128-FAST-NEXT:    v128.const $push1=, -0x1p0, 0x1p0, -0x1p0, -0x1p0
12337; SIMD128-FAST-NEXT:    f32x4.max $push0=, $0, $pop1
12338; SIMD128-FAST-NEXT:    return $pop0
12339;
12340; NO-SIMD128-LABEL: maxnum_non_zero_intrinsic_v4f32:
12341; NO-SIMD128:         .functype maxnum_non_zero_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12342; NO-SIMD128-NEXT:  # %bb.0:
12343; NO-SIMD128-NEXT:    f32.const $push0=, -0x1p0
12344; NO-SIMD128-NEXT:    f32.max $push1=, $4, $pop0
12345; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12346; NO-SIMD128-NEXT:    f32.const $push7=, -0x1p0
12347; NO-SIMD128-NEXT:    f32.max $push2=, $3, $pop7
12348; NO-SIMD128-NEXT:    f32.store 8($0), $pop2
12349; NO-SIMD128-NEXT:    f32.const $push3=, 0x1p0
12350; NO-SIMD128-NEXT:    f32.max $push4=, $2, $pop3
12351; NO-SIMD128-NEXT:    f32.store 4($0), $pop4
12352; NO-SIMD128-NEXT:    f32.const $push6=, -0x1p0
12353; NO-SIMD128-NEXT:    f32.max $push5=, $1, $pop6
12354; NO-SIMD128-NEXT:    f32.store 0($0), $pop5
12355; NO-SIMD128-NEXT:    return
12356;
12357; NO-SIMD128-FAST-LABEL: maxnum_non_zero_intrinsic_v4f32:
12358; NO-SIMD128-FAST:         .functype maxnum_non_zero_intrinsic_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12359; NO-SIMD128-FAST-NEXT:  # %bb.0:
12360; NO-SIMD128-FAST-NEXT:    f32.const $push0=, -0x1p0
12361; NO-SIMD128-FAST-NEXT:    f32.max $push1=, $1, $pop0
12362; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12363; NO-SIMD128-FAST-NEXT:    f32.const $push2=, 0x1p0
12364; NO-SIMD128-FAST-NEXT:    f32.max $push3=, $2, $pop2
12365; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12366; NO-SIMD128-FAST-NEXT:    f32.const $push7=, -0x1p0
12367; NO-SIMD128-FAST-NEXT:    f32.max $push4=, $3, $pop7
12368; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop4
12369; NO-SIMD128-FAST-NEXT:    f32.const $push6=, -0x1p0
12370; NO-SIMD128-FAST-NEXT:    f32.max $push5=, $4, $pop6
12371; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop5
12372; NO-SIMD128-FAST-NEXT:    return
12373  %a = call nnan <4 x float> @llvm.maxnum.v4f32(<4 x float> %x, <4 x float><float -1.0, float 1.0, float -1.0, float -1.0>)
12374  ret <4 x float> %a
12375}
12376
12377define <4 x float> @min_const_intrinsic_v4f32() {
12378; SIMD128-LABEL: min_const_intrinsic_v4f32:
12379; SIMD128:         .functype min_const_intrinsic_v4f32 () -> (v128)
12380; SIMD128-NEXT:  # %bb.0:
12381; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
12382; SIMD128-NEXT:    return $pop0
12383;
12384; SIMD128-FAST-LABEL: min_const_intrinsic_v4f32:
12385; SIMD128-FAST:         .functype min_const_intrinsic_v4f32 () -> (v128)
12386; SIMD128-FAST-NEXT:  # %bb.0:
12387; SIMD128-FAST-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2, 0x1.4p2, 0x1.4p2
12388; SIMD128-FAST-NEXT:    return $pop0
12389;
12390; NO-SIMD128-LABEL: min_const_intrinsic_v4f32:
12391; NO-SIMD128:         .functype min_const_intrinsic_v4f32 (i32) -> ()
12392; NO-SIMD128-NEXT:  # %bb.0:
12393; NO-SIMD128-NEXT:    i64.const $push0=, 4656722015785320448
12394; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
12395; NO-SIMD128-NEXT:    i64.const $push1=, 4656722015785320448
12396; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
12397; NO-SIMD128-NEXT:    return
12398;
12399; NO-SIMD128-FAST-LABEL: min_const_intrinsic_v4f32:
12400; NO-SIMD128-FAST:         .functype min_const_intrinsic_v4f32 (i32) -> ()
12401; NO-SIMD128-FAST-NEXT:  # %bb.0:
12402; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 4656722015785320448
12403; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
12404; NO-SIMD128-FAST-NEXT:    i64.const $push1=, 4656722015785320448
12405; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
12406; NO-SIMD128-FAST-NEXT:    return
12407  %a = call <4 x float> @llvm.minimum.v4f32(
12408    <4 x float> <float 42., float 42., float 42., float 42.>,
12409    <4 x float> <float 5., float 5., float 5., float 5.>
12410  )
12411  ret <4 x float> %a
12412}
12413
12414define <4 x float> @max_const_intrinsic_v4f32() {
12415; SIMD128-LABEL: max_const_intrinsic_v4f32:
12416; SIMD128:         .functype max_const_intrinsic_v4f32 () -> (v128)
12417; SIMD128-NEXT:  # %bb.0:
12418; SIMD128-NEXT:    v128.const $push0=, 0x1.5p5, 0x1.5p5, 0x1.5p5, 0x1.5p5
12419; SIMD128-NEXT:    return $pop0
12420;
12421; SIMD128-FAST-LABEL: max_const_intrinsic_v4f32:
12422; SIMD128-FAST:         .functype max_const_intrinsic_v4f32 () -> (v128)
12423; SIMD128-FAST-NEXT:  # %bb.0:
12424; SIMD128-FAST-NEXT:    v128.const $push0=, 0x1.5p5, 0x1.5p5, 0x1.5p5, 0x1.5p5
12425; SIMD128-FAST-NEXT:    return $pop0
12426;
12427; NO-SIMD128-LABEL: max_const_intrinsic_v4f32:
12428; NO-SIMD128:         .functype max_const_intrinsic_v4f32 (i32) -> ()
12429; NO-SIMD128-NEXT:  # %bb.0:
12430; NO-SIMD128-NEXT:    i64.const $push0=, 4767060206681587712
12431; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
12432; NO-SIMD128-NEXT:    i64.const $push1=, 4767060206681587712
12433; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
12434; NO-SIMD128-NEXT:    return
12435;
12436; NO-SIMD128-FAST-LABEL: max_const_intrinsic_v4f32:
12437; NO-SIMD128-FAST:         .functype max_const_intrinsic_v4f32 (i32) -> ()
12438; NO-SIMD128-FAST-NEXT:  # %bb.0:
12439; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 4767060206681587712
12440; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
12441; NO-SIMD128-FAST-NEXT:    i64.const $push1=, 4767060206681587712
12442; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
12443; NO-SIMD128-FAST-NEXT:    return
12444  %a = call <4 x float> @llvm.maximum.v4f32(
12445    <4 x float> <float 42., float 42., float 42., float 42.>,
12446    <4 x float> <float 5., float 5., float 5., float 5.>
12447  )
12448  ret <4 x float> %a
12449}
12450
12451define <4 x float> @pmin_v4f32(<4 x float> %x, <4 x float> %y) {
12452; SIMD128-LABEL: pmin_v4f32:
12453; SIMD128:         .functype pmin_v4f32 (v128, v128) -> (v128)
12454; SIMD128-NEXT:  # %bb.0:
12455; SIMD128-NEXT:    f32x4.pmin $push0=, $0, $1
12456; SIMD128-NEXT:    return $pop0
12457;
12458; SIMD128-FAST-LABEL: pmin_v4f32:
12459; SIMD128-FAST:         .functype pmin_v4f32 (v128, v128) -> (v128)
12460; SIMD128-FAST-NEXT:  # %bb.0:
12461; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $0, $1
12462; SIMD128-FAST-NEXT:    return $pop0
12463;
12464; NO-SIMD128-LABEL: pmin_v4f32:
12465; NO-SIMD128:         .functype pmin_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12466; NO-SIMD128-NEXT:  # %bb.0:
12467; NO-SIMD128-NEXT:    f32.lt $push0=, $8, $4
12468; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12469; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12470; NO-SIMD128-NEXT:    f32.lt $push2=, $7, $3
12471; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
12472; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12473; NO-SIMD128-NEXT:    f32.lt $push4=, $6, $2
12474; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
12475; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12476; NO-SIMD128-NEXT:    f32.lt $push6=, $5, $1
12477; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
12478; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12479; NO-SIMD128-NEXT:    return
12480;
12481; NO-SIMD128-FAST-LABEL: pmin_v4f32:
12482; NO-SIMD128-FAST:         .functype pmin_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12483; NO-SIMD128-FAST-NEXT:  # %bb.0:
12484; NO-SIMD128-FAST-NEXT:    f32.lt $push0=, $5, $1
12485; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
12486; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12487; NO-SIMD128-FAST-NEXT:    f32.lt $push2=, $6, $2
12488; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
12489; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12490; NO-SIMD128-FAST-NEXT:    f32.lt $push4=, $7, $3
12491; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
12492; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12493; NO-SIMD128-FAST-NEXT:    f32.lt $push6=, $8, $4
12494; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
12495; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12496; NO-SIMD128-FAST-NEXT:    return
12497  %c = fcmp olt <4 x float> %y, %x
12498  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
12499  ret <4 x float> %a
12500}
12501
12502define <4 x float> @pmin_v4f32_fast_olt(<4 x float> %x, <4 x float> %y) {
12503; SIMD128-LABEL: pmin_v4f32_fast_olt:
12504; SIMD128:         .functype pmin_v4f32_fast_olt (v128, v128) -> (v128)
12505; SIMD128-NEXT:  # %bb.0:
12506; SIMD128-NEXT:    f32x4.pmin $push0=, $1, $0
12507; SIMD128-NEXT:    return $pop0
12508;
12509; SIMD128-FAST-LABEL: pmin_v4f32_fast_olt:
12510; SIMD128-FAST:         .functype pmin_v4f32_fast_olt (v128, v128) -> (v128)
12511; SIMD128-FAST-NEXT:  # %bb.0:
12512; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $1, $0
12513; SIMD128-FAST-NEXT:    return $pop0
12514;
12515; NO-SIMD128-LABEL: pmin_v4f32_fast_olt:
12516; NO-SIMD128:         .functype pmin_v4f32_fast_olt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12517; NO-SIMD128-NEXT:  # %bb.0:
12518; NO-SIMD128-NEXT:    f32.lt $push0=, $8, $4
12519; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12520; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12521; NO-SIMD128-NEXT:    f32.lt $push2=, $7, $3
12522; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
12523; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12524; NO-SIMD128-NEXT:    f32.lt $push4=, $6, $2
12525; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
12526; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12527; NO-SIMD128-NEXT:    f32.lt $push6=, $5, $1
12528; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
12529; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12530; NO-SIMD128-NEXT:    return
12531;
12532; NO-SIMD128-FAST-LABEL: pmin_v4f32_fast_olt:
12533; NO-SIMD128-FAST:         .functype pmin_v4f32_fast_olt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12534; NO-SIMD128-FAST-NEXT:  # %bb.0:
12535; NO-SIMD128-FAST-NEXT:    f32.lt $push0=, $5, $1
12536; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
12537; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12538; NO-SIMD128-FAST-NEXT:    f32.lt $push2=, $6, $2
12539; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
12540; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12541; NO-SIMD128-FAST-NEXT:    f32.lt $push4=, $7, $3
12542; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
12543; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12544; NO-SIMD128-FAST-NEXT:    f32.lt $push6=, $8, $4
12545; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
12546; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12547; NO-SIMD128-FAST-NEXT:    return
12548  %c = fcmp fast olt <4 x float> %y, %x
12549  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
12550  ret <4 x float> %a
12551}
12552
12553define <4 x float> @pmin_v4f32_fast_ogt(<4 x float> %x, <4 x float> %y) {
12554; SIMD128-LABEL: pmin_v4f32_fast_ogt:
12555; SIMD128:         .functype pmin_v4f32_fast_ogt (v128, v128) -> (v128)
12556; SIMD128-NEXT:  # %bb.0:
12557; SIMD128-NEXT:    f32x4.pmin $push0=, $0, $1
12558; SIMD128-NEXT:    return $pop0
12559;
12560; SIMD128-FAST-LABEL: pmin_v4f32_fast_ogt:
12561; SIMD128-FAST:         .functype pmin_v4f32_fast_ogt (v128, v128) -> (v128)
12562; SIMD128-FAST-NEXT:  # %bb.0:
12563; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $0, $1
12564; SIMD128-FAST-NEXT:    return $pop0
12565;
12566; NO-SIMD128-LABEL: pmin_v4f32_fast_ogt:
12567; NO-SIMD128:         .functype pmin_v4f32_fast_ogt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12568; NO-SIMD128-NEXT:  # %bb.0:
12569; NO-SIMD128-NEXT:    f32.gt $push0=, $4, $8
12570; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12571; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12572; NO-SIMD128-NEXT:    f32.gt $push2=, $3, $7
12573; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
12574; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12575; NO-SIMD128-NEXT:    f32.gt $push4=, $2, $6
12576; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
12577; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12578; NO-SIMD128-NEXT:    f32.gt $push6=, $1, $5
12579; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
12580; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12581; NO-SIMD128-NEXT:    return
12582;
12583; NO-SIMD128-FAST-LABEL: pmin_v4f32_fast_ogt:
12584; NO-SIMD128-FAST:         .functype pmin_v4f32_fast_ogt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12585; NO-SIMD128-FAST-NEXT:  # %bb.0:
12586; NO-SIMD128-FAST-NEXT:    f32.gt $push0=, $1, $5
12587; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
12588; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12589; NO-SIMD128-FAST-NEXT:    f32.gt $push2=, $2, $6
12590; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
12591; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12592; NO-SIMD128-FAST-NEXT:    f32.gt $push4=, $3, $7
12593; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
12594; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12595; NO-SIMD128-FAST-NEXT:    f32.gt $push6=, $4, $8
12596; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
12597; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12598; NO-SIMD128-FAST-NEXT:    return
12599  %c = fcmp fast ogt <4 x float> %x, %y
12600  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
12601  ret <4 x float> %a
12602}
12603
12604define <4 x float> @pmin_v4f32_fast_ole(<4 x float> %x, <4 x float> %y) {
12605; SIMD128-LABEL: pmin_v4f32_fast_ole:
12606; SIMD128:         .functype pmin_v4f32_fast_ole (v128, v128) -> (v128)
12607; SIMD128-NEXT:  # %bb.0:
12608; SIMD128-NEXT:    f32x4.pmin $push0=, $1, $0
12609; SIMD128-NEXT:    return $pop0
12610;
12611; SIMD128-FAST-LABEL: pmin_v4f32_fast_ole:
12612; SIMD128-FAST:         .functype pmin_v4f32_fast_ole (v128, v128) -> (v128)
12613; SIMD128-FAST-NEXT:  # %bb.0:
12614; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $1, $0
12615; SIMD128-FAST-NEXT:    return $pop0
12616;
12617; NO-SIMD128-LABEL: pmin_v4f32_fast_ole:
12618; NO-SIMD128:         .functype pmin_v4f32_fast_ole (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12619; NO-SIMD128-NEXT:  # %bb.0:
12620; NO-SIMD128-NEXT:    f32.le $push0=, $8, $4
12621; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12622; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12623; NO-SIMD128-NEXT:    f32.le $push2=, $7, $3
12624; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
12625; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12626; NO-SIMD128-NEXT:    f32.le $push4=, $6, $2
12627; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
12628; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12629; NO-SIMD128-NEXT:    f32.le $push6=, $5, $1
12630; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
12631; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12632; NO-SIMD128-NEXT:    return
12633;
12634; NO-SIMD128-FAST-LABEL: pmin_v4f32_fast_ole:
12635; NO-SIMD128-FAST:         .functype pmin_v4f32_fast_ole (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12636; NO-SIMD128-FAST-NEXT:  # %bb.0:
12637; NO-SIMD128-FAST-NEXT:    f32.le $push0=, $5, $1
12638; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
12639; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12640; NO-SIMD128-FAST-NEXT:    f32.le $push2=, $6, $2
12641; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
12642; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12643; NO-SIMD128-FAST-NEXT:    f32.le $push4=, $7, $3
12644; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
12645; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12646; NO-SIMD128-FAST-NEXT:    f32.le $push6=, $8, $4
12647; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
12648; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12649; NO-SIMD128-FAST-NEXT:    return
12650  %c = fcmp fast ole <4 x float> %y, %x
12651  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
12652  ret <4 x float> %a
12653}
12654
12655define <4 x float> @pmin_v4f32_fast_oge(<4 x float> %x, <4 x float> %y) {
12656; SIMD128-LABEL: pmin_v4f32_fast_oge:
12657; SIMD128:         .functype pmin_v4f32_fast_oge (v128, v128) -> (v128)
12658; SIMD128-NEXT:  # %bb.0:
12659; SIMD128-NEXT:    f32x4.pmin $push0=, $0, $1
12660; SIMD128-NEXT:    return $pop0
12661;
12662; SIMD128-FAST-LABEL: pmin_v4f32_fast_oge:
12663; SIMD128-FAST:         .functype pmin_v4f32_fast_oge (v128, v128) -> (v128)
12664; SIMD128-FAST-NEXT:  # %bb.0:
12665; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $0, $1
12666; SIMD128-FAST-NEXT:    return $pop0
12667;
12668; NO-SIMD128-LABEL: pmin_v4f32_fast_oge:
12669; NO-SIMD128:         .functype pmin_v4f32_fast_oge (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12670; NO-SIMD128-NEXT:  # %bb.0:
12671; NO-SIMD128-NEXT:    f32.ge $push0=, $4, $8
12672; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12673; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12674; NO-SIMD128-NEXT:    f32.ge $push2=, $3, $7
12675; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
12676; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12677; NO-SIMD128-NEXT:    f32.ge $push4=, $2, $6
12678; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
12679; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12680; NO-SIMD128-NEXT:    f32.ge $push6=, $1, $5
12681; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
12682; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12683; NO-SIMD128-NEXT:    return
12684;
12685; NO-SIMD128-FAST-LABEL: pmin_v4f32_fast_oge:
12686; NO-SIMD128-FAST:         .functype pmin_v4f32_fast_oge (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12687; NO-SIMD128-FAST-NEXT:  # %bb.0:
12688; NO-SIMD128-FAST-NEXT:    f32.ge $push0=, $1, $5
12689; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
12690; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12691; NO-SIMD128-FAST-NEXT:    f32.ge $push2=, $2, $6
12692; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
12693; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12694; NO-SIMD128-FAST-NEXT:    f32.ge $push4=, $3, $7
12695; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
12696; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12697; NO-SIMD128-FAST-NEXT:    f32.ge $push6=, $4, $8
12698; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
12699; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12700; NO-SIMD128-FAST-NEXT:    return
12701  %c = fcmp fast oge <4 x float> %x, %y
12702  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
12703  ret <4 x float> %a
12704}
12705
12706define <4 x i32> @pmin_int_v4f32(<4 x i32> %x, <4 x i32> %y) {
12707; SIMD128-LABEL: pmin_int_v4f32:
12708; SIMD128:         .functype pmin_int_v4f32 (v128, v128) -> (v128)
12709; SIMD128-NEXT:  # %bb.0:
12710; SIMD128-NEXT:    f32x4.pmin $push0=, $0, $1
12711; SIMD128-NEXT:    return $pop0
12712;
12713; SIMD128-FAST-LABEL: pmin_int_v4f32:
12714; SIMD128-FAST:         .functype pmin_int_v4f32 (v128, v128) -> (v128)
12715; SIMD128-FAST-NEXT:  # %bb.0:
12716; SIMD128-FAST-NEXT:    f32x4.pmin $push0=, $0, $1
12717; SIMD128-FAST-NEXT:    return $pop0
12718;
12719; NO-SIMD128-LABEL: pmin_int_v4f32:
12720; NO-SIMD128:         .functype pmin_int_v4f32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
12721; NO-SIMD128-NEXT:  # %bb.0:
12722; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push1=, $8
12723; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push0=, $4
12724; NO-SIMD128-NEXT:    f32.lt $push2=, $pop1, $pop0
12725; NO-SIMD128-NEXT:    i32.select $push3=, $8, $4, $pop2
12726; NO-SIMD128-NEXT:    i32.store 12($0), $pop3
12727; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push5=, $7
12728; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push4=, $3
12729; NO-SIMD128-NEXT:    f32.lt $push6=, $pop5, $pop4
12730; NO-SIMD128-NEXT:    i32.select $push7=, $7, $3, $pop6
12731; NO-SIMD128-NEXT:    i32.store 8($0), $pop7
12732; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push9=, $6
12733; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push8=, $2
12734; NO-SIMD128-NEXT:    f32.lt $push10=, $pop9, $pop8
12735; NO-SIMD128-NEXT:    i32.select $push11=, $6, $2, $pop10
12736; NO-SIMD128-NEXT:    i32.store 4($0), $pop11
12737; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push13=, $5
12738; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push12=, $1
12739; NO-SIMD128-NEXT:    f32.lt $push14=, $pop13, $pop12
12740; NO-SIMD128-NEXT:    i32.select $push15=, $5, $1, $pop14
12741; NO-SIMD128-NEXT:    i32.store 0($0), $pop15
12742; NO-SIMD128-NEXT:    return
12743;
12744; NO-SIMD128-FAST-LABEL: pmin_int_v4f32:
12745; NO-SIMD128-FAST:         .functype pmin_int_v4f32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
12746; NO-SIMD128-FAST-NEXT:  # %bb.0:
12747; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push1=, $5
12748; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push0=, $1
12749; NO-SIMD128-FAST-NEXT:    f32.lt $push2=, $pop1, $pop0
12750; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $5, $1, $pop2
12751; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop3
12752; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push5=, $6
12753; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push4=, $2
12754; NO-SIMD128-FAST-NEXT:    f32.lt $push6=, $pop5, $pop4
12755; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $6, $2, $pop6
12756; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop7
12757; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push9=, $7
12758; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push8=, $3
12759; NO-SIMD128-FAST-NEXT:    f32.lt $push10=, $pop9, $pop8
12760; NO-SIMD128-FAST-NEXT:    i32.select $push11=, $7, $3, $pop10
12761; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop11
12762; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push13=, $8
12763; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push12=, $4
12764; NO-SIMD128-FAST-NEXT:    f32.lt $push14=, $pop13, $pop12
12765; NO-SIMD128-FAST-NEXT:    i32.select $push15=, $8, $4, $pop14
12766; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop15
12767; NO-SIMD128-FAST-NEXT:    return
12768  %fx = bitcast <4 x i32> %x to <4 x float>
12769  %fy = bitcast <4 x i32> %y to <4 x float>
12770  %c = fcmp olt <4 x float> %fy, %fx
12771  %a = select <4 x i1> %c, <4 x i32> %y, <4 x i32> %x
12772  ret <4 x i32> %a
12773}
12774
12775define <4 x float> @pmax_v4f32(<4 x float> %x, <4 x float> %y) {
12776; SIMD128-LABEL: pmax_v4f32:
12777; SIMD128:         .functype pmax_v4f32 (v128, v128) -> (v128)
12778; SIMD128-NEXT:  # %bb.0:
12779; SIMD128-NEXT:    f32x4.pmax $push0=, $0, $1
12780; SIMD128-NEXT:    return $pop0
12781;
12782; SIMD128-FAST-LABEL: pmax_v4f32:
12783; SIMD128-FAST:         .functype pmax_v4f32 (v128, v128) -> (v128)
12784; SIMD128-FAST-NEXT:  # %bb.0:
12785; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $1
12786; SIMD128-FAST-NEXT:    return $pop0
12787;
12788; NO-SIMD128-LABEL: pmax_v4f32:
12789; NO-SIMD128:         .functype pmax_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12790; NO-SIMD128-NEXT:  # %bb.0:
12791; NO-SIMD128-NEXT:    f32.lt $push0=, $4, $8
12792; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12793; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12794; NO-SIMD128-NEXT:    f32.lt $push2=, $3, $7
12795; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
12796; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12797; NO-SIMD128-NEXT:    f32.lt $push4=, $2, $6
12798; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
12799; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12800; NO-SIMD128-NEXT:    f32.lt $push6=, $1, $5
12801; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
12802; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12803; NO-SIMD128-NEXT:    return
12804;
12805; NO-SIMD128-FAST-LABEL: pmax_v4f32:
12806; NO-SIMD128-FAST:         .functype pmax_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12807; NO-SIMD128-FAST-NEXT:  # %bb.0:
12808; NO-SIMD128-FAST-NEXT:    f32.lt $push0=, $1, $5
12809; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
12810; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12811; NO-SIMD128-FAST-NEXT:    f32.lt $push2=, $2, $6
12812; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
12813; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12814; NO-SIMD128-FAST-NEXT:    f32.lt $push4=, $3, $7
12815; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
12816; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12817; NO-SIMD128-FAST-NEXT:    f32.lt $push6=, $4, $8
12818; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
12819; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12820; NO-SIMD128-FAST-NEXT:    return
12821  %c = fcmp olt <4 x float> %x, %y
12822  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
12823  ret <4 x float> %a
12824}
12825
12826define <4 x float> @pmax_v4f32_fast_ogt(<4 x float> %x, <4 x float> %y) {
12827; SIMD128-LABEL: pmax_v4f32_fast_ogt:
12828; SIMD128:         .functype pmax_v4f32_fast_ogt (v128, v128) -> (v128)
12829; SIMD128-NEXT:  # %bb.0:
12830; SIMD128-NEXT:    f32x4.pmax $push0=, $0, $1
12831; SIMD128-NEXT:    return $pop0
12832;
12833; SIMD128-FAST-LABEL: pmax_v4f32_fast_ogt:
12834; SIMD128-FAST:         .functype pmax_v4f32_fast_ogt (v128, v128) -> (v128)
12835; SIMD128-FAST-NEXT:  # %bb.0:
12836; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $1
12837; SIMD128-FAST-NEXT:    return $pop0
12838;
12839; NO-SIMD128-LABEL: pmax_v4f32_fast_ogt:
12840; NO-SIMD128:         .functype pmax_v4f32_fast_ogt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12841; NO-SIMD128-NEXT:  # %bb.0:
12842; NO-SIMD128-NEXT:    f32.gt $push0=, $4, $8
12843; NO-SIMD128-NEXT:    f32.select $push1=, $4, $8, $pop0
12844; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12845; NO-SIMD128-NEXT:    f32.gt $push2=, $3, $7
12846; NO-SIMD128-NEXT:    f32.select $push3=, $3, $7, $pop2
12847; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12848; NO-SIMD128-NEXT:    f32.gt $push4=, $2, $6
12849; NO-SIMD128-NEXT:    f32.select $push5=, $2, $6, $pop4
12850; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12851; NO-SIMD128-NEXT:    f32.gt $push6=, $1, $5
12852; NO-SIMD128-NEXT:    f32.select $push7=, $1, $5, $pop6
12853; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12854; NO-SIMD128-NEXT:    return
12855;
12856; NO-SIMD128-FAST-LABEL: pmax_v4f32_fast_ogt:
12857; NO-SIMD128-FAST:         .functype pmax_v4f32_fast_ogt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12858; NO-SIMD128-FAST-NEXT:  # %bb.0:
12859; NO-SIMD128-FAST-NEXT:    f32.gt $push0=, $1, $5
12860; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $1, $5, $pop0
12861; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12862; NO-SIMD128-FAST-NEXT:    f32.gt $push2=, $2, $6
12863; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $2, $6, $pop2
12864; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12865; NO-SIMD128-FAST-NEXT:    f32.gt $push4=, $3, $7
12866; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $3, $7, $pop4
12867; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12868; NO-SIMD128-FAST-NEXT:    f32.gt $push6=, $4, $8
12869; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $4, $8, $pop6
12870; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12871; NO-SIMD128-FAST-NEXT:    return
12872  %c = fcmp fast ogt <4 x float> %x, %y
12873  %a = select <4 x i1> %c, <4 x float> %x, <4 x float> %y
12874  ret <4 x float> %a
12875}
12876
12877define <4 x float> @pmax_v4f32_fast_olt(<4 x float> %x, <4 x float> %y) {
12878; SIMD128-LABEL: pmax_v4f32_fast_olt:
12879; SIMD128:         .functype pmax_v4f32_fast_olt (v128, v128) -> (v128)
12880; SIMD128-NEXT:  # %bb.0:
12881; SIMD128-NEXT:    f32x4.pmax $push0=, $0, $1
12882; SIMD128-NEXT:    return $pop0
12883;
12884; SIMD128-FAST-LABEL: pmax_v4f32_fast_olt:
12885; SIMD128-FAST:         .functype pmax_v4f32_fast_olt (v128, v128) -> (v128)
12886; SIMD128-FAST-NEXT:  # %bb.0:
12887; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $1
12888; SIMD128-FAST-NEXT:    return $pop0
12889;
12890; NO-SIMD128-LABEL: pmax_v4f32_fast_olt:
12891; NO-SIMD128:         .functype pmax_v4f32_fast_olt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12892; NO-SIMD128-NEXT:  # %bb.0:
12893; NO-SIMD128-NEXT:    f32.lt $push0=, $4, $8
12894; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12895; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12896; NO-SIMD128-NEXT:    f32.lt $push2=, $3, $7
12897; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
12898; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12899; NO-SIMD128-NEXT:    f32.lt $push4=, $2, $6
12900; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
12901; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12902; NO-SIMD128-NEXT:    f32.lt $push6=, $1, $5
12903; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
12904; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12905; NO-SIMD128-NEXT:    return
12906;
12907; NO-SIMD128-FAST-LABEL: pmax_v4f32_fast_olt:
12908; NO-SIMD128-FAST:         .functype pmax_v4f32_fast_olt (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12909; NO-SIMD128-FAST-NEXT:  # %bb.0:
12910; NO-SIMD128-FAST-NEXT:    f32.lt $push0=, $1, $5
12911; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
12912; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12913; NO-SIMD128-FAST-NEXT:    f32.lt $push2=, $2, $6
12914; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
12915; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12916; NO-SIMD128-FAST-NEXT:    f32.lt $push4=, $3, $7
12917; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
12918; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12919; NO-SIMD128-FAST-NEXT:    f32.lt $push6=, $4, $8
12920; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
12921; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12922; NO-SIMD128-FAST-NEXT:    return
12923  %c = fcmp fast olt <4 x float> %x, %y
12924  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
12925  ret <4 x float> %a
12926}
12927
12928define <4 x float> @pmax_v4f32_fast_oge(<4 x float> %x, <4 x float> %y) {
12929; SIMD128-LABEL: pmax_v4f32_fast_oge:
12930; SIMD128:         .functype pmax_v4f32_fast_oge (v128, v128) -> (v128)
12931; SIMD128-NEXT:  # %bb.0:
12932; SIMD128-NEXT:    f32x4.pmax $push0=, $0, $1
12933; SIMD128-NEXT:    return $pop0
12934;
12935; SIMD128-FAST-LABEL: pmax_v4f32_fast_oge:
12936; SIMD128-FAST:         .functype pmax_v4f32_fast_oge (v128, v128) -> (v128)
12937; SIMD128-FAST-NEXT:  # %bb.0:
12938; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $1
12939; SIMD128-FAST-NEXT:    return $pop0
12940;
12941; NO-SIMD128-LABEL: pmax_v4f32_fast_oge:
12942; NO-SIMD128:         .functype pmax_v4f32_fast_oge (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12943; NO-SIMD128-NEXT:  # %bb.0:
12944; NO-SIMD128-NEXT:    f32.ge $push0=, $4, $8
12945; NO-SIMD128-NEXT:    f32.select $push1=, $4, $8, $pop0
12946; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12947; NO-SIMD128-NEXT:    f32.ge $push2=, $3, $7
12948; NO-SIMD128-NEXT:    f32.select $push3=, $3, $7, $pop2
12949; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
12950; NO-SIMD128-NEXT:    f32.ge $push4=, $2, $6
12951; NO-SIMD128-NEXT:    f32.select $push5=, $2, $6, $pop4
12952; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
12953; NO-SIMD128-NEXT:    f32.ge $push6=, $1, $5
12954; NO-SIMD128-NEXT:    f32.select $push7=, $1, $5, $pop6
12955; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
12956; NO-SIMD128-NEXT:    return
12957;
12958; NO-SIMD128-FAST-LABEL: pmax_v4f32_fast_oge:
12959; NO-SIMD128-FAST:         .functype pmax_v4f32_fast_oge (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12960; NO-SIMD128-FAST-NEXT:  # %bb.0:
12961; NO-SIMD128-FAST-NEXT:    f32.ge $push0=, $1, $5
12962; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $1, $5, $pop0
12963; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
12964; NO-SIMD128-FAST-NEXT:    f32.ge $push2=, $2, $6
12965; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $2, $6, $pop2
12966; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
12967; NO-SIMD128-FAST-NEXT:    f32.ge $push4=, $3, $7
12968; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $3, $7, $pop4
12969; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
12970; NO-SIMD128-FAST-NEXT:    f32.ge $push6=, $4, $8
12971; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $4, $8, $pop6
12972; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
12973; NO-SIMD128-FAST-NEXT:    return
12974  %c = fcmp fast oge <4 x float> %x, %y
12975  %a = select <4 x i1> %c, <4 x float> %x, <4 x float> %y
12976  ret <4 x float> %a
12977}
12978
12979define <4 x float> @pmax_v4f32_fast_ole(<4 x float> %x, <4 x float> %y) {
12980; SIMD128-LABEL: pmax_v4f32_fast_ole:
12981; SIMD128:         .functype pmax_v4f32_fast_ole (v128, v128) -> (v128)
12982; SIMD128-NEXT:  # %bb.0:
12983; SIMD128-NEXT:    f32x4.pmax $push0=, $0, $1
12984; SIMD128-NEXT:    return $pop0
12985;
12986; SIMD128-FAST-LABEL: pmax_v4f32_fast_ole:
12987; SIMD128-FAST:         .functype pmax_v4f32_fast_ole (v128, v128) -> (v128)
12988; SIMD128-FAST-NEXT:  # %bb.0:
12989; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $1
12990; SIMD128-FAST-NEXT:    return $pop0
12991;
12992; NO-SIMD128-LABEL: pmax_v4f32_fast_ole:
12993; NO-SIMD128:         .functype pmax_v4f32_fast_ole (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
12994; NO-SIMD128-NEXT:  # %bb.0:
12995; NO-SIMD128-NEXT:    f32.le $push0=, $4, $8
12996; NO-SIMD128-NEXT:    f32.select $push1=, $8, $4, $pop0
12997; NO-SIMD128-NEXT:    f32.store 12($0), $pop1
12998; NO-SIMD128-NEXT:    f32.le $push2=, $3, $7
12999; NO-SIMD128-NEXT:    f32.select $push3=, $7, $3, $pop2
13000; NO-SIMD128-NEXT:    f32.store 8($0), $pop3
13001; NO-SIMD128-NEXT:    f32.le $push4=, $2, $6
13002; NO-SIMD128-NEXT:    f32.select $push5=, $6, $2, $pop4
13003; NO-SIMD128-NEXT:    f32.store 4($0), $pop5
13004; NO-SIMD128-NEXT:    f32.le $push6=, $1, $5
13005; NO-SIMD128-NEXT:    f32.select $push7=, $5, $1, $pop6
13006; NO-SIMD128-NEXT:    f32.store 0($0), $pop7
13007; NO-SIMD128-NEXT:    return
13008;
13009; NO-SIMD128-FAST-LABEL: pmax_v4f32_fast_ole:
13010; NO-SIMD128-FAST:         .functype pmax_v4f32_fast_ole (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13011; NO-SIMD128-FAST-NEXT:  # %bb.0:
13012; NO-SIMD128-FAST-NEXT:    f32.le $push0=, $1, $5
13013; NO-SIMD128-FAST-NEXT:    f32.select $push1=, $5, $1, $pop0
13014; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop1
13015; NO-SIMD128-FAST-NEXT:    f32.le $push2=, $2, $6
13016; NO-SIMD128-FAST-NEXT:    f32.select $push3=, $6, $2, $pop2
13017; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop3
13018; NO-SIMD128-FAST-NEXT:    f32.le $push4=, $3, $7
13019; NO-SIMD128-FAST-NEXT:    f32.select $push5=, $7, $3, $pop4
13020; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop5
13021; NO-SIMD128-FAST-NEXT:    f32.le $push6=, $4, $8
13022; NO-SIMD128-FAST-NEXT:    f32.select $push7=, $8, $4, $pop6
13023; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop7
13024; NO-SIMD128-FAST-NEXT:    return
13025  %c = fcmp fast ole <4 x float> %x, %y
13026  %a = select <4 x i1> %c, <4 x float> %y, <4 x float> %x
13027  ret <4 x float> %a
13028}
13029
13030define <4 x i32> @pmax_int_v4f32(<4 x i32> %x, <4 x i32> %y) {
13031; SIMD128-LABEL: pmax_int_v4f32:
13032; SIMD128:         .functype pmax_int_v4f32 (v128, v128) -> (v128)
13033; SIMD128-NEXT:  # %bb.0:
13034; SIMD128-NEXT:    f32x4.pmax $push0=, $0, $1
13035; SIMD128-NEXT:    return $pop0
13036;
13037; SIMD128-FAST-LABEL: pmax_int_v4f32:
13038; SIMD128-FAST:         .functype pmax_int_v4f32 (v128, v128) -> (v128)
13039; SIMD128-FAST-NEXT:  # %bb.0:
13040; SIMD128-FAST-NEXT:    f32x4.pmax $push0=, $0, $1
13041; SIMD128-FAST-NEXT:    return $pop0
13042;
13043; NO-SIMD128-LABEL: pmax_int_v4f32:
13044; NO-SIMD128:         .functype pmax_int_v4f32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
13045; NO-SIMD128-NEXT:  # %bb.0:
13046; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push1=, $4
13047; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push0=, $8
13048; NO-SIMD128-NEXT:    f32.lt $push2=, $pop1, $pop0
13049; NO-SIMD128-NEXT:    i32.select $push3=, $8, $4, $pop2
13050; NO-SIMD128-NEXT:    i32.store 12($0), $pop3
13051; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push5=, $3
13052; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push4=, $7
13053; NO-SIMD128-NEXT:    f32.lt $push6=, $pop5, $pop4
13054; NO-SIMD128-NEXT:    i32.select $push7=, $7, $3, $pop6
13055; NO-SIMD128-NEXT:    i32.store 8($0), $pop7
13056; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push9=, $2
13057; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push8=, $6
13058; NO-SIMD128-NEXT:    f32.lt $push10=, $pop9, $pop8
13059; NO-SIMD128-NEXT:    i32.select $push11=, $6, $2, $pop10
13060; NO-SIMD128-NEXT:    i32.store 4($0), $pop11
13061; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push13=, $1
13062; NO-SIMD128-NEXT:    f32.reinterpret_i32 $push12=, $5
13063; NO-SIMD128-NEXT:    f32.lt $push14=, $pop13, $pop12
13064; NO-SIMD128-NEXT:    i32.select $push15=, $5, $1, $pop14
13065; NO-SIMD128-NEXT:    i32.store 0($0), $pop15
13066; NO-SIMD128-NEXT:    return
13067;
13068; NO-SIMD128-FAST-LABEL: pmax_int_v4f32:
13069; NO-SIMD128-FAST:         .functype pmax_int_v4f32 (i32, i32, i32, i32, i32, i32, i32, i32, i32) -> ()
13070; NO-SIMD128-FAST-NEXT:  # %bb.0:
13071; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push1=, $1
13072; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push0=, $5
13073; NO-SIMD128-FAST-NEXT:    f32.lt $push2=, $pop1, $pop0
13074; NO-SIMD128-FAST-NEXT:    i32.select $push3=, $5, $1, $pop2
13075; NO-SIMD128-FAST-NEXT:    i32.store 0($0), $pop3
13076; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push5=, $2
13077; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push4=, $6
13078; NO-SIMD128-FAST-NEXT:    f32.lt $push6=, $pop5, $pop4
13079; NO-SIMD128-FAST-NEXT:    i32.select $push7=, $6, $2, $pop6
13080; NO-SIMD128-FAST-NEXT:    i32.store 4($0), $pop7
13081; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push9=, $3
13082; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push8=, $7
13083; NO-SIMD128-FAST-NEXT:    f32.lt $push10=, $pop9, $pop8
13084; NO-SIMD128-FAST-NEXT:    i32.select $push11=, $7, $3, $pop10
13085; NO-SIMD128-FAST-NEXT:    i32.store 8($0), $pop11
13086; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push13=, $4
13087; NO-SIMD128-FAST-NEXT:    f32.reinterpret_i32 $push12=, $8
13088; NO-SIMD128-FAST-NEXT:    f32.lt $push14=, $pop13, $pop12
13089; NO-SIMD128-FAST-NEXT:    i32.select $push15=, $8, $4, $pop14
13090; NO-SIMD128-FAST-NEXT:    i32.store 12($0), $pop15
13091; NO-SIMD128-FAST-NEXT:    return
13092  %fx = bitcast <4 x i32> %x to <4 x float>
13093  %fy = bitcast <4 x i32> %y to <4 x float>
13094  %c = fcmp olt <4 x float> %fx, %fy
13095  %a = select <4 x i1> %c, <4 x i32> %y, <4 x i32> %x
13096  ret <4 x i32> %a
13097}
13098
13099define <4 x float> @add_v4f32(<4 x float> %x, <4 x float> %y) {
13100; SIMD128-LABEL: add_v4f32:
13101; SIMD128:         .functype add_v4f32 (v128, v128) -> (v128)
13102; SIMD128-NEXT:  # %bb.0:
13103; SIMD128-NEXT:    f32x4.add $push0=, $0, $1
13104; SIMD128-NEXT:    return $pop0
13105;
13106; SIMD128-FAST-LABEL: add_v4f32:
13107; SIMD128-FAST:         .functype add_v4f32 (v128, v128) -> (v128)
13108; SIMD128-FAST-NEXT:  # %bb.0:
13109; SIMD128-FAST-NEXT:    f32x4.add $push0=, $0, $1
13110; SIMD128-FAST-NEXT:    return $pop0
13111;
13112; NO-SIMD128-LABEL: add_v4f32:
13113; NO-SIMD128:         .functype add_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13114; NO-SIMD128-NEXT:  # %bb.0:
13115; NO-SIMD128-NEXT:    f32.add $push0=, $4, $8
13116; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
13117; NO-SIMD128-NEXT:    f32.add $push1=, $3, $7
13118; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
13119; NO-SIMD128-NEXT:    f32.add $push2=, $2, $6
13120; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
13121; NO-SIMD128-NEXT:    f32.add $push3=, $1, $5
13122; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
13123; NO-SIMD128-NEXT:    return
13124;
13125; NO-SIMD128-FAST-LABEL: add_v4f32:
13126; NO-SIMD128-FAST:         .functype add_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13127; NO-SIMD128-FAST-NEXT:  # %bb.0:
13128; NO-SIMD128-FAST-NEXT:    f32.add $push0=, $1, $5
13129; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
13130; NO-SIMD128-FAST-NEXT:    f32.add $push1=, $2, $6
13131; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
13132; NO-SIMD128-FAST-NEXT:    f32.add $push2=, $3, $7
13133; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
13134; NO-SIMD128-FAST-NEXT:    f32.add $push3=, $4, $8
13135; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
13136; NO-SIMD128-FAST-NEXT:    return
13137  %a = fadd <4 x float> %x, %y
13138  ret <4 x float> %a
13139}
13140
13141define <4 x float> @sub_v4f32(<4 x float> %x, <4 x float> %y) {
13142; SIMD128-LABEL: sub_v4f32:
13143; SIMD128:         .functype sub_v4f32 (v128, v128) -> (v128)
13144; SIMD128-NEXT:  # %bb.0:
13145; SIMD128-NEXT:    f32x4.sub $push0=, $0, $1
13146; SIMD128-NEXT:    return $pop0
13147;
13148; SIMD128-FAST-LABEL: sub_v4f32:
13149; SIMD128-FAST:         .functype sub_v4f32 (v128, v128) -> (v128)
13150; SIMD128-FAST-NEXT:  # %bb.0:
13151; SIMD128-FAST-NEXT:    f32x4.sub $push0=, $0, $1
13152; SIMD128-FAST-NEXT:    return $pop0
13153;
13154; NO-SIMD128-LABEL: sub_v4f32:
13155; NO-SIMD128:         .functype sub_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13156; NO-SIMD128-NEXT:  # %bb.0:
13157; NO-SIMD128-NEXT:    f32.sub $push0=, $4, $8
13158; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
13159; NO-SIMD128-NEXT:    f32.sub $push1=, $3, $7
13160; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
13161; NO-SIMD128-NEXT:    f32.sub $push2=, $2, $6
13162; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
13163; NO-SIMD128-NEXT:    f32.sub $push3=, $1, $5
13164; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
13165; NO-SIMD128-NEXT:    return
13166;
13167; NO-SIMD128-FAST-LABEL: sub_v4f32:
13168; NO-SIMD128-FAST:         .functype sub_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13169; NO-SIMD128-FAST-NEXT:  # %bb.0:
13170; NO-SIMD128-FAST-NEXT:    f32.sub $push0=, $1, $5
13171; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
13172; NO-SIMD128-FAST-NEXT:    f32.sub $push1=, $2, $6
13173; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
13174; NO-SIMD128-FAST-NEXT:    f32.sub $push2=, $3, $7
13175; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
13176; NO-SIMD128-FAST-NEXT:    f32.sub $push3=, $4, $8
13177; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
13178; NO-SIMD128-FAST-NEXT:    return
13179  %a = fsub <4 x float> %x, %y
13180  ret <4 x float> %a
13181}
13182
13183define <4 x float> @div_v4f32(<4 x float> %x, <4 x float> %y) {
13184; SIMD128-LABEL: div_v4f32:
13185; SIMD128:         .functype div_v4f32 (v128, v128) -> (v128)
13186; SIMD128-NEXT:  # %bb.0:
13187; SIMD128-NEXT:    f32x4.div $push0=, $0, $1
13188; SIMD128-NEXT:    return $pop0
13189;
13190; SIMD128-FAST-LABEL: div_v4f32:
13191; SIMD128-FAST:         .functype div_v4f32 (v128, v128) -> (v128)
13192; SIMD128-FAST-NEXT:  # %bb.0:
13193; SIMD128-FAST-NEXT:    f32x4.div $push0=, $0, $1
13194; SIMD128-FAST-NEXT:    return $pop0
13195;
13196; NO-SIMD128-LABEL: div_v4f32:
13197; NO-SIMD128:         .functype div_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13198; NO-SIMD128-NEXT:  # %bb.0:
13199; NO-SIMD128-NEXT:    f32.div $push0=, $4, $8
13200; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
13201; NO-SIMD128-NEXT:    f32.div $push1=, $3, $7
13202; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
13203; NO-SIMD128-NEXT:    f32.div $push2=, $2, $6
13204; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
13205; NO-SIMD128-NEXT:    f32.div $push3=, $1, $5
13206; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
13207; NO-SIMD128-NEXT:    return
13208;
13209; NO-SIMD128-FAST-LABEL: div_v4f32:
13210; NO-SIMD128-FAST:         .functype div_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13211; NO-SIMD128-FAST-NEXT:  # %bb.0:
13212; NO-SIMD128-FAST-NEXT:    f32.div $push0=, $1, $5
13213; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
13214; NO-SIMD128-FAST-NEXT:    f32.div $push1=, $2, $6
13215; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
13216; NO-SIMD128-FAST-NEXT:    f32.div $push2=, $3, $7
13217; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
13218; NO-SIMD128-FAST-NEXT:    f32.div $push3=, $4, $8
13219; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
13220; NO-SIMD128-FAST-NEXT:    return
13221  %a = fdiv <4 x float> %x, %y
13222  ret <4 x float> %a
13223}
13224
13225define <4 x float> @mul_v4f32(<4 x float> %x, <4 x float> %y) {
13226; SIMD128-LABEL: mul_v4f32:
13227; SIMD128:         .functype mul_v4f32 (v128, v128) -> (v128)
13228; SIMD128-NEXT:  # %bb.0:
13229; SIMD128-NEXT:    f32x4.mul $push0=, $0, $1
13230; SIMD128-NEXT:    return $pop0
13231;
13232; SIMD128-FAST-LABEL: mul_v4f32:
13233; SIMD128-FAST:         .functype mul_v4f32 (v128, v128) -> (v128)
13234; SIMD128-FAST-NEXT:  # %bb.0:
13235; SIMD128-FAST-NEXT:    f32x4.mul $push0=, $0, $1
13236; SIMD128-FAST-NEXT:    return $pop0
13237;
13238; NO-SIMD128-LABEL: mul_v4f32:
13239; NO-SIMD128:         .functype mul_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13240; NO-SIMD128-NEXT:  # %bb.0:
13241; NO-SIMD128-NEXT:    f32.mul $push0=, $4, $8
13242; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
13243; NO-SIMD128-NEXT:    f32.mul $push1=, $3, $7
13244; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
13245; NO-SIMD128-NEXT:    f32.mul $push2=, $2, $6
13246; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
13247; NO-SIMD128-NEXT:    f32.mul $push3=, $1, $5
13248; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
13249; NO-SIMD128-NEXT:    return
13250;
13251; NO-SIMD128-FAST-LABEL: mul_v4f32:
13252; NO-SIMD128-FAST:         .functype mul_v4f32 (i32, f32, f32, f32, f32, f32, f32, f32, f32) -> ()
13253; NO-SIMD128-FAST-NEXT:  # %bb.0:
13254; NO-SIMD128-FAST-NEXT:    f32.mul $push0=, $1, $5
13255; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
13256; NO-SIMD128-FAST-NEXT:    f32.mul $push1=, $2, $6
13257; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
13258; NO-SIMD128-FAST-NEXT:    f32.mul $push2=, $3, $7
13259; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
13260; NO-SIMD128-FAST-NEXT:    f32.mul $push3=, $4, $8
13261; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
13262; NO-SIMD128-FAST-NEXT:    return
13263  %a = fmul <4 x float> %x, %y
13264  ret <4 x float> %a
13265}
13266
13267declare <4 x float> @llvm.sqrt.v4f32(<4 x float> %x)
13268define <4 x float> @sqrt_v4f32(<4 x float> %x) {
13269; SIMD128-LABEL: sqrt_v4f32:
13270; SIMD128:         .functype sqrt_v4f32 (v128) -> (v128)
13271; SIMD128-NEXT:  # %bb.0:
13272; SIMD128-NEXT:    f32x4.sqrt $push0=, $0
13273; SIMD128-NEXT:    return $pop0
13274;
13275; SIMD128-FAST-LABEL: sqrt_v4f32:
13276; SIMD128-FAST:         .functype sqrt_v4f32 (v128) -> (v128)
13277; SIMD128-FAST-NEXT:  # %bb.0:
13278; SIMD128-FAST-NEXT:    f32x4.sqrt $push0=, $0
13279; SIMD128-FAST-NEXT:    return $pop0
13280;
13281; NO-SIMD128-LABEL: sqrt_v4f32:
13282; NO-SIMD128:         .functype sqrt_v4f32 (i32, f32, f32, f32, f32) -> ()
13283; NO-SIMD128-NEXT:  # %bb.0:
13284; NO-SIMD128-NEXT:    f32.sqrt $push0=, $4
13285; NO-SIMD128-NEXT:    f32.store 12($0), $pop0
13286; NO-SIMD128-NEXT:    f32.sqrt $push1=, $3
13287; NO-SIMD128-NEXT:    f32.store 8($0), $pop1
13288; NO-SIMD128-NEXT:    f32.sqrt $push2=, $2
13289; NO-SIMD128-NEXT:    f32.store 4($0), $pop2
13290; NO-SIMD128-NEXT:    f32.sqrt $push3=, $1
13291; NO-SIMD128-NEXT:    f32.store 0($0), $pop3
13292; NO-SIMD128-NEXT:    return
13293;
13294; NO-SIMD128-FAST-LABEL: sqrt_v4f32:
13295; NO-SIMD128-FAST:         .functype sqrt_v4f32 (i32, f32, f32, f32, f32) -> ()
13296; NO-SIMD128-FAST-NEXT:  # %bb.0:
13297; NO-SIMD128-FAST-NEXT:    f32.sqrt $push0=, $1
13298; NO-SIMD128-FAST-NEXT:    f32.store 0($0), $pop0
13299; NO-SIMD128-FAST-NEXT:    f32.sqrt $push1=, $2
13300; NO-SIMD128-FAST-NEXT:    f32.store 4($0), $pop1
13301; NO-SIMD128-FAST-NEXT:    f32.sqrt $push2=, $3
13302; NO-SIMD128-FAST-NEXT:    f32.store 8($0), $pop2
13303; NO-SIMD128-FAST-NEXT:    f32.sqrt $push3=, $4
13304; NO-SIMD128-FAST-NEXT:    f32.store 12($0), $pop3
13305; NO-SIMD128-FAST-NEXT:    return
13306  %a = call <4 x float> @llvm.sqrt.v4f32(<4 x float> %x)
13307  ret <4 x float> %a
13308}
13309
13310; ==============================================================================
13311; 2 x double
13312; ==============================================================================
13313define <2 x double> @neg_v2f64(<2 x double> %x) {
13314  ; nsz makes this semantically equivalent to flipping sign bit
13315; SIMD128-LABEL: neg_v2f64:
13316; SIMD128:         .functype neg_v2f64 (v128) -> (v128)
13317; SIMD128-NEXT:  # %bb.0:
13318; SIMD128-NEXT:    f64x2.neg $push0=, $0
13319; SIMD128-NEXT:    return $pop0
13320;
13321; SIMD128-FAST-LABEL: neg_v2f64:
13322; SIMD128-FAST:         .functype neg_v2f64 (v128) -> (v128)
13323; SIMD128-FAST-NEXT:  # %bb.0:
13324; SIMD128-FAST-NEXT:    f64x2.neg $push0=, $0
13325; SIMD128-FAST-NEXT:    return $pop0
13326;
13327; NO-SIMD128-LABEL: neg_v2f64:
13328; NO-SIMD128:         .functype neg_v2f64 (i32, f64, f64) -> ()
13329; NO-SIMD128-NEXT:  # %bb.0:
13330; NO-SIMD128-NEXT:    f64.neg $push0=, $2
13331; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
13332; NO-SIMD128-NEXT:    f64.neg $push1=, $1
13333; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
13334; NO-SIMD128-NEXT:    return
13335;
13336; NO-SIMD128-FAST-LABEL: neg_v2f64:
13337; NO-SIMD128-FAST:         .functype neg_v2f64 (i32, f64, f64) -> ()
13338; NO-SIMD128-FAST-NEXT:  # %bb.0:
13339; NO-SIMD128-FAST-NEXT:    f64.neg $push0=, $1
13340; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
13341; NO-SIMD128-FAST-NEXT:    f64.neg $push1=, $2
13342; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
13343; NO-SIMD128-FAST-NEXT:    return
13344  %a = fsub nsz <2 x double> <double 0., double 0.>, %x
13345  ret <2 x double> %a
13346}
13347
13348declare <2 x double> @llvm.fabs.v2f64(<2 x double>) nounwind readnone
13349define <2 x double> @abs_v2f64(<2 x double> %x) {
13350; SIMD128-LABEL: abs_v2f64:
13351; SIMD128:         .functype abs_v2f64 (v128) -> (v128)
13352; SIMD128-NEXT:  # %bb.0:
13353; SIMD128-NEXT:    f64x2.abs $push0=, $0
13354; SIMD128-NEXT:    return $pop0
13355;
13356; SIMD128-FAST-LABEL: abs_v2f64:
13357; SIMD128-FAST:         .functype abs_v2f64 (v128) -> (v128)
13358; SIMD128-FAST-NEXT:  # %bb.0:
13359; SIMD128-FAST-NEXT:    f64x2.abs $push0=, $0
13360; SIMD128-FAST-NEXT:    return $pop0
13361;
13362; NO-SIMD128-LABEL: abs_v2f64:
13363; NO-SIMD128:         .functype abs_v2f64 (i32, f64, f64) -> ()
13364; NO-SIMD128-NEXT:  # %bb.0:
13365; NO-SIMD128-NEXT:    f64.abs $push0=, $2
13366; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
13367; NO-SIMD128-NEXT:    f64.abs $push1=, $1
13368; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
13369; NO-SIMD128-NEXT:    return
13370;
13371; NO-SIMD128-FAST-LABEL: abs_v2f64:
13372; NO-SIMD128-FAST:         .functype abs_v2f64 (i32, f64, f64) -> ()
13373; NO-SIMD128-FAST-NEXT:  # %bb.0:
13374; NO-SIMD128-FAST-NEXT:    f64.abs $push0=, $1
13375; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
13376; NO-SIMD128-FAST-NEXT:    f64.abs $push1=, $2
13377; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
13378; NO-SIMD128-FAST-NEXT:    return
13379  %a = call <2 x double> @llvm.fabs.v2f64(<2 x double> %x)
13380  ret <2 x double> %a
13381}
13382
13383define <2 x double> @min_unordered_v2f64(<2 x double> %x) {
13384; SIMD128-LABEL: min_unordered_v2f64:
13385; SIMD128:         .functype min_unordered_v2f64 (v128) -> (v128)
13386; SIMD128-NEXT:  # %bb.0:
13387; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2
13388; SIMD128-NEXT:    f64x2.pmin $push1=, $0, $pop0
13389; SIMD128-NEXT:    return $pop1
13390;
13391; SIMD128-FAST-LABEL: min_unordered_v2f64:
13392; SIMD128-FAST:         .functype min_unordered_v2f64 (v128) -> (v128)
13393; SIMD128-FAST-NEXT:  # %bb.0:
13394; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2
13395; SIMD128-FAST-NEXT:    f64x2.pmin $push0=, $0, $pop1
13396; SIMD128-FAST-NEXT:    return $pop0
13397;
13398; NO-SIMD128-LABEL: min_unordered_v2f64:
13399; NO-SIMD128:         .functype min_unordered_v2f64 (i32, f64, f64) -> ()
13400; NO-SIMD128-NEXT:  # %bb.0:
13401; NO-SIMD128-NEXT:    f64.const $push0=, 0x1.4p2
13402; NO-SIMD128-NEXT:    f64.const $push7=, 0x1.4p2
13403; NO-SIMD128-NEXT:    f64.gt $push1=, $2, $pop7
13404; NO-SIMD128-NEXT:    f64.select $push2=, $pop0, $2, $pop1
13405; NO-SIMD128-NEXT:    f64.store 8($0), $pop2
13406; NO-SIMD128-NEXT:    f64.const $push6=, 0x1.4p2
13407; NO-SIMD128-NEXT:    f64.const $push5=, 0x1.4p2
13408; NO-SIMD128-NEXT:    f64.gt $push3=, $1, $pop5
13409; NO-SIMD128-NEXT:    f64.select $push4=, $pop6, $1, $pop3
13410; NO-SIMD128-NEXT:    f64.store 0($0), $pop4
13411; NO-SIMD128-NEXT:    return
13412;
13413; NO-SIMD128-FAST-LABEL: min_unordered_v2f64:
13414; NO-SIMD128-FAST:         .functype min_unordered_v2f64 (i32, f64, f64) -> ()
13415; NO-SIMD128-FAST-NEXT:  # %bb.0:
13416; NO-SIMD128-FAST-NEXT:    f64.const $push0=, 0x1.4p2
13417; NO-SIMD128-FAST-NEXT:    f64.const $push7=, 0x1.4p2
13418; NO-SIMD128-FAST-NEXT:    f64.gt $push1=, $1, $pop7
13419; NO-SIMD128-FAST-NEXT:    f64.select $push2=, $pop0, $1, $pop1
13420; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop2
13421; NO-SIMD128-FAST-NEXT:    f64.const $push6=, 0x1.4p2
13422; NO-SIMD128-FAST-NEXT:    f64.const $push5=, 0x1.4p2
13423; NO-SIMD128-FAST-NEXT:    f64.gt $push3=, $2, $pop5
13424; NO-SIMD128-FAST-NEXT:    f64.select $push4=, $pop6, $2, $pop3
13425; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop4
13426; NO-SIMD128-FAST-NEXT:    return
13427  %cmps = fcmp ule <2 x double> %x, <double 5., double 5.>
13428  %a = select <2 x i1> %cmps, <2 x double> %x,
13429    <2 x double> <double 5., double 5.>
13430  ret <2 x double> %a
13431}
13432
13433define <2 x double> @max_unordered_v2f64(<2 x double> %x) {
13434; SIMD128-LABEL: max_unordered_v2f64:
13435; SIMD128:         .functype max_unordered_v2f64 (v128) -> (v128)
13436; SIMD128-NEXT:  # %bb.0:
13437; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2
13438; SIMD128-NEXT:    f64x2.pmax $push1=, $0, $pop0
13439; SIMD128-NEXT:    return $pop1
13440;
13441; SIMD128-FAST-LABEL: max_unordered_v2f64:
13442; SIMD128-FAST:         .functype max_unordered_v2f64 (v128) -> (v128)
13443; SIMD128-FAST-NEXT:  # %bb.0:
13444; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2
13445; SIMD128-FAST-NEXT:    f64x2.pmax $push0=, $0, $pop1
13446; SIMD128-FAST-NEXT:    return $pop0
13447;
13448; NO-SIMD128-LABEL: max_unordered_v2f64:
13449; NO-SIMD128:         .functype max_unordered_v2f64 (i32, f64, f64) -> ()
13450; NO-SIMD128-NEXT:  # %bb.0:
13451; NO-SIMD128-NEXT:    f64.const $push0=, 0x1.4p2
13452; NO-SIMD128-NEXT:    f64.const $push7=, 0x1.4p2
13453; NO-SIMD128-NEXT:    f64.lt $push1=, $2, $pop7
13454; NO-SIMD128-NEXT:    f64.select $push2=, $pop0, $2, $pop1
13455; NO-SIMD128-NEXT:    f64.store 8($0), $pop2
13456; NO-SIMD128-NEXT:    f64.const $push6=, 0x1.4p2
13457; NO-SIMD128-NEXT:    f64.const $push5=, 0x1.4p2
13458; NO-SIMD128-NEXT:    f64.lt $push3=, $1, $pop5
13459; NO-SIMD128-NEXT:    f64.select $push4=, $pop6, $1, $pop3
13460; NO-SIMD128-NEXT:    f64.store 0($0), $pop4
13461; NO-SIMD128-NEXT:    return
13462;
13463; NO-SIMD128-FAST-LABEL: max_unordered_v2f64:
13464; NO-SIMD128-FAST:         .functype max_unordered_v2f64 (i32, f64, f64) -> ()
13465; NO-SIMD128-FAST-NEXT:  # %bb.0:
13466; NO-SIMD128-FAST-NEXT:    f64.const $push0=, 0x1.4p2
13467; NO-SIMD128-FAST-NEXT:    f64.const $push7=, 0x1.4p2
13468; NO-SIMD128-FAST-NEXT:    f64.lt $push1=, $1, $pop7
13469; NO-SIMD128-FAST-NEXT:    f64.select $push2=, $pop0, $1, $pop1
13470; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop2
13471; NO-SIMD128-FAST-NEXT:    f64.const $push6=, 0x1.4p2
13472; NO-SIMD128-FAST-NEXT:    f64.const $push5=, 0x1.4p2
13473; NO-SIMD128-FAST-NEXT:    f64.lt $push3=, $2, $pop5
13474; NO-SIMD128-FAST-NEXT:    f64.select $push4=, $pop6, $2, $pop3
13475; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop4
13476; NO-SIMD128-FAST-NEXT:    return
13477  %cmps = fcmp uge <2 x double> %x, <double 5., double 5.>
13478  %a = select <2 x i1> %cmps, <2 x double> %x,
13479    <2 x double> <double 5., double 5.>
13480  ret <2 x double> %a
13481}
13482
13483define <2 x double> @min_ordered_v2f64(<2 x double> %x) {
13484; SIMD128-LABEL: min_ordered_v2f64:
13485; SIMD128:         .functype min_ordered_v2f64 (v128) -> (v128)
13486; SIMD128-NEXT:  # %bb.0:
13487; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2
13488; SIMD128-NEXT:    f64x2.pmin $push1=, $0, $pop0
13489; SIMD128-NEXT:    return $pop1
13490;
13491; SIMD128-FAST-LABEL: min_ordered_v2f64:
13492; SIMD128-FAST:         .functype min_ordered_v2f64 (v128) -> (v128)
13493; SIMD128-FAST-NEXT:  # %bb.0:
13494; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2
13495; SIMD128-FAST-NEXT:    f64x2.pmin $push0=, $0, $pop1
13496; SIMD128-FAST-NEXT:    return $pop0
13497;
13498; NO-SIMD128-LABEL: min_ordered_v2f64:
13499; NO-SIMD128:         .functype min_ordered_v2f64 (i32, f64, f64) -> ()
13500; NO-SIMD128-NEXT:  # %bb.0:
13501; NO-SIMD128-NEXT:    f64.const $push0=, 0x1.4p2
13502; NO-SIMD128-NEXT:    f64.const $push7=, 0x1.4p2
13503; NO-SIMD128-NEXT:    f64.ge $push1=, $2, $pop7
13504; NO-SIMD128-NEXT:    f64.select $push2=, $pop0, $2, $pop1
13505; NO-SIMD128-NEXT:    f64.store 8($0), $pop2
13506; NO-SIMD128-NEXT:    f64.const $push6=, 0x1.4p2
13507; NO-SIMD128-NEXT:    f64.const $push5=, 0x1.4p2
13508; NO-SIMD128-NEXT:    f64.ge $push3=, $1, $pop5
13509; NO-SIMD128-NEXT:    f64.select $push4=, $pop6, $1, $pop3
13510; NO-SIMD128-NEXT:    f64.store 0($0), $pop4
13511; NO-SIMD128-NEXT:    return
13512;
13513; NO-SIMD128-FAST-LABEL: min_ordered_v2f64:
13514; NO-SIMD128-FAST:         .functype min_ordered_v2f64 (i32, f64, f64) -> ()
13515; NO-SIMD128-FAST-NEXT:  # %bb.0:
13516; NO-SIMD128-FAST-NEXT:    f64.const $push0=, 0x1.4p2
13517; NO-SIMD128-FAST-NEXT:    f64.const $push7=, 0x1.4p2
13518; NO-SIMD128-FAST-NEXT:    f64.ge $push1=, $1, $pop7
13519; NO-SIMD128-FAST-NEXT:    f64.select $push2=, $pop0, $1, $pop1
13520; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop2
13521; NO-SIMD128-FAST-NEXT:    f64.const $push6=, 0x1.4p2
13522; NO-SIMD128-FAST-NEXT:    f64.const $push5=, 0x1.4p2
13523; NO-SIMD128-FAST-NEXT:    f64.ge $push3=, $2, $pop5
13524; NO-SIMD128-FAST-NEXT:    f64.select $push4=, $pop6, $2, $pop3
13525; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop4
13526; NO-SIMD128-FAST-NEXT:    return
13527  %cmps = fcmp ole <2 x double> <double 5., double 5.>, %x
13528  %a = select <2 x i1> %cmps, <2 x double> <double 5., double 5.>,
13529    <2 x double> %x
13530  ret <2 x double> %a
13531}
13532
13533define <2 x double> @max_ordered_v2f64(<2 x double> %x) {
13534; SIMD128-LABEL: max_ordered_v2f64:
13535; SIMD128:         .functype max_ordered_v2f64 (v128) -> (v128)
13536; SIMD128-NEXT:  # %bb.0:
13537; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2
13538; SIMD128-NEXT:    f64x2.pmax $push1=, $0, $pop0
13539; SIMD128-NEXT:    return $pop1
13540;
13541; SIMD128-FAST-LABEL: max_ordered_v2f64:
13542; SIMD128-FAST:         .functype max_ordered_v2f64 (v128) -> (v128)
13543; SIMD128-FAST-NEXT:  # %bb.0:
13544; SIMD128-FAST-NEXT:    v128.const $push1=, 0x1.4p2, 0x1.4p2
13545; SIMD128-FAST-NEXT:    f64x2.pmax $push0=, $0, $pop1
13546; SIMD128-FAST-NEXT:    return $pop0
13547;
13548; NO-SIMD128-LABEL: max_ordered_v2f64:
13549; NO-SIMD128:         .functype max_ordered_v2f64 (i32, f64, f64) -> ()
13550; NO-SIMD128-NEXT:  # %bb.0:
13551; NO-SIMD128-NEXT:    f64.const $push0=, 0x1.4p2
13552; NO-SIMD128-NEXT:    f64.const $push7=, 0x1.4p2
13553; NO-SIMD128-NEXT:    f64.le $push1=, $2, $pop7
13554; NO-SIMD128-NEXT:    f64.select $push2=, $pop0, $2, $pop1
13555; NO-SIMD128-NEXT:    f64.store 8($0), $pop2
13556; NO-SIMD128-NEXT:    f64.const $push6=, 0x1.4p2
13557; NO-SIMD128-NEXT:    f64.const $push5=, 0x1.4p2
13558; NO-SIMD128-NEXT:    f64.le $push3=, $1, $pop5
13559; NO-SIMD128-NEXT:    f64.select $push4=, $pop6, $1, $pop3
13560; NO-SIMD128-NEXT:    f64.store 0($0), $pop4
13561; NO-SIMD128-NEXT:    return
13562;
13563; NO-SIMD128-FAST-LABEL: max_ordered_v2f64:
13564; NO-SIMD128-FAST:         .functype max_ordered_v2f64 (i32, f64, f64) -> ()
13565; NO-SIMD128-FAST-NEXT:  # %bb.0:
13566; NO-SIMD128-FAST-NEXT:    f64.const $push0=, 0x1.4p2
13567; NO-SIMD128-FAST-NEXT:    f64.const $push7=, 0x1.4p2
13568; NO-SIMD128-FAST-NEXT:    f64.le $push1=, $1, $pop7
13569; NO-SIMD128-FAST-NEXT:    f64.select $push2=, $pop0, $1, $pop1
13570; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop2
13571; NO-SIMD128-FAST-NEXT:    f64.const $push6=, 0x1.4p2
13572; NO-SIMD128-FAST-NEXT:    f64.const $push5=, 0x1.4p2
13573; NO-SIMD128-FAST-NEXT:    f64.le $push3=, $2, $pop5
13574; NO-SIMD128-FAST-NEXT:    f64.select $push4=, $pop6, $2, $pop3
13575; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop4
13576; NO-SIMD128-FAST-NEXT:    return
13577  %cmps = fcmp oge <2 x double> <double 5., double 5.>, %x
13578  %a = select <2 x i1> %cmps, <2 x double> <double 5., double 5.>,
13579    <2 x double> %x
13580  ret <2 x double> %a
13581}
13582
13583declare <2 x double> @llvm.minimum.v2f64(<2 x double>, <2 x double>)
13584define <2 x double> @min_intrinsic_v2f64(<2 x double> %x, <2 x double> %y) {
13585; SIMD128-LABEL: min_intrinsic_v2f64:
13586; SIMD128:         .functype min_intrinsic_v2f64 (v128, v128) -> (v128)
13587; SIMD128-NEXT:  # %bb.0:
13588; SIMD128-NEXT:    f64x2.min $push0=, $0, $1
13589; SIMD128-NEXT:    return $pop0
13590;
13591; SIMD128-FAST-LABEL: min_intrinsic_v2f64:
13592; SIMD128-FAST:         .functype min_intrinsic_v2f64 (v128, v128) -> (v128)
13593; SIMD128-FAST-NEXT:  # %bb.0:
13594; SIMD128-FAST-NEXT:    f64x2.min $push0=, $0, $1
13595; SIMD128-FAST-NEXT:    return $pop0
13596;
13597; NO-SIMD128-LABEL: min_intrinsic_v2f64:
13598; NO-SIMD128:         .functype min_intrinsic_v2f64 (i32, f64, f64, f64, f64) -> ()
13599; NO-SIMD128-NEXT:  # %bb.0:
13600; NO-SIMD128-NEXT:    f64.min $push0=, $2, $4
13601; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
13602; NO-SIMD128-NEXT:    f64.min $push1=, $1, $3
13603; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
13604; NO-SIMD128-NEXT:    return
13605;
13606; NO-SIMD128-FAST-LABEL: min_intrinsic_v2f64:
13607; NO-SIMD128-FAST:         .functype min_intrinsic_v2f64 (i32, f64, f64, f64, f64) -> ()
13608; NO-SIMD128-FAST-NEXT:  # %bb.0:
13609; NO-SIMD128-FAST-NEXT:    f64.min $push0=, $1, $3
13610; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
13611; NO-SIMD128-FAST-NEXT:    f64.min $push1=, $2, $4
13612; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
13613; NO-SIMD128-FAST-NEXT:    return
13614  %a = call <2 x double> @llvm.minimum.v2f64(<2 x double> %x, <2 x double> %y)
13615  ret <2 x double> %a
13616}
13617
13618declare <2 x double> @llvm.maximum.v2f64(<2 x double>, <2 x double>)
13619define <2 x double> @max_intrinsic_v2f64(<2 x double> %x, <2 x double> %y) {
13620; SIMD128-LABEL: max_intrinsic_v2f64:
13621; SIMD128:         .functype max_intrinsic_v2f64 (v128, v128) -> (v128)
13622; SIMD128-NEXT:  # %bb.0:
13623; SIMD128-NEXT:    f64x2.max $push0=, $0, $1
13624; SIMD128-NEXT:    return $pop0
13625;
13626; SIMD128-FAST-LABEL: max_intrinsic_v2f64:
13627; SIMD128-FAST:         .functype max_intrinsic_v2f64 (v128, v128) -> (v128)
13628; SIMD128-FAST-NEXT:  # %bb.0:
13629; SIMD128-FAST-NEXT:    f64x2.max $push0=, $0, $1
13630; SIMD128-FAST-NEXT:    return $pop0
13631;
13632; NO-SIMD128-LABEL: max_intrinsic_v2f64:
13633; NO-SIMD128:         .functype max_intrinsic_v2f64 (i32, f64, f64, f64, f64) -> ()
13634; NO-SIMD128-NEXT:  # %bb.0:
13635; NO-SIMD128-NEXT:    f64.max $push0=, $2, $4
13636; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
13637; NO-SIMD128-NEXT:    f64.max $push1=, $1, $3
13638; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
13639; NO-SIMD128-NEXT:    return
13640;
13641; NO-SIMD128-FAST-LABEL: max_intrinsic_v2f64:
13642; NO-SIMD128-FAST:         .functype max_intrinsic_v2f64 (i32, f64, f64, f64, f64) -> ()
13643; NO-SIMD128-FAST-NEXT:  # %bb.0:
13644; NO-SIMD128-FAST-NEXT:    f64.max $push0=, $1, $3
13645; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
13646; NO-SIMD128-FAST-NEXT:    f64.max $push1=, $2, $4
13647; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
13648; NO-SIMD128-FAST-NEXT:    return
13649  %a = call <2 x double> @llvm.maximum.v2f64(<2 x double> %x, <2 x double> %y)
13650  ret <2 x double> %a
13651}
13652
13653define <2 x double> @min_const_intrinsic_v2f64() {
13654; SIMD128-LABEL: min_const_intrinsic_v2f64:
13655; SIMD128:         .functype min_const_intrinsic_v2f64 () -> (v128)
13656; SIMD128-NEXT:  # %bb.0:
13657; SIMD128-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2
13658; SIMD128-NEXT:    return $pop0
13659;
13660; SIMD128-FAST-LABEL: min_const_intrinsic_v2f64:
13661; SIMD128-FAST:         .functype min_const_intrinsic_v2f64 () -> (v128)
13662; SIMD128-FAST-NEXT:  # %bb.0:
13663; SIMD128-FAST-NEXT:    v128.const $push0=, 0x1.4p2, 0x1.4p2
13664; SIMD128-FAST-NEXT:    return $pop0
13665;
13666; NO-SIMD128-LABEL: min_const_intrinsic_v2f64:
13667; NO-SIMD128:         .functype min_const_intrinsic_v2f64 (i32) -> ()
13668; NO-SIMD128-NEXT:  # %bb.0:
13669; NO-SIMD128-NEXT:    i64.const $push0=, 4617315517961601024
13670; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
13671; NO-SIMD128-NEXT:    i64.const $push1=, 4617315517961601024
13672; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
13673; NO-SIMD128-NEXT:    return
13674;
13675; NO-SIMD128-FAST-LABEL: min_const_intrinsic_v2f64:
13676; NO-SIMD128-FAST:         .functype min_const_intrinsic_v2f64 (i32) -> ()
13677; NO-SIMD128-FAST-NEXT:  # %bb.0:
13678; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 4617315517961601024
13679; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
13680; NO-SIMD128-FAST-NEXT:    i64.const $push1=, 4617315517961601024
13681; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
13682; NO-SIMD128-FAST-NEXT:    return
13683  %a = call <2 x double> @llvm.minimum.v2f64(
13684    <2 x double> <double 42., double 42.>,
13685    <2 x double> <double 5., double 5.>
13686  )
13687  ret <2 x double> %a
13688}
13689
13690define <2 x double> @max_const_intrinsic_v2f64() {
13691; SIMD128-LABEL: max_const_intrinsic_v2f64:
13692; SIMD128:         .functype max_const_intrinsic_v2f64 () -> (v128)
13693; SIMD128-NEXT:  # %bb.0:
13694; SIMD128-NEXT:    v128.const $push0=, 0x1.5p5, 0x1.5p5
13695; SIMD128-NEXT:    return $pop0
13696;
13697; SIMD128-FAST-LABEL: max_const_intrinsic_v2f64:
13698; SIMD128-FAST:         .functype max_const_intrinsic_v2f64 () -> (v128)
13699; SIMD128-FAST-NEXT:  # %bb.0:
13700; SIMD128-FAST-NEXT:    v128.const $push0=, 0x1.5p5, 0x1.5p5
13701; SIMD128-FAST-NEXT:    return $pop0
13702;
13703; NO-SIMD128-LABEL: max_const_intrinsic_v2f64:
13704; NO-SIMD128:         .functype max_const_intrinsic_v2f64 (i32) -> ()
13705; NO-SIMD128-NEXT:  # %bb.0:
13706; NO-SIMD128-NEXT:    i64.const $push0=, 4631107791820423168
13707; NO-SIMD128-NEXT:    i64.store 8($0), $pop0
13708; NO-SIMD128-NEXT:    i64.const $push1=, 4631107791820423168
13709; NO-SIMD128-NEXT:    i64.store 0($0), $pop1
13710; NO-SIMD128-NEXT:    return
13711;
13712; NO-SIMD128-FAST-LABEL: max_const_intrinsic_v2f64:
13713; NO-SIMD128-FAST:         .functype max_const_intrinsic_v2f64 (i32) -> ()
13714; NO-SIMD128-FAST-NEXT:  # %bb.0:
13715; NO-SIMD128-FAST-NEXT:    i64.const $push0=, 4631107791820423168
13716; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop0
13717; NO-SIMD128-FAST-NEXT:    i64.const $push1=, 4631107791820423168
13718; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop1
13719; NO-SIMD128-FAST-NEXT:    return
13720  %a = call <2 x double> @llvm.maximum.v2f64(
13721    <2 x double> <double 42., double 42.>,
13722    <2 x double> <double 5., double 5.>
13723  )
13724  ret <2 x double> %a
13725}
13726
13727define <2 x double> @pmin_v2f64(<2 x double> %x, <2 x double> %y) {
13728; SIMD128-LABEL: pmin_v2f64:
13729; SIMD128:         .functype pmin_v2f64 (v128, v128) -> (v128)
13730; SIMD128-NEXT:  # %bb.0:
13731; SIMD128-NEXT:    f64x2.pmin $push0=, $0, $1
13732; SIMD128-NEXT:    return $pop0
13733;
13734; SIMD128-FAST-LABEL: pmin_v2f64:
13735; SIMD128-FAST:         .functype pmin_v2f64 (v128, v128) -> (v128)
13736; SIMD128-FAST-NEXT:  # %bb.0:
13737; SIMD128-FAST-NEXT:    f64x2.pmin $push0=, $0, $1
13738; SIMD128-FAST-NEXT:    return $pop0
13739;
13740; NO-SIMD128-LABEL: pmin_v2f64:
13741; NO-SIMD128:         .functype pmin_v2f64 (i32, f64, f64, f64, f64) -> ()
13742; NO-SIMD128-NEXT:  # %bb.0:
13743; NO-SIMD128-NEXT:    f64.lt $push0=, $4, $2
13744; NO-SIMD128-NEXT:    f64.select $push1=, $4, $2, $pop0
13745; NO-SIMD128-NEXT:    f64.store 8($0), $pop1
13746; NO-SIMD128-NEXT:    f64.lt $push2=, $3, $1
13747; NO-SIMD128-NEXT:    f64.select $push3=, $3, $1, $pop2
13748; NO-SIMD128-NEXT:    f64.store 0($0), $pop3
13749; NO-SIMD128-NEXT:    return
13750;
13751; NO-SIMD128-FAST-LABEL: pmin_v2f64:
13752; NO-SIMD128-FAST:         .functype pmin_v2f64 (i32, f64, f64, f64, f64) -> ()
13753; NO-SIMD128-FAST-NEXT:  # %bb.0:
13754; NO-SIMD128-FAST-NEXT:    f64.lt $push0=, $3, $1
13755; NO-SIMD128-FAST-NEXT:    f64.select $push1=, $3, $1, $pop0
13756; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop1
13757; NO-SIMD128-FAST-NEXT:    f64.lt $push2=, $4, $2
13758; NO-SIMD128-FAST-NEXT:    f64.select $push3=, $4, $2, $pop2
13759; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop3
13760; NO-SIMD128-FAST-NEXT:    return
13761  %c = fcmp olt <2 x double> %y, %x
13762  %a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
13763  ret <2 x double> %a
13764}
13765
13766define <2 x i64> @pmin_int_v2f64(<2 x i64> %x, <2 x i64> %y) {
13767; SIMD128-LABEL: pmin_int_v2f64:
13768; SIMD128:         .functype pmin_int_v2f64 (v128, v128) -> (v128)
13769; SIMD128-NEXT:  # %bb.0:
13770; SIMD128-NEXT:    f64x2.pmin $push0=, $0, $1
13771; SIMD128-NEXT:    return $pop0
13772;
13773; SIMD128-FAST-LABEL: pmin_int_v2f64:
13774; SIMD128-FAST:         .functype pmin_int_v2f64 (v128, v128) -> (v128)
13775; SIMD128-FAST-NEXT:  # %bb.0:
13776; SIMD128-FAST-NEXT:    f64x2.pmin $push0=, $0, $1
13777; SIMD128-FAST-NEXT:    return $pop0
13778;
13779; NO-SIMD128-LABEL: pmin_int_v2f64:
13780; NO-SIMD128:         .functype pmin_int_v2f64 (i32, i64, i64, i64, i64) -> ()
13781; NO-SIMD128-NEXT:  # %bb.0:
13782; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push1=, $4
13783; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push0=, $2
13784; NO-SIMD128-NEXT:    f64.lt $push2=, $pop1, $pop0
13785; NO-SIMD128-NEXT:    i64.select $push3=, $4, $2, $pop2
13786; NO-SIMD128-NEXT:    i64.store 8($0), $pop3
13787; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push5=, $3
13788; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push4=, $1
13789; NO-SIMD128-NEXT:    f64.lt $push6=, $pop5, $pop4
13790; NO-SIMD128-NEXT:    i64.select $push7=, $3, $1, $pop6
13791; NO-SIMD128-NEXT:    i64.store 0($0), $pop7
13792; NO-SIMD128-NEXT:    return
13793;
13794; NO-SIMD128-FAST-LABEL: pmin_int_v2f64:
13795; NO-SIMD128-FAST:         .functype pmin_int_v2f64 (i32, i64, i64, i64, i64) -> ()
13796; NO-SIMD128-FAST-NEXT:  # %bb.0:
13797; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push1=, $3
13798; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push0=, $1
13799; NO-SIMD128-FAST-NEXT:    f64.lt $push2=, $pop1, $pop0
13800; NO-SIMD128-FAST-NEXT:    i64.select $push3=, $3, $1, $pop2
13801; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop3
13802; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push5=, $4
13803; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push4=, $2
13804; NO-SIMD128-FAST-NEXT:    f64.lt $push6=, $pop5, $pop4
13805; NO-SIMD128-FAST-NEXT:    i64.select $push7=, $4, $2, $pop6
13806; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop7
13807; NO-SIMD128-FAST-NEXT:    return
13808  %fx = bitcast <2 x i64> %x to <2 x double>
13809  %fy = bitcast <2 x i64> %y to <2 x double>
13810  %c = fcmp olt <2 x double> %fy, %fx
13811  %a = select <2 x i1> %c, <2 x i64> %y, <2 x i64> %x
13812  ret <2 x i64> %a
13813}
13814
13815define <2 x double> @pmax_v2f64(<2 x double> %x, <2 x double> %y) {
13816; SIMD128-LABEL: pmax_v2f64:
13817; SIMD128:         .functype pmax_v2f64 (v128, v128) -> (v128)
13818; SIMD128-NEXT:  # %bb.0:
13819; SIMD128-NEXT:    f64x2.pmax $push0=, $0, $1
13820; SIMD128-NEXT:    return $pop0
13821;
13822; SIMD128-FAST-LABEL: pmax_v2f64:
13823; SIMD128-FAST:         .functype pmax_v2f64 (v128, v128) -> (v128)
13824; SIMD128-FAST-NEXT:  # %bb.0:
13825; SIMD128-FAST-NEXT:    f64x2.pmax $push0=, $0, $1
13826; SIMD128-FAST-NEXT:    return $pop0
13827;
13828; NO-SIMD128-LABEL: pmax_v2f64:
13829; NO-SIMD128:         .functype pmax_v2f64 (i32, f64, f64, f64, f64) -> ()
13830; NO-SIMD128-NEXT:  # %bb.0:
13831; NO-SIMD128-NEXT:    f64.lt $push0=, $2, $4
13832; NO-SIMD128-NEXT:    f64.select $push1=, $4, $2, $pop0
13833; NO-SIMD128-NEXT:    f64.store 8($0), $pop1
13834; NO-SIMD128-NEXT:    f64.lt $push2=, $1, $3
13835; NO-SIMD128-NEXT:    f64.select $push3=, $3, $1, $pop2
13836; NO-SIMD128-NEXT:    f64.store 0($0), $pop3
13837; NO-SIMD128-NEXT:    return
13838;
13839; NO-SIMD128-FAST-LABEL: pmax_v2f64:
13840; NO-SIMD128-FAST:         .functype pmax_v2f64 (i32, f64, f64, f64, f64) -> ()
13841; NO-SIMD128-FAST-NEXT:  # %bb.0:
13842; NO-SIMD128-FAST-NEXT:    f64.lt $push0=, $1, $3
13843; NO-SIMD128-FAST-NEXT:    f64.select $push1=, $3, $1, $pop0
13844; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop1
13845; NO-SIMD128-FAST-NEXT:    f64.lt $push2=, $2, $4
13846; NO-SIMD128-FAST-NEXT:    f64.select $push3=, $4, $2, $pop2
13847; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop3
13848; NO-SIMD128-FAST-NEXT:    return
13849  %c = fcmp olt <2 x double> %x, %y
13850  %a = select <2 x i1> %c, <2 x double> %y, <2 x double> %x
13851  ret <2 x double> %a
13852}
13853
13854define <2 x i64> @pmax_int_v2f64(<2 x i64> %x, <2 x i64> %y) {
13855; SIMD128-LABEL: pmax_int_v2f64:
13856; SIMD128:         .functype pmax_int_v2f64 (v128, v128) -> (v128)
13857; SIMD128-NEXT:  # %bb.0:
13858; SIMD128-NEXT:    f64x2.pmax $push0=, $0, $1
13859; SIMD128-NEXT:    return $pop0
13860;
13861; SIMD128-FAST-LABEL: pmax_int_v2f64:
13862; SIMD128-FAST:         .functype pmax_int_v2f64 (v128, v128) -> (v128)
13863; SIMD128-FAST-NEXT:  # %bb.0:
13864; SIMD128-FAST-NEXT:    f64x2.pmax $push0=, $0, $1
13865; SIMD128-FAST-NEXT:    return $pop0
13866;
13867; NO-SIMD128-LABEL: pmax_int_v2f64:
13868; NO-SIMD128:         .functype pmax_int_v2f64 (i32, i64, i64, i64, i64) -> ()
13869; NO-SIMD128-NEXT:  # %bb.0:
13870; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push1=, $2
13871; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push0=, $4
13872; NO-SIMD128-NEXT:    f64.lt $push2=, $pop1, $pop0
13873; NO-SIMD128-NEXT:    i64.select $push3=, $4, $2, $pop2
13874; NO-SIMD128-NEXT:    i64.store 8($0), $pop3
13875; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push5=, $1
13876; NO-SIMD128-NEXT:    f64.reinterpret_i64 $push4=, $3
13877; NO-SIMD128-NEXT:    f64.lt $push6=, $pop5, $pop4
13878; NO-SIMD128-NEXT:    i64.select $push7=, $3, $1, $pop6
13879; NO-SIMD128-NEXT:    i64.store 0($0), $pop7
13880; NO-SIMD128-NEXT:    return
13881;
13882; NO-SIMD128-FAST-LABEL: pmax_int_v2f64:
13883; NO-SIMD128-FAST:         .functype pmax_int_v2f64 (i32, i64, i64, i64, i64) -> ()
13884; NO-SIMD128-FAST-NEXT:  # %bb.0:
13885; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push1=, $1
13886; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push0=, $3
13887; NO-SIMD128-FAST-NEXT:    f64.lt $push2=, $pop1, $pop0
13888; NO-SIMD128-FAST-NEXT:    i64.select $push3=, $3, $1, $pop2
13889; NO-SIMD128-FAST-NEXT:    i64.store 0($0), $pop3
13890; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push5=, $2
13891; NO-SIMD128-FAST-NEXT:    f64.reinterpret_i64 $push4=, $4
13892; NO-SIMD128-FAST-NEXT:    f64.lt $push6=, $pop5, $pop4
13893; NO-SIMD128-FAST-NEXT:    i64.select $push7=, $4, $2, $pop6
13894; NO-SIMD128-FAST-NEXT:    i64.store 8($0), $pop7
13895; NO-SIMD128-FAST-NEXT:    return
13896  %fx = bitcast <2 x i64> %x to <2 x double>
13897  %fy = bitcast <2 x i64> %y to <2 x double>
13898  %c = fcmp olt <2 x double> %fx, %fy
13899  %a = select <2 x i1> %c, <2 x i64> %y, <2 x i64> %x
13900  ret <2 x i64> %a
13901}
13902
13903define <2 x double> @add_v2f64(<2 x double> %x, <2 x double> %y) {
13904; SIMD128-LABEL: add_v2f64:
13905; SIMD128:         .functype add_v2f64 (v128, v128) -> (v128)
13906; SIMD128-NEXT:  # %bb.0:
13907; SIMD128-NEXT:    f64x2.add $push0=, $0, $1
13908; SIMD128-NEXT:    return $pop0
13909;
13910; SIMD128-FAST-LABEL: add_v2f64:
13911; SIMD128-FAST:         .functype add_v2f64 (v128, v128) -> (v128)
13912; SIMD128-FAST-NEXT:  # %bb.0:
13913; SIMD128-FAST-NEXT:    f64x2.add $push0=, $0, $1
13914; SIMD128-FAST-NEXT:    return $pop0
13915;
13916; NO-SIMD128-LABEL: add_v2f64:
13917; NO-SIMD128:         .functype add_v2f64 (i32, f64, f64, f64, f64) -> ()
13918; NO-SIMD128-NEXT:  # %bb.0:
13919; NO-SIMD128-NEXT:    f64.add $push0=, $2, $4
13920; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
13921; NO-SIMD128-NEXT:    f64.add $push1=, $1, $3
13922; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
13923; NO-SIMD128-NEXT:    return
13924;
13925; NO-SIMD128-FAST-LABEL: add_v2f64:
13926; NO-SIMD128-FAST:         .functype add_v2f64 (i32, f64, f64, f64, f64) -> ()
13927; NO-SIMD128-FAST-NEXT:  # %bb.0:
13928; NO-SIMD128-FAST-NEXT:    f64.add $push0=, $1, $3
13929; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
13930; NO-SIMD128-FAST-NEXT:    f64.add $push1=, $2, $4
13931; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
13932; NO-SIMD128-FAST-NEXT:    return
13933  %a = fadd <2 x double> %x, %y
13934  ret <2 x double> %a
13935}
13936
13937define <2 x double> @sub_v2f64(<2 x double> %x, <2 x double> %y) {
13938; SIMD128-LABEL: sub_v2f64:
13939; SIMD128:         .functype sub_v2f64 (v128, v128) -> (v128)
13940; SIMD128-NEXT:  # %bb.0:
13941; SIMD128-NEXT:    f64x2.sub $push0=, $0, $1
13942; SIMD128-NEXT:    return $pop0
13943;
13944; SIMD128-FAST-LABEL: sub_v2f64:
13945; SIMD128-FAST:         .functype sub_v2f64 (v128, v128) -> (v128)
13946; SIMD128-FAST-NEXT:  # %bb.0:
13947; SIMD128-FAST-NEXT:    f64x2.sub $push0=, $0, $1
13948; SIMD128-FAST-NEXT:    return $pop0
13949;
13950; NO-SIMD128-LABEL: sub_v2f64:
13951; NO-SIMD128:         .functype sub_v2f64 (i32, f64, f64, f64, f64) -> ()
13952; NO-SIMD128-NEXT:  # %bb.0:
13953; NO-SIMD128-NEXT:    f64.sub $push0=, $2, $4
13954; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
13955; NO-SIMD128-NEXT:    f64.sub $push1=, $1, $3
13956; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
13957; NO-SIMD128-NEXT:    return
13958;
13959; NO-SIMD128-FAST-LABEL: sub_v2f64:
13960; NO-SIMD128-FAST:         .functype sub_v2f64 (i32, f64, f64, f64, f64) -> ()
13961; NO-SIMD128-FAST-NEXT:  # %bb.0:
13962; NO-SIMD128-FAST-NEXT:    f64.sub $push0=, $1, $3
13963; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
13964; NO-SIMD128-FAST-NEXT:    f64.sub $push1=, $2, $4
13965; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
13966; NO-SIMD128-FAST-NEXT:    return
13967  %a = fsub <2 x double> %x, %y
13968  ret <2 x double> %a
13969}
13970
13971define <2 x double> @div_v2f64(<2 x double> %x, <2 x double> %y) {
13972; SIMD128-LABEL: div_v2f64:
13973; SIMD128:         .functype div_v2f64 (v128, v128) -> (v128)
13974; SIMD128-NEXT:  # %bb.0:
13975; SIMD128-NEXT:    f64x2.div $push0=, $0, $1
13976; SIMD128-NEXT:    return $pop0
13977;
13978; SIMD128-FAST-LABEL: div_v2f64:
13979; SIMD128-FAST:         .functype div_v2f64 (v128, v128) -> (v128)
13980; SIMD128-FAST-NEXT:  # %bb.0:
13981; SIMD128-FAST-NEXT:    f64x2.div $push0=, $0, $1
13982; SIMD128-FAST-NEXT:    return $pop0
13983;
13984; NO-SIMD128-LABEL: div_v2f64:
13985; NO-SIMD128:         .functype div_v2f64 (i32, f64, f64, f64, f64) -> ()
13986; NO-SIMD128-NEXT:  # %bb.0:
13987; NO-SIMD128-NEXT:    f64.div $push0=, $2, $4
13988; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
13989; NO-SIMD128-NEXT:    f64.div $push1=, $1, $3
13990; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
13991; NO-SIMD128-NEXT:    return
13992;
13993; NO-SIMD128-FAST-LABEL: div_v2f64:
13994; NO-SIMD128-FAST:         .functype div_v2f64 (i32, f64, f64, f64, f64) -> ()
13995; NO-SIMD128-FAST-NEXT:  # %bb.0:
13996; NO-SIMD128-FAST-NEXT:    f64.div $push0=, $1, $3
13997; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
13998; NO-SIMD128-FAST-NEXT:    f64.div $push1=, $2, $4
13999; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
14000; NO-SIMD128-FAST-NEXT:    return
14001  %a = fdiv <2 x double> %x, %y
14002  ret <2 x double> %a
14003}
14004
14005define <2 x double> @mul_v2f64(<2 x double> %x, <2 x double> %y) {
14006; SIMD128-LABEL: mul_v2f64:
14007; SIMD128:         .functype mul_v2f64 (v128, v128) -> (v128)
14008; SIMD128-NEXT:  # %bb.0:
14009; SIMD128-NEXT:    f64x2.mul $push0=, $0, $1
14010; SIMD128-NEXT:    return $pop0
14011;
14012; SIMD128-FAST-LABEL: mul_v2f64:
14013; SIMD128-FAST:         .functype mul_v2f64 (v128, v128) -> (v128)
14014; SIMD128-FAST-NEXT:  # %bb.0:
14015; SIMD128-FAST-NEXT:    f64x2.mul $push0=, $0, $1
14016; SIMD128-FAST-NEXT:    return $pop0
14017;
14018; NO-SIMD128-LABEL: mul_v2f64:
14019; NO-SIMD128:         .functype mul_v2f64 (i32, f64, f64, f64, f64) -> ()
14020; NO-SIMD128-NEXT:  # %bb.0:
14021; NO-SIMD128-NEXT:    f64.mul $push0=, $2, $4
14022; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
14023; NO-SIMD128-NEXT:    f64.mul $push1=, $1, $3
14024; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
14025; NO-SIMD128-NEXT:    return
14026;
14027; NO-SIMD128-FAST-LABEL: mul_v2f64:
14028; NO-SIMD128-FAST:         .functype mul_v2f64 (i32, f64, f64, f64, f64) -> ()
14029; NO-SIMD128-FAST-NEXT:  # %bb.0:
14030; NO-SIMD128-FAST-NEXT:    f64.mul $push0=, $1, $3
14031; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
14032; NO-SIMD128-FAST-NEXT:    f64.mul $push1=, $2, $4
14033; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
14034; NO-SIMD128-FAST-NEXT:    return
14035  %a = fmul <2 x double> %x, %y
14036  ret <2 x double> %a
14037}
14038
14039declare <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
14040define <2 x double> @sqrt_v2f64(<2 x double> %x) {
14041; SIMD128-LABEL: sqrt_v2f64:
14042; SIMD128:         .functype sqrt_v2f64 (v128) -> (v128)
14043; SIMD128-NEXT:  # %bb.0:
14044; SIMD128-NEXT:    f64x2.sqrt $push0=, $0
14045; SIMD128-NEXT:    return $pop0
14046;
14047; SIMD128-FAST-LABEL: sqrt_v2f64:
14048; SIMD128-FAST:         .functype sqrt_v2f64 (v128) -> (v128)
14049; SIMD128-FAST-NEXT:  # %bb.0:
14050; SIMD128-FAST-NEXT:    f64x2.sqrt $push0=, $0
14051; SIMD128-FAST-NEXT:    return $pop0
14052;
14053; NO-SIMD128-LABEL: sqrt_v2f64:
14054; NO-SIMD128:         .functype sqrt_v2f64 (i32, f64, f64) -> ()
14055; NO-SIMD128-NEXT:  # %bb.0:
14056; NO-SIMD128-NEXT:    f64.sqrt $push0=, $2
14057; NO-SIMD128-NEXT:    f64.store 8($0), $pop0
14058; NO-SIMD128-NEXT:    f64.sqrt $push1=, $1
14059; NO-SIMD128-NEXT:    f64.store 0($0), $pop1
14060; NO-SIMD128-NEXT:    return
14061;
14062; NO-SIMD128-FAST-LABEL: sqrt_v2f64:
14063; NO-SIMD128-FAST:         .functype sqrt_v2f64 (i32, f64, f64) -> ()
14064; NO-SIMD128-FAST-NEXT:  # %bb.0:
14065; NO-SIMD128-FAST-NEXT:    f64.sqrt $push0=, $1
14066; NO-SIMD128-FAST-NEXT:    f64.store 0($0), $pop0
14067; NO-SIMD128-FAST-NEXT:    f64.sqrt $push1=, $2
14068; NO-SIMD128-FAST-NEXT:    f64.store 8($0), $pop1
14069; NO-SIMD128-FAST-NEXT:    return
14070  %a = call <2 x double> @llvm.sqrt.v2f64(<2 x double> %x)
14071  ret <2 x double> %a
14072}
14073