xref: /llvm-project/llvm/test/CodeGen/PowerPC/pr77748.ll (revision 87bc91d4259c53d98d8c5c6b7c622f65ddb4c62a)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -mattr=+altivec -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LE
3; RUN: llc -mtriple=powerpc64-unknown-linux-gnu -mattr=+altivec,+direct-move -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=BE
4
5; LE-LABEL: .LCPI0_0:
6; LE-NEXT: 	.byte	31
7; LE-NEXT: 	.byte	15
8; LE-NEXT: 	.byte	30
9; LE-NEXT: 	.byte	14
10; LE-NEXT: 	.byte	29
11; LE-NEXT: 	.byte	13
12; LE-NEXT: 	.byte	28
13; LE-NEXT: 	.byte	12
14; LE-NEXT: 	.byte	31
15; LE-NEXT: 	.byte	15
16; LE-NEXT: 	.byte	31
17; LE-NEXT: 	.byte	15
18; LE-NEXT: 	.byte	31
19; LE-NEXT: 	.byte	15
20; LE-NEXT: 	.byte	31
21; LE-NEXT: 	.byte	15
22
23; BE-LABEL: .LCPI0_0:
24; BE-NEXT: 	.byte	0
25; BE-NEXT: 	.byte	16
26; BE-NEXT: 	.byte	1
27; BE-NEXT: 	.byte	16
28; BE-NEXT: 	.byte	2
29; BE-NEXT: 	.byte	16
30; BE-NEXT: 	.byte	3
31; BE-NEXT: 	.byte	16
32; BE-NEXT: 	.byte	0
33; BE-NEXT: 	.byte	16
34; BE-NEXT: 	.byte	0
35; BE-NEXT: 	.byte	16
36; BE-NEXT: 	.byte	0
37; BE-NEXT: 	.byte	16
38; BE-NEXT: 	.byte	0
39; BE-NEXT: 	.byte	16
40
41define <16 x i8> @test1(<16 x i8> %a) {
42; LE-LABEL: test1:
43; LE:       # %bb.0:
44; LE-NEXT:    addis r3, r2, .LCPI0_0@toc@ha
45; LE-NEXT:    xxlxor vs36, vs36, vs36
46; LE-NEXT:    addi r3, r3, .LCPI0_0@toc@l
47; LE-NEXT:    lxvd2x vs0, 0, r3
48; LE-NEXT:    xxswapd vs35, vs0
49; LE-NEXT:    vperm v2, v4, v2, v3
50; LE-NEXT:    blr
51;
52; BE-LABEL: test1:
53; BE:       # %bb.0:
54; BE-NEXT:    addis r3, r2, .LCPI0_0@toc@ha
55; BE-NEXT:    xxlxor vs36, vs36, vs36
56; BE-NEXT:    addi r3, r3, .LCPI0_0@toc@l
57; BE-NEXT:    lxvw4x vs35, 0, r3
58; BE-NEXT:    vperm v2, v2, v4, v3
59; BE-NEXT:    blr
60  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 poison, i32 16, i32 poison, i32 16, i32 poison, i32 16, i32 poison, i32 16>
61  ret <16 x i8> %shuffle
62}
63
64; LE-LABEL: .LCPI1_0:
65; LE-NEXT: 	.byte	31
66; LE-NEXT: 	.byte	15
67; LE-NEXT: 	.byte	31
68; LE-NEXT: 	.byte	14
69; LE-NEXT: 	.byte	31
70; LE-NEXT: 	.byte	13
71; LE-NEXT: 	.byte	31
72; LE-NEXT: 	.byte	12
73; LE-NEXT: 	.byte	31
74; LE-NEXT: 	.byte	11
75; LE-NEXT: 	.byte	31
76; LE-NEXT: 	.byte	10
77; LE-NEXT: 	.byte	31
78; LE-NEXT: 	.byte	9
79; LE-NEXT: 	.byte	31
80; LE-NEXT: 	.byte	8
81
82define <16 x i8> @test2(<16 x i8> %a) {
83; LE-LABEL: test2:
84; LE:       # %bb.0:
85; LE-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
86; LE-NEXT:    xxlxor vs36, vs36, vs36
87; LE-NEXT:    addi r3, r3, .LCPI1_0@toc@l
88; LE-NEXT:    lxvd2x vs0, 0, r3
89; LE-NEXT:    xxswapd vs35, vs0
90; LE-NEXT:    vperm v2, v2, v4, v3
91; LE-NEXT:    blr
92;
93; BE-LABEL: test2:
94; BE:       # %bb.0:
95; BE-NEXT:    xxlxor vs35, vs35, vs35
96; BE-NEXT:    vmrghb v2, v3, v2
97; BE-NEXT:    blr
98  %shuffle = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <16 x i32> <i32 16, i32 0, i32 16, i32 1, i32 16, i32 2, i32 16, i32 3, i32 16, i32 4, i32 poison, i32 5, i32 poison, i32 6, i32 poison, i32 7>
99  ret <16 x i8> %shuffle
100}
101