xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/vsx-word-splats.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu < %s | FileCheck %s \
3*9880d681SAndroid Build Coastguard Worker; RUN:   --check-prefix=CHECK-BE
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test0f(<4 x float> %a) {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x float> %a to <16 x i8>
8*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
9*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x float>
10*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test0f
12*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 3
13*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test0f
14*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 0
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test1f(<4 x float> %a) {
18*9880d681SAndroid Build Coastguard Workerentry:
19*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x float> %a to <16 x i8>
20*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>
21*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x float>
22*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
23*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1f
24*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 2
25*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test1f
26*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 1
27*9880d681SAndroid Build Coastguard Worker}
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test2f(<4 x float> %a) {
30*9880d681SAndroid Build Coastguard Workerentry:
31*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x float> %a to <16 x i8>
32*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11>
33*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x float>
34*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2f
36*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 1
37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2f
38*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 2
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test3f(<4 x float> %a) {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x float> %a to <16 x i8>
44*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15>
45*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x float>
46*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %2
47*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3f
48*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 0
49*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test3f
50*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 3
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test0si(<4 x i32> %a) {
54*9880d681SAndroid Build Coastguard Workerentry:
55*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
56*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
57*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
58*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test0si
60*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 3
61*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test0si
62*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 0
63*9880d681SAndroid Build Coastguard Worker}
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test1si(<4 x i32> %a) {
66*9880d681SAndroid Build Coastguard Workerentry:
67*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
68*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>
69*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
70*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1si
72*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 2
73*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test1si
74*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 1
75*9880d681SAndroid Build Coastguard Worker}
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test2si(<4 x i32> %a) {
78*9880d681SAndroid Build Coastguard Workerentry:
79*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
80*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11>
81*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
82*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2si
84*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 1
85*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test2si
86*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 2
87*9880d681SAndroid Build Coastguard Worker}
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test3si(<4 x i32> %a) {
90*9880d681SAndroid Build Coastguard Workerentry:
91*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
92*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15>
93*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
94*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3si
96*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 0
97*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test3si
98*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 3
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test0ui(<4 x i32> %a) {
102*9880d681SAndroid Build Coastguard Workerentry:
103*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
104*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>
105*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
106*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test0ui
108*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 3
109*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test0ui
110*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 0
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test1ui(<4 x i32> %a) {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
116*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7, i32 4, i32 5, i32 6, i32 7>
117*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
118*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1ui
120*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 2
121*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test1ui
122*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 1
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test2ui(<4 x i32> %a) {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
128*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11, i32 8, i32 9, i32 10, i32 11>
129*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
130*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2ui
132*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 1
133*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test2ui
134*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 2
135*9880d681SAndroid Build Coastguard Worker}
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @test3ui(<4 x i32> %a) {
138*9880d681SAndroid Build Coastguard Workerentry:
139*9880d681SAndroid Build Coastguard Worker  %0 = bitcast <4 x i32> %a to <16 x i8>
140*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %0, <16 x i8> undef, <16 x i32> <i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15, i32 12, i32 13, i32 14, i32 15>
141*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i8> %1 to <4 x i32>
142*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %2
143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3ui
144*9880d681SAndroid Build Coastguard Worker; CHECK xxspltw: 34, 34, 0
145*9880d681SAndroid Build Coastguard Worker; CHECK-BE-LABEL: test3ui
146*9880d681SAndroid Build Coastguard Worker; CHECK-BE: xxspltw 34, 34, 3
147*9880d681SAndroid Build Coastguard Worker}
148