164a39a1cSThomas Lively; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+unimplemented-simd128 | FileCheck %s
238c902bcSThomas Lively
338c902bcSThomas Lively; Test that vector selects of various varieties lower correctly to bitselects.
438c902bcSThomas Lively
538c902bcSThomas Livelytarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
638c902bcSThomas Livelytarget triple = "wasm32-unknown-unknown"
738c902bcSThomas Lively
838c902bcSThomas Lively; ==============================================================================
938c902bcSThomas Lively; 16 x i8
1038c902bcSThomas Lively; ==============================================================================
1138c902bcSThomas Lively; CHECK-LABEL: vselect_v16i8:
1249482f82SWouter van Oortmerssen; CHECK-NEXT: .functype vselect_v16i8 (v128, v128, v128) -> (v128){{$}}
1338c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 7{{$}}
1438c902bcSThomas Lively; CHECK-NEXT: i8x16.shl $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
1538c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 7{{$}}
1638c902bcSThomas Lively; CHECK-NEXT: i8x16.shr_s $push[[L3:[0-9]+]]=, $pop[[L1]], $pop[[L2]]{{$}}
1738c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
1838c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
1938c902bcSThomas Livelydefine <16 x i8> @vselect_v16i8(<16 x i1> %c, <16 x i8> %x, <16 x i8> %y) {
2038c902bcSThomas Lively  %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
2138c902bcSThomas Lively  ret <16 x i8> %res
2238c902bcSThomas Lively}
2338c902bcSThomas Lively
24*f0f97876SThomas Lively; CHECK-LABEL: vselect_cmp_v16i8:
25*f0f97876SThomas Lively; CHECK-NEXT: .functype vselect_cmp_v16i8 (v128, v128, v128, v128) -> (v128){{$}}
26*f0f97876SThomas Lively; CHECK-NEXT: i8x16.lt_s $push[[L0:[0-9]+]]=, $0, $1{{$}}
27*f0f97876SThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $2, $3, $pop[[L0]]{{$}}
28*f0f97876SThomas Lively; CHECK-NEXT: return  $pop[[R]]{{$}}
29*f0f97876SThomas Livelydefine <16 x i8> @vselect_cmp_v16i8(<16 x i8> %a, <16 x i8> %b,
30*f0f97876SThomas Lively                                    <16 x i8> %x, <16 x i8> %y) {
31*f0f97876SThomas Lively  %c = icmp slt <16 x i8> %a, %b
32*f0f97876SThomas Lively  %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y
33*f0f97876SThomas Lively  ret <16 x i8> %res
34*f0f97876SThomas Lively}
35*f0f97876SThomas Lively
3638c902bcSThomas Lively; CHECK-LABEL: select_v16i8:
3749482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_v16i8 (i32, v128, v128) -> (v128){{$}}
3838c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
3938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
4038c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
4138c902bcSThomas Lively; CHECK-NEXT: i8x16.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
4238c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
4338c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
44e661f946SNikita Popovdefine <16 x i8> @select_v16i8(i1 zeroext %c, <16 x i8> %x, <16 x i8> %y) {
4538c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
4638c902bcSThomas Lively  ret <16 x i8> %res
4738c902bcSThomas Lively}
4838c902bcSThomas Lively
4938c902bcSThomas Lively; CHECK-LABEL: select_cmp_v16i8:
5049482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_cmp_v16i8 (i32, v128, v128) -> (v128){{$}}
5138c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 31
5238c902bcSThomas Lively; CHECK-NEXT: i32.shr_s $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
5338c902bcSThomas Lively; CHECK-NEXT: i8x16.splat $push[[L2:[0-9]+]]=, $pop[[L1]]{{$}}
5438c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L2]]{{$}}
5538c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
5638c902bcSThomas Livelydefine <16 x i8> @select_cmp_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {
5738c902bcSThomas Lively  %c = icmp slt i32 %i, 0
5838c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
5938c902bcSThomas Lively  ret <16 x i8> %res
6038c902bcSThomas Lively}
6138c902bcSThomas Lively
6238c902bcSThomas Lively; CHECK-LABEL: select_ne_v16i8:
6349482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_ne_v16i8 (i32, v128, v128) -> (v128){{$}}
6438c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
6538c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
6638c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
6738c902bcSThomas Lively; CHECK-NEXT: i8x16.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
6838c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
6938c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
7038c902bcSThomas Livelydefine <16 x i8> @select_ne_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {
7138c902bcSThomas Lively  %c = icmp ne i32 %i, 0
7238c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
7338c902bcSThomas Lively  ret <16 x i8> %res
7438c902bcSThomas Lively}
7538c902bcSThomas Lively
7638c902bcSThomas Lively; CHECK-LABEL: select_eq_v16i8:
7749482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_eq_v16i8 (i32, v128, v128) -> (v128){{$}}
7838c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 0{{$}}
7938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, -1{{$}}
8038c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
8138c902bcSThomas Lively; CHECK-NEXT: i8x16.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
8238c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
8338c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
8438c902bcSThomas Livelydefine <16 x i8> @select_eq_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) {
8538c902bcSThomas Lively  %c = icmp eq i32 %i, 0
8638c902bcSThomas Lively  %res = select i1 %c, <16 x i8> %x, <16 x i8> %y
8738c902bcSThomas Lively  ret <16 x i8> %res
8838c902bcSThomas Lively}
8938c902bcSThomas Lively
9038c902bcSThomas Lively; ==============================================================================
9138c902bcSThomas Lively; 8 x i16
9238c902bcSThomas Lively; ==============================================================================
9338c902bcSThomas Lively; CHECK-LABEL: vselect_v8i16:
9449482f82SWouter van Oortmerssen; CHECK-NEXT: .functype vselect_v8i16 (v128, v128, v128) -> (v128){{$}}
9538c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 15{{$}}
9638c902bcSThomas Lively; CHECK-NEXT: i16x8.shl $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
9738c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 15{{$}}
9838c902bcSThomas Lively; CHECK-NEXT: i16x8.shr_s $push[[L3:[0-9]+]]=, $pop[[L1]], $pop[[L2]]{{$}}
9938c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
10038c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
10138c902bcSThomas Livelydefine <8 x i16> @vselect_v8i16(<8 x i1> %c, <8 x i16> %x, <8 x i16> %y) {
10238c902bcSThomas Lively  %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
10338c902bcSThomas Lively  ret <8 x i16> %res
10438c902bcSThomas Lively}
10538c902bcSThomas Lively
106*f0f97876SThomas Lively; CHECK-LABEL: vselect_cmp_v8i16:
107*f0f97876SThomas Lively; CHECK-NEXT: .functype vselect_cmp_v8i16 (v128, v128, v128, v128) -> (v128){{$}}
108*f0f97876SThomas Lively; CHECK-NEXT: i16x8.lt_s $push[[L0:[0-9]+]]=, $0, $1{{$}}
109*f0f97876SThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $2, $3, $pop[[L0]]{{$}}
110*f0f97876SThomas Lively; CHECK-NEXT: return  $pop[[R]]{{$}}
111*f0f97876SThomas Livelydefine <8 x i16> @vselect_cmp_v8i16(<8 x i16> %a, <8 x i16> %b,
112*f0f97876SThomas Lively                                           <8 x i16> %x, <8 x i16> %y) {
113*f0f97876SThomas Lively  %c = icmp slt <8 x i16> %a, %b
114*f0f97876SThomas Lively  %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y
115*f0f97876SThomas Lively  ret <8 x i16> %res
116*f0f97876SThomas Lively}
117*f0f97876SThomas Lively
11838c902bcSThomas Lively; CHECK-LABEL: select_v8i16:
11949482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_v8i16 (i32, v128, v128) -> (v128){{$}}
12038c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
12138c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
12238c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
12338c902bcSThomas Lively; CHECK-NEXT: i16x8.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
12438c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
12538c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
126e661f946SNikita Popovdefine <8 x i16> @select_v8i16(i1 zeroext %c, <8 x i16> %x, <8 x i16> %y) {
12738c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
12838c902bcSThomas Lively  ret <8 x i16> %res
12938c902bcSThomas Lively}
13038c902bcSThomas Lively
13138c902bcSThomas Lively; CHECK-LABEL: select_cmp_v8i16:
13249482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_cmp_v8i16 (i32, v128, v128) -> (v128){{$}}
13338c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 31{{$}}
13438c902bcSThomas Lively; CHECK-NEXT: i32.shr_s $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
13538c902bcSThomas Lively; CHECK-NEXT: i16x8.splat $push[[L2:[0-9]+]]=, $pop[[L1]]{{$}}
13638c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L2]]{{$}}
13738c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
13838c902bcSThomas Livelydefine <8 x i16> @select_cmp_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {
13938c902bcSThomas Lively  %c = icmp slt i32 %i, 0
14038c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
14138c902bcSThomas Lively  ret <8 x i16> %res
14238c902bcSThomas Lively}
14338c902bcSThomas Lively
14438c902bcSThomas Lively; CHECK-LABEL: select_ne_v8i16:
14549482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_ne_v8i16 (i32, v128, v128) -> (v128){{$}}
14638c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
14738c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
14838c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
14938c902bcSThomas Lively; CHECK-NEXT: i16x8.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
15038c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
15138c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
15238c902bcSThomas Livelydefine <8 x i16> @select_ne_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {
15338c902bcSThomas Lively  %c = icmp ne i32 %i, 0
15438c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
15538c902bcSThomas Lively  ret <8 x i16> %res
15638c902bcSThomas Lively}
15738c902bcSThomas Lively
15838c902bcSThomas Lively; CHECK-LABEL: select_eq_v8i16:
15949482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_eq_v8i16 (i32, v128, v128) -> (v128){{$}}
16038c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 0{{$}}
16138c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, -1{{$}}
16238c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
16338c902bcSThomas Lively; CHECK-NEXT: i16x8.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
16438c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
16538c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
16638c902bcSThomas Livelydefine <8 x i16> @select_eq_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) {
16738c902bcSThomas Lively  %c = icmp eq i32 %i, 0
16838c902bcSThomas Lively  %res = select i1 %c, <8 x i16> %x, <8 x i16> %y
16938c902bcSThomas Lively  ret <8 x i16> %res
17038c902bcSThomas Lively}
17138c902bcSThomas Lively
17238c902bcSThomas Lively; ==============================================================================
17338c902bcSThomas Lively; 4 x i32
17438c902bcSThomas Lively; ==============================================================================
17538c902bcSThomas Lively; CHECK-LABEL: vselect_v4i32:
17649482f82SWouter van Oortmerssen; CHECK-NEXT: .functype vselect_v4i32 (v128, v128, v128) -> (v128){{$}}
17738c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 31{{$}}
17838c902bcSThomas Lively; CHECK-NEXT: i32x4.shl $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
17938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 31{{$}}
18038c902bcSThomas Lively; CHECK-NEXT: i32x4.shr_s $push[[L3:[0-9]+]]=, $pop[[L1]], $pop[[L2]]{{$}}
18138c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
18238c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
18338c902bcSThomas Livelydefine <4 x i32> @vselect_v4i32(<4 x i1> %c, <4 x i32> %x, <4 x i32> %y) {
18438c902bcSThomas Lively  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
18538c902bcSThomas Lively  ret <4 x i32> %res
18638c902bcSThomas Lively}
18738c902bcSThomas Lively
188*f0f97876SThomas Lively; CHECK-LABEL: vselect_cmp_v4i32:
189*f0f97876SThomas Lively; CHECK-NEXT: .functype vselect_cmp_v4i32 (v128, v128, v128, v128) -> (v128){{$}}
190*f0f97876SThomas Lively; CHECK-NEXT: i32x4.lt_s $push[[L0:[0-9]+]]=, $0, $1{{$}}
191*f0f97876SThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $2, $3, $pop[[L0]]{{$}}
192*f0f97876SThomas Lively; CHECK-NEXT: return  $pop[[R]]{{$}}
193*f0f97876SThomas Livelydefine <4 x i32> @vselect_cmp_v4i32(<4 x i32> %a, <4 x i32> %b,
194*f0f97876SThomas Lively                                    <4 x i32> %x, <4 x i32> %y) {
195*f0f97876SThomas Lively  %c = icmp slt <4 x i32> %a, %b
196*f0f97876SThomas Lively  %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y
197*f0f97876SThomas Lively  ret <4 x i32> %res
198*f0f97876SThomas Lively}
19938c902bcSThomas Lively
20038c902bcSThomas Lively; CHECK-LABEL: select_v4i32:
20149482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_v4i32 (i32, v128, v128) -> (v128){{$}}
20238c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
20338c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
20438c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
20538c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
20638c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
20738c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
208e661f946SNikita Popovdefine <4 x i32> @select_v4i32(i1 zeroext %c, <4 x i32> %x, <4 x i32> %y) {
20938c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
21038c902bcSThomas Lively  ret <4 x i32> %res
21138c902bcSThomas Lively}
21238c902bcSThomas Lively
21338c902bcSThomas Lively; CHECK-LABEL: select_cmp_v4i32:
21449482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_cmp_v4i32 (i32, v128, v128) -> (v128){{$}}
21538c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 31{{$}}
21638c902bcSThomas Lively; CHECK-NEXT: i32.shr_s $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
21738c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L2:[0-9]+]]=, $pop[[L1]]{{$}}
21838c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L2]]{{$}}
21938c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
22038c902bcSThomas Livelydefine <4 x i32> @select_cmp_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {
22138c902bcSThomas Lively  %c = icmp slt i32 %i, 0
22238c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
22338c902bcSThomas Lively  ret <4 x i32> %res
22438c902bcSThomas Lively}
22538c902bcSThomas Lively
22638c902bcSThomas Lively; CHECK-LABEL: select_ne_v4i32:
22749482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_ne_v4i32 (i32, v128, v128) -> (v128){{$}}
22838c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
22938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
23038c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
23138c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
23238c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
23338c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
23438c902bcSThomas Livelydefine <4 x i32> @select_ne_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {
23538c902bcSThomas Lively  %c = icmp ne i32 %i, 0
23638c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
23738c902bcSThomas Lively  ret <4 x i32> %res
23838c902bcSThomas Lively}
23938c902bcSThomas Lively
24038c902bcSThomas Lively; CHECK-LABEL: select_eq_v4i32:
24149482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_eq_v4i32 (i32, v128, v128) -> (v128){{$}}
24238c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 0{{$}}
24338c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, -1{{$}}
24438c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
24538c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
24638c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
24738c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
24838c902bcSThomas Livelydefine <4 x i32> @select_eq_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) {
24938c902bcSThomas Lively  %c = icmp eq i32 %i, 0
25038c902bcSThomas Lively  %res = select i1 %c, <4 x i32> %x, <4 x i32> %y
25138c902bcSThomas Lively  ret <4 x i32> %res
25238c902bcSThomas Lively}
25338c902bcSThomas Lively
25438c902bcSThomas Lively; ==============================================================================
25538c902bcSThomas Lively; 2 x i64
25638c902bcSThomas Lively; ==============================================================================
25738c902bcSThomas Lively; CHECK-LABEL: vselect_v2i64:
25849482f82SWouter van Oortmerssen; CHECK-NEXT: .functype vselect_v2i64 (v128, v128, v128) -> (v128){{$}}
25938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 63{{$}}
26038c902bcSThomas Lively; CHECK-NEXT: i64x2.shl $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
26138c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 63{{$}}
26238c902bcSThomas Lively; CHECK-NEXT: i64x2.shr_s $push[[L3:[0-9]+]]=, $pop[[L1]], $pop[[L2]]{{$}}
26338c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
26438c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
26538c902bcSThomas Livelydefine <2 x i64> @vselect_v2i64(<2 x i1> %c, <2 x i64> %x, <2 x i64> %y) {
26638c902bcSThomas Lively  %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y
26738c902bcSThomas Lively  ret <2 x i64> %res
26838c902bcSThomas Lively}
26938c902bcSThomas Lively
270*f0f97876SThomas Lively; CHECK-LABEL: vselect_cmp_v2i64:
271*f0f97876SThomas Lively; CHECK-NEXT: .functype vselect_cmp_v2i64 (v128, v128, v128, v128) -> (v128){{$}}
272*f0f97876SThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, -1{{$}}
273*f0f97876SThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, 0{{$}}
274*f0f97876SThomas Lively; CHECK-NEXT: i64x2.extract_lane $push[[L2:[0-9]+]]=, $0, 0{{$}}
275*f0f97876SThomas Lively; CHECK-NEXT: i64x2.extract_lane $push[[L3:[0-9]+]]=, $1, 0{{$}}
276*f0f97876SThomas Lively; CHECK-NEXT: i64.lt_s $push[[L4:[0-9]+]]=, $pop[[L2]], $pop[[L3]]{{$}}
277*f0f97876SThomas Lively; CHECK-NEXT: i64.select $push[[L5:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $pop[[L4]]{{$}}
278*f0f97876SThomas Lively; CHECK-NEXT: i64x2.splat $push[[L6:[0-9]+]]=, $pop[[L5]]{{$}}
279*f0f97876SThomas Lively; CHECK-NEXT: i64.const $push[[L7:[0-9]+]]=, -1{{$}}
280*f0f97876SThomas Lively; CHECK-NEXT: i64.const $push[[L8:[0-9]+]]=, 0{{$}}
281*f0f97876SThomas Lively; CHECK-NEXT: i64x2.extract_lane $push[[L9:[0-9]+]]=, $0, 1{{$}}
282*f0f97876SThomas Lively; CHECK-NEXT: i64x2.extract_lane $push[[L10:[0-9]+]]=, $1, 1{{$}}
283*f0f97876SThomas Lively; CHECK-NEXT: i64.lt_s $push[[L11:[0-9]+]]=, $pop[[L9]], $pop[[L10]]{{$}}
284*f0f97876SThomas Lively; CHECK-NEXT: i64.select $push[[L12:[0-9]+]]=, $pop[[L7]], $pop[[L8]], $pop[[L11]]{{$}}
285*f0f97876SThomas Lively; CHECK-NEXT: i64x2.replace_lane $push[[L13:[0-9]+]]=, $pop[[L6]], 1, $pop[[L12]]{{$}}
286*f0f97876SThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $2, $3, $pop[[L13]]{{$}}
287*f0f97876SThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
288*f0f97876SThomas Livelydefine <2 x i64> @vselect_cmp_v2i64(<2 x i64> %a, <2 x i64> %b,
289*f0f97876SThomas Lively                                    <2 x i64> %x, <2 x i64> %y) {
290*f0f97876SThomas Lively  %c = icmp slt <2 x i64> %a, %b
291*f0f97876SThomas Lively  %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y
292*f0f97876SThomas Lively  ret <2 x i64> %res
293*f0f97876SThomas Lively}
294*f0f97876SThomas Lively
29538c902bcSThomas Lively; CHECK-LABEL: select_v2i64:
29649482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_v2i64 (i32, v128, v128) -> (v128){{$}}
29738c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, -1{{$}}
29838c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, 0{{$}}
29938c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
30038c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
30138c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
30238c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
303e661f946SNikita Popovdefine <2 x i64> @select_v2i64(i1 zeroext %c, <2 x i64> %x, <2 x i64> %y) {
30438c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
30538c902bcSThomas Lively  ret <2 x i64> %res
30638c902bcSThomas Lively}
30738c902bcSThomas Lively
30838c902bcSThomas Lively; CHECK-LABEL: select_cmp_v2i64:
30949482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_cmp_v2i64 (i32, v128, v128) -> (v128){{$}}
31038c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, -1{{$}}
31138c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, 0{{$}}
31238c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 0{{$}}
31338c902bcSThomas Lively; CHECK-NEXT: i32.lt_s $push[[L3:[0-9]+]]=, $0, $pop[[L2]]{{$}}
31438c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L4:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $pop[[L3]]{{$}}
31538c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L5:[0-9]+]]=, $pop[[L4]]{{$}}
31638c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L5]]{{$}}
31738c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
31838c902bcSThomas Livelydefine <2 x i64> @select_cmp_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {
31938c902bcSThomas Lively  %c = icmp slt i32 %i, 0
32038c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
32138c902bcSThomas Lively  ret <2 x i64> %res
32238c902bcSThomas Lively}
32338c902bcSThomas Lively
32438c902bcSThomas Lively; CHECK-LABEL: select_ne_v2i64:
32549482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_ne_v2i64 (i32, v128, v128) -> (v128){{$}}
32638c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, -1{{$}}
32738c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, 0{{$}}
32838c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
32938c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
33038c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
33138c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
33238c902bcSThomas Livelydefine <2 x i64> @select_ne_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {
33338c902bcSThomas Lively  %c = icmp ne i32 %i, 0
33438c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
33538c902bcSThomas Lively  ret <2 x i64> %res
33638c902bcSThomas Lively}
33738c902bcSThomas Lively
33838c902bcSThomas Lively; CHECK-LABEL: select_eq_v2i64:
33949482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_eq_v2i64 (i32, v128, v128) -> (v128){{$}}
34038c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, 0{{$}}
34138c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, -1{{$}}
34238c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
34338c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
34438c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
34538c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
34638c902bcSThomas Livelydefine <2 x i64> @select_eq_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) {
34738c902bcSThomas Lively  %c = icmp eq i32 %i, 0
34838c902bcSThomas Lively  %res = select i1 %c, <2 x i64> %x, <2 x i64> %y
34938c902bcSThomas Lively  ret <2 x i64> %res
35038c902bcSThomas Lively}
35138c902bcSThomas Lively
35238c902bcSThomas Lively; ==============================================================================
35338c902bcSThomas Lively; 4 x float
35438c902bcSThomas Lively; ==============================================================================
35538c902bcSThomas Lively; CHECK-LABEL: vselect_v4f32:
35649482f82SWouter van Oortmerssen; CHECK-NEXT: .functype vselect_v4f32 (v128, v128, v128) -> (v128){{$}}
35738c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 31{{$}}
35838c902bcSThomas Lively; CHECK-NEXT: i32x4.shl $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
35938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 31{{$}}
36038c902bcSThomas Lively; CHECK-NEXT: i32x4.shr_s $push[[L3:[0-9]+]]=, $pop[[L1]], $pop[[L2]]{{$}}
36138c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
36238c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
36338c902bcSThomas Livelydefine <4 x float> @vselect_v4f32(<4 x i1> %c, <4 x float> %x, <4 x float> %y) {
36438c902bcSThomas Lively  %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y
36538c902bcSThomas Lively  ret <4 x float> %res
36638c902bcSThomas Lively}
36738c902bcSThomas Lively
368*f0f97876SThomas Lively; CHECK-LABEL: vselect_cmp_v4f32:
369*f0f97876SThomas Lively; CHECK-NEXT: .functype vselect_cmp_v4f32 (v128, v128, v128, v128) -> (v128){{$}}
370*f0f97876SThomas Lively; CHECK-NEXT: f32x4.lt $push[[L0:[0-9]+]]=, $0, $1{{$}}
371*f0f97876SThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $2, $3, $pop[[L0]]{{$}}
372*f0f97876SThomas Lively; CHECK-NEXT: return  $pop[[R]]{{$}}
373*f0f97876SThomas Livelydefine <4 x float> @vselect_cmp_v4f32(<4 x float> %a, <4 x float> %b,
374*f0f97876SThomas Lively                                      <4 x float> %x, <4 x float> %y) {
375*f0f97876SThomas Lively  %c = fcmp olt <4 x float> %a, %b
376*f0f97876SThomas Lively  %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y
377*f0f97876SThomas Lively  ret <4 x float> %res
378*f0f97876SThomas Lively}
379*f0f97876SThomas Lively
38038c902bcSThomas Lively; CHECK-LABEL: select_v4f32:
38149482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_v4f32 (i32, v128, v128) -> (v128){{$}}
38238c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
38338c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
38438c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
38538c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
38638c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
38738c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
388e661f946SNikita Popovdefine <4 x float> @select_v4f32(i1 zeroext %c, <4 x float> %x, <4 x float> %y) {
38938c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
39038c902bcSThomas Lively  ret <4 x float> %res
39138c902bcSThomas Lively}
39238c902bcSThomas Lively
39338c902bcSThomas Lively; CHECK-LABEL: select_cmp_v4f32:
39449482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_cmp_v4f32 (i32, v128, v128) -> (v128){{$}}
39538c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 31{{$}}
39638c902bcSThomas Lively; CHECK-NEXT: i32.shr_s $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
39738c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L2:[0-9]+]]=, $pop[[L1]]{{$}}
39838c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L2]]{{$}}
39938c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
40038c902bcSThomas Livelydefine <4 x float> @select_cmp_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {
40138c902bcSThomas Lively  %c = icmp slt i32 %i, 0
40238c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
40338c902bcSThomas Lively  ret <4 x float> %res
40438c902bcSThomas Lively}
40538c902bcSThomas Lively
40638c902bcSThomas Lively; CHECK-LABEL: select_ne_v4f32:
40749482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_ne_v4f32 (i32, v128, v128) -> (v128){{$}}
40838c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, -1{{$}}
40938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, 0{{$}}
41038c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
41138c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
41238c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
41338c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
41438c902bcSThomas Livelydefine <4 x float> @select_ne_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {
41538c902bcSThomas Lively  %c = icmp ne i32 %i, 0
41638c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
41738c902bcSThomas Lively  ret <4 x float> %res
41838c902bcSThomas Lively}
41938c902bcSThomas Lively
42038c902bcSThomas Lively; CHECK-LABEL: select_eq_v4f32:
42149482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_eq_v4f32 (i32, v128, v128) -> (v128){{$}}
42238c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 0{{$}}
42338c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L1:[0-9]+]]=, -1{{$}}
42438c902bcSThomas Lively; CHECK-NEXT: i32.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
42538c902bcSThomas Lively; CHECK-NEXT: i32x4.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
42638c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
42738c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
42838c902bcSThomas Livelydefine <4 x float> @select_eq_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) {
42938c902bcSThomas Lively  %c = icmp eq i32 %i, 0
43038c902bcSThomas Lively  %res = select i1 %c, <4 x float> %x, <4 x float> %y
43138c902bcSThomas Lively  ret <4 x float> %res
43238c902bcSThomas Lively}
43338c902bcSThomas Lively
43438c902bcSThomas Lively; ==============================================================================
43538c902bcSThomas Lively; 2 x double
43638c902bcSThomas Lively; ==============================================================================
43738c902bcSThomas Lively; CHECK-LABEL: vselect_v2f64:
43849482f82SWouter van Oortmerssen; CHECK-NEXT: .functype vselect_v2f64 (v128, v128, v128) -> (v128){{$}}
43938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L0:[0-9]+]]=, 63{{$}}
44038c902bcSThomas Lively; CHECK-NEXT: i64x2.shl $push[[L1:[0-9]+]]=, $0, $pop[[L0]]{{$}}
44138c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 63{{$}}
44238c902bcSThomas Lively; CHECK-NEXT: i64x2.shr_s $push[[L3:[0-9]+]]=, $pop[[L1]], $pop[[L2]]{{$}}
44338c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
44438c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
44538c902bcSThomas Livelydefine <2 x double> @vselect_v2f64(<2 x i1> %c, <2 x double> %x, <2 x double> %y) {
44638c902bcSThomas Lively  %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y
44738c902bcSThomas Lively  ret <2 x double> %res
44838c902bcSThomas Lively}
44938c902bcSThomas Lively
450*f0f97876SThomas Lively; CHECK-LABEL: vselect_cmp_v2f64:
451*f0f97876SThomas Lively; CHECK-NEXT: .functype vselect_cmp_v2f64 (v128, v128, v128, v128) -> (v128){{$}}
452*f0f97876SThomas Lively; CHECK-NEXT: f64x2.lt $push[[L0:[0-9]+]]=, $0, $1{{$}}
453*f0f97876SThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $2, $3, $pop[[L0]]{{$}}
454*f0f97876SThomas Lively; CHECK-NEXT: return  $pop[[R]]{{$}}
455*f0f97876SThomas Livelydefine <2 x double> @vselect_cmp_v2f64(<2 x double> %a, <2 x double> %b,
456*f0f97876SThomas Lively                                       <2 x double> %x, <2 x double> %y) {
457*f0f97876SThomas Lively  %c = fcmp olt <2 x double> %a, %b
458*f0f97876SThomas Lively  %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y
459*f0f97876SThomas Lively  ret <2 x double> %res
460*f0f97876SThomas Lively}
461*f0f97876SThomas Lively
46238c902bcSThomas Lively; CHECK-LABEL: select_v2f64:
46349482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_v2f64 (i32, v128, v128) -> (v128){{$}}
46438c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, -1{{$}}
46538c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, 0{{$}}
46638c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
46738c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
46838c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
46938c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
470e661f946SNikita Popovdefine <2 x double> @select_v2f64(i1 zeroext %c, <2 x double> %x, <2 x double> %y) {
47138c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
47238c902bcSThomas Lively  ret <2 x double> %res
47338c902bcSThomas Lively}
47438c902bcSThomas Lively
47538c902bcSThomas Lively; CHECK-LABEL: select_cmp_v2f64:
47649482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_cmp_v2f64 (i32, v128, v128) -> (v128){{$}}
47738c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, -1{{$}}
47838c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, 0{{$}}
47938c902bcSThomas Lively; CHECK-NEXT: i32.const $push[[L2:[0-9]+]]=, 0{{$}}
48038c902bcSThomas Lively; CHECK-NEXT: i32.lt_s $push[[L3:[0-9]+]]=, $0, $pop[[L2]]{{$}}
48138c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L4:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $pop[[L3]]{{$}}
48238c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L5:[0-9]+]]=, $pop[[L4]]{{$}}
48338c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L5]]{{$}}
48438c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
48538c902bcSThomas Livelydefine <2 x double> @select_cmp_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {
48638c902bcSThomas Lively  %c = icmp slt i32 %i, 0
48738c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
48838c902bcSThomas Lively  ret <2 x double> %res
48938c902bcSThomas Lively}
49038c902bcSThomas Lively
49138c902bcSThomas Lively; CHECK-LABEL: select_ne_v2f64:
49249482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_ne_v2f64 (i32, v128, v128) -> (v128){{$}}
49338c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, -1{{$}}
49438c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, 0{{$}}
49538c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
49638c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
49738c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
49838c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
49938c902bcSThomas Livelydefine <2 x double> @select_ne_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {
50038c902bcSThomas Lively  %c = icmp ne i32 %i, 0
50138c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
50238c902bcSThomas Lively  ret <2 x double> %res
50338c902bcSThomas Lively}
50438c902bcSThomas Lively
50538c902bcSThomas Lively; CHECK-LABEL: select_eq_v2f64:
50649482f82SWouter van Oortmerssen; CHECK-NEXT: .functype select_eq_v2f64 (i32, v128, v128) -> (v128){{$}}
50738c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L0:[0-9]+]]=, 0{{$}}
50838c902bcSThomas Lively; CHECK-NEXT: i64.const $push[[L1:[0-9]+]]=, -1{{$}}
50938c902bcSThomas Lively; CHECK-NEXT: i64.select $push[[L2:[0-9]+]]=, $pop[[L0]], $pop[[L1]], $0{{$}}
51038c902bcSThomas Lively; CHECK-NEXT: i64x2.splat $push[[L3:[0-9]+]]=, $pop[[L2]]{{$}}
51138c902bcSThomas Lively; CHECK-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $1, $2, $pop[[L3]]{{$}}
51238c902bcSThomas Lively; CHECK-NEXT: return $pop[[R]]{{$}}
51338c902bcSThomas Livelydefine <2 x double> @select_eq_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) {
51438c902bcSThomas Lively  %c = icmp eq i32 %i, 0
51538c902bcSThomas Lively  %res = select i1 %c, <2 x double> %x, <2 x double> %y
51638c902bcSThomas Lively  ret <2 x double> %res
51738c902bcSThomas Lively}
518