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