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