1f7868f87SThomas Lively; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
28638c897SThomas Lively; RUN: llc < %s -verify-machineinstrs -mattr=+simd128 | FileCheck %s
338c902bcSThomas Lively
4f7868f87SThomas Lively; Test that vector selects of various varieties lower correctly.
538c902bcSThomas Lively
638c902bcSThomas Livelytarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
738c902bcSThomas Livelytarget triple = "wasm32-unknown-unknown"
838c902bcSThomas Lively
938c902bcSThomas Lively; ==============================================================================
1038c902bcSThomas Lively; 16 x i8
1138c902bcSThomas Lively; ==============================================================================
1238c902bcSThomas Livelydefine <16 x i8> @vselect_v16i8(<16 x i1> %c, <16 x i8> %x, <16 x i8> %y) {
13f7868f87SThomas Lively; CHECK-LABEL: vselect_v16i8:
14f7868f87SThomas Lively; CHECK:         .functype vselect_v16i8 (v128, v128, v128) -> (v128)
15f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
16f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
17f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
18f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
19f7868f87SThomas Lively; CHECK-NEXT:    i32.const 7
20f7868f87SThomas Lively; CHECK-NEXT:    i8x16.shl
21f7868f87SThomas Lively; CHECK-NEXT:    i32.const 7
22f7868f87SThomas Lively; CHECK-NEXT:    i8x16.shr_s
23f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
24f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
2538c902bcSThomas Lively  %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
2638c902bcSThomas Lively  ret <16 x i8> %res
2738c902bcSThomas Lively}
2838c902bcSThomas Lively
29f0f97876SThomas Livelydefine <16 x i8> @vselect_cmp_v16i8(<16 x i8> %a, <16 x i8> %b,
30f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v16i8:
31f7868f87SThomas Lively; CHECK:         .functype vselect_cmp_v16i8 (v128, v128, v128, v128) -> (v128)
32f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
33f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
34f7868f87SThomas Lively; CHECK-NEXT:    local.get 3
35f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
36f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
37f7868f87SThomas Lively; CHECK-NEXT:    i8x16.lt_s
38f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
39f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
40f0f97876SThomas Lively                                    <16 x i8> %x, <16 x i8> %y) {
41f0f97876SThomas Lively  %c = icmp slt <16 x i8> %a, %b
42f0f97876SThomas Lively  %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
43f0f97876SThomas Lively  ret <16 x i8> %res
44f0f97876SThomas Lively}
45f0f97876SThomas Lively
46e661f946SNikita Popovdefine <16 x i8> @select_v16i8(i1 zeroext %c, <16 x i8> %x, <16 x i8> %y) {
47f7868f87SThomas Lively; CHECK-LABEL: select_v16i8:
48f7868f87SThomas Lively; CHECK:         .functype select_v16i8 (i32, v128, v128) -> (v128)
49f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
50f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
51f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
52f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
53ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
54f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
5538c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
5638c902bcSThomas Lively  ret <16 x i8> %res
5738c902bcSThomas Lively}
5838c902bcSThomas Lively
5938c902bcSThomas Livelydefine <16 x i8> @select_cmp_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {
60f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v16i8:
61f7868f87SThomas Lively; CHECK:         .functype select_cmp_v16i8 (i32, v128, v128) -> (v128)
62f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
63f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
64f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
65f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
66ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.const 0
67ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.lt_s
68ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
69f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
7038c902bcSThomas Lively  %c = icmp slt i32 %i, 0
7138c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
7238c902bcSThomas Lively  ret <16 x i8> %res
7338c902bcSThomas Lively}
7438c902bcSThomas Lively
7538c902bcSThomas Livelydefine <16 x i8> @select_ne_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {
76f7868f87SThomas Lively; CHECK-LABEL: select_ne_v16i8:
77f7868f87SThomas Lively; CHECK:         .functype select_ne_v16i8 (i32, v128, v128) -> (v128)
78f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
79f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
80f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
81f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
82ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
83f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
8438c902bcSThomas Lively  %c = icmp ne i32 %i, 0
8538c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
8638c902bcSThomas Lively  ret <16 x i8> %res
8738c902bcSThomas Lively}
8838c902bcSThomas Lively
8938c902bcSThomas Livelydefine <16 x i8> @select_eq_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {
90f7868f87SThomas Lively; CHECK-LABEL: select_eq_v16i8:
91f7868f87SThomas Lively; CHECK:         .functype select_eq_v16i8 (i32, v128, v128) -> (v128)
92f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
93f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
94ecb2e5bcSThomas Lively; CHECK-NEXT:    local.get 1
95f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
96ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
97f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
9838c902bcSThomas Lively  %c = icmp eq i32 %i, 0
9938c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
10038c902bcSThomas Lively  ret <16 x i8> %res
10138c902bcSThomas Lively}
10238c902bcSThomas Lively
10338c902bcSThomas Livelydefine <8 x i16> @vselect_v8i16(<8 x i1> %c, <8 x i16> %x, <8 x i16> %y) {
104f7868f87SThomas Lively; CHECK-LABEL: vselect_v8i16:
105f7868f87SThomas Lively; CHECK:         .functype vselect_v8i16 (v128, v128, v128) -> (v128)
106f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
107f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
108f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
109f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
110f7868f87SThomas Lively; CHECK-NEXT:    i32.const 15
111f7868f87SThomas Lively; CHECK-NEXT:    i16x8.shl
112f7868f87SThomas Lively; CHECK-NEXT:    i32.const 15
113f7868f87SThomas Lively; CHECK-NEXT:    i16x8.shr_s
114f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
115f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
11638c902bcSThomas Lively  %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
11738c902bcSThomas Lively  ret <8 x i16> %res
11838c902bcSThomas Lively}
11938c902bcSThomas Lively
120f0f97876SThomas Livelydefine <8 x i16> @vselect_cmp_v8i16(<8 x i16> %a, <8 x i16> %b,
121f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v8i16:
122f7868f87SThomas Lively; CHECK:         .functype vselect_cmp_v8i16 (v128, v128, v128, v128) -> (v128)
123f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
124f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
125f7868f87SThomas Lively; CHECK-NEXT:    local.get 3
126f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
127f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
128f7868f87SThomas Lively; CHECK-NEXT:    i16x8.lt_s
129f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
130f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
131f0f97876SThomas Lively                                           <8 x i16> %x, <8 x i16> %y) {
132f0f97876SThomas Lively  %c = icmp slt <8 x i16> %a, %b
133f0f97876SThomas Lively  %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
134f0f97876SThomas Lively  ret <8 x i16> %res
135f0f97876SThomas Lively}
136f0f97876SThomas Lively
137e661f946SNikita Popovdefine <8 x i16> @select_v8i16(i1 zeroext %c, <8 x i16> %x, <8 x i16> %y) {
138f7868f87SThomas Lively; CHECK-LABEL: select_v8i16:
139f7868f87SThomas Lively; CHECK:         .functype select_v8i16 (i32, v128, v128) -> (v128)
140f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
141f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
142f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
143f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
144ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
145f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
14638c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
14738c902bcSThomas Lively  ret <8 x i16> %res
14838c902bcSThomas Lively}
14938c902bcSThomas Lively
15038c902bcSThomas Livelydefine <8 x i16> @select_cmp_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {
151f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v8i16:
152f7868f87SThomas Lively; CHECK:         .functype select_cmp_v8i16 (i32, v128, v128) -> (v128)
153f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
154f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
155f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
156f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
157ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.const 0
158ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.lt_s
159ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
160f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
16138c902bcSThomas Lively  %c = icmp slt i32 %i, 0
16238c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
16338c902bcSThomas Lively  ret <8 x i16> %res
16438c902bcSThomas Lively}
16538c902bcSThomas Lively
16638c902bcSThomas Livelydefine <8 x i16> @select_ne_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {
167f7868f87SThomas Lively; CHECK-LABEL: select_ne_v8i16:
168f7868f87SThomas Lively; CHECK:         .functype select_ne_v8i16 (i32, v128, v128) -> (v128)
169f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
170f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
171f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
172f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
173ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
174f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
17538c902bcSThomas Lively  %c = icmp ne i32 %i, 0
17638c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
17738c902bcSThomas Lively  ret <8 x i16> %res
17838c902bcSThomas Lively}
17938c902bcSThomas Lively
18038c902bcSThomas Livelydefine <8 x i16> @select_eq_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {
181f7868f87SThomas Lively; CHECK-LABEL: select_eq_v8i16:
182f7868f87SThomas Lively; CHECK:         .functype select_eq_v8i16 (i32, v128, v128) -> (v128)
183f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
184f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
185ecb2e5bcSThomas Lively; CHECK-NEXT:    local.get 1
186f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
187ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
188f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
18938c902bcSThomas Lively  %c = icmp eq i32 %i, 0
19038c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
19138c902bcSThomas Lively  ret <8 x i16> %res
19238c902bcSThomas Lively}
19338c902bcSThomas Lively
19438c902bcSThomas Livelydefine <4 x i32> @vselect_v4i32(<4 x i1> %c, <4 x i32> %x, <4 x i32> %y) {
195f7868f87SThomas Lively; CHECK-LABEL: vselect_v4i32:
196f7868f87SThomas Lively; CHECK:         .functype vselect_v4i32 (v128, v128, v128) -> (v128)
197f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
198f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
199f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
200f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
201f7868f87SThomas Lively; CHECK-NEXT:    i32.const 31
202f7868f87SThomas Lively; CHECK-NEXT:    i32x4.shl
203f7868f87SThomas Lively; CHECK-NEXT:    i32.const 31
204f7868f87SThomas Lively; CHECK-NEXT:    i32x4.shr_s
205f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
206f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
20738c902bcSThomas Lively  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
20838c902bcSThomas Lively  ret <4 x i32> %res
20938c902bcSThomas Lively}
21038c902bcSThomas Lively
211f0f97876SThomas Livelydefine <4 x i32> @vselect_cmp_v4i32(<4 x i32> %a, <4 x i32> %b,
212f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v4i32:
213f7868f87SThomas Lively; CHECK:         .functype vselect_cmp_v4i32 (v128, v128, v128, v128) -> (v128)
214f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
215f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
216f7868f87SThomas Lively; CHECK-NEXT:    local.get 3
217f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
218f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
219f7868f87SThomas Lively; CHECK-NEXT:    i32x4.lt_s
220f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
221f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
222f0f97876SThomas Lively                                    <4 x i32> %x, <4 x i32> %y) {
223f0f97876SThomas Lively  %c = icmp slt <4 x i32> %a, %b
224f0f97876SThomas Lively  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
225f0f97876SThomas Lively  ret <4 x i32> %res
226f0f97876SThomas Lively}
22738c902bcSThomas Lively
228e661f946SNikita Popovdefine <4 x i32> @select_v4i32(i1 zeroext %c, <4 x i32> %x, <4 x i32> %y) {
229f7868f87SThomas Lively; CHECK-LABEL: select_v4i32:
230f7868f87SThomas Lively; CHECK:         .functype select_v4i32 (i32, v128, v128) -> (v128)
231f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
232f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
233f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
234f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
235ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
236f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
23738c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
23838c902bcSThomas Lively  ret <4 x i32> %res
23938c902bcSThomas Lively}
24038c902bcSThomas Lively
24138c902bcSThomas Livelydefine <4 x i32> @select_cmp_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {
242f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v4i32:
243f7868f87SThomas Lively; CHECK:         .functype select_cmp_v4i32 (i32, v128, v128) -> (v128)
244f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
245f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
246f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
247f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
248ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.const 0
249ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.lt_s
250ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
251f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
25238c902bcSThomas Lively  %c = icmp slt i32 %i, 0
25338c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
25438c902bcSThomas Lively  ret <4 x i32> %res
25538c902bcSThomas Lively}
25638c902bcSThomas Lively
25738c902bcSThomas Livelydefine <4 x i32> @select_ne_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {
258f7868f87SThomas Lively; CHECK-LABEL: select_ne_v4i32:
259f7868f87SThomas Lively; CHECK:         .functype select_ne_v4i32 (i32, v128, v128) -> (v128)
260f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
261f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
262f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
263f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
264ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
265f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
26638c902bcSThomas Lively  %c = icmp ne i32 %i, 0
26738c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
26838c902bcSThomas Lively  ret <4 x i32> %res
26938c902bcSThomas Lively}
27038c902bcSThomas Lively
27138c902bcSThomas Livelydefine <4 x i32> @select_eq_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {
272f7868f87SThomas Lively; CHECK-LABEL: select_eq_v4i32:
273f7868f87SThomas Lively; CHECK:         .functype select_eq_v4i32 (i32, v128, v128) -> (v128)
274f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
275f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
276ecb2e5bcSThomas Lively; CHECK-NEXT:    local.get 1
277f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
278ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
279f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
28038c902bcSThomas Lively  %c = icmp eq i32 %i, 0
28138c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
28238c902bcSThomas Lively  ret <4 x i32> %res
28338c902bcSThomas Lively}
28438c902bcSThomas Lively
28538c902bcSThomas Livelydefine <2 x i64> @vselect_v2i64(<2 x i1> %c, <2 x i64> %x, <2 x i64> %y) {
286f7868f87SThomas Lively; CHECK-LABEL: vselect_v2i64:
287f7868f87SThomas Lively; CHECK:         .functype vselect_v2i64 (v128, v128, v128) -> (v128)
288f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
289f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
290f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
291f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
292f7868f87SThomas Lively; CHECK-NEXT:    i32.const 63
293f7868f87SThomas Lively; CHECK-NEXT:    i64x2.shl
294f7868f87SThomas Lively; CHECK-NEXT:    i32.const 63
295f7868f87SThomas Lively; CHECK-NEXT:    i64x2.shr_s
296f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
297f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
29838c902bcSThomas Lively  %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y
29938c902bcSThomas Lively  ret <2 x i64> %res
30038c902bcSThomas Lively}
30138c902bcSThomas Lively
302*45783d0eSThomas Livelydefine <2 x i64> @vselect_cmp_v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %x, <2 x i64> %y) {
303f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v2i64:
304f7868f87SThomas Lively; CHECK:         .functype vselect_cmp_v2i64 (v128, v128, v128, v128) -> (v128)
305f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
306f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
307f7868f87SThomas Lively; CHECK-NEXT:    local.get 3
308f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
309f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
310*45783d0eSThomas Lively; CHECK-NEXT:    i64x2.lt_s
311f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
312f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
313f0f97876SThomas Lively  %c = icmp slt <2 x i64> %a, %b
314f0f97876SThomas Lively  %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y
315f0f97876SThomas Lively  ret <2 x i64> %res
316f0f97876SThomas Lively}
317f0f97876SThomas Lively
318e661f946SNikita Popovdefine <2 x i64> @select_v2i64(i1 zeroext %c, <2 x i64> %x, <2 x i64> %y) {
319f7868f87SThomas Lively; CHECK-LABEL: select_v2i64:
320f7868f87SThomas Lively; CHECK:         .functype select_v2i64 (i32, v128, v128) -> (v128)
321f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
322f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
323f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
324f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
325ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
326f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
32738c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
32838c902bcSThomas Lively  ret <2 x i64> %res
32938c902bcSThomas Lively}
33038c902bcSThomas Lively
33138c902bcSThomas Livelydefine <2 x i64> @select_cmp_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {
332f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v2i64:
333f7868f87SThomas Lively; CHECK:         .functype select_cmp_v2i64 (i32, v128, v128) -> (v128)
334f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
335f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
336f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
337f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
338f7868f87SThomas Lively; CHECK-NEXT:    i32.const 0
339f7868f87SThomas Lively; CHECK-NEXT:    i32.lt_s
340ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
341f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
34238c902bcSThomas Lively  %c = icmp slt i32 %i, 0
34338c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
34438c902bcSThomas Lively  ret <2 x i64> %res
34538c902bcSThomas Lively}
34638c902bcSThomas Lively
34738c902bcSThomas Livelydefine <2 x i64> @select_ne_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {
348f7868f87SThomas Lively; CHECK-LABEL: select_ne_v2i64:
349f7868f87SThomas Lively; CHECK:         .functype select_ne_v2i64 (i32, v128, v128) -> (v128)
350f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
351f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
352f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
353f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
354ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
355f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
35638c902bcSThomas Lively  %c = icmp ne i32 %i, 0
35738c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
35838c902bcSThomas Lively  ret <2 x i64> %res
35938c902bcSThomas Lively}
36038c902bcSThomas Lively
36138c902bcSThomas Livelydefine <2 x i64> @select_eq_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {
362f7868f87SThomas Lively; CHECK-LABEL: select_eq_v2i64:
363f7868f87SThomas Lively; CHECK:         .functype select_eq_v2i64 (i32, v128, v128) -> (v128)
364f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
365f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
366ecb2e5bcSThomas Lively; CHECK-NEXT:    local.get 1
367f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
368ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
369f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
37038c902bcSThomas Lively  %c = icmp eq i32 %i, 0
37138c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
37238c902bcSThomas Lively  ret <2 x i64> %res
37338c902bcSThomas Lively}
37438c902bcSThomas Lively
37538c902bcSThomas Livelydefine <4 x float> @vselect_v4f32(<4 x i1> %c, <4 x float> %x, <4 x float> %y) {
376f7868f87SThomas Lively; CHECK-LABEL: vselect_v4f32:
377f7868f87SThomas Lively; CHECK:         .functype vselect_v4f32 (v128, v128, v128) -> (v128)
378f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
379f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
380f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
381f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
382f7868f87SThomas Lively; CHECK-NEXT:    i32.const 31
383f7868f87SThomas Lively; CHECK-NEXT:    i32x4.shl
384f7868f87SThomas Lively; CHECK-NEXT:    i32.const 31
385f7868f87SThomas Lively; CHECK-NEXT:    i32x4.shr_s
386f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
387f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
38838c902bcSThomas Lively  %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y
38938c902bcSThomas Lively  ret <4 x float> %res
39038c902bcSThomas Lively}
39138c902bcSThomas Lively
392f0f97876SThomas Livelydefine <4 x float> @vselect_cmp_v4f32(<4 x float> %a, <4 x float> %b,
393f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v4f32:
394f7868f87SThomas Lively; CHECK:         .functype vselect_cmp_v4f32 (v128, v128, v128, v128) -> (v128)
395f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
396f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
397f7868f87SThomas Lively; CHECK-NEXT:    local.get 3
398f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
399f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
400f7868f87SThomas Lively; CHECK-NEXT:    f32x4.lt
401f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
402f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
403f0f97876SThomas Lively                                      <4 x float> %x, <4 x float> %y) {
404f0f97876SThomas Lively  %c = fcmp olt <4 x float> %a, %b
405f0f97876SThomas Lively  %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y
406f0f97876SThomas Lively  ret <4 x float> %res
407f0f97876SThomas Lively}
408f0f97876SThomas Lively
409e661f946SNikita Popovdefine <4 x float> @select_v4f32(i1 zeroext %c, <4 x float> %x, <4 x float> %y) {
410f7868f87SThomas Lively; CHECK-LABEL: select_v4f32:
411f7868f87SThomas Lively; CHECK:         .functype select_v4f32 (i32, v128, v128) -> (v128)
412f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
413f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
414f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
415f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
416ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
417f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
41838c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
41938c902bcSThomas Lively  ret <4 x float> %res
42038c902bcSThomas Lively}
42138c902bcSThomas Lively
42238c902bcSThomas Livelydefine <4 x float> @select_cmp_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {
423f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v4f32:
424f7868f87SThomas Lively; CHECK:         .functype select_cmp_v4f32 (i32, v128, v128) -> (v128)
425f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
426f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
427f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
428f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
429ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.const 0
430ecb2e5bcSThomas Lively; CHECK-NEXT:    i32.lt_s
431ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
432f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
43338c902bcSThomas Lively  %c = icmp slt i32 %i, 0
43438c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
43538c902bcSThomas Lively  ret <4 x float> %res
43638c902bcSThomas Lively}
43738c902bcSThomas Lively
43838c902bcSThomas Livelydefine <4 x float> @select_ne_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {
439f7868f87SThomas Lively; CHECK-LABEL: select_ne_v4f32:
440f7868f87SThomas Lively; CHECK:         .functype select_ne_v4f32 (i32, v128, v128) -> (v128)
441f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
442f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
443f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
444f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
445ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
446f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
44738c902bcSThomas Lively  %c = icmp ne i32 %i, 0
44838c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
44938c902bcSThomas Lively  ret <4 x float> %res
45038c902bcSThomas Lively}
45138c902bcSThomas Lively
45238c902bcSThomas Livelydefine <4 x float> @select_eq_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {
453f7868f87SThomas Lively; CHECK-LABEL: select_eq_v4f32:
454f7868f87SThomas Lively; CHECK:         .functype select_eq_v4f32 (i32, v128, v128) -> (v128)
455f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
456f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
457ecb2e5bcSThomas Lively; CHECK-NEXT:    local.get 1
458f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
459ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
460f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
46138c902bcSThomas Lively  %c = icmp eq i32 %i, 0
46238c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
46338c902bcSThomas Lively  ret <4 x float> %res
46438c902bcSThomas Lively}
46538c902bcSThomas Lively
46638c902bcSThomas Livelydefine <2 x double> @vselect_v2f64(<2 x i1> %c, <2 x double> %x, <2 x double> %y) {
467f7868f87SThomas Lively; CHECK-LABEL: vselect_v2f64:
468f7868f87SThomas Lively; CHECK:         .functype vselect_v2f64 (v128, v128, v128) -> (v128)
469f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
470f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
471f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
472f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
473f7868f87SThomas Lively; CHECK-NEXT:    i32.const 63
474f7868f87SThomas Lively; CHECK-NEXT:    i64x2.shl
475f7868f87SThomas Lively; CHECK-NEXT:    i32.const 63
476f7868f87SThomas Lively; CHECK-NEXT:    i64x2.shr_s
477f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
478f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
47938c902bcSThomas Lively  %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y
48038c902bcSThomas Lively  ret <2 x double> %res
48138c902bcSThomas Lively}
48238c902bcSThomas Lively
483f0f97876SThomas Livelydefine <2 x double> @vselect_cmp_v2f64(<2 x double> %a, <2 x double> %b,
484f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v2f64:
485f7868f87SThomas Lively; CHECK:         .functype vselect_cmp_v2f64 (v128, v128, v128, v128) -> (v128)
486f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
487f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
488f7868f87SThomas Lively; CHECK-NEXT:    local.get 3
489f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
490f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
491f7868f87SThomas Lively; CHECK-NEXT:    f64x2.lt
492f7868f87SThomas Lively; CHECK-NEXT:    v128.bitselect
493f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
494f0f97876SThomas Lively                                       <2 x double> %x, <2 x double> %y) {
495f0f97876SThomas Lively  %c = fcmp olt <2 x double> %a, %b
496f0f97876SThomas Lively  %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y
497f0f97876SThomas Lively  ret <2 x double> %res
498f0f97876SThomas Lively}
499f0f97876SThomas Lively
500e661f946SNikita Popovdefine <2 x double> @select_v2f64(i1 zeroext %c, <2 x double> %x, <2 x double> %y) {
501f7868f87SThomas Lively; CHECK-LABEL: select_v2f64:
502f7868f87SThomas Lively; CHECK:         .functype select_v2f64 (i32, v128, v128) -> (v128)
503f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
504f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
505f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
506f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
507ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
508f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
50938c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
51038c902bcSThomas Lively  ret <2 x double> %res
51138c902bcSThomas Lively}
51238c902bcSThomas Lively
51338c902bcSThomas Livelydefine <2 x double> @select_cmp_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {
514f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v2f64:
515f7868f87SThomas Lively; CHECK:         .functype select_cmp_v2f64 (i32, v128, v128) -> (v128)
516f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
517f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
518f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
519f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
520f7868f87SThomas Lively; CHECK-NEXT:    i32.const 0
521f7868f87SThomas Lively; CHECK-NEXT:    i32.lt_s
522ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
523f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
52438c902bcSThomas Lively  %c = icmp slt i32 %i, 0
52538c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
52638c902bcSThomas Lively  ret <2 x double> %res
52738c902bcSThomas Lively}
52838c902bcSThomas Lively
52938c902bcSThomas Livelydefine <2 x double> @select_ne_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {
530f7868f87SThomas Lively; CHECK-LABEL: select_ne_v2f64:
531f7868f87SThomas Lively; CHECK:         .functype select_ne_v2f64 (i32, v128, v128) -> (v128)
532f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
533f7868f87SThomas Lively; CHECK-NEXT:    local.get 1
534f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
535f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
536ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
537f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
53838c902bcSThomas Lively  %c = icmp ne i32 %i, 0
53938c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
54038c902bcSThomas Lively  ret <2 x double> %res
54138c902bcSThomas Lively}
54238c902bcSThomas Lively
54338c902bcSThomas Livelydefine <2 x double> @select_eq_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {
544f7868f87SThomas Lively; CHECK-LABEL: select_eq_v2f64:
545f7868f87SThomas Lively; CHECK:         .functype select_eq_v2f64 (i32, v128, v128) -> (v128)
546f7868f87SThomas Lively; CHECK-NEXT:  # %bb.0:
547f7868f87SThomas Lively; CHECK-NEXT:    local.get 2
548ecb2e5bcSThomas Lively; CHECK-NEXT:    local.get 1
549f7868f87SThomas Lively; CHECK-NEXT:    local.get 0
550ecb2e5bcSThomas Lively; CHECK-NEXT:    v128.select
551f7868f87SThomas Lively; CHECK-NEXT:    # fallthrough-return
55238c902bcSThomas Lively  %c = icmp eq i32 %i, 0
55338c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
55438c902bcSThomas Lively  ret <2 x double> %res
55538c902bcSThomas Lively}
556