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 triple = "wasm32-unknown-unknown" 738c902bcSThomas Lively 838c902bcSThomas Lively; ============================================================================== 938c902bcSThomas Lively; 16 x i8 1038c902bcSThomas Lively; ============================================================================== 1138c902bcSThomas Livelydefine <16 x i8> @vselect_v16i8(<16 x i1> %c, <16 x i8> %x, <16 x i8> %y) { 12f7868f87SThomas Lively; CHECK-LABEL: vselect_v16i8: 13f7868f87SThomas Lively; CHECK: .functype vselect_v16i8 (v128, v128, v128) -> (v128) 14f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 15f7868f87SThomas Lively; CHECK-NEXT: local.get 1 16f7868f87SThomas Lively; CHECK-NEXT: local.get 2 17f7868f87SThomas Lively; CHECK-NEXT: local.get 0 18f7868f87SThomas Lively; CHECK-NEXT: i32.const 7 19f7868f87SThomas Lively; CHECK-NEXT: i8x16.shl 20f7868f87SThomas Lively; CHECK-NEXT: i32.const 7 21f7868f87SThomas Lively; CHECK-NEXT: i8x16.shr_s 22f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 23f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 2438c902bcSThomas Lively %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y 2538c902bcSThomas Lively ret <16 x i8> %res 2638c902bcSThomas Lively} 2738c902bcSThomas Lively 28f0f97876SThomas Livelydefine <16 x i8> @vselect_cmp_v16i8(<16 x i8> %a, <16 x i8> %b, 29f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v16i8: 30f7868f87SThomas Lively; CHECK: .functype vselect_cmp_v16i8 (v128, v128, v128, v128) -> (v128) 31f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 32f7868f87SThomas Lively; CHECK-NEXT: local.get 2 33f7868f87SThomas Lively; CHECK-NEXT: local.get 3 34f7868f87SThomas Lively; CHECK-NEXT: local.get 0 35f7868f87SThomas Lively; CHECK-NEXT: local.get 1 36f7868f87SThomas Lively; CHECK-NEXT: i8x16.lt_s 37f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 38f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 39f0f97876SThomas Lively <16 x i8> %x, <16 x i8> %y) { 40f0f97876SThomas Lively %c = icmp slt <16 x i8> %a, %b 41f0f97876SThomas Lively %res = select <16 x i1> %c, <16 x i8> %x, <16 x i8> %y 42f0f97876SThomas Lively ret <16 x i8> %res 43f0f97876SThomas Lively} 44f0f97876SThomas Lively 45e661f946SNikita Popovdefine <16 x i8> @select_v16i8(i1 zeroext %c, <16 x i8> %x, <16 x i8> %y) { 46f7868f87SThomas Lively; CHECK-LABEL: select_v16i8: 47f7868f87SThomas Lively; CHECK: .functype select_v16i8 (i32, v128, v128) -> (v128) 48f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 49f7868f87SThomas Lively; CHECK-NEXT: local.get 1 50f7868f87SThomas Lively; CHECK-NEXT: local.get 2 51f7868f87SThomas Lively; CHECK-NEXT: local.get 0 52ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 53f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 5438c902bcSThomas Lively %res = select i1 %c, <16 x i8> %x, <16 x i8> %y 5538c902bcSThomas Lively ret <16 x i8> %res 5638c902bcSThomas Lively} 5738c902bcSThomas Lively 5838c902bcSThomas Livelydefine <16 x i8> @select_cmp_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) { 59f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v16i8: 60f7868f87SThomas Lively; CHECK: .functype select_cmp_v16i8 (i32, v128, v128) -> (v128) 61f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 62f7868f87SThomas Lively; CHECK-NEXT: local.get 1 63f7868f87SThomas Lively; CHECK-NEXT: local.get 2 64f7868f87SThomas Lively; CHECK-NEXT: local.get 0 65ecb2e5bcSThomas Lively; CHECK-NEXT: i32.const 0 66ecb2e5bcSThomas Lively; CHECK-NEXT: i32.lt_s 67ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 68f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 6938c902bcSThomas Lively %c = icmp slt i32 %i, 0 7038c902bcSThomas Lively %res = select i1 %c, <16 x i8> %x, <16 x i8> %y 7138c902bcSThomas Lively ret <16 x i8> %res 7238c902bcSThomas Lively} 7338c902bcSThomas Lively 7438c902bcSThomas Livelydefine <16 x i8> @select_ne_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) { 75f7868f87SThomas Lively; CHECK-LABEL: select_ne_v16i8: 76f7868f87SThomas Lively; CHECK: .functype select_ne_v16i8 (i32, v128, v128) -> (v128) 77f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 78f7868f87SThomas Lively; CHECK-NEXT: local.get 1 79f7868f87SThomas Lively; CHECK-NEXT: local.get 2 80f7868f87SThomas Lively; CHECK-NEXT: local.get 0 81ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 82f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 8338c902bcSThomas Lively %c = icmp ne i32 %i, 0 8438c902bcSThomas Lively %res = select i1 %c, <16 x i8> %x, <16 x i8> %y 8538c902bcSThomas Lively ret <16 x i8> %res 8638c902bcSThomas Lively} 8738c902bcSThomas Lively 8838c902bcSThomas Livelydefine <16 x i8> @select_eq_v16i8(i32 %i, <16 x i8> %x, <16 x i8> %y) { 89f7868f87SThomas Lively; CHECK-LABEL: select_eq_v16i8: 90f7868f87SThomas Lively; CHECK: .functype select_eq_v16i8 (i32, v128, v128) -> (v128) 91f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 92f7868f87SThomas Lively; CHECK-NEXT: local.get 2 93ecb2e5bcSThomas Lively; CHECK-NEXT: local.get 1 94f7868f87SThomas Lively; CHECK-NEXT: local.get 0 95ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 96f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 9738c902bcSThomas Lively %c = icmp eq i32 %i, 0 9838c902bcSThomas Lively %res = select i1 %c, <16 x i8> %x, <16 x i8> %y 9938c902bcSThomas Lively ret <16 x i8> %res 10038c902bcSThomas Lively} 10138c902bcSThomas Lively 10238c902bcSThomas Livelydefine <8 x i16> @vselect_v8i16(<8 x i1> %c, <8 x i16> %x, <8 x i16> %y) { 103f7868f87SThomas Lively; CHECK-LABEL: vselect_v8i16: 104f7868f87SThomas Lively; CHECK: .functype vselect_v8i16 (v128, v128, v128) -> (v128) 105f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 106f7868f87SThomas Lively; CHECK-NEXT: local.get 1 107f7868f87SThomas Lively; CHECK-NEXT: local.get 2 108f7868f87SThomas Lively; CHECK-NEXT: local.get 0 109f7868f87SThomas Lively; CHECK-NEXT: i32.const 15 110f7868f87SThomas Lively; CHECK-NEXT: i16x8.shl 111f7868f87SThomas Lively; CHECK-NEXT: i32.const 15 112f7868f87SThomas Lively; CHECK-NEXT: i16x8.shr_s 113f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 114f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 11538c902bcSThomas Lively %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y 11638c902bcSThomas Lively ret <8 x i16> %res 11738c902bcSThomas Lively} 11838c902bcSThomas Lively 119f0f97876SThomas Livelydefine <8 x i16> @vselect_cmp_v8i16(<8 x i16> %a, <8 x i16> %b, 120f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v8i16: 121f7868f87SThomas Lively; CHECK: .functype vselect_cmp_v8i16 (v128, v128, v128, v128) -> (v128) 122f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 123f7868f87SThomas Lively; CHECK-NEXT: local.get 2 124f7868f87SThomas Lively; CHECK-NEXT: local.get 3 125f7868f87SThomas Lively; CHECK-NEXT: local.get 0 126f7868f87SThomas Lively; CHECK-NEXT: local.get 1 127f7868f87SThomas Lively; CHECK-NEXT: i16x8.lt_s 128f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 129f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 130f0f97876SThomas Lively <8 x i16> %x, <8 x i16> %y) { 131f0f97876SThomas Lively %c = icmp slt <8 x i16> %a, %b 132f0f97876SThomas Lively %res = select <8 x i1> %c, <8 x i16> %x, <8 x i16> %y 133f0f97876SThomas Lively ret <8 x i16> %res 134f0f97876SThomas Lively} 135f0f97876SThomas Lively 136e661f946SNikita Popovdefine <8 x i16> @select_v8i16(i1 zeroext %c, <8 x i16> %x, <8 x i16> %y) { 137f7868f87SThomas Lively; CHECK-LABEL: select_v8i16: 138f7868f87SThomas Lively; CHECK: .functype select_v8i16 (i32, v128, v128) -> (v128) 139f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 140f7868f87SThomas Lively; CHECK-NEXT: local.get 1 141f7868f87SThomas Lively; CHECK-NEXT: local.get 2 142f7868f87SThomas Lively; CHECK-NEXT: local.get 0 143ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 144f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 14538c902bcSThomas Lively %res = select i1 %c, <8 x i16> %x, <8 x i16> %y 14638c902bcSThomas Lively ret <8 x i16> %res 14738c902bcSThomas Lively} 14838c902bcSThomas Lively 14938c902bcSThomas Livelydefine <8 x i16> @select_cmp_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) { 150f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v8i16: 151f7868f87SThomas Lively; CHECK: .functype select_cmp_v8i16 (i32, v128, v128) -> (v128) 152f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 153f7868f87SThomas Lively; CHECK-NEXT: local.get 1 154f7868f87SThomas Lively; CHECK-NEXT: local.get 2 155f7868f87SThomas Lively; CHECK-NEXT: local.get 0 156ecb2e5bcSThomas Lively; CHECK-NEXT: i32.const 0 157ecb2e5bcSThomas Lively; CHECK-NEXT: i32.lt_s 158ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 159f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 16038c902bcSThomas Lively %c = icmp slt i32 %i, 0 16138c902bcSThomas Lively %res = select i1 %c, <8 x i16> %x, <8 x i16> %y 16238c902bcSThomas Lively ret <8 x i16> %res 16338c902bcSThomas Lively} 16438c902bcSThomas Lively 16538c902bcSThomas Livelydefine <8 x i16> @select_ne_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) { 166f7868f87SThomas Lively; CHECK-LABEL: select_ne_v8i16: 167f7868f87SThomas Lively; CHECK: .functype select_ne_v8i16 (i32, v128, v128) -> (v128) 168f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 169f7868f87SThomas Lively; CHECK-NEXT: local.get 1 170f7868f87SThomas Lively; CHECK-NEXT: local.get 2 171f7868f87SThomas Lively; CHECK-NEXT: local.get 0 172ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 173f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 17438c902bcSThomas Lively %c = icmp ne i32 %i, 0 17538c902bcSThomas Lively %res = select i1 %c, <8 x i16> %x, <8 x i16> %y 17638c902bcSThomas Lively ret <8 x i16> %res 17738c902bcSThomas Lively} 17838c902bcSThomas Lively 17938c902bcSThomas Livelydefine <8 x i16> @select_eq_v8i16(i32 %i, <8 x i16> %x, <8 x i16> %y) { 180f7868f87SThomas Lively; CHECK-LABEL: select_eq_v8i16: 181f7868f87SThomas Lively; CHECK: .functype select_eq_v8i16 (i32, v128, v128) -> (v128) 182f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 183f7868f87SThomas Lively; CHECK-NEXT: local.get 2 184ecb2e5bcSThomas Lively; CHECK-NEXT: local.get 1 185f7868f87SThomas Lively; CHECK-NEXT: local.get 0 186ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 187f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 18838c902bcSThomas Lively %c = icmp eq i32 %i, 0 18938c902bcSThomas Lively %res = select i1 %c, <8 x i16> %x, <8 x i16> %y 19038c902bcSThomas Lively ret <8 x i16> %res 19138c902bcSThomas Lively} 19238c902bcSThomas Lively 19338c902bcSThomas Livelydefine <4 x i32> @vselect_v4i32(<4 x i1> %c, <4 x i32> %x, <4 x i32> %y) { 194f7868f87SThomas Lively; CHECK-LABEL: vselect_v4i32: 195f7868f87SThomas Lively; CHECK: .functype vselect_v4i32 (v128, v128, v128) -> (v128) 196f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 197f7868f87SThomas Lively; CHECK-NEXT: local.get 1 198f7868f87SThomas Lively; CHECK-NEXT: local.get 2 199f7868f87SThomas Lively; CHECK-NEXT: local.get 0 200f7868f87SThomas Lively; CHECK-NEXT: i32.const 31 201f7868f87SThomas Lively; CHECK-NEXT: i32x4.shl 202f7868f87SThomas Lively; CHECK-NEXT: i32.const 31 203f7868f87SThomas Lively; CHECK-NEXT: i32x4.shr_s 204f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 205f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 20638c902bcSThomas Lively %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y 20738c902bcSThomas Lively ret <4 x i32> %res 20838c902bcSThomas Lively} 20938c902bcSThomas Lively 210f0f97876SThomas Livelydefine <4 x i32> @vselect_cmp_v4i32(<4 x i32> %a, <4 x i32> %b, 211f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v4i32: 212f7868f87SThomas Lively; CHECK: .functype vselect_cmp_v4i32 (v128, v128, v128, v128) -> (v128) 213f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 214f7868f87SThomas Lively; CHECK-NEXT: local.get 2 215f7868f87SThomas Lively; CHECK-NEXT: local.get 3 216f7868f87SThomas Lively; CHECK-NEXT: local.get 0 217f7868f87SThomas Lively; CHECK-NEXT: local.get 1 218f7868f87SThomas Lively; CHECK-NEXT: i32x4.lt_s 219f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 220f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 221f0f97876SThomas Lively <4 x i32> %x, <4 x i32> %y) { 222f0f97876SThomas Lively %c = icmp slt <4 x i32> %a, %b 223f0f97876SThomas Lively %res = select <4 x i1> %c, <4 x i32> %x, <4 x i32> %y 224f0f97876SThomas Lively ret <4 x i32> %res 225f0f97876SThomas Lively} 22638c902bcSThomas Lively 227e661f946SNikita Popovdefine <4 x i32> @select_v4i32(i1 zeroext %c, <4 x i32> %x, <4 x i32> %y) { 228f7868f87SThomas Lively; CHECK-LABEL: select_v4i32: 229f7868f87SThomas Lively; CHECK: .functype select_v4i32 (i32, v128, v128) -> (v128) 230f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 231f7868f87SThomas Lively; CHECK-NEXT: local.get 1 232f7868f87SThomas Lively; CHECK-NEXT: local.get 2 233f7868f87SThomas Lively; CHECK-NEXT: local.get 0 234ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 235f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 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 Livelydefine <4 x i32> @select_cmp_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) { 241f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v4i32: 242f7868f87SThomas Lively; CHECK: .functype select_cmp_v4i32 (i32, v128, v128) -> (v128) 243f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 244f7868f87SThomas Lively; CHECK-NEXT: local.get 1 245f7868f87SThomas Lively; CHECK-NEXT: local.get 2 246f7868f87SThomas Lively; CHECK-NEXT: local.get 0 247ecb2e5bcSThomas Lively; CHECK-NEXT: i32.const 0 248ecb2e5bcSThomas Lively; CHECK-NEXT: i32.lt_s 249ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 250f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 25138c902bcSThomas Lively %c = icmp slt i32 %i, 0 25238c902bcSThomas Lively %res = select i1 %c, <4 x i32> %x, <4 x i32> %y 25338c902bcSThomas Lively ret <4 x i32> %res 25438c902bcSThomas Lively} 25538c902bcSThomas Lively 25638c902bcSThomas Livelydefine <4 x i32> @select_ne_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) { 257f7868f87SThomas Lively; CHECK-LABEL: select_ne_v4i32: 258f7868f87SThomas Lively; CHECK: .functype select_ne_v4i32 (i32, v128, v128) -> (v128) 259f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 260f7868f87SThomas Lively; CHECK-NEXT: local.get 1 261f7868f87SThomas Lively; CHECK-NEXT: local.get 2 262f7868f87SThomas Lively; CHECK-NEXT: local.get 0 263ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 264f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 26538c902bcSThomas Lively %c = icmp ne i32 %i, 0 26638c902bcSThomas Lively %res = select i1 %c, <4 x i32> %x, <4 x i32> %y 26738c902bcSThomas Lively ret <4 x i32> %res 26838c902bcSThomas Lively} 26938c902bcSThomas Lively 27038c902bcSThomas Livelydefine <4 x i32> @select_eq_v4i32(i32 %i, <4 x i32> %x, <4 x i32> %y) { 271f7868f87SThomas Lively; CHECK-LABEL: select_eq_v4i32: 272f7868f87SThomas Lively; CHECK: .functype select_eq_v4i32 (i32, v128, v128) -> (v128) 273f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 274f7868f87SThomas Lively; CHECK-NEXT: local.get 2 275ecb2e5bcSThomas Lively; CHECK-NEXT: local.get 1 276f7868f87SThomas Lively; CHECK-NEXT: local.get 0 277ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 278f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 27938c902bcSThomas Lively %c = icmp eq i32 %i, 0 28038c902bcSThomas Lively %res = select i1 %c, <4 x i32> %x, <4 x i32> %y 28138c902bcSThomas Lively ret <4 x i32> %res 28238c902bcSThomas Lively} 28338c902bcSThomas Lively 28438c902bcSThomas Livelydefine <2 x i64> @vselect_v2i64(<2 x i1> %c, <2 x i64> %x, <2 x i64> %y) { 285f7868f87SThomas Lively; CHECK-LABEL: vselect_v2i64: 286f7868f87SThomas Lively; CHECK: .functype vselect_v2i64 (v128, v128, v128) -> (v128) 287f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 288f7868f87SThomas Lively; CHECK-NEXT: local.get 1 289f7868f87SThomas Lively; CHECK-NEXT: local.get 2 290f7868f87SThomas Lively; CHECK-NEXT: local.get 0 291f7868f87SThomas Lively; CHECK-NEXT: i32.const 63 292f7868f87SThomas Lively; CHECK-NEXT: i64x2.shl 293f7868f87SThomas Lively; CHECK-NEXT: i32.const 63 294f7868f87SThomas Lively; CHECK-NEXT: i64x2.shr_s 295f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 296f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 29738c902bcSThomas Lively %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y 29838c902bcSThomas Lively ret <2 x i64> %res 29938c902bcSThomas Lively} 30038c902bcSThomas Lively 301*45783d0eSThomas Livelydefine <2 x i64> @vselect_cmp_v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %x, <2 x i64> %y) { 302f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v2i64: 303f7868f87SThomas Lively; CHECK: .functype vselect_cmp_v2i64 (v128, v128, v128, v128) -> (v128) 304f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 305f7868f87SThomas Lively; CHECK-NEXT: local.get 2 306f7868f87SThomas Lively; CHECK-NEXT: local.get 3 307f7868f87SThomas Lively; CHECK-NEXT: local.get 0 308f7868f87SThomas Lively; CHECK-NEXT: local.get 1 309*45783d0eSThomas Lively; CHECK-NEXT: i64x2.lt_s 310f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 311f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 312f0f97876SThomas Lively %c = icmp slt <2 x i64> %a, %b 313f0f97876SThomas Lively %res = select <2 x i1> %c, <2 x i64> %x, <2 x i64> %y 314f0f97876SThomas Lively ret <2 x i64> %res 315f0f97876SThomas Lively} 316f0f97876SThomas Lively 317e661f946SNikita Popovdefine <2 x i64> @select_v2i64(i1 zeroext %c, <2 x i64> %x, <2 x i64> %y) { 318f7868f87SThomas Lively; CHECK-LABEL: select_v2i64: 319f7868f87SThomas Lively; CHECK: .functype select_v2i64 (i32, v128, v128) -> (v128) 320f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 321f7868f87SThomas Lively; CHECK-NEXT: local.get 1 322f7868f87SThomas Lively; CHECK-NEXT: local.get 2 323f7868f87SThomas Lively; CHECK-NEXT: local.get 0 324ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 325f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 32638c902bcSThomas Lively %res = select i1 %c, <2 x i64> %x, <2 x i64> %y 32738c902bcSThomas Lively ret <2 x i64> %res 32838c902bcSThomas Lively} 32938c902bcSThomas Lively 33038c902bcSThomas Livelydefine <2 x i64> @select_cmp_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) { 331f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v2i64: 332f7868f87SThomas Lively; CHECK: .functype select_cmp_v2i64 (i32, v128, v128) -> (v128) 333f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 334f7868f87SThomas Lively; CHECK-NEXT: local.get 1 335f7868f87SThomas Lively; CHECK-NEXT: local.get 2 336f7868f87SThomas Lively; CHECK-NEXT: local.get 0 337f7868f87SThomas Lively; CHECK-NEXT: i32.const 0 338f7868f87SThomas Lively; CHECK-NEXT: i32.lt_s 339ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 340f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 34138c902bcSThomas Lively %c = icmp slt i32 %i, 0 34238c902bcSThomas Lively %res = select i1 %c, <2 x i64> %x, <2 x i64> %y 34338c902bcSThomas Lively ret <2 x i64> %res 34438c902bcSThomas Lively} 34538c902bcSThomas Lively 34638c902bcSThomas Livelydefine <2 x i64> @select_ne_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) { 347f7868f87SThomas Lively; CHECK-LABEL: select_ne_v2i64: 348f7868f87SThomas Lively; CHECK: .functype select_ne_v2i64 (i32, v128, v128) -> (v128) 349f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 350f7868f87SThomas Lively; CHECK-NEXT: local.get 1 351f7868f87SThomas Lively; CHECK-NEXT: local.get 2 352f7868f87SThomas Lively; CHECK-NEXT: local.get 0 353ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 354f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 35538c902bcSThomas Lively %c = icmp ne i32 %i, 0 35638c902bcSThomas Lively %res = select i1 %c, <2 x i64> %x, <2 x i64> %y 35738c902bcSThomas Lively ret <2 x i64> %res 35838c902bcSThomas Lively} 35938c902bcSThomas Lively 36038c902bcSThomas Livelydefine <2 x i64> @select_eq_v2i64(i32 %i, <2 x i64> %x, <2 x i64> %y) { 361f7868f87SThomas Lively; CHECK-LABEL: select_eq_v2i64: 362f7868f87SThomas Lively; CHECK: .functype select_eq_v2i64 (i32, v128, v128) -> (v128) 363f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 364f7868f87SThomas Lively; CHECK-NEXT: local.get 2 365ecb2e5bcSThomas Lively; CHECK-NEXT: local.get 1 366f7868f87SThomas Lively; CHECK-NEXT: local.get 0 367ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 368f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 36938c902bcSThomas Lively %c = icmp eq i32 %i, 0 37038c902bcSThomas Lively %res = select i1 %c, <2 x i64> %x, <2 x i64> %y 37138c902bcSThomas Lively ret <2 x i64> %res 37238c902bcSThomas Lively} 37338c902bcSThomas Lively 37438c902bcSThomas Livelydefine <4 x float> @vselect_v4f32(<4 x i1> %c, <4 x float> %x, <4 x float> %y) { 375f7868f87SThomas Lively; CHECK-LABEL: vselect_v4f32: 376f7868f87SThomas Lively; CHECK: .functype vselect_v4f32 (v128, v128, v128) -> (v128) 377f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 378f7868f87SThomas Lively; CHECK-NEXT: local.get 1 379f7868f87SThomas Lively; CHECK-NEXT: local.get 2 380f7868f87SThomas Lively; CHECK-NEXT: local.get 0 381f7868f87SThomas Lively; CHECK-NEXT: i32.const 31 382f7868f87SThomas Lively; CHECK-NEXT: i32x4.shl 383f7868f87SThomas Lively; CHECK-NEXT: i32.const 31 384f7868f87SThomas Lively; CHECK-NEXT: i32x4.shr_s 385f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 386f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 38738c902bcSThomas Lively %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y 38838c902bcSThomas Lively ret <4 x float> %res 38938c902bcSThomas Lively} 39038c902bcSThomas Lively 391f0f97876SThomas Livelydefine <4 x float> @vselect_cmp_v4f32(<4 x float> %a, <4 x float> %b, 392f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v4f32: 393f7868f87SThomas Lively; CHECK: .functype vselect_cmp_v4f32 (v128, v128, v128, v128) -> (v128) 394f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 395f7868f87SThomas Lively; CHECK-NEXT: local.get 2 396f7868f87SThomas Lively; CHECK-NEXT: local.get 3 397f7868f87SThomas Lively; CHECK-NEXT: local.get 0 398f7868f87SThomas Lively; CHECK-NEXT: local.get 1 399f7868f87SThomas Lively; CHECK-NEXT: f32x4.lt 400f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 401f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 402f0f97876SThomas Lively <4 x float> %x, <4 x float> %y) { 403f0f97876SThomas Lively %c = fcmp olt <4 x float> %a, %b 404f0f97876SThomas Lively %res = select <4 x i1> %c, <4 x float> %x, <4 x float> %y 405f0f97876SThomas Lively ret <4 x float> %res 406f0f97876SThomas Lively} 407f0f97876SThomas Lively 408e661f946SNikita Popovdefine <4 x float> @select_v4f32(i1 zeroext %c, <4 x float> %x, <4 x float> %y) { 409f7868f87SThomas Lively; CHECK-LABEL: select_v4f32: 410f7868f87SThomas Lively; CHECK: .functype select_v4f32 (i32, v128, v128) -> (v128) 411f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 412f7868f87SThomas Lively; CHECK-NEXT: local.get 1 413f7868f87SThomas Lively; CHECK-NEXT: local.get 2 414f7868f87SThomas Lively; CHECK-NEXT: local.get 0 415ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 416f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 41738c902bcSThomas Lively %res = select i1 %c, <4 x float> %x, <4 x float> %y 41838c902bcSThomas Lively ret <4 x float> %res 41938c902bcSThomas Lively} 42038c902bcSThomas Lively 42138c902bcSThomas Livelydefine <4 x float> @select_cmp_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) { 422f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v4f32: 423f7868f87SThomas Lively; CHECK: .functype select_cmp_v4f32 (i32, v128, v128) -> (v128) 424f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 425f7868f87SThomas Lively; CHECK-NEXT: local.get 1 426f7868f87SThomas Lively; CHECK-NEXT: local.get 2 427f7868f87SThomas Lively; CHECK-NEXT: local.get 0 428ecb2e5bcSThomas Lively; CHECK-NEXT: i32.const 0 429ecb2e5bcSThomas Lively; CHECK-NEXT: i32.lt_s 430ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 431f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 43238c902bcSThomas Lively %c = icmp slt i32 %i, 0 43338c902bcSThomas Lively %res = select i1 %c, <4 x float> %x, <4 x float> %y 43438c902bcSThomas Lively ret <4 x float> %res 43538c902bcSThomas Lively} 43638c902bcSThomas Lively 43738c902bcSThomas Livelydefine <4 x float> @select_ne_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) { 438f7868f87SThomas Lively; CHECK-LABEL: select_ne_v4f32: 439f7868f87SThomas Lively; CHECK: .functype select_ne_v4f32 (i32, v128, v128) -> (v128) 440f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 441f7868f87SThomas Lively; CHECK-NEXT: local.get 1 442f7868f87SThomas Lively; CHECK-NEXT: local.get 2 443f7868f87SThomas Lively; CHECK-NEXT: local.get 0 444ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 445f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 44638c902bcSThomas Lively %c = icmp ne i32 %i, 0 44738c902bcSThomas Lively %res = select i1 %c, <4 x float> %x, <4 x float> %y 44838c902bcSThomas Lively ret <4 x float> %res 44938c902bcSThomas Lively} 45038c902bcSThomas Lively 45138c902bcSThomas Livelydefine <4 x float> @select_eq_v4f32(i32 %i, <4 x float> %x, <4 x float> %y) { 452f7868f87SThomas Lively; CHECK-LABEL: select_eq_v4f32: 453f7868f87SThomas Lively; CHECK: .functype select_eq_v4f32 (i32, v128, v128) -> (v128) 454f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 455f7868f87SThomas Lively; CHECK-NEXT: local.get 2 456ecb2e5bcSThomas Lively; CHECK-NEXT: local.get 1 457f7868f87SThomas Lively; CHECK-NEXT: local.get 0 458ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 459f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 46038c902bcSThomas Lively %c = icmp eq i32 %i, 0 46138c902bcSThomas Lively %res = select i1 %c, <4 x float> %x, <4 x float> %y 46238c902bcSThomas Lively ret <4 x float> %res 46338c902bcSThomas Lively} 46438c902bcSThomas Lively 46538c902bcSThomas Livelydefine <2 x double> @vselect_v2f64(<2 x i1> %c, <2 x double> %x, <2 x double> %y) { 466f7868f87SThomas Lively; CHECK-LABEL: vselect_v2f64: 467f7868f87SThomas Lively; CHECK: .functype vselect_v2f64 (v128, v128, v128) -> (v128) 468f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 469f7868f87SThomas Lively; CHECK-NEXT: local.get 1 470f7868f87SThomas Lively; CHECK-NEXT: local.get 2 471f7868f87SThomas Lively; CHECK-NEXT: local.get 0 472f7868f87SThomas Lively; CHECK-NEXT: i32.const 63 473f7868f87SThomas Lively; CHECK-NEXT: i64x2.shl 474f7868f87SThomas Lively; CHECK-NEXT: i32.const 63 475f7868f87SThomas Lively; CHECK-NEXT: i64x2.shr_s 476f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 477f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 47838c902bcSThomas Lively %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y 47938c902bcSThomas Lively ret <2 x double> %res 48038c902bcSThomas Lively} 48138c902bcSThomas Lively 482f0f97876SThomas Livelydefine <2 x double> @vselect_cmp_v2f64(<2 x double> %a, <2 x double> %b, 483f7868f87SThomas Lively; CHECK-LABEL: vselect_cmp_v2f64: 484f7868f87SThomas Lively; CHECK: .functype vselect_cmp_v2f64 (v128, v128, v128, v128) -> (v128) 485f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 486f7868f87SThomas Lively; CHECK-NEXT: local.get 2 487f7868f87SThomas Lively; CHECK-NEXT: local.get 3 488f7868f87SThomas Lively; CHECK-NEXT: local.get 0 489f7868f87SThomas Lively; CHECK-NEXT: local.get 1 490f7868f87SThomas Lively; CHECK-NEXT: f64x2.lt 491f7868f87SThomas Lively; CHECK-NEXT: v128.bitselect 492f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 493f0f97876SThomas Lively <2 x double> %x, <2 x double> %y) { 494f0f97876SThomas Lively %c = fcmp olt <2 x double> %a, %b 495f0f97876SThomas Lively %res = select <2 x i1> %c, <2 x double> %x, <2 x double> %y 496f0f97876SThomas Lively ret <2 x double> %res 497f0f97876SThomas Lively} 498f0f97876SThomas Lively 499e661f946SNikita Popovdefine <2 x double> @select_v2f64(i1 zeroext %c, <2 x double> %x, <2 x double> %y) { 500f7868f87SThomas Lively; CHECK-LABEL: select_v2f64: 501f7868f87SThomas Lively; CHECK: .functype select_v2f64 (i32, v128, v128) -> (v128) 502f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 503f7868f87SThomas Lively; CHECK-NEXT: local.get 1 504f7868f87SThomas Lively; CHECK-NEXT: local.get 2 505f7868f87SThomas Lively; CHECK-NEXT: local.get 0 506ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 507f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 50838c902bcSThomas Lively %res = select i1 %c, <2 x double> %x, <2 x double> %y 50938c902bcSThomas Lively ret <2 x double> %res 51038c902bcSThomas Lively} 51138c902bcSThomas Lively 51238c902bcSThomas Livelydefine <2 x double> @select_cmp_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) { 513f7868f87SThomas Lively; CHECK-LABEL: select_cmp_v2f64: 514f7868f87SThomas Lively; CHECK: .functype select_cmp_v2f64 (i32, v128, v128) -> (v128) 515f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 516f7868f87SThomas Lively; CHECK-NEXT: local.get 1 517f7868f87SThomas Lively; CHECK-NEXT: local.get 2 518f7868f87SThomas Lively; CHECK-NEXT: local.get 0 519f7868f87SThomas Lively; CHECK-NEXT: i32.const 0 520f7868f87SThomas Lively; CHECK-NEXT: i32.lt_s 521ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 522f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 52338c902bcSThomas Lively %c = icmp slt i32 %i, 0 52438c902bcSThomas Lively %res = select i1 %c, <2 x double> %x, <2 x double> %y 52538c902bcSThomas Lively ret <2 x double> %res 52638c902bcSThomas Lively} 52738c902bcSThomas Lively 52838c902bcSThomas Livelydefine <2 x double> @select_ne_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) { 529f7868f87SThomas Lively; CHECK-LABEL: select_ne_v2f64: 530f7868f87SThomas Lively; CHECK: .functype select_ne_v2f64 (i32, v128, v128) -> (v128) 531f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 532f7868f87SThomas Lively; CHECK-NEXT: local.get 1 533f7868f87SThomas Lively; CHECK-NEXT: local.get 2 534f7868f87SThomas Lively; CHECK-NEXT: local.get 0 535ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 536f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 53738c902bcSThomas Lively %c = icmp ne i32 %i, 0 53838c902bcSThomas Lively %res = select i1 %c, <2 x double> %x, <2 x double> %y 53938c902bcSThomas Lively ret <2 x double> %res 54038c902bcSThomas Lively} 54138c902bcSThomas Lively 54238c902bcSThomas Livelydefine <2 x double> @select_eq_v2f64(i32 %i, <2 x double> %x, <2 x double> %y) { 543f7868f87SThomas Lively; CHECK-LABEL: select_eq_v2f64: 544f7868f87SThomas Lively; CHECK: .functype select_eq_v2f64 (i32, v128, v128) -> (v128) 545f7868f87SThomas Lively; CHECK-NEXT: # %bb.0: 546f7868f87SThomas Lively; CHECK-NEXT: local.get 2 547ecb2e5bcSThomas Lively; CHECK-NEXT: local.get 1 548f7868f87SThomas Lively; CHECK-NEXT: local.get 0 549ecb2e5bcSThomas Lively; CHECK-NEXT: v128.select 550f7868f87SThomas Lively; CHECK-NEXT: # fallthrough-return 55138c902bcSThomas Lively %c = icmp eq i32 %i, 0 55238c902bcSThomas Lively %res = select i1 %c, <2 x double> %x, <2 x double> %y 55338c902bcSThomas Lively ret <2 x double> %res 55438c902bcSThomas Lively} 555