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