Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / VE / Vector / vec_broadcast.ll
blob9422495bb892b43a2f955c5c267b02470998fcc4
1 ; RUN: llc < %s -mtriple=ve-unknown-unknown -mattr=+vpu | FileCheck %s
3 ; ISA-compatible vector broadcasts
4 define fastcc <256 x i64> @brd_v256i64(i64 %s) {
5 ; CHECK-LABEL: brd_v256i64:
6 ; CHECK:       # %bb.0:
7 ; CHECK-NEXT:    lea %s1, 256
8 ; CHECK-NEXT:    lvl %s1
9 ; CHECK-NEXT:    vbrd %v0, %s0
10 ; CHECK-NEXT:    b.l.t (, %s10)
11   %val = insertelement <256 x i64> undef, i64 %s, i32 0
12   %ret = shufflevector <256 x i64> %val, <256 x i64> undef, <256 x i32> zeroinitializer
13   ret <256 x i64> %ret
16 define fastcc <256 x i64> @brdi_v256i64() {
17 ; CHECK-LABEL: brdi_v256i64:
18 ; CHECK:       # %bb.0:
19 ; CHECK-NEXT:    lea %s0, 256
20 ; CHECK-NEXT:    lvl %s0
21 ; CHECK-NEXT:    vbrd %v0, 1
22 ; CHECK-NEXT:    b.l.t (, %s10)
23   %val = insertelement <256 x i64> undef, i64 1, i32 0
24   %ret = shufflevector <256 x i64> %val, <256 x i64> undef, <256 x i32> zeroinitializer
25   ret <256 x i64> %ret
28 define fastcc <256 x double> @brd_v256f64(double %s) {
29 ; CHECK-LABEL: brd_v256f64:
30 ; CHECK:       # %bb.0:
31 ; CHECK-NEXT:    lea %s1, 256
32 ; CHECK-NEXT:    lvl %s1
33 ; CHECK-NEXT:    vbrd %v0, %s0
34 ; CHECK-NEXT:    b.l.t (, %s10)
35   %val = insertelement <256 x double> undef, double %s, i32 0
36   %ret = shufflevector <256 x double> %val, <256 x double> undef, <256 x i32> zeroinitializer
37   ret <256 x double> %ret
40 define fastcc <256 x double> @brdi_v256f64() {
41 ; CHECK-LABEL: brdi_v256f64:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    lea %s0, 256
44 ; CHECK-NEXT:    lvl %s0
45 ; CHECK-NEXT:    vbrd %v0, 0
46 ; CHECK-NEXT:    b.l.t (, %s10)
47   %val = insertelement <256 x double> undef, double 0.e+00, i32 0
48   %ret = shufflevector <256 x double> %val, <256 x double> undef, <256 x i32> zeroinitializer
49   ret <256 x double> %ret
52 define fastcc <256 x i32> @brd_v256i32(i32 %s) {
53 ; CHECK-LABEL: brd_v256i32:
54 ; CHECK:       # %bb.0:
55 ; CHECK-NEXT:    and %s0, %s0, (32)0
56 ; CHECK-NEXT:    lea %s1, 256
57 ; CHECK-NEXT:    lvl %s1
58 ; CHECK-NEXT:    vbrd %v0, %s0
59 ; CHECK-NEXT:    b.l.t (, %s10)
60   %val = insertelement <256 x i32> undef, i32 %s, i32 0
61   %ret = shufflevector <256 x i32> %val, <256 x i32> undef, <256 x i32> zeroinitializer
62   ret <256 x i32> %ret
65 define fastcc <256 x i32> @brdi_v256i32(i32 %s) {
66 ; CHECK-LABEL: brdi_v256i32:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    lea %s0, 256
69 ; CHECK-NEXT:    lvl %s0
70 ; CHECK-NEXT:    vbrd %v0, 13
71 ; CHECK-NEXT:    b.l.t (, %s10)
72   %val = insertelement <256 x i32> undef, i32 13, i32 0
73   %ret = shufflevector <256 x i32> %val, <256 x i32> undef, <256 x i32> zeroinitializer
74   ret <256 x i32> %ret
77 define fastcc <256 x float> @brd_v256f32(float %s) {
78 ; CHECK-LABEL: brd_v256f32:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    lea %s1, 256
81 ; CHECK-NEXT:    lvl %s1
82 ; CHECK-NEXT:    vbrd %v0, %s0
83 ; CHECK-NEXT:    b.l.t (, %s10)
84   %val = insertelement <256 x float> undef, float %s, i32 0
85   %ret = shufflevector <256 x float> %val, <256 x float> undef, <256 x i32> zeroinitializer
86   ret <256 x float> %ret
89 define fastcc <256 x float> @brdi_v256f32(float %s) {
90 ; CHECK-LABEL: brdi_v256f32:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    lea %s0, 256
93 ; CHECK-NEXT:    lvl %s0
94 ; CHECK-NEXT:    vbrd %v0, 0
95 ; CHECK-NEXT:    b.l.t (, %s10)
96   %val = insertelement <256 x float> undef, float 0.e+00, i32 0
97   %ret = shufflevector <256 x float> %val, <256 x float> undef, <256 x i32> zeroinitializer
98   ret <256 x float> %ret
102 ; Shorter vectors, we expect these to be widened (for now).
103 define fastcc <128 x i64> @brd_v128i64(i64 %s) {
104 ; CHECK-LABEL: brd_v128i64:
105 ; CHECK:       # %bb.0:
106 ; CHECK-NEXT:    lea %s1, 256
107 ; CHECK-NEXT:    lvl %s1
108 ; CHECK-NEXT:    vbrd %v0, %s0
109 ; CHECK-NEXT:    b.l.t (, %s10)
110   %val = insertelement <128 x i64> undef, i64 %s, i32 0
111   %ret = shufflevector <128 x i64> %val, <128 x i64> undef, <128 x i32> zeroinitializer
112   ret <128 x i64> %ret
115 define fastcc <128 x double> @brd_v128f64(double %s) {
116 ; CHECK-LABEL: brd_v128f64:
117 ; CHECK:       # %bb.0:
118 ; CHECK-NEXT:    lea %s1, 256
119 ; CHECK-NEXT:    lvl %s1
120 ; CHECK-NEXT:    vbrd %v0, %s0
121 ; CHECK-NEXT:    b.l.t (, %s10)
122   %val = insertelement <128 x double> undef, double %s, i32 0
123   %ret = shufflevector <128 x double> %val, <128 x double> undef, <128 x i32> zeroinitializer
124   ret <128 x double> %ret
127 define fastcc <128 x i32> @brd_v128i32(i32 %s) {
128 ; CHECK-LABEL: brd_v128i32:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    and %s0, %s0, (32)0
131 ; CHECK-NEXT:    lea %s1, 256
132 ; CHECK-NEXT:    lvl %s1
133 ; CHECK-NEXT:    vbrd %v0, %s0
134 ; CHECK-NEXT:    b.l.t (, %s10)
135   %val = insertelement <128 x i32> undef, i32 %s, i32 0
136   %ret = shufflevector <128 x i32> %val, <128 x i32> undef, <128 x i32> zeroinitializer
137   ret <128 x i32> %ret
140 define fastcc <128 x i32> @brdi_v128i32(i32 %s) {
141 ; CHECK-LABEL: brdi_v128i32:
142 ; CHECK:       # %bb.0:
143 ; CHECK-NEXT:    lea %s0, 256
144 ; CHECK-NEXT:    lvl %s0
145 ; CHECK-NEXT:    vbrd %v0, 13
146 ; CHECK-NEXT:    b.l.t (, %s10)
147   %val = insertelement <128 x i32> undef, i32 13, i32 0
148   %ret = shufflevector <128 x i32> %val, <128 x i32> undef, <128 x i32> zeroinitializer
149   ret <128 x i32> %ret
152 define fastcc <128 x float> @brd_v128f32(float %s) {
153 ; CHECK-LABEL: brd_v128f32:
154 ; CHECK:       # %bb.0:
155 ; CHECK-NEXT:    lea %s1, 256
156 ; CHECK-NEXT:    lvl %s1
157 ; CHECK-NEXT:    vbrd %v0, %s0
158 ; CHECK-NEXT:    b.l.t (, %s10)
159   %val = insertelement <128 x float> undef, float %s, i32 0
160   %ret = shufflevector <128 x float> %val, <128 x float> undef, <128 x i32> zeroinitializer
161   ret <128 x float> %ret
164 define fastcc <128 x float> @brdi_v128f32(float %s) {
165 ; CHECK-LABEL: brdi_v128f32:
166 ; CHECK:       # %bb.0:
167 ; CHECK-NEXT:    lea %s0, 256
168 ; CHECK-NEXT:    lvl %s0
169 ; CHECK-NEXT:    vbrd %v0, 0
170 ; CHECK-NEXT:    b.l.t (, %s10)
171   %val = insertelement <128 x float> undef, float 0.e+00, i32 0
172   %ret = shufflevector <128 x float> %val, <128 x float> undef, <128 x i32> zeroinitializer
173   ret <128 x float> %ret
176 ; Vectors with small element types and valid element count, we expect those to be promoted.
177 define fastcc <256 x i16> @brd_v256i16(i16 %s) {
178 ; CHECK-LABEL: brd_v256i16:
179 ; CHECK:       # %bb.0:
180 ; CHECK-NEXT:    and %s0, %s0, (32)0
181 ; CHECK-NEXT:    lea %s1, 256
182 ; CHECK-NEXT:    lvl %s1
183 ; CHECK-NEXT:    vbrd %v0, %s0
184 ; CHECK-NEXT:    b.l.t (, %s10)
185   %val = insertelement <256 x i16> undef, i16 %s, i32 0
186   %ret = shufflevector <256 x i16> %val, <256 x i16> undef, <256 x i32> zeroinitializer
187   ret <256 x i16> %ret
190 ; Vectors with small element types and low element count, these are scalarized for now.
191 ; FIXME Promote + Widen
192 define fastcc <128 x i16> @brd_v128i16(i16 %s) {
193 ; CHECK-LABEL: brd_v128i16:
194 ; CHECK:       # %bb.0:
195 ; CHECK-NEXT:    and %s1, %s1, (32)0
196 ; CHECK-NEXT:    st2b %s1, 254(, %s0)
197 ; CHECK-NEXT:    st2b %s1, 252(, %s0)
198 ; CHECK-NEXT:    st2b %s1, 250(, %s0)
199 ; CHECK-NEXT:    st2b %s1, 248(, %s0)
200 ; CHECK-NEXT:    st2b %s1, 246(, %s0)
201 ; CHECK-NEXT:    st2b %s1, 244(, %s0)
202 ; CHECK-NEXT:    st2b %s1, 242(, %s0)
203 ; CHECK-NEXT:    st2b %s1, 240(, %s0)
204 ; CHECK-NEXT:    st2b %s1, 238(, %s0)
205 ; CHECK-NEXT:    st2b %s1, 236(, %s0)
206 ; CHECK-NEXT:    st2b %s1, 234(, %s0)
207 ; CHECK-NEXT:    st2b %s1, 232(, %s0)
208 ; CHECK-NEXT:    st2b %s1, 230(, %s0)
209 ; CHECK-NEXT:    st2b %s1, 228(, %s0)
210 ; CHECK-NEXT:    st2b %s1, 226(, %s0)
211 ; CHECK-NEXT:    st2b %s1, 224(, %s0)
212 ; CHECK-NEXT:    st2b %s1, 222(, %s0)
213 ; CHECK-NEXT:    st2b %s1, 220(, %s0)
214 ; CHECK-NEXT:    st2b %s1, 218(, %s0)
215 ; CHECK-NEXT:    st2b %s1, 216(, %s0)
216 ; CHECK-NEXT:    st2b %s1, 214(, %s0)
217 ; CHECK-NEXT:    st2b %s1, 212(, %s0)
218 ; CHECK-NEXT:    st2b %s1, 210(, %s0)
219 ; CHECK-NEXT:    st2b %s1, 208(, %s0)
220 ; CHECK-NEXT:    st2b %s1, 206(, %s0)
221 ; CHECK-NEXT:    st2b %s1, 204(, %s0)
222 ; CHECK-NEXT:    st2b %s1, 202(, %s0)
223 ; CHECK-NEXT:    st2b %s1, 200(, %s0)
224 ; CHECK-NEXT:    st2b %s1, 198(, %s0)
225 ; CHECK-NEXT:    st2b %s1, 196(, %s0)
226 ; CHECK-NEXT:    st2b %s1, 194(, %s0)
227 ; CHECK-NEXT:    st2b %s1, 192(, %s0)
228 ; CHECK-NEXT:    st2b %s1, 190(, %s0)
229 ; CHECK-NEXT:    st2b %s1, 188(, %s0)
230 ; CHECK-NEXT:    st2b %s1, 186(, %s0)
231 ; CHECK-NEXT:    st2b %s1, 184(, %s0)
232 ; CHECK-NEXT:    st2b %s1, 182(, %s0)
233 ; CHECK-NEXT:    st2b %s1, 180(, %s0)
234 ; CHECK-NEXT:    st2b %s1, 178(, %s0)
235 ; CHECK-NEXT:    st2b %s1, 176(, %s0)
236 ; CHECK-NEXT:    st2b %s1, 174(, %s0)
237 ; CHECK-NEXT:    st2b %s1, 172(, %s0)
238 ; CHECK-NEXT:    st2b %s1, 170(, %s0)
239 ; CHECK-NEXT:    st2b %s1, 168(, %s0)
240 ; CHECK-NEXT:    st2b %s1, 166(, %s0)
241 ; CHECK-NEXT:    st2b %s1, 164(, %s0)
242 ; CHECK-NEXT:    st2b %s1, 162(, %s0)
243 ; CHECK-NEXT:    st2b %s1, 160(, %s0)
244 ; CHECK-NEXT:    st2b %s1, 158(, %s0)
245 ; CHECK-NEXT:    st2b %s1, 156(, %s0)
246 ; CHECK-NEXT:    st2b %s1, 154(, %s0)
247 ; CHECK-NEXT:    st2b %s1, 152(, %s0)
248 ; CHECK-NEXT:    st2b %s1, 150(, %s0)
249 ; CHECK-NEXT:    st2b %s1, 148(, %s0)
250 ; CHECK-NEXT:    st2b %s1, 146(, %s0)
251 ; CHECK-NEXT:    st2b %s1, 144(, %s0)
252 ; CHECK-NEXT:    st2b %s1, 142(, %s0)
253 ; CHECK-NEXT:    st2b %s1, 140(, %s0)
254 ; CHECK-NEXT:    st2b %s1, 138(, %s0)
255 ; CHECK-NEXT:    st2b %s1, 136(, %s0)
256 ; CHECK-NEXT:    st2b %s1, 134(, %s0)
257 ; CHECK-NEXT:    st2b %s1, 132(, %s0)
258 ; CHECK-NEXT:    st2b %s1, 130(, %s0)
259 ; CHECK-NEXT:    st2b %s1, 128(, %s0)
260 ; CHECK-NEXT:    st2b %s1, 126(, %s0)
261 ; CHECK-NEXT:    st2b %s1, 124(, %s0)
262 ; CHECK-NEXT:    st2b %s1, 122(, %s0)
263 ; CHECK-NEXT:    st2b %s1, 120(, %s0)
264 ; CHECK-NEXT:    st2b %s1, 118(, %s0)
265 ; CHECK-NEXT:    st2b %s1, 116(, %s0)
266 ; CHECK-NEXT:    st2b %s1, 114(, %s0)
267 ; CHECK-NEXT:    st2b %s1, 112(, %s0)
268 ; CHECK-NEXT:    st2b %s1, 110(, %s0)
269 ; CHECK-NEXT:    st2b %s1, 108(, %s0)
270 ; CHECK-NEXT:    st2b %s1, 106(, %s0)
271 ; CHECK-NEXT:    st2b %s1, 104(, %s0)
272 ; CHECK-NEXT:    st2b %s1, 102(, %s0)
273 ; CHECK-NEXT:    st2b %s1, 100(, %s0)
274 ; CHECK-NEXT:    st2b %s1, 98(, %s0)
275 ; CHECK-NEXT:    st2b %s1, 96(, %s0)
276 ; CHECK-NEXT:    st2b %s1, 94(, %s0)
277 ; CHECK-NEXT:    st2b %s1, 92(, %s0)
278 ; CHECK-NEXT:    st2b %s1, 90(, %s0)
279 ; CHECK-NEXT:    st2b %s1, 88(, %s0)
280 ; CHECK-NEXT:    st2b %s1, 86(, %s0)
281 ; CHECK-NEXT:    st2b %s1, 84(, %s0)
282 ; CHECK-NEXT:    st2b %s1, 82(, %s0)
283 ; CHECK-NEXT:    st2b %s1, 80(, %s0)
284 ; CHECK-NEXT:    st2b %s1, 78(, %s0)
285 ; CHECK-NEXT:    st2b %s1, 76(, %s0)
286 ; CHECK-NEXT:    st2b %s1, 74(, %s0)
287 ; CHECK-NEXT:    st2b %s1, 72(, %s0)
288 ; CHECK-NEXT:    st2b %s1, 70(, %s0)
289 ; CHECK-NEXT:    st2b %s1, 68(, %s0)
290 ; CHECK-NEXT:    st2b %s1, 66(, %s0)
291 ; CHECK-NEXT:    st2b %s1, 64(, %s0)
292 ; CHECK-NEXT:    st2b %s1, 62(, %s0)
293 ; CHECK-NEXT:    st2b %s1, 60(, %s0)
294 ; CHECK-NEXT:    st2b %s1, 58(, %s0)
295 ; CHECK-NEXT:    st2b %s1, 56(, %s0)
296 ; CHECK-NEXT:    st2b %s1, 54(, %s0)
297 ; CHECK-NEXT:    st2b %s1, 52(, %s0)
298 ; CHECK-NEXT:    st2b %s1, 50(, %s0)
299 ; CHECK-NEXT:    st2b %s1, 48(, %s0)
300 ; CHECK-NEXT:    st2b %s1, 46(, %s0)
301 ; CHECK-NEXT:    st2b %s1, 44(, %s0)
302 ; CHECK-NEXT:    st2b %s1, 42(, %s0)
303 ; CHECK-NEXT:    st2b %s1, 40(, %s0)
304 ; CHECK-NEXT:    st2b %s1, 38(, %s0)
305 ; CHECK-NEXT:    st2b %s1, 36(, %s0)
306 ; CHECK-NEXT:    st2b %s1, 34(, %s0)
307 ; CHECK-NEXT:    st2b %s1, 32(, %s0)
308 ; CHECK-NEXT:    st2b %s1, 30(, %s0)
309 ; CHECK-NEXT:    st2b %s1, 28(, %s0)
310 ; CHECK-NEXT:    st2b %s1, 26(, %s0)
311 ; CHECK-NEXT:    st2b %s1, 24(, %s0)
312 ; CHECK-NEXT:    st2b %s1, 22(, %s0)
313 ; CHECK-NEXT:    st2b %s1, 20(, %s0)
314 ; CHECK-NEXT:    st2b %s1, 18(, %s0)
315 ; CHECK-NEXT:    st2b %s1, 16(, %s0)
316 ; CHECK-NEXT:    st2b %s1, 14(, %s0)
317 ; CHECK-NEXT:    st2b %s1, 12(, %s0)
318 ; CHECK-NEXT:    st2b %s1, 10(, %s0)
319 ; CHECK-NEXT:    st2b %s1, 8(, %s0)
320 ; CHECK-NEXT:    st2b %s1, 6(, %s0)
321 ; CHECK-NEXT:    st2b %s1, 4(, %s0)
322 ; CHECK-NEXT:    st2b %s1, 2(, %s0)
323 ; CHECK-NEXT:    st2b %s1, (, %s0)
324 ; CHECK-NEXT:    b.l.t (, %s10)
325   %val = insertelement <128 x i16> undef, i16 %s, i32 0
326   %ret = shufflevector <128 x i16> %val, <128 x i16> undef, <128 x i32> zeroinitializer
327   ret <128 x i16> %ret