1*8638c897SThomas Lively; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128,+sign-ext | FileCheck %s --check-prefixes CHECK,SIMD128
264a39a1cSThomas Lively; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers | FileCheck %s --check-prefixes CHECK,NO-SIMD128
3a0fd9c3eSHeejin Ahn
4a0fd9c3eSHeejin Ahn; Test that basic SIMD128 vector manipulation operations assemble as expected.
5a0fd9c3eSHeejin Ahn
6a0fd9c3eSHeejin Ahntarget triple = "wasm32-unknown-unknown"
7a0fd9c3eSHeejin Ahn
8a0fd9c3eSHeejin Ahn; ==============================================================================
9a0fd9c3eSHeejin Ahn; 16 x i8
10a0fd9c3eSHeejin Ahn; ==============================================================================
1122442924SThomas Lively; CHECK-LABEL: const_v16i8:
1222442924SThomas Lively; NO-SIMD128-NOT: i8x16
1349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v16i8 () -> (v128){{$}}
1466f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=,
1522442924SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
1666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
1722442924SThomas Livelydefine <16 x i8> @const_v16i8() {
1822442924SThomas Lively  ret <16 x i8> <i8 00, i8 01, i8 02, i8 03, i8 04, i8 05, i8 06, i8 07,
1922442924SThomas Lively                 i8 08, i8 09, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15>
2022442924SThomas Lively}
2122442924SThomas Lively
224ec8bca1SDerek Schuff; CHECK-LABEL: splat_v16i8:
234ec8bca1SDerek Schuff; NO-SIMD128-NOT: i8x16
2449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v16i8 (i32) -> (v128){{$}}
2566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.splat $push[[R:[0-9]+]]=, $0{{$}}
2666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
274ec8bca1SDerek Schuffdefine <16 x i8> @splat_v16i8(i8 %x) {
284ec8bca1SDerek Schuff  %v = insertelement <16 x i8> undef, i8 %x, i32 0
294ec8bca1SDerek Schuff  %res = shufflevector <16 x i8> %v, <16 x i8> undef,
304ec8bca1SDerek Schuff    <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,
314ec8bca1SDerek Schuff                i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
324ec8bca1SDerek Schuff  ret <16 x i8> %res
334ec8bca1SDerek Schuff}
344ec8bca1SDerek Schuff
351b55b2beSThomas Lively; CHECK-LABEL: const_splat_v16i8:
36b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42{{$}}
37da26b84bSThomas Livelydefine <16 x i8> @const_splat_v16i8() {
38da26b84bSThomas Lively  ret <16 x i8> <i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42,
39da26b84bSThomas Lively                 i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42, i8 42>
40da26b84bSThomas Lively}
41da26b84bSThomas Lively
42c15a8784SHeejin Ahn; CHECK-LABEL: extract_v16i8_s:
43a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i8x16
4449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v16i8_s (v128) -> (i32){{$}}
4566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_s $push[[R:[0-9]+]]=, $0, 13{{$}}
4666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
47a0fd9c3eSHeejin Ahndefine i32 @extract_v16i8_s(<16 x i8> %v) {
48a0fd9c3eSHeejin Ahn  %elem = extractelement <16 x i8> %v, i8 13
49a0fd9c3eSHeejin Ahn  %a = sext i8 %elem to i32
50a0fd9c3eSHeejin Ahn  ret i32 %a
51a0fd9c3eSHeejin Ahn}
52a0fd9c3eSHeejin Ahn
53fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v16i8_s:
54fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16
5549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v16i8_s (v128, i32) -> (i32){{$}}
56275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer
57fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16
58fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]
596a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]
60fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0
61fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15
62fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]
63fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $2, $pop[[L5]]
64fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load8_s $push[[R:[0-9]+]]=, 0($pop[[L6]])
65fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]
66fb84fd7cSThomas Livelydefine i32 @extract_var_v16i8_s(<16 x i8> %v, i32 %i) {
67fb84fd7cSThomas Lively  %elem = extractelement <16 x i8> %v, i32 %i
68fb84fd7cSThomas Lively  %a = sext i8 %elem to i32
69fb84fd7cSThomas Lively  ret i32 %a
70fb84fd7cSThomas Lively}
71fb84fd7cSThomas Lively
7211a332d0SThomas Lively; CHECK-LABEL: extract_undef_v16i8_s:
7311a332d0SThomas Lively; NO-SIMD128-NOT: i8x16
7449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v16i8_s (v128) -> (i32){{$}}
7511a332d0SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_s $push[[R:[0-9]+]]=, $0, 0{{$}}
7611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
7711a332d0SThomas Livelydefine i32 @extract_undef_v16i8_s(<16 x i8> %v) {
7811a332d0SThomas Lively  %elem = extractelement <16 x i8> %v, i8 undef
7911a332d0SThomas Lively  %a = sext i8 %elem to i32
8011a332d0SThomas Lively  ret i32 %a
8111a332d0SThomas Lively}
8211a332d0SThomas Lively
83c15a8784SHeejin Ahn; CHECK-LABEL: extract_v16i8_u:
84a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i8x16
8549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v16i8_u (v128) -> (i32){{$}}
8666f3dc03SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 13{{$}}
8766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
88a0fd9c3eSHeejin Ahndefine i32 @extract_v16i8_u(<16 x i8> %v) {
89a0fd9c3eSHeejin Ahn  %elem = extractelement <16 x i8> %v, i8 13
90a0fd9c3eSHeejin Ahn  %a = zext i8 %elem to i32
91a0fd9c3eSHeejin Ahn  ret i32 %a
92a0fd9c3eSHeejin Ahn}
93a0fd9c3eSHeejin Ahn
94fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v16i8_u:
95fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16
9649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v16i8_u (v128, i32) -> (i32){{$}}
97275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
98fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
99fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
1006a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
101fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
102fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15{{$}}
103fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
104fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $2, $pop[[L5]]{{$}}
105fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load8_u $push[[R:[0-9]+]]=, 0($pop[[L6]]){{$}}
106fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
107fb84fd7cSThomas Livelydefine i32 @extract_var_v16i8_u(<16 x i8> %v, i32 %i) {
108fb84fd7cSThomas Lively  %elem = extractelement <16 x i8> %v, i32 %i
109fb84fd7cSThomas Lively  %a = zext i8 %elem to i32
110fb84fd7cSThomas Lively  ret i32 %a
111fb84fd7cSThomas Lively}
112fb84fd7cSThomas Lively
11311a332d0SThomas Lively; CHECK-LABEL: extract_undef_v16i8_u:
11411a332d0SThomas Lively; NO-SIMD128-NOT: i8x16
11549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v16i8_u (v128) -> (i32){{$}}
11611a332d0SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}}
11711a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
11811a332d0SThomas Livelydefine i32 @extract_undef_v16i8_u(<16 x i8> %v) {
11911a332d0SThomas Lively  %elem = extractelement <16 x i8> %v, i8 undef
12011a332d0SThomas Lively  %a = zext i8 %elem to i32
12111a332d0SThomas Lively  ret i32 %a
12211a332d0SThomas Lively}
12311a332d0SThomas Lively
124c15a8784SHeejin Ahn; CHECK-LABEL: extract_v16i8:
125a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i8x16
12649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v16i8 (v128) -> (i32){{$}}
1270906dca4SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 13{{$}}
12866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
129a0fd9c3eSHeejin Ahndefine i8 @extract_v16i8(<16 x i8> %v) {
130a0fd9c3eSHeejin Ahn  %elem = extractelement <16 x i8> %v, i8 13
131a0fd9c3eSHeejin Ahn  ret i8 %elem
132a0fd9c3eSHeejin Ahn}
133a0fd9c3eSHeejin Ahn
134fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v16i8:
135fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16
13649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v16i8 (v128, i32) -> (i32){{$}}
137275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
138fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
139fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
1406a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
141fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
142fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15{{$}}
143fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
144fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $2, $pop[[L5]]{{$}}
145fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load8_u $push[[R:[0-9]+]]=, 0($pop[[L6]]){{$}}
146fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
147fb84fd7cSThomas Livelydefine i8 @extract_var_v16i8(<16 x i8> %v, i32 %i) {
148fb84fd7cSThomas Lively  %elem = extractelement <16 x i8> %v, i32 %i
149fb84fd7cSThomas Lively  ret i8 %elem
150fb84fd7cSThomas Lively}
151fb84fd7cSThomas Lively
15211a332d0SThomas Lively; CHECK-LABEL: extract_undef_v16i8:
15311a332d0SThomas Lively; NO-SIMD128-NOT: i8x16
15449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v16i8 (v128) -> (i32){{$}}
1550906dca4SThomas Lively; SIMD128-NEXT: i8x16.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}}
15611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
15711a332d0SThomas Livelydefine i8 @extract_undef_v16i8(<16 x i8> %v) {
15811a332d0SThomas Lively  %elem = extractelement <16 x i8> %v, i8 undef
15911a332d0SThomas Lively  ret i8 %elem
16011a332d0SThomas Lively}
16111a332d0SThomas Lively
16282812fb9SDerek Schuff; CHECK-LABEL: replace_v16i8:
16382812fb9SDerek Schuff; NO-SIMD128-NOT: i8x16
16449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v16i8 (v128, i32) -> (v128){{$}}
16566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[R:[0-9]+]]=, $0, 11, $1{{$}}
16666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
16782812fb9SDerek Schuffdefine <16 x i8> @replace_v16i8(<16 x i8> %v, i8 %x) {
16882812fb9SDerek Schuff  %res = insertelement <16 x i8> %v, i8 %x, i32 11
16982812fb9SDerek Schuff  ret <16 x i8> %res
17082812fb9SDerek Schuff}
17182812fb9SDerek Schuff
172fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v16i8:
173fb84fd7cSThomas Lively; NO-SIMD128-NOT: i8x16
17449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v16i8 (v128, i32, i32) -> (v128){{$}}
175275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
176fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
177fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
1786a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}}
179fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
180fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 15{{$}}
181fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
182fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L6:[0-9]+]]=, $3, $pop[[L5]]{{$}}
183fb84fd7cSThomas Lively; SIMD128-NEXT: i32.store8 0($pop[[L6]]), $2{{$}}
184fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}}
185fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
186fb84fd7cSThomas Livelydefine <16 x i8> @replace_var_v16i8(<16 x i8> %v, i32 %i, i8 %x) {
187fb84fd7cSThomas Lively  %res = insertelement <16 x i8> %v, i8 %x, i32 %i
188fb84fd7cSThomas Lively  ret <16 x i8> %res
189fb84fd7cSThomas Lively}
190fb84fd7cSThomas Lively
19185a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v16i8:
19211a332d0SThomas Lively; NO-SIMD128-NOT: i8x16
19385a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v16i8 (v128, i32) -> (v128){{$}}
19411a332d0SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
19511a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
19685a2146cSSanjay Pateldefine <16 x i8> @replace_zero_v16i8(<16 x i8> %v, i8 %x) {
19785a2146cSSanjay Patel  %res = insertelement <16 x i8> %v, i8 %x, i32 0
19811a332d0SThomas Lively  ret <16 x i8> %res
19911a332d0SThomas Lively}
20011a332d0SThomas Lively
201a0d25815SThomas Lively; CHECK-LABEL: shuffle_v16i8:
202a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
20349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v16i8 (v128, v128) -> (v128){{$}}
204a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
205a3937b23SThomas Lively; SIMD128-SAME: 0, 17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 29, 14, 31{{$}}
20666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
207a0d25815SThomas Livelydefine <16 x i8> @shuffle_v16i8(<16 x i8> %x, <16 x i8> %y) {
208a0d25815SThomas Lively  %res = shufflevector <16 x i8> %x, <16 x i8> %y,
209a0d25815SThomas Lively    <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23,
210a0d25815SThomas Lively                i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
211a0d25815SThomas Lively  ret <16 x i8> %res
212a0d25815SThomas Lively}
213a0d25815SThomas Lively
21411a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v16i8:
215a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
21649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v16i8 (v128, v128) -> (v128){{$}}
217a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0,
21811a332d0SThomas Lively; SIMD128-SAME: 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}}
21911a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
22011a332d0SThomas Livelydefine <16 x i8> @shuffle_undef_v16i8(<16 x i8> %x, <16 x i8> %y) {
22111a332d0SThomas Lively  %res = shufflevector <16 x i8> %x, <16 x i8> %y,
22211a332d0SThomas Lively    <16 x i32> <i32 1, i32 undef, i32 undef, i32 undef,
22311a332d0SThomas Lively                i32 undef, i32 undef, i32 undef, i32 undef,
22411a332d0SThomas Lively                i32 undef, i32 undef, i32 undef, i32 undef,
22511a332d0SThomas Lively                i32 undef, i32 undef, i32 undef, i32 undef>
22611a332d0SThomas Lively  ret <16 x i8> %res
22711a332d0SThomas Lively}
22811a332d0SThomas Lively
2292ee686daSThomas Lively; CHECK-LABEL: build_v16i8:
2302ee686daSThomas Lively; NO-SIMD128-NOT: i8x16
23149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v16i8 (i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) -> (v128){{$}}
23266f3dc03SThomas Lively; SIMD128-NEXT: i8x16.splat $push[[L0:[0-9]+]]=, $0{{$}}
23366f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}}
23466f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}}
23566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L3:[0-9]+]]=, $pop[[L2]], 3, $3{{$}}
23666f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L4:[0-9]+]]=, $pop[[L3]], 4, $4{{$}}
23766f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L5:[0-9]+]]=, $pop[[L4]], 5, $5{{$}}
23866f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L6:[0-9]+]]=, $pop[[L5]], 6, $6{{$}}
23966f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L7:[0-9]+]]=, $pop[[L6]], 7, $7{{$}}
24066f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L8:[0-9]+]]=, $pop[[L7]], 8, $8{{$}}
24166f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L9:[0-9]+]]=, $pop[[L8]], 9, $9{{$}}
24266f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L10:[0-9]+]]=, $pop[[L9]], 10, $10{{$}}
24366f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L11:[0-9]+]]=, $pop[[L10]], 11, $11{{$}}
24466f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L12:[0-9]+]]=, $pop[[L11]], 12, $12{{$}}
24566f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L13:[0-9]+]]=, $pop[[L12]], 13, $13{{$}}
24666f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[L14:[0-9]+]]=, $pop[[L13]], 14, $14{{$}}
24766f3dc03SThomas Lively; SIMD128-NEXT: i8x16.replace_lane $push[[R:[0-9]+]]=, $pop[[L14]], 15, $15{{$}}
24866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
2492ee686daSThomas Livelydefine <16 x i8> @build_v16i8(i8 %x0, i8 %x1, i8 %x2, i8 %x3,
2502ee686daSThomas Lively                              i8 %x4, i8 %x5, i8 %x6, i8 %x7,
2512ee686daSThomas Lively                              i8 %x8, i8 %x9, i8 %x10, i8 %x11,
2522ee686daSThomas Lively                              i8 %x12, i8 %x13, i8 %x14, i8 %x15) {
2532ee686daSThomas Lively  %t0 = insertelement <16 x i8> undef, i8 %x0, i32 0
2542ee686daSThomas Lively  %t1 = insertelement <16 x i8> %t0, i8 %x1, i32 1
2552ee686daSThomas Lively  %t2 = insertelement <16 x i8> %t1, i8 %x2, i32 2
2562ee686daSThomas Lively  %t3 = insertelement <16 x i8> %t2, i8 %x3, i32 3
2572ee686daSThomas Lively  %t4 = insertelement <16 x i8> %t3, i8 %x4, i32 4
2582ee686daSThomas Lively  %t5 = insertelement <16 x i8> %t4, i8 %x5, i32 5
2592ee686daSThomas Lively  %t6 = insertelement <16 x i8> %t5, i8 %x6, i32 6
2602ee686daSThomas Lively  %t7 = insertelement <16 x i8> %t6, i8 %x7, i32 7
2612ee686daSThomas Lively  %t8 = insertelement <16 x i8> %t7, i8 %x8, i32 8
2622ee686daSThomas Lively  %t9 = insertelement <16 x i8> %t8, i8 %x9, i32 9
2632ee686daSThomas Lively  %t10 = insertelement <16 x i8> %t9, i8 %x10, i32 10
2642ee686daSThomas Lively  %t11 = insertelement <16 x i8> %t10, i8 %x11, i32 11
2652ee686daSThomas Lively  %t12 = insertelement <16 x i8> %t11, i8 %x12, i32 12
2662ee686daSThomas Lively  %t13 = insertelement <16 x i8> %t12, i8 %x13, i32 13
2672ee686daSThomas Lively  %t14 = insertelement <16 x i8> %t13, i8 %x14, i32 14
2682ee686daSThomas Lively  %res = insertelement <16 x i8> %t14, i8 %x15, i32 15
2692ee686daSThomas Lively  ret <16 x i8> %res
2702ee686daSThomas Lively}
2712ee686daSThomas Lively
272a0fd9c3eSHeejin Ahn; ==============================================================================
273a0fd9c3eSHeejin Ahn; 8 x i16
274a0fd9c3eSHeejin Ahn; ==============================================================================
27522442924SThomas Lively; CHECK-LABEL: const_v8i16:
27622442924SThomas Lively; NO-SIMD128-NOT: i16x8
27749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v8i16 () -> (v128){{$}}
27866f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 256, 770, 1284, 1798, 2312, 2826, 3340, 3854{{$}}
27966f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
28022442924SThomas Livelydefine <8 x i16> @const_v8i16() {
28122442924SThomas Lively  ret <8 x i16> <i16 256, i16 770, i16 1284, i16 1798,
28222442924SThomas Lively                 i16 2312, i16 2826, i16 3340, i16 3854>
28322442924SThomas Lively}
28422442924SThomas Lively
2854ec8bca1SDerek Schuff; CHECK-LABEL: splat_v8i16:
2864ec8bca1SDerek Schuff; NO-SIMD128-NOT: i16x8
28749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v8i16 (i32) -> (v128){{$}}
28866f3dc03SThomas Lively; SIMD128-NEXT: i16x8.splat $push[[R:[0-9]+]]=, $0{{$}}
28966f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
2904ec8bca1SDerek Schuffdefine <8 x i16> @splat_v8i16(i16 %x) {
2914ec8bca1SDerek Schuff  %v = insertelement <8 x i16> undef, i16 %x, i32 0
2924ec8bca1SDerek Schuff  %res = shufflevector <8 x i16> %v, <8 x i16> undef,
2934ec8bca1SDerek Schuff    <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
2944ec8bca1SDerek Schuff  ret <8 x i16> %res
2954ec8bca1SDerek Schuff}
2964ec8bca1SDerek Schuff
297cfab8b4bSThomas Lively; CHECK-LABEL: const_splat_v8i16:
298b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42, 42, 42, 42, 42, 42, 42{{$}}
299da26b84bSThomas Livelydefine <8 x i16> @const_splat_v8i16() {
300da26b84bSThomas Lively  ret <8 x i16> <i16 42, i16 42, i16 42, i16 42, i16 42, i16 42, i16 42, i16 42>
301da26b84bSThomas Lively}
302da26b84bSThomas Lively
303c15a8784SHeejin Ahn; CHECK-LABEL: extract_v8i16_s:
304a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i16x8
30549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v8i16_s (v128) -> (i32){{$}}
30666f3dc03SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_s $push[[R:[0-9]+]]=, $0, 5{{$}}
30766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
308a0fd9c3eSHeejin Ahndefine i32 @extract_v8i16_s(<8 x i16> %v) {
309a0fd9c3eSHeejin Ahn  %elem = extractelement <8 x i16> %v, i16 5
310a0fd9c3eSHeejin Ahn  %a = sext i16 %elem to i32
311a0fd9c3eSHeejin Ahn  ret i32 %a
312a0fd9c3eSHeejin Ahn}
313a0fd9c3eSHeejin Ahn
314fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v8i16_s:
315fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8
31649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v8i16_s (v128, i32) -> (i32){{$}}
317275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
318fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
319fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
3206a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
321fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
322fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}}
323fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
324fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}}
325fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
326fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $2, $pop[[L7]]{{$}}
327fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load16_s $push[[R:[0-9]+]]=, 0($pop[[L8]]){{$}}
328fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
329fb84fd7cSThomas Livelydefine i32 @extract_var_v8i16_s(<8 x i16> %v, i32 %i) {
330fb84fd7cSThomas Lively  %elem = extractelement <8 x i16> %v, i32 %i
331fb84fd7cSThomas Lively  %a = sext i16 %elem to i32
332fb84fd7cSThomas Lively  ret i32 %a
333fb84fd7cSThomas Lively}
334fb84fd7cSThomas Lively
33511a332d0SThomas Lively; CHECK-LABEL: extract_undef_v8i16_s:
33611a332d0SThomas Lively; NO-SIMD128-NOT: i16x8
33749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v8i16_s (v128) -> (i32){{$}}
33811a332d0SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_s $push[[R:[0-9]+]]=, $0, 0{{$}}
33911a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
34011a332d0SThomas Livelydefine i32 @extract_undef_v8i16_s(<8 x i16> %v) {
34111a332d0SThomas Lively  %elem = extractelement <8 x i16> %v, i16 undef
34211a332d0SThomas Lively  %a = sext i16 %elem to i32
34311a332d0SThomas Lively  ret i32 %a
34411a332d0SThomas Lively}
34511a332d0SThomas Lively
346c15a8784SHeejin Ahn; CHECK-LABEL: extract_v8i16_u:
347a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i16x8
34849482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v8i16_u (v128) -> (i32){{$}}
34966f3dc03SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 5{{$}}
35066f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
351a0fd9c3eSHeejin Ahndefine i32 @extract_v8i16_u(<8 x i16> %v) {
352a0fd9c3eSHeejin Ahn  %elem = extractelement <8 x i16> %v, i16 5
353a0fd9c3eSHeejin Ahn  %a = zext i16 %elem to i32
354a0fd9c3eSHeejin Ahn  ret i32 %a
355a0fd9c3eSHeejin Ahn}
356a0fd9c3eSHeejin Ahn
357fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v8i16_u:
358fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8
35949482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v8i16_u (v128, i32) -> (i32){{$}}
360275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
361fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
362fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
3636a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
364fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
365fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}}
366fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
367fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}}
368fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
369fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $2, $pop[[L7]]{{$}}
370fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load16_u $push[[R:[0-9]+]]=, 0($pop[[L8]]){{$}}
371fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
372fb84fd7cSThomas Livelydefine i32 @extract_var_v8i16_u(<8 x i16> %v, i32 %i) {
373fb84fd7cSThomas Lively  %elem = extractelement <8 x i16> %v, i32 %i
374fb84fd7cSThomas Lively  %a = zext i16 %elem to i32
375fb84fd7cSThomas Lively  ret i32 %a
376fb84fd7cSThomas Lively}
377fb84fd7cSThomas Lively
37811a332d0SThomas Lively; CHECK-LABEL: extract_undef_v8i16_u:
37911a332d0SThomas Lively; NO-SIMD128-NOT: i16x8
38049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v8i16_u (v128) -> (i32){{$}}
38111a332d0SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}}
38211a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
38311a332d0SThomas Livelydefine i32 @extract_undef_v8i16_u(<8 x i16> %v) {
38411a332d0SThomas Lively  %elem = extractelement <8 x i16> %v, i16 undef
38511a332d0SThomas Lively  %a = zext i16 %elem to i32
38611a332d0SThomas Lively  ret i32 %a
38711a332d0SThomas Lively}
38811a332d0SThomas Lively
389c15a8784SHeejin Ahn; CHECK-LABEL: extract_v8i16:
390a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i16x8
39149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v8i16 (v128) -> (i32){{$}}
3920906dca4SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 5{{$}}
39366f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
394a0fd9c3eSHeejin Ahndefine i16 @extract_v8i16(<8 x i16> %v) {
395a0fd9c3eSHeejin Ahn  %elem = extractelement <8 x i16> %v, i16 5
396a0fd9c3eSHeejin Ahn  ret i16 %elem
397a0fd9c3eSHeejin Ahn}
398a0fd9c3eSHeejin Ahn
399fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v8i16:
400fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8
40149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v8i16 (v128, i32) -> (i32){{$}}
402275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
403fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
404fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
4056a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
406fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
407fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}}
408fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
409fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}}
410fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
411fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $2, $pop[[L7]]{{$}}
412fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load16_u $push[[R:[0-9]+]]=, 0($pop[[L8]]){{$}}
413fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
414fb84fd7cSThomas Livelydefine i16 @extract_var_v8i16(<8 x i16> %v, i32 %i) {
415fb84fd7cSThomas Lively  %elem = extractelement <8 x i16> %v, i32 %i
416fb84fd7cSThomas Lively  ret i16 %elem
417fb84fd7cSThomas Lively}
418fb84fd7cSThomas Lively
41911a332d0SThomas Lively; CHECK-LABEL: extract_undef_v8i16:
42011a332d0SThomas Lively; NO-SIMD128-NOT: i16x8
42149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_undef_v8i16 (v128) -> (i32){{$}}
4220906dca4SThomas Lively; SIMD128-NEXT: i16x8.extract_lane_u $push[[R:[0-9]+]]=, $0, 0{{$}}
42311a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
42411a332d0SThomas Livelydefine i16 @extract_undef_v8i16(<8 x i16> %v) {
42511a332d0SThomas Lively  %elem = extractelement <8 x i16> %v, i16 undef
42611a332d0SThomas Lively  ret i16 %elem
42711a332d0SThomas Lively}
42811a332d0SThomas Lively
42982812fb9SDerek Schuff; CHECK-LABEL: replace_v8i16:
43082812fb9SDerek Schuff; NO-SIMD128-NOT: i16x8
43149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v8i16 (v128, i32) -> (v128){{$}}
43266f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[R:[0-9]+]]=, $0, 7, $1{{$}}
43366f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
43482812fb9SDerek Schuffdefine <8 x i16> @replace_v8i16(<8 x i16> %v, i16 %x) {
43582812fb9SDerek Schuff  %res = insertelement <8 x i16> %v, i16 %x, i32 7
43682812fb9SDerek Schuff  ret <8 x i16> %res
43782812fb9SDerek Schuff}
43882812fb9SDerek Schuff
439fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v8i16:
440fb84fd7cSThomas Lively; NO-SIMD128-NOT: i16x8
44149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v8i16 (v128, i32, i32) -> (v128){{$}}
442275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
443fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
444fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
4456a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}}
446fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
447fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 7{{$}}
448fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
449fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 1{{$}}
450fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
451fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L8:[0-9]+]]=, $3, $pop[[L7]]{{$}}
452fb84fd7cSThomas Lively; SIMD128-NEXT: i32.store16 0($pop[[L8]]), $2{{$}}
453fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}}
454fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
455fb84fd7cSThomas Livelydefine <8 x i16> @replace_var_v8i16(<8 x i16> %v, i32 %i, i16 %x) {
456fb84fd7cSThomas Lively  %res = insertelement <8 x i16> %v, i16 %x, i32 %i
457fb84fd7cSThomas Lively  ret <8 x i16> %res
458fb84fd7cSThomas Lively}
459fb84fd7cSThomas Lively
46085a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v8i16:
46111a332d0SThomas Lively; NO-SIMD128-NOT: i16x8
46285a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v8i16 (v128, i32) -> (v128){{$}}
46311a332d0SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
46411a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
46585a2146cSSanjay Pateldefine <8 x i16> @replace_zero_v8i16(<8 x i16> %v, i16 %x) {
46685a2146cSSanjay Patel  %res = insertelement <8 x i16> %v, i16 %x, i32 0
46711a332d0SThomas Lively  ret <8 x i16> %res
46811a332d0SThomas Lively}
46911a332d0SThomas Lively
470a0d25815SThomas Lively; CHECK-LABEL: shuffle_v8i16:
471a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
47249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v8i16 (v128, v128) -> (v128){{$}}
473a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
474a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 18, 19, 4, 5, 22, 23, 8, 9, 26, 27, 12, 13, 30, 31{{$}}
47566f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
476a0d25815SThomas Livelydefine <8 x i16> @shuffle_v8i16(<8 x i16> %x, <8 x i16> %y) {
477a0d25815SThomas Lively  %res = shufflevector <8 x i16> %x, <8 x i16> %y,
478a0d25815SThomas Lively    <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
479a0d25815SThomas Lively  ret <8 x i16> %res
480a0d25815SThomas Lively}
481a0d25815SThomas Lively
48211a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v8i16:
483a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
48449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v8i16 (v128, v128) -> (v128){{$}}
485a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0,
48611a332d0SThomas Lively; SIMD128-SAME: 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}}
48711a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
48811a332d0SThomas Livelydefine <8 x i16> @shuffle_undef_v8i16(<8 x i16> %x, <8 x i16> %y) {
48911a332d0SThomas Lively  %res = shufflevector <8 x i16> %x, <8 x i16> %y,
49011a332d0SThomas Lively    <8 x i32> <i32 1, i32 undef, i32 undef, i32 undef,
49111a332d0SThomas Lively               i32 undef, i32 undef, i32 undef, i32 undef>
49211a332d0SThomas Lively  ret <8 x i16> %res
49311a332d0SThomas Lively}
49411a332d0SThomas Lively
4952ee686daSThomas Lively; CHECK-LABEL: build_v8i16:
4962ee686daSThomas Lively; NO-SIMD128-NOT: i16x8
49749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v8i16 (i32, i32, i32, i32, i32, i32, i32, i32) -> (v128){{$}}
49866f3dc03SThomas Lively; SIMD128-NEXT: i16x8.splat $push[[L0:[0-9]+]]=, $0{{$}}
49966f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}}
50066f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}}
50166f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L3:[0-9]+]]=, $pop[[L2]], 3, $3{{$}}
50266f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L4:[0-9]+]]=, $pop[[L3]], 4, $4{{$}}
50366f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L5:[0-9]+]]=, $pop[[L4]], 5, $5{{$}}
50466f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[L6:[0-9]+]]=, $pop[[L5]], 6, $6{{$}}
50566f3dc03SThomas Lively; SIMD128-NEXT: i16x8.replace_lane $push[[R:[0-9]+]]=, $pop[[L6]], 7, $7{{$}}
50666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
5072ee686daSThomas Livelydefine <8 x i16> @build_v8i16(i16 %x0, i16 %x1, i16 %x2, i16 %x3,
5082ee686daSThomas Lively                              i16 %x4, i16 %x5, i16 %x6, i16 %x7) {
5092ee686daSThomas Lively  %t0 = insertelement <8 x i16> undef, i16 %x0, i32 0
5102ee686daSThomas Lively  %t1 = insertelement <8 x i16> %t0, i16 %x1, i32 1
5112ee686daSThomas Lively  %t2 = insertelement <8 x i16> %t1, i16 %x2, i32 2
5122ee686daSThomas Lively  %t3 = insertelement <8 x i16> %t2, i16 %x3, i32 3
5132ee686daSThomas Lively  %t4 = insertelement <8 x i16> %t3, i16 %x4, i32 4
5142ee686daSThomas Lively  %t5 = insertelement <8 x i16> %t4, i16 %x5, i32 5
5152ee686daSThomas Lively  %t6 = insertelement <8 x i16> %t5, i16 %x6, i32 6
5162ee686daSThomas Lively  %res = insertelement <8 x i16> %t6, i16 %x7, i32 7
5172ee686daSThomas Lively  ret <8 x i16> %res
5182ee686daSThomas Lively}
5192ee686daSThomas Lively
520a0fd9c3eSHeejin Ahn; ==============================================================================
521a0fd9c3eSHeejin Ahn; 4 x i32
522a0fd9c3eSHeejin Ahn; ==============================================================================
52322442924SThomas Lively; CHECK-LABEL: const_v4i32:
52422442924SThomas Lively; NO-SIMD128-NOT: i32x4
52549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v4i32 () -> (v128){{$}}
52666f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 50462976, 117835012, 185207048, 252579084{{$}}
52766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
52822442924SThomas Livelydefine <4 x i32> @const_v4i32() {
52922442924SThomas Lively  ret <4 x i32> <i32 50462976, i32 117835012, i32 185207048, i32 252579084>
53022442924SThomas Lively}
53122442924SThomas Lively
5324ec8bca1SDerek Schuff; CHECK-LABEL: splat_v4i32:
5334ec8bca1SDerek Schuff; NO-SIMD128-NOT: i32x4
53449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v4i32 (i32) -> (v128){{$}}
53566f3dc03SThomas Lively; SIMD128-NEXT: i32x4.splat $push[[R:[0-9]+]]=, $0{{$}}
53666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
5374ec8bca1SDerek Schuffdefine <4 x i32> @splat_v4i32(i32 %x) {
5384ec8bca1SDerek Schuff  %v = insertelement <4 x i32> undef, i32 %x, i32 0
5394ec8bca1SDerek Schuff  %res = shufflevector <4 x i32> %v, <4 x i32> undef,
5404ec8bca1SDerek Schuff    <4 x i32> <i32 0, i32 0, i32 0, i32 0>
5414ec8bca1SDerek Schuff  ret <4 x i32> %res
5424ec8bca1SDerek Schuff}
5434ec8bca1SDerek Schuff
5441b55b2beSThomas Lively; CHECK-LABEL: const_splat_v4i32:
545b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42, 42, 42{{$}}
546da26b84bSThomas Livelydefine <4 x i32> @const_splat_v4i32() {
547da26b84bSThomas Lively  ret <4 x i32> <i32 42, i32 42, i32 42, i32 42>
548da26b84bSThomas Lively}
549da26b84bSThomas Lively
550c15a8784SHeejin Ahn; CHECK-LABEL: extract_v4i32:
551a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i32x4
55249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v4i32 (v128) -> (i32){{$}}
55366f3dc03SThomas Lively; SIMD128-NEXT: i32x4.extract_lane $push[[R:[0-9]+]]=, $0, 3{{$}}
55466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
555a0fd9c3eSHeejin Ahndefine i32 @extract_v4i32(<4 x i32> %v) {
556a0fd9c3eSHeejin Ahn  %elem = extractelement <4 x i32> %v, i32 3
557a0fd9c3eSHeejin Ahn  ret i32 %elem
558a0fd9c3eSHeejin Ahn}
559a0fd9c3eSHeejin Ahn
560fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v4i32:
561fb84fd7cSThomas Lively; NO-SIMD128-NOT: i32x4
56249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v4i32 (v128, i32) -> (i32){{$}}
563275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
564fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
565fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
5666a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
567fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
568fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 3{{$}}
569fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
570fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}}
571fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
572fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L4:[0-9]+]]=, $2, $pop[[L7]]{{$}}
573fb84fd7cSThomas Lively; SIMD128-NEXT: i32.load $push[[R:[0-9]+]]=, 0($pop[[L4]]){{$}}
574fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
575fb84fd7cSThomas Livelydefine i32 @extract_var_v4i32(<4 x i32> %v, i32 %i) {
576fb84fd7cSThomas Lively  %elem = extractelement <4 x i32> %v, i32 %i
577fb84fd7cSThomas Lively  ret i32 %elem
578fb84fd7cSThomas Lively}
579fb84fd7cSThomas Lively
5804c476176SSanjay Patel; CHECK-LABEL: extract_zero_v4i32:
58111a332d0SThomas Lively; NO-SIMD128-NOT: i32x4
5824c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v4i32 (v128) -> (i32){{$}}
58311a332d0SThomas Lively; SIMD128-NEXT: i32x4.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}}
58411a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
5854c476176SSanjay Pateldefine i32 @extract_zero_v4i32(<4 x i32> %v) {
5864c476176SSanjay Patel  %elem = extractelement <4 x i32> %v, i32 0
58711a332d0SThomas Lively  ret i32 %elem
58811a332d0SThomas Lively}
58911a332d0SThomas Lively
59082812fb9SDerek Schuff; CHECK-LABEL: replace_v4i32:
59182812fb9SDerek Schuff; NO-SIMD128-NOT: i32x4
59249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v4i32 (v128, i32) -> (v128){{$}}
59366f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[R:[0-9]+]]=, $0, 2, $1{{$}}
59466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
59582812fb9SDerek Schuffdefine <4 x i32> @replace_v4i32(<4 x i32> %v, i32 %x) {
59682812fb9SDerek Schuff  %res = insertelement <4 x i32> %v, i32 %x, i32 2
59782812fb9SDerek Schuff  ret <4 x i32> %res
59882812fb9SDerek Schuff}
59982812fb9SDerek Schuff
600fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v4i32:
601fb84fd7cSThomas Lively; NO-SIMD128-NOT: i32x4
60249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v4i32 (v128, i32, i32) -> (v128){{$}}
603275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
604fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
605fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
6066a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}}
607fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
608fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L4:[0-9]+]]=, 3{{$}}
609fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L4]]{{$}}
610fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}}
611fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
612fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L4:[0-9]+]]=, $3, $pop[[L7]]{{$}}
613fb84fd7cSThomas Lively; SIMD128-NEXT: i32.store 0($pop[[L4]]), $2{{$}}
614fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}}
615fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
616fb84fd7cSThomas Livelydefine <4 x i32> @replace_var_v4i32(<4 x i32> %v, i32 %i, i32 %x) {
617fb84fd7cSThomas Lively  %res = insertelement <4 x i32> %v, i32 %x, i32 %i
618fb84fd7cSThomas Lively  ret <4 x i32> %res
619fb84fd7cSThomas Lively}
620fb84fd7cSThomas Lively
62185a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v4i32:
62211a332d0SThomas Lively; NO-SIMD128-NOT: i32x4
62385a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v4i32 (v128, i32) -> (v128){{$}}
62411a332d0SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
62511a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
62685a2146cSSanjay Pateldefine <4 x i32> @replace_zero_v4i32(<4 x i32> %v, i32 %x) {
62785a2146cSSanjay Patel  %res = insertelement <4 x i32> %v, i32 %x, i32 0
62811a332d0SThomas Lively  ret <4 x i32> %res
62911a332d0SThomas Lively}
63011a332d0SThomas Lively
631a0d25815SThomas Lively; CHECK-LABEL: shuffle_v4i32:
632a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
63349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v4i32 (v128, v128) -> (v128){{$}}
634a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
635a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 20, 21, 22, 23, 8, 9, 10, 11, 28, 29, 30, 31{{$}}
63666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
637a0d25815SThomas Livelydefine <4 x i32> @shuffle_v4i32(<4 x i32> %x, <4 x i32> %y) {
638a0d25815SThomas Lively  %res = shufflevector <4 x i32> %x, <4 x i32> %y,
639a0d25815SThomas Lively    <4 x i32> <i32 0, i32 5, i32 2, i32 7>
640a0d25815SThomas Lively  ret <4 x i32> %res
641a0d25815SThomas Lively}
642a0d25815SThomas Lively
64311a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v4i32:
644a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
64549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v4i32 (v128, v128) -> (v128){{$}}
646a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0,
64711a332d0SThomas Lively; SIMD128-SAME: 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}}
64811a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
64911a332d0SThomas Livelydefine <4 x i32> @shuffle_undef_v4i32(<4 x i32> %x, <4 x i32> %y) {
65011a332d0SThomas Lively  %res = shufflevector <4 x i32> %x, <4 x i32> %y,
65111a332d0SThomas Lively    <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
65211a332d0SThomas Lively  ret <4 x i32> %res
65311a332d0SThomas Lively}
65411a332d0SThomas Lively
6552ee686daSThomas Lively; CHECK-LABEL: build_v4i32:
6562ee686daSThomas Lively; NO-SIMD128-NOT: i32x4
65749482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v4i32 (i32, i32, i32, i32) -> (v128){{$}}
65866f3dc03SThomas Lively; SIMD128-NEXT: i32x4.splat $push[[L0:[0-9]+]]=, $0{{$}}
65966f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}}
66066f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}}
66166f3dc03SThomas Lively; SIMD128-NEXT: i32x4.replace_lane $push[[R:[0-9]+]]=, $pop[[L2]], 3, $3{{$}}
66266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
6632ee686daSThomas Livelydefine <4 x i32> @build_v4i32(i32 %x0, i32 %x1, i32 %x2, i32 %x3) {
6642ee686daSThomas Lively  %t0 = insertelement <4 x i32> undef, i32 %x0, i32 0
6652ee686daSThomas Lively  %t1 = insertelement <4 x i32> %t0, i32 %x1, i32 1
6662ee686daSThomas Lively  %t2 = insertelement <4 x i32> %t1, i32 %x2, i32 2
6672ee686daSThomas Lively  %res = insertelement <4 x i32> %t2, i32 %x3, i32 3
6682ee686daSThomas Lively  ret <4 x i32> %res
6692ee686daSThomas Lively}
6702ee686daSThomas Lively
671a0fd9c3eSHeejin Ahn; ==============================================================================
672a0fd9c3eSHeejin Ahn; 2 x i64
673a0fd9c3eSHeejin Ahn; ==============================================================================
67422442924SThomas Lively; CHECK-LABEL: const_v2i64:
67522442924SThomas Lively; NO-SIMD128-NOT: i64x2
67649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v2i64 () -> (v128){{$}}
67766f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 506097522914230528, 1084818905618843912{{$}}
67866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
67922442924SThomas Livelydefine <2 x i64> @const_v2i64() {
68022442924SThomas Lively  ret <2 x i64> <i64 506097522914230528, i64 1084818905618843912>
68122442924SThomas Lively}
68222442924SThomas Lively
6834ec8bca1SDerek Schuff; CHECK-LABEL: splat_v2i64:
6844ec8bca1SDerek Schuff; NO-SIMD128-NOT: i64x2
68549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v2i64 (i64) -> (v128){{$}}
68666f3dc03SThomas Lively; SIMD128-NEXT: i64x2.splat $push[[R:[0-9]+]]=, $0{{$}}
68766f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
6884ec8bca1SDerek Schuffdefine <2 x i64> @splat_v2i64(i64 %x) {
6894ec8bca1SDerek Schuff  %t1 = insertelement <2 x i64> zeroinitializer, i64 %x, i32 0
6904ec8bca1SDerek Schuff  %res = insertelement <2 x i64> %t1, i64 %x, i32 1
6914ec8bca1SDerek Schuff  ret <2 x i64> %res
6924ec8bca1SDerek Schuff}
6934ec8bca1SDerek Schuff
6941b55b2beSThomas Lively; CHECK-LABEL: const_splat_v2i64:
695b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 42, 42{{$}}
6961b55b2beSThomas Livelydefine <2 x i64> @const_splat_v2i64() {
6971b55b2beSThomas Lively  ret <2 x i64> <i64 42, i64 42>
6981b55b2beSThomas Lively}
6991b55b2beSThomas Lively
700c15a8784SHeejin Ahn; CHECK-LABEL: extract_v2i64:
701a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: i64x2
70249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v2i64 (v128) -> (i64){{$}}
70366f3dc03SThomas Lively; SIMD128-NEXT: i64x2.extract_lane $push[[R:[0-9]+]]=, $0, 1{{$}}
70466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
705a0fd9c3eSHeejin Ahndefine i64 @extract_v2i64(<2 x i64> %v) {
706a0fd9c3eSHeejin Ahn  %elem = extractelement <2 x i64> %v, i64 1
707a0fd9c3eSHeejin Ahn  ret i64 %elem
708a0fd9c3eSHeejin Ahn}
709a0fd9c3eSHeejin Ahn
710fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v2i64:
711fb84fd7cSThomas Lively; NO-SIMD128-NOT: i64x2
71249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v2i64 (v128, i32) -> (i64){{$}}
713275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
714fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
715fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
7166a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
717fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
718fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}}
719fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}}
720fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}}
721fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
722fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $2, $pop[[L7]]{{$}}
723fb84fd7cSThomas Lively; SIMD128-NEXT: i64.load $push[[R:[0-9]+]]=, 0($pop[[L2]]){{$}}
724fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
725fb84fd7cSThomas Livelydefine i64 @extract_var_v2i64(<2 x i64> %v, i32 %i) {
726fb84fd7cSThomas Lively  %elem = extractelement <2 x i64> %v, i32 %i
727fb84fd7cSThomas Lively  ret i64 %elem
728fb84fd7cSThomas Lively}
729fb84fd7cSThomas Lively
7304c476176SSanjay Patel; CHECK-LABEL: extract_zero_v2i64:
73111a332d0SThomas Lively; NO-SIMD128-NOT: i64x2
7324c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v2i64 (v128) -> (i64){{$}}
73311a332d0SThomas Lively; SIMD128-NEXT: i64x2.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}}
73411a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
7354c476176SSanjay Pateldefine i64 @extract_zero_v2i64(<2 x i64> %v) {
7364c476176SSanjay Patel  %elem = extractelement <2 x i64> %v, i64 0
73711a332d0SThomas Lively  ret i64 %elem
73811a332d0SThomas Lively}
73911a332d0SThomas Lively
74082812fb9SDerek Schuff; CHECK-LABEL: replace_v2i64:
74182812fb9SDerek Schuff; NO-SIMD128-NOT: i64x2
74249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v2i64 (v128, i64) -> (v128){{$}}
74366f3dc03SThomas Lively; SIMD128-NEXT: i64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
74466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
74582812fb9SDerek Schuffdefine <2 x i64> @replace_v2i64(<2 x i64> %v, i64 %x) {
74682812fb9SDerek Schuff  %res = insertelement <2 x i64> %v, i64 %x, i32 0
74782812fb9SDerek Schuff  ret <2 x i64> %res
74882812fb9SDerek Schuff}
74982812fb9SDerek Schuff
750fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v2i64:
751fb84fd7cSThomas Lively; NO-SIMD128-NOT: i64x2
75249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v2i64 (v128, i32, i64) -> (v128){{$}}
753275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
754fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
755fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
7566a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}}
757fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
758fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}}
759fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}}
760fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}}
761fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
762fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $3, $pop[[L7]]{{$}}
763fb84fd7cSThomas Lively; SIMD128-NEXT: i64.store 0($pop[[L2]]), $2{{$}}
764fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}}
765fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
766fb84fd7cSThomas Livelydefine <2 x i64> @replace_var_v2i64(<2 x i64> %v, i32 %i, i64 %x) {
767fb84fd7cSThomas Lively  %res = insertelement <2 x i64> %v, i64 %x, i32 %i
768fb84fd7cSThomas Lively  ret <2 x i64> %res
769fb84fd7cSThomas Lively}
770fb84fd7cSThomas Lively
77185a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v2i64:
77211a332d0SThomas Lively; NO-SIMD128-NOT: i64x2
77385a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v2i64 (v128, i64) -> (v128){{$}}
77411a332d0SThomas Lively; SIMD128-NEXT: i64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
77511a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
77685a2146cSSanjay Pateldefine <2 x i64> @replace_zero_v2i64(<2 x i64> %v, i64 %x) {
77785a2146cSSanjay Patel  %res = insertelement <2 x i64> %v, i64 %x, i32 0
77811a332d0SThomas Lively  ret <2 x i64> %res
77911a332d0SThomas Lively}
78011a332d0SThomas Lively
781a0d25815SThomas Lively; CHECK-LABEL: shuffle_v2i64:
782a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
78349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v2i64 (v128, v128) -> (v128){{$}}
784a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
785a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 4, 5, 6, 7, 24, 25, 26, 27, 28, 29, 30, 31{{$}}
78666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
787a0d25815SThomas Livelydefine <2 x i64> @shuffle_v2i64(<2 x i64> %x, <2 x i64> %y) {
788a0d25815SThomas Lively  %res = shufflevector <2 x i64> %x, <2 x i64> %y, <2 x i32> <i32 0, i32 3>
789a0d25815SThomas Lively  ret <2 x i64> %res
790a0d25815SThomas Lively}
791a0d25815SThomas Lively
79211a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v2i64:
793a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
79449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v2i64 (v128, v128) -> (v128){{$}}
795a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0,
79611a332d0SThomas Lively; SIMD128-SAME: 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0{{$}}
79711a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
79811a332d0SThomas Livelydefine <2 x i64> @shuffle_undef_v2i64(<2 x i64> %x, <2 x i64> %y) {
79911a332d0SThomas Lively  %res = shufflevector <2 x i64> %x, <2 x i64> %y,
80011a332d0SThomas Lively    <2 x i32> <i32 1, i32 undef>
80111a332d0SThomas Lively  ret <2 x i64> %res
80211a332d0SThomas Lively}
80311a332d0SThomas Lively
8042ee686daSThomas Lively; CHECK-LABEL: build_v2i64:
8052ee686daSThomas Lively; NO-SIMD128-NOT: i64x2
80649482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v2i64 (i64, i64) -> (v128){{$}}
80766f3dc03SThomas Lively; SIMD128-NEXT: i64x2.splat $push[[L0:[0-9]+]]=, $0{{$}}
80866f3dc03SThomas Lively; SIMD128-NEXT: i64x2.replace_lane $push[[R:[0-9]+]]=, $pop[[L0]], 1, $1{{$}}
80966f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
8102ee686daSThomas Livelydefine <2 x i64> @build_v2i64(i64 %x0, i64 %x1) {
8112ee686daSThomas Lively  %t0 = insertelement <2 x i64> undef, i64 %x0, i32 0
8122ee686daSThomas Lively  %res = insertelement <2 x i64> %t0, i64 %x1, i32 1
8132ee686daSThomas Lively  ret <2 x i64> %res
8142ee686daSThomas Lively}
8152ee686daSThomas Lively
816a0fd9c3eSHeejin Ahn; ==============================================================================
817a0fd9c3eSHeejin Ahn; 4 x f32
818a0fd9c3eSHeejin Ahn; ==============================================================================
81922442924SThomas Lively; CHECK-LABEL: const_v4f32:
82022442924SThomas Lively; NO-SIMD128-NOT: f32x4
82149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v4f32 () -> (v128){{$}}
82266f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=,
823a3937b23SThomas Lively; SIMD128-SAME: 0x1.0402p-121, 0x1.0c0a08p-113, 0x1.14121p-105, 0x1.1c1a18p-97{{$}}
82466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
82522442924SThomas Livelydefine <4 x float> @const_v4f32() {
82622442924SThomas Lively  ret <4 x float> <float 0x3860402000000000, float 0x38e0c0a080000000,
82722442924SThomas Lively                   float 0x3961412100000000, float 0x39e1c1a180000000>
82822442924SThomas Lively}
82922442924SThomas Lively
8304ec8bca1SDerek Schuff; CHECK-LABEL: splat_v4f32:
8314ec8bca1SDerek Schuff; NO-SIMD128-NOT: f32x4
83249482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v4f32 (f32) -> (v128){{$}}
83366f3dc03SThomas Lively; SIMD128-NEXT: f32x4.splat $push[[R:[0-9]+]]=, $0{{$}}
83466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
8354ec8bca1SDerek Schuffdefine <4 x float> @splat_v4f32(float %x) {
8364ec8bca1SDerek Schuff  %v = insertelement <4 x float> undef, float %x, i32 0
8374ec8bca1SDerek Schuff  %res = shufflevector <4 x float> %v, <4 x float> undef,
8384ec8bca1SDerek Schuff    <4 x i32> <i32 0, i32 0, i32 0, i32 0>
8394ec8bca1SDerek Schuff  ret <4 x float> %res
8404ec8bca1SDerek Schuff}
8414ec8bca1SDerek Schuff
842da26b84bSThomas Lively; CHECK-LABEL: const_splat_v4f32
843b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 0x1.5p5, 0x1.5p5, 0x1.5p5, 0x1.5p5{{$}}
844da26b84bSThomas Livelydefine <4 x float> @const_splat_v4f32() {
845da26b84bSThomas Lively  ret <4 x float> <float 42., float 42., float 42., float 42.>
846da26b84bSThomas Lively}
847da26b84bSThomas Lively
848c15a8784SHeejin Ahn; CHECK-LABEL: extract_v4f32:
849a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: f32x4
85049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v4f32 (v128) -> (f32){{$}}
85166f3dc03SThomas Lively; SIMD128-NEXT: f32x4.extract_lane $push[[R:[0-9]+]]=, $0, 3{{$}}
85266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
853a0fd9c3eSHeejin Ahndefine float @extract_v4f32(<4 x float> %v) {
854a0fd9c3eSHeejin Ahn  %elem = extractelement <4 x float> %v, i32 3
855a0fd9c3eSHeejin Ahn  ret float %elem
856a0fd9c3eSHeejin Ahn}
857a0fd9c3eSHeejin Ahn
858fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v4f32:
859fb84fd7cSThomas Lively; NO-SIMD128-NOT: i64x2
86049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v4f32 (v128, i32) -> (f32){{$}}
861275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
862fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
863fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
8646a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
865fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
866fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 3{{$}}
867fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}}
868fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}}
869fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
870fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $2, $pop[[L7]]{{$}}
871fb84fd7cSThomas Lively; SIMD128-NEXT: f32.load $push[[R:[0-9]+]]=, 0($pop[[L2]]){{$}}
872fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
873fb84fd7cSThomas Livelydefine float @extract_var_v4f32(<4 x float> %v, i32 %i) {
874fb84fd7cSThomas Lively  %elem = extractelement <4 x float> %v, i32 %i
875fb84fd7cSThomas Lively  ret float %elem
876fb84fd7cSThomas Lively}
877fb84fd7cSThomas Lively
8784c476176SSanjay Patel; CHECK-LABEL: extract_zero_v4f32:
87911a332d0SThomas Lively; NO-SIMD128-NOT: f32x4
8804c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v4f32 (v128) -> (f32){{$}}
88111a332d0SThomas Lively; SIMD128-NEXT: f32x4.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}}
88211a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
8834c476176SSanjay Pateldefine float @extract_zero_v4f32(<4 x float> %v) {
8844c476176SSanjay Patel  %elem = extractelement <4 x float> %v, i32 0
88511a332d0SThomas Lively  ret float %elem
88611a332d0SThomas Lively}
88711a332d0SThomas Lively
88882812fb9SDerek Schuff; CHECK-LABEL: replace_v4f32:
88982812fb9SDerek Schuff; NO-SIMD128-NOT: f32x4
89049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v4f32 (v128, f32) -> (v128){{$}}
89166f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[R:[0-9]+]]=, $0, 2, $1{{$}}
89266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
89382812fb9SDerek Schuffdefine <4 x float> @replace_v4f32(<4 x float> %v, float %x) {
89482812fb9SDerek Schuff  %res = insertelement <4 x float> %v, float %x, i32 2
89582812fb9SDerek Schuff  ret <4 x float> %res
89682812fb9SDerek Schuff}
89782812fb9SDerek Schuff
898fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v4f32:
899fb84fd7cSThomas Lively; NO-SIMD128-NOT: f32x4
90049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v4f32 (v128, i32, f32) -> (v128){{$}}
901275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
902fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
903fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
9046a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}}
905fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
906fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 3{{$}}
907fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}}
908fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 2{{$}}
909fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
910fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $3, $pop[[L7]]{{$}}
911fb84fd7cSThomas Lively; SIMD128-NEXT: f32.store 0($pop[[L2]]), $2{{$}}
912fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}}
913fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
914fb84fd7cSThomas Livelydefine <4 x float> @replace_var_v4f32(<4 x float> %v, i32 %i, float %x) {
915fb84fd7cSThomas Lively  %res = insertelement <4 x float> %v, float %x, i32 %i
916fb84fd7cSThomas Lively  ret <4 x float> %res
917fb84fd7cSThomas Lively}
918fb84fd7cSThomas Lively
91985a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v4f32:
92011a332d0SThomas Lively; NO-SIMD128-NOT: f32x4
92185a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v4f32 (v128, f32) -> (v128){{$}}
92211a332d0SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
92311a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
92485a2146cSSanjay Pateldefine <4 x float> @replace_zero_v4f32(<4 x float> %v, float %x) {
92585a2146cSSanjay Patel  %res = insertelement <4 x float> %v, float %x, i32 0
92611a332d0SThomas Lively  ret <4 x float> %res
92711a332d0SThomas Lively}
92811a332d0SThomas Lively
929a0d25815SThomas Lively; CHECK-LABEL: shuffle_v4f32:
930a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
93149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v4f32 (v128, v128) -> (v128){{$}}
932a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
933a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 20, 21, 22, 23, 8, 9, 10, 11, 28, 29, 30, 31{{$}}
93466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
935a0d25815SThomas Livelydefine <4 x float> @shuffle_v4f32(<4 x float> %x, <4 x float> %y) {
936a0d25815SThomas Lively  %res = shufflevector <4 x float> %x, <4 x float> %y,
937a0d25815SThomas Lively    <4 x i32> <i32 0, i32 5, i32 2, i32 7>
938a0d25815SThomas Lively  ret <4 x float> %res
939a0d25815SThomas Lively}
940a0d25815SThomas Lively
94111a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v4f32:
942a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
94349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v4f32 (v128, v128) -> (v128){{$}}
944a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0,
94511a332d0SThomas Lively; SIMD128-SAME: 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0{{$}}
94611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
94711a332d0SThomas Livelydefine <4 x float> @shuffle_undef_v4f32(<4 x float> %x, <4 x float> %y) {
94811a332d0SThomas Lively  %res = shufflevector <4 x float> %x, <4 x float> %y,
94911a332d0SThomas Lively    <4 x i32> <i32 1, i32 undef, i32 undef, i32 undef>
95011a332d0SThomas Lively  ret <4 x float> %res
95111a332d0SThomas Lively}
95211a332d0SThomas Lively
9532ee686daSThomas Lively; CHECK-LABEL: build_v4f32:
9542ee686daSThomas Lively; NO-SIMD128-NOT: f32x4
95549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v4f32 (f32, f32, f32, f32) -> (v128){{$}}
95666f3dc03SThomas Lively; SIMD128-NEXT: f32x4.splat $push[[L0:[0-9]+]]=, $0{{$}}
95766f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[L1:[0-9]+]]=, $pop[[L0]], 1, $1{{$}}
95866f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[L2:[0-9]+]]=, $pop[[L1]], 2, $2{{$}}
95966f3dc03SThomas Lively; SIMD128-NEXT: f32x4.replace_lane $push[[R:[0-9]+]]=, $pop[[L2]], 3, $3{{$}}
96066f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
9612ee686daSThomas Livelydefine <4 x float> @build_v4f32(float %x0, float %x1, float %x2, float %x3) {
9622ee686daSThomas Lively  %t0 = insertelement <4 x float> undef, float %x0, i32 0
9632ee686daSThomas Lively  %t1 = insertelement <4 x float> %t0, float %x1, i32 1
9642ee686daSThomas Lively  %t2 = insertelement <4 x float> %t1, float %x2, i32 2
9652ee686daSThomas Lively  %res = insertelement <4 x float> %t2, float %x3, i32 3
9662ee686daSThomas Lively  ret <4 x float> %res
9672ee686daSThomas Lively}
9682ee686daSThomas Lively
969a0fd9c3eSHeejin Ahn; ==============================================================================
970a0fd9c3eSHeejin Ahn; 2 x f64
971a0fd9c3eSHeejin Ahn; ==============================================================================
97222442924SThomas Lively; CHECK-LABEL: const_v2f64:
97322442924SThomas Lively; NO-SIMD128-NOT: f64x2
97449482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype const_v2f64 () -> (v128){{$}}
97566f3dc03SThomas Lively; SIMD128-NEXT: v128.const $push[[R:[0-9]+]]=, 0x1.60504030201p-911, 0x1.e0d0c0b0a0908p-783{{$}}
97666f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
97722442924SThomas Livelydefine <2 x double> @const_v2f64() {
97822442924SThomas Lively  ret <2 x double> <double 0x0706050403020100, double 0x0F0E0D0C0B0A0908>
97922442924SThomas Lively}
98022442924SThomas Lively
9814ec8bca1SDerek Schuff; CHECK-LABEL: splat_v2f64:
9824ec8bca1SDerek Schuff; NO-SIMD128-NOT: f64x2
98349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype splat_v2f64 (f64) -> (v128){{$}}
98466f3dc03SThomas Lively; SIMD128-NEXT: f64x2.splat $push[[R:[0-9]+]]=, $0{{$}}
98566f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
9864ec8bca1SDerek Schuffdefine <2 x double> @splat_v2f64(double %x) {
9874ec8bca1SDerek Schuff  %t1 = insertelement <2 x double> zeroinitializer, double %x, i3 0
9884ec8bca1SDerek Schuff  %res = insertelement <2 x double> %t1, double %x, i32 1
9894ec8bca1SDerek Schuff  ret <2 x double> %res
9904ec8bca1SDerek Schuff}
9914ec8bca1SDerek Schuff
992da26b84bSThomas Lively; CHECK-LABEL: const_splat_v2f64:
993b59c6fcaSThomas Lively; SIMD128: v128.const $push0=, 0x1.5p5, 0x1.5p5{{$}}
994da26b84bSThomas Livelydefine <2 x double> @const_splat_v2f64() {
995da26b84bSThomas Lively  ret <2 x double> <double 42., double 42.>
996da26b84bSThomas Lively}
997da26b84bSThomas Lively
998c15a8784SHeejin Ahn; CHECK-LABEL: extract_v2f64:
999a0fd9c3eSHeejin Ahn; NO-SIMD128-NOT: f64x2
100049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_v2f64 (v128) -> (f64){{$}}
100166f3dc03SThomas Lively; SIMD128-NEXT: f64x2.extract_lane $push[[R:[0-9]+]]=, $0, 1{{$}}
100266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
1003a0fd9c3eSHeejin Ahndefine double @extract_v2f64(<2 x double> %v) {
1004a0fd9c3eSHeejin Ahn  %elem = extractelement <2 x double> %v, i32 1
1005a0fd9c3eSHeejin Ahn  ret double %elem
1006a0fd9c3eSHeejin Ahn}
100782812fb9SDerek Schuff
1008fb84fd7cSThomas Lively; CHECK-LABEL: extract_var_v2f64:
1009fb84fd7cSThomas Lively; NO-SIMD128-NOT: i62x2
101049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype extract_var_v2f64 (v128, i32) -> (f64){{$}}
1011275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
1012fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
1013fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
10146a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $2=, $pop[[L2]]{{$}}
1015fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
1016fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}}
1017fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}}
1018fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}}
1019fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
1020fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $2, $pop[[L7]]{{$}}
1021fb84fd7cSThomas Lively; SIMD128-NEXT: f64.load $push[[R:[0-9]+]]=, 0($pop[[L2]]){{$}}
1022fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
1023fb84fd7cSThomas Livelydefine double @extract_var_v2f64(<2 x double> %v, i32 %i) {
1024fb84fd7cSThomas Lively  %elem = extractelement <2 x double> %v, i32 %i
1025fb84fd7cSThomas Lively  ret double %elem
1026fb84fd7cSThomas Lively}
1027fb84fd7cSThomas Lively
10284c476176SSanjay Patel; CHECK-LABEL: extract_zero_v2f64:
102911a332d0SThomas Lively; NO-SIMD128-NOT: f64x2
10304c476176SSanjay Patel; SIMD128-NEXT: .functype extract_zero_v2f64 (v128) -> (f64){{$}}
103111a332d0SThomas Lively; SIMD128-NEXT: f64x2.extract_lane $push[[R:[0-9]+]]=, $0, 0{{$}}
103211a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
10334c476176SSanjay Pateldefine double @extract_zero_v2f64(<2 x double> %v) {
10344c476176SSanjay Patel  %elem = extractelement <2 x double> %v, i32 0
103511a332d0SThomas Lively  ret double %elem
103611a332d0SThomas Lively}
103711a332d0SThomas Lively
103882812fb9SDerek Schuff; CHECK-LABEL: replace_v2f64:
103982812fb9SDerek Schuff; NO-SIMD128-NOT: f64x2
104049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_v2f64 (v128, f64) -> (v128){{$}}
104166f3dc03SThomas Lively; SIMD128-NEXT: f64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
104266f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
104382812fb9SDerek Schuffdefine <2 x double> @replace_v2f64(<2 x double> %v, double %x) {
104482812fb9SDerek Schuff  %res = insertelement <2 x double> %v, double %x, i32 0
104582812fb9SDerek Schuff  ret <2 x double> %res
104682812fb9SDerek Schuff}
10472ee686daSThomas Lively
1048fb84fd7cSThomas Lively; CHECK-LABEL: replace_var_v2f64:
1049fb84fd7cSThomas Lively; NO-SIMD128-NOT: f64x2
105049482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype replace_var_v2f64 (v128, i32, f64) -> (v128){{$}}
1051275d15ecSSam Clegg; SIMD128-NEXT: global.get $push[[L0:[0-9]+]]=, __stack_pointer{{$}}
1052fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L1:[0-9]+]]=, 16{{$}}
1053fb84fd7cSThomas Lively; SIMD128-NEXT: i32.sub $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]]{{$}}
10546a87ddacSThomas Lively; SIMD128-NEXT: local.tee $push[[L3:[0-9]+]]=, $3=, $pop[[L2]]{{$}}
1055fb84fd7cSThomas Lively; SIMD128-NEXT: v128.store 0($pop[[L3]]), $0{{$}}
1056fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L2:[0-9]+]]=, 1{{$}}
1057fb84fd7cSThomas Lively; SIMD128-NEXT: i32.and $push[[L5:[0-9]+]]=, $1, $pop[[L2]]{{$}}
1058fb84fd7cSThomas Lively; SIMD128-NEXT: i32.const $push[[L6:[0-9]+]]=, 3{{$}}
1059fb84fd7cSThomas Lively; SIMD128-NEXT: i32.shl $push[[L7:[0-9]+]]=, $pop[[L5]], $pop[[L6]]{{$}}
1060fb84fd7cSThomas Lively; SIMD128-NEXT: i32.or $push[[L2:[0-9]+]]=, $3, $pop[[L7]]{{$}}
1061fb84fd7cSThomas Lively; SIMD128-NEXT: f64.store 0($pop[[L2]]), $2{{$}}
1062fb84fd7cSThomas Lively; SIMD128-NEXT: v128.load $push[[R:[0-9]+]]=, 0($3){{$}}
1063fb84fd7cSThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
1064fb84fd7cSThomas Livelydefine <2 x double> @replace_var_v2f64(<2 x double> %v, i32 %i, double %x) {
1065fb84fd7cSThomas Lively  %res = insertelement <2 x double> %v, double %x, i32 %i
1066fb84fd7cSThomas Lively  ret <2 x double> %res
1067fb84fd7cSThomas Lively}
1068fb84fd7cSThomas Lively
106985a2146cSSanjay Patel; CHECK-LABEL: replace_zero_v2f64:
107011a332d0SThomas Lively; NO-SIMD128-NOT: f64x2
107185a2146cSSanjay Patel; SIMD128-NEXT: .functype replace_zero_v2f64 (v128, f64) -> (v128){{$}}
107211a332d0SThomas Lively; SIMD128-NEXT: f64x2.replace_lane $push[[R:[0-9]+]]=, $0, 0, $1{{$}}
107311a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
107485a2146cSSanjay Pateldefine <2 x double> @replace_zero_v2f64(<2 x double> %v, double %x) {
107585a2146cSSanjay Patel  %res = insertelement <2 x double> %v, double %x, i32 0
107611a332d0SThomas Lively  ret <2 x double> %res
107711a332d0SThomas Lively}
107811a332d0SThomas Lively
1079a0d25815SThomas Lively; CHECK-LABEL: shuffle_v2f64:
1080a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
108149482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_v2f64 (v128, v128) -> (v128){{$}}
1082a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
1083a3937b23SThomas Lively; SIMD128-SAME: 0, 1, 2, 3, 4, 5, 6, 7, 24, 25, 26, 27, 28, 29, 30, 31{{$}}
108466f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
1085a0d25815SThomas Livelydefine <2 x double> @shuffle_v2f64(<2 x double> %x, <2 x double> %y) {
1086a0d25815SThomas Lively  %res = shufflevector <2 x double> %x, <2 x double> %y,
1087a0d25815SThomas Lively    <2 x i32> <i32 0, i32 3>
1088a0d25815SThomas Lively  ret <2 x double> %res
1089a0d25815SThomas Lively}
1090a0d25815SThomas Lively
109111a332d0SThomas Lively; CHECK-LABEL: shuffle_undef_v2f64:
1092a781a706SThomas Lively; NO-SIMD128-NOT: i8x16
109349482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype shuffle_undef_v2f64 (v128, v128) -> (v128){{$}}
1094a781a706SThomas Lively; SIMD128-NEXT: i8x16.shuffle $push[[R:[0-9]+]]=, $0, $0,
109511a332d0SThomas Lively; SIMD128-SAME: 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0{{$}}
109611a332d0SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
109711a332d0SThomas Livelydefine <2 x double> @shuffle_undef_v2f64(<2 x double> %x, <2 x double> %y) {
109811a332d0SThomas Lively  %res = shufflevector <2 x double> %x, <2 x double> %y,
109911a332d0SThomas Lively    <2 x i32> <i32 1, i32 undef>
110011a332d0SThomas Lively  ret <2 x double> %res
110111a332d0SThomas Lively}
110211a332d0SThomas Lively
11032ee686daSThomas Lively; CHECK-LABEL: build_v2f64:
11042ee686daSThomas Lively; NO-SIMD128-NOT: f64x2
110549482f82SWouter van Oortmerssen; SIMD128-NEXT: .functype build_v2f64 (f64, f64) -> (v128){{$}}
110666f3dc03SThomas Lively; SIMD128-NEXT: f64x2.splat $push[[L0:[0-9]+]]=, $0{{$}}
110766f3dc03SThomas Lively; SIMD128-NEXT: f64x2.replace_lane $push[[R:[0-9]+]]=, $pop[[L0]], 1, $1{{$}}
110866f3dc03SThomas Lively; SIMD128-NEXT: return $pop[[R]]{{$}}
11092ee686daSThomas Livelydefine <2 x double> @build_v2f64(double %x0, double %x1) {
11102ee686daSThomas Lively  %t0 = insertelement <2 x double> undef, double %x0, i32 0
11112ee686daSThomas Lively  %res = insertelement <2 x double> %t0, double %x1, i32 1
11122ee686daSThomas Lively  ret <2 x double> %res
11132ee686daSThomas Lively}
1114