xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/vec-const-13.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; Test vector replicates that use VECTOR GENERATE MASK, v16i8 version.
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with the lowest value that cannot use
6*9880d681SAndroid Build Coastguard Worker; VREPIF.
7*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f1() {
8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1:
9*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 16, 16
10*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
11*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 0, i8 128, i8 0,
12*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 128, i8 0,
13*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 128, i8 0,
14*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 128, i8 0>
15*9880d681SAndroid Build Coastguard Worker}
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate that has the lower 17 bits set.
18*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f2() {
19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2:
20*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 15, 31
21*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
22*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 1, i8 255, i8 255,
23*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 1, i8 255, i8 255,
24*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 1, i8 255, i8 255,
25*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 1, i8 255, i8 255>
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate that has the upper 15 bits set.
29*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f3() {
30*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3:
31*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 0, 14
32*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
33*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 255, i8 254, i8 0, i8 0,
34*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 254, i8 0, i8 0,
35*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 254, i8 0, i8 0,
36*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 254, i8 0, i8 0>
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate that has middle bits set.
40*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f4() {
41*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4:
42*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 12, 17
43*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
44*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 15, i8 192, i8 0,
45*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 15, i8 192, i8 0,
46*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 15, i8 192, i8 0,
47*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 15, i8 192, i8 0>
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker; Test a word-granularity replicate with a wrap-around mask.
51*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f5() {
52*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5:
53*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 17, 15
54*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
55*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 255, i8 255, i8 127, i8 255,
56*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 255, i8 127, i8 255,
57*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 255, i8 127, i8 255,
58*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 255, i8 127, i8 255>
59*9880d681SAndroid Build Coastguard Worker}
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with the lowest value that cannot
62*9880d681SAndroid Build Coastguard Worker; use VREPIG.
63*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f6() {
64*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6:
65*9880d681SAndroid Build Coastguard Worker; CHECK: vgmg %v24, 48, 48
66*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
67*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 0, i8 0, i8 0,
68*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 128, i8 0,
69*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 0, i8 0,
70*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 128, i8 0>
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate that has the lower 22 bits set.
74*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f7() {
75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7:
76*9880d681SAndroid Build Coastguard Worker; CHECK: vgmg %v24, 42, 63
77*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
78*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 0, i8 0, i8 0,
79*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 63, i8 255, i8 255,
80*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 0, i8 0,
81*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 63, i8 255, i8 255>
82*9880d681SAndroid Build Coastguard Worker}
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate that has the upper 45 bits set.
85*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f8() {
86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8:
87*9880d681SAndroid Build Coastguard Worker; CHECK: vgmg %v24, 0, 44
88*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
89*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 255, i8 255, i8 255, i8 255,
90*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 248, i8 0, i8 0,
91*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 255, i8 255, i8 255,
92*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 248, i8 0, i8 0>
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate that has middle bits set.
96*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f9() {
97*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9:
98*9880d681SAndroid Build Coastguard Worker; CHECK: vgmg %v24, 31, 42
99*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
100*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 0, i8 0, i8 1,
101*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 224, i8 0, i8 0,
102*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 0, i8 1,
103*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 224, i8 0, i8 0>
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Worker; Test a doubleword-granularity replicate with a wrap-around mask.
107*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f10() {
108*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10:
109*9880d681SAndroid Build Coastguard Worker; CHECK: vgmg %v24, 18, 0
110*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
111*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 128, i8 0, i8 63, i8 255,
112*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 255, i8 255, i8 255,
113*9880d681SAndroid Build Coastguard Worker                 i8 128, i8 0, i8 63, i8 255,
114*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 255, i8 255, i8 255>
115*9880d681SAndroid Build Coastguard Worker}
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker; Retest f1 with arbitrary undefs instead of 0s.
118*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f11() {
119*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11:
120*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 16, 16
121*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
122*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 undef, i8 128, i8 0,
123*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 128, i8 undef,
124*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 0, i8 128, i8 0,
125*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 undef, i8 128, i8 0>
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker; Try a case where we want consistent undefs to be treated as 0.
129*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f12() {
130*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12:
131*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 15, 23
132*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
133*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 undef, i8 1, i8 255, i8 0,
134*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 1, i8 255, i8 0,
135*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 1, i8 255, i8 0,
136*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 1, i8 255, i8 0>
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; ...and again with the lower bits of the replicated constant.
140*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f13() {
141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13:
142*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 15, 22
143*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
144*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 1, i8 254, i8 undef,
145*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 1, i8 254, i8 undef,
146*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 1, i8 254, i8 undef,
147*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 1, i8 254, i8 undef>
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; Try a case where we want consistent undefs to be treated as -1.
151*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f14() {
152*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14:
153*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 28, 8
154*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
155*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 undef, i8 128, i8 0, i8 15,
156*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 128, i8 0, i8 15,
157*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 128, i8 0, i8 15,
158*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 128, i8 0, i8 15>
159*9880d681SAndroid Build Coastguard Worker}
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker; ...and again with the lower bits of the replicated constant.
162*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f15() {
163*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15:
164*9880d681SAndroid Build Coastguard Worker; CHECK: vgmf %v24, 18, 3
165*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
166*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 240, i8 0, i8 63, i8 undef,
167*9880d681SAndroid Build Coastguard Worker                 i8 240, i8 0, i8 63, i8 undef,
168*9880d681SAndroid Build Coastguard Worker                 i8 240, i8 0, i8 63, i8 undef,
169*9880d681SAndroid Build Coastguard Worker                 i8 240, i8 0, i8 63, i8 undef>
170*9880d681SAndroid Build Coastguard Worker}
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker; Repeat f9 with arbitrary undefs.
173*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f16() {
174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16:
175*9880d681SAndroid Build Coastguard Worker; CHECK: vgmg %v24, 31, 42
176*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
177*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 undef, i8 0, i8 undef, i8 1,
178*9880d681SAndroid Build Coastguard Worker                 i8 255, i8 undef, i8 0, i8 0,
179*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 0, i8 0, i8 1,
180*9880d681SAndroid Build Coastguard Worker                 i8 undef, i8 224, i8 undef, i8 undef>
181*9880d681SAndroid Build Coastguard Worker}
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker; Try a case where we want some consistent undefs to be treated as 0
184*9880d681SAndroid Build Coastguard Worker; and some to be treated as 255.
185*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f17() {
186*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17:
187*9880d681SAndroid Build Coastguard Worker; CHECK: vgmg %v24, 23, 35
188*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14
189*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> <i8 0, i8 undef, i8 1, i8 undef,
190*9880d681SAndroid Build Coastguard Worker                 i8 240, i8 undef, i8 0, i8 0,
191*9880d681SAndroid Build Coastguard Worker                 i8 0, i8 undef, i8 1, i8 undef,
192*9880d681SAndroid Build Coastguard Worker                 i8 240, i8 undef, i8 0, i8 0>
193*9880d681SAndroid Build Coastguard Worker}
194