1f30c429dSThomas Lively; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2f30c429dSThomas Lively; RUN: llc < %s -verify-machineinstrs -mattr=+simd128 | FileCheck %s 3f30c429dSThomas Lively 4f30c429dSThomas Lively; Check that all varieties of vector concatenations get lowered to shuffles. 5f30c429dSThomas Lively 6f30c429dSThomas Livelytarget triple = "wasm32-unknown--wasm" 7f30c429dSThomas Lively 8f30c429dSThomas Livelydefine <16 x i8> @concat_v8i8(<8 x i8> %a, <8 x i8> %b) { 9f30c429dSThomas Lively; CHECK-LABEL: concat_v8i8: 10f30c429dSThomas Lively; CHECK: .functype concat_v8i8 (v128, v128) -> (v128) 11f30c429dSThomas Lively; CHECK-NEXT: # %bb.0: 12f30c429dSThomas Lively; CHECK-NEXT: local.get 0 13f30c429dSThomas Lively; CHECK-NEXT: local.get 1 14b69374caSThomas Lively; CHECK-NEXT: i8x16.shuffle 0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23 15f30c429dSThomas Lively; CHECK-NEXT: # fallthrough-return 16f30c429dSThomas Lively %v = shufflevector <8 x i8> %a, <8 x i8> %b, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15> 17f30c429dSThomas Lively ret <16 x i8> %v 18f30c429dSThomas Lively} 19f30c429dSThomas Lively 20f30c429dSThomas Livelydefine <8 x i8> @concat_v4i8(<4 x i8> %a, <4 x i8> %b) { 21f30c429dSThomas Lively; CHECK-LABEL: concat_v4i8: 22f30c429dSThomas Lively; CHECK: .functype concat_v4i8 (v128, v128) -> (v128) 23f30c429dSThomas Lively; CHECK-NEXT: # %bb.0: 24f30c429dSThomas Lively; CHECK-NEXT: local.get 0 25f30c429dSThomas Lively; CHECK-NEXT: local.get 1 26b69374caSThomas Lively; CHECK-NEXT: i8x16.shuffle 0, 1, 2, 3, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0 27f30c429dSThomas Lively; CHECK-NEXT: # fallthrough-return 28f30c429dSThomas Lively %v = shufflevector <4 x i8> %a, <4 x i8> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 29f30c429dSThomas Lively ret <8 x i8> %v 30f30c429dSThomas Lively} 31f30c429dSThomas Lively 32f30c429dSThomas Livelydefine <8 x i16> @concat_v4i16(<4 x i16> %a, <4 x i16> %b) { 33f30c429dSThomas Lively; CHECK-LABEL: concat_v4i16: 34f30c429dSThomas Lively; CHECK: .functype concat_v4i16 (v128, v128) -> (v128) 35f30c429dSThomas Lively; CHECK-NEXT: # %bb.0: 36f30c429dSThomas Lively; CHECK-NEXT: local.get 0 37f30c429dSThomas Lively; CHECK-NEXT: local.get 1 38b69374caSThomas Lively; CHECK-NEXT: i8x16.shuffle 0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23 39f30c429dSThomas Lively; CHECK-NEXT: # fallthrough-return 40f30c429dSThomas Lively %v = shufflevector <4 x i16> %a, <4 x i16> %b, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> 41f30c429dSThomas Lively ret <8 x i16> %v 42f30c429dSThomas Lively} 43f30c429dSThomas Lively 44f30c429dSThomas Livelydefine <4 x i8> @concat_v2i8(<2 x i8> %a, <2 x i8> %b) { 45f30c429dSThomas Lively; CHECK-LABEL: concat_v2i8: 46f30c429dSThomas Lively; CHECK: .functype concat_v2i8 (v128, v128) -> (v128) 47f30c429dSThomas Lively; CHECK-NEXT: # %bb.0: 48f30c429dSThomas Lively; CHECK-NEXT: local.get 0 49f30c429dSThomas Lively; CHECK-NEXT: local.get 1 50b69374caSThomas Lively; CHECK-NEXT: i8x16.shuffle 0, 1, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 51f30c429dSThomas Lively; CHECK-NEXT: # fallthrough-return 52f30c429dSThomas Lively %v = shufflevector <2 x i8> %a, <2 x i8> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 53f30c429dSThomas Lively ret <4 x i8> %v 54f30c429dSThomas Lively} 55f30c429dSThomas Lively 56f30c429dSThomas Livelydefine <4 x i16> @concat_v2i16(<2 x i16> %a, <2 x i16> %b) { 57f30c429dSThomas Lively; CHECK-LABEL: concat_v2i16: 58f30c429dSThomas Lively; CHECK: .functype concat_v2i16 (v128, v128) -> (v128) 59f30c429dSThomas Lively; CHECK-NEXT: # %bb.0: 60f30c429dSThomas Lively; CHECK-NEXT: local.get 0 61f30c429dSThomas Lively; CHECK-NEXT: local.get 1 62*28557e8cSFanchen Kong; CHECK-NEXT: i8x16.shuffle 0, 1, 2, 3, 16, 17, 18, 19, 0, 1, 0, 1, 0, 1, 0, 1 63f30c429dSThomas Lively; CHECK-NEXT: # fallthrough-return 64f30c429dSThomas Lively %v = shufflevector <2 x i16> %a, <2 x i16> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 65f30c429dSThomas Lively ret <4 x i16> %v 66f30c429dSThomas Lively} 67f30c429dSThomas Lively 68f30c429dSThomas Livelydefine <4 x i32> @concat_v2i32(<2 x i32> %a, <2 x i32> %b) { 69f30c429dSThomas Lively; CHECK-LABEL: concat_v2i32: 70f30c429dSThomas Lively; CHECK: .functype concat_v2i32 (v128, v128) -> (v128) 71f30c429dSThomas Lively; CHECK-NEXT: # %bb.0: 72f30c429dSThomas Lively; CHECK-NEXT: local.get 0 73f30c429dSThomas Lively; CHECK-NEXT: local.get 1 74b69374caSThomas Lively; CHECK-NEXT: i8x16.shuffle 0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23 75f30c429dSThomas Lively; CHECK-NEXT: # fallthrough-return 76f30c429dSThomas Lively %v = shufflevector <2 x i32> %a, <2 x i32> %b, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 77f30c429dSThomas Lively ret <4 x i32> %v 78f30c429dSThomas Lively} 79