xref: /llvm-project/llvm/test/CodeGen/WebAssembly/simd-concat.ll (revision 28557e8c9872a31a29cf0aca19e9d036caf7eff4)
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