Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / Thumb2 / mve-pred-const.ll
blob382492e429c05c98c20f46394627cffcbb1101f5
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s
4 define arm_aapcs_vfpcc i32 @build_v2i_v2i1_1() {
5 ; CHECK-LABEL: build_v2i_v2i1_1:
6 ; CHECK:       @ %bb.0:
7 ; CHECK-NEXT:    movw r0, #65535
8 ; CHECK-NEXT:    bx lr
9   %r = call i32 @llvm.arm.mve.pred.v2i.v2i1(<2 x i1> <i1 1, i1 1>)
10   ret i32 %r
12 define arm_aapcs_vfpcc i32 @build_v2i_v2i1_0() {
13 ; CHECK-LABEL: build_v2i_v2i1_0:
14 ; CHECK:       @ %bb.0:
15 ; CHECK-NEXT:    movs r0, #0
16 ; CHECK-NEXT:    bx lr
17   %r = call i32 @llvm.arm.mve.pred.v2i.v2i1(<2 x i1> <i1 0, i1 0>)
18   ret i32 %r
20 define arm_aapcs_vfpcc i32 @build_v2i_v2i1_5() {
21 ; CHECK-LABEL: build_v2i_v2i1_5:
22 ; CHECK:       @ %bb.0:
23 ; CHECK-NEXT:    mov.w r0, #65280
24 ; CHECK-NEXT:    bx lr
25   %r = call i32 @llvm.arm.mve.pred.v2i.v2i1(<2 x i1> <i1 0, i1 1>)
26   ret i32 %r
29 define arm_aapcs_vfpcc i32 @build_v2i_v4i1_1() {
30 ; CHECK-LABEL: build_v2i_v4i1_1:
31 ; CHECK:       @ %bb.0:
32 ; CHECK-NEXT:    movw r0, #65535
33 ; CHECK-NEXT:    bx lr
34   %r = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> <i1 1, i1 1, i1 1, i1 1>)
35   ret i32 %r
37 define arm_aapcs_vfpcc i32 @build_v2i_v4i1_0() {
38 ; CHECK-LABEL: build_v2i_v4i1_0:
39 ; CHECK:       @ %bb.0:
40 ; CHECK-NEXT:    movs r0, #0
41 ; CHECK-NEXT:    bx lr
42   %r = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> <i1 0, i1 0, i1 0, i1 0>)
43   ret i32 %r
45 define arm_aapcs_vfpcc i32 @build_v2i_v4i1_5() {
46 ; CHECK-LABEL: build_v2i_v4i1_5:
47 ; CHECK:       @ %bb.0:
48 ; CHECK-NEXT:    movw r0, #61680
49 ; CHECK-NEXT:    bx lr
50   %r = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> <i1 0, i1 1, i1 0, i1 1>)
51   ret i32 %r
54 define arm_aapcs_vfpcc i32 @build_v2i_v8i1_1() {
55 ; CHECK-LABEL: build_v2i_v8i1_1:
56 ; CHECK:       @ %bb.0:
57 ; CHECK-NEXT:    movw r0, #65535
58 ; CHECK-NEXT:    bx lr
59   %r = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>)
60   ret i32 %r
62 define arm_aapcs_vfpcc i32 @build_v2i_v8i1_0() {
63 ; CHECK-LABEL: build_v2i_v8i1_0:
64 ; CHECK:       @ %bb.0:
65 ; CHECK-NEXT:    movs r0, #0
66 ; CHECK-NEXT:    bx lr
67   %r = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0>)
68   ret i32 %r
70 define arm_aapcs_vfpcc i32 @build_v2i_v8i1_5() {
71 ; CHECK-LABEL: build_v2i_v8i1_5:
72 ; CHECK:       @ %bb.0:
73 ; CHECK-NEXT:    movw r0, #52428
74 ; CHECK-NEXT:    bx lr
75   %r = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
76   ret i32 %r
79 define arm_aapcs_vfpcc i32 @build_v2i_v16i1_1() {
80 ; CHECK-LABEL: build_v2i_v16i1_1:
81 ; CHECK:       @ %bb.0:
82 ; CHECK-NEXT:    movw r0, #65535
83 ; CHECK-NEXT:    bx lr
84   %r = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> <i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1, i1 1>)
85   ret i32 %r
87 define arm_aapcs_vfpcc i32 @build_v2i_v16i1_0() {
88 ; CHECK-LABEL: build_v2i_v16i1_0:
89 ; CHECK:       @ %bb.0:
90 ; CHECK-NEXT:    movs r0, #0
91 ; CHECK-NEXT:    bx lr
92   %r = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> <i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0, i1 0>)
93   ret i32 %r
95 define arm_aapcs_vfpcc i32 @build_v2i_v16i1_5() {
96 ; CHECK-LABEL: build_v2i_v16i1_5:
97 ; CHECK:       @ %bb.0:
98 ; CHECK-NEXT:    movw r0, #43690
99 ; CHECK-NEXT:    bx lr
100   %r = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
101   ret i32 %r
106 define arm_aapcs_vfpcc <2 x i64> @build_i2v_v2i1_1() {
107 ; CHECK-LABEL: build_i2v_v2i1_1:
108 ; CHECK:       @ %bb.0:
109 ; CHECK-NEXT:    movw r0, #65535
110 ; CHECK-NEXT:    vmov.i32 q0, #0x0
111 ; CHECK-NEXT:    vmsr p0, r0
112 ; CHECK-NEXT:    vmov.i8 q1, #0xff
113 ; CHECK-NEXT:    vpsel q0, q1, q0
114 ; CHECK-NEXT:    bx lr
115   %c = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 65535)
116   %r = select <2 x i1> %c, <2 x i64> <i64 18446744073709551615, i64 18446744073709551615>, <2 x i64> <i64 0, i64 0>
117   ret <2 x i64> %r
119 define arm_aapcs_vfpcc <2 x i64> @build_i2v_v2i1_0() {
120 ; CHECK-LABEL: build_i2v_v2i1_0:
121 ; CHECK:       @ %bb.0:
122 ; CHECK-NEXT:    movs r0, #0
123 ; CHECK-NEXT:    vmov.i32 q0, #0x0
124 ; CHECK-NEXT:    vmsr p0, r0
125 ; CHECK-NEXT:    vmov.i8 q1, #0xff
126 ; CHECK-NEXT:    vpsel q0, q1, q0
127 ; CHECK-NEXT:    bx lr
128   %c = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 0)
129   %r = select <2 x i1> %c, <2 x i64> <i64 18446744073709551615, i64 18446744073709551615>, <2 x i64> <i64 0, i64 0>
130   ret <2 x i64> %r
132 define arm_aapcs_vfpcc <2 x i64> @build_i2v_v2i1_5() {
133 ; CHECK-LABEL: build_i2v_v2i1_5:
134 ; CHECK:       @ %bb.0:
135 ; CHECK-NEXT:    movw r0, #61680
136 ; CHECK-NEXT:    vmov.i32 q0, #0x0
137 ; CHECK-NEXT:    vmsr p0, r0
138 ; CHECK-NEXT:    vmov.i8 q1, #0xff
139 ; CHECK-NEXT:    vpsel q0, q1, q0
140 ; CHECK-NEXT:    bx lr
141   %c = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 61680)
142   %r = select <2 x i1> %c, <2 x i64> <i64 18446744073709551615, i64 18446744073709551615>, <2 x i64> <i64 0, i64 0>
143   ret <2 x i64> %r
146 define arm_aapcs_vfpcc <4 x i32> @build_i2v_v4i1_1() {
147 ; CHECK-LABEL: build_i2v_v4i1_1:
148 ; CHECK:       @ %bb.0:
149 ; CHECK-NEXT:    movw r0, #65535
150 ; CHECK-NEXT:    vmov.i32 q0, #0x0
151 ; CHECK-NEXT:    vmsr p0, r0
152 ; CHECK-NEXT:    vmov.i8 q1, #0xff
153 ; CHECK-NEXT:    vpsel q0, q1, q0
154 ; CHECK-NEXT:    bx lr
155   %c = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 65535)
156   %r = select <4 x i1> %c, <4 x i32> <i32 4294967295, i32 4294967295, i32 4294967295, i32 4294967295>, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
157   ret <4 x i32> %r
159 define arm_aapcs_vfpcc <4 x i32> @build_i2v_v4i1_0() {
160 ; CHECK-LABEL: build_i2v_v4i1_0:
161 ; CHECK:       @ %bb.0:
162 ; CHECK-NEXT:    movs r0, #0
163 ; CHECK-NEXT:    vmov.i32 q0, #0x0
164 ; CHECK-NEXT:    vmsr p0, r0
165 ; CHECK-NEXT:    vmov.i8 q1, #0xff
166 ; CHECK-NEXT:    vpsel q0, q1, q0
167 ; CHECK-NEXT:    bx lr
168   %c = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 0)
169   %r = select <4 x i1> %c, <4 x i32> <i32 4294967295, i32 4294967295, i32 4294967295, i32 4294967295>, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
170   ret <4 x i32> %r
172 define arm_aapcs_vfpcc <4 x i32> @build_i2v_v4i1_5() {
173 ; CHECK-LABEL: build_i2v_v4i1_5:
174 ; CHECK:       @ %bb.0:
175 ; CHECK-NEXT:    movw r0, #61680
176 ; CHECK-NEXT:    vmov.i32 q0, #0x0
177 ; CHECK-NEXT:    vmsr p0, r0
178 ; CHECK-NEXT:    vmov.i8 q1, #0xff
179 ; CHECK-NEXT:    vpsel q0, q1, q0
180 ; CHECK-NEXT:    bx lr
181   %c = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 61680)
182   %r = select <4 x i1> %c, <4 x i32> <i32 4294967295, i32 4294967295, i32 4294967295, i32 4294967295>, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
183   ret <4 x i32> %r
186 define arm_aapcs_vfpcc <8 x i16> @build_i2v_v8i1_1() {
187 ; CHECK-LABEL: build_i2v_v8i1_1:
188 ; CHECK:       @ %bb.0:
189 ; CHECK-NEXT:    movw r0, #65535
190 ; CHECK-NEXT:    vmov.i32 q0, #0x0
191 ; CHECK-NEXT:    vmsr p0, r0
192 ; CHECK-NEXT:    vmov.i8 q1, #0xff
193 ; CHECK-NEXT:    vpsel q0, q1, q0
194 ; CHECK-NEXT:    bx lr
195   %c = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 65535)
196   %r = select <8 x i1> %c, <8 x i16> <i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535>, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
197   ret <8 x i16> %r
199 define arm_aapcs_vfpcc <8 x i16> @build_i2v_v8i1_0() {
200 ; CHECK-LABEL: build_i2v_v8i1_0:
201 ; CHECK:       @ %bb.0:
202 ; CHECK-NEXT:    movs r0, #0
203 ; CHECK-NEXT:    vmov.i32 q0, #0x0
204 ; CHECK-NEXT:    vmsr p0, r0
205 ; CHECK-NEXT:    vmov.i8 q1, #0xff
206 ; CHECK-NEXT:    vpsel q0, q1, q0
207 ; CHECK-NEXT:    bx lr
208   %c = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 0)
209   %r = select <8 x i1> %c, <8 x i16> <i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535>, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
210   ret <8 x i16> %r
212 define arm_aapcs_vfpcc <8 x i16> @build_i2v_v8i1_5() {
213 ; CHECK-LABEL: build_i2v_v8i1_5:
214 ; CHECK:       @ %bb.0:
215 ; CHECK-NEXT:    movw r0, #52428
216 ; CHECK-NEXT:    vmov.i32 q0, #0x0
217 ; CHECK-NEXT:    vmsr p0, r0
218 ; CHECK-NEXT:    vmov.i8 q1, #0xff
219 ; CHECK-NEXT:    vpsel q0, q1, q0
220 ; CHECK-NEXT:    bx lr
221   %c = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 52428)
222   %r = select <8 x i1> %c, <8 x i16> <i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535>, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
223   ret <8 x i16> %r
226 define arm_aapcs_vfpcc <16 x i8> @build_i2v_v16i1_1() {
227 ; CHECK-LABEL: build_i2v_v16i1_1:
228 ; CHECK:       @ %bb.0:
229 ; CHECK-NEXT:    movw r0, #65535
230 ; CHECK-NEXT:    vmov.i32 q0, #0x0
231 ; CHECK-NEXT:    vmsr p0, r0
232 ; CHECK-NEXT:    vmov.i8 q1, #0xff
233 ; CHECK-NEXT:    vpsel q0, q1, q0
234 ; CHECK-NEXT:    bx lr
235   %c = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 65535)
236   %r = select <16 x i1> %c, <16 x i8> <i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255>, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
237   ret <16 x i8> %r
239 define arm_aapcs_vfpcc <16 x i8> @build_i2v_v16i1_0() {
240 ; CHECK-LABEL: build_i2v_v16i1_0:
241 ; CHECK:       @ %bb.0:
242 ; CHECK-NEXT:    movs r0, #0
243 ; CHECK-NEXT:    vmov.i32 q0, #0x0
244 ; CHECK-NEXT:    vmsr p0, r0
245 ; CHECK-NEXT:    vmov.i8 q1, #0xff
246 ; CHECK-NEXT:    vpsel q0, q1, q0
247 ; CHECK-NEXT:    bx lr
248   %c = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 0)
249   %r = select <16 x i1> %c, <16 x i8> <i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255>, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
250   ret <16 x i8> %r
252 define arm_aapcs_vfpcc <16 x i8> @build_i2v_v16i1_5() {
253 ; CHECK-LABEL: build_i2v_v16i1_5:
254 ; CHECK:       @ %bb.0:
255 ; CHECK-NEXT:    movw r0, #43690
256 ; CHECK-NEXT:    vmov.i32 q0, #0x0
257 ; CHECK-NEXT:    vmsr p0, r0
258 ; CHECK-NEXT:    vmov.i8 q1, #0xff
259 ; CHECK-NEXT:    vpsel q0, q1, q0
260 ; CHECK-NEXT:    bx lr
261   %c = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 43690)
262   %r = select <16 x i1> %c, <16 x i8> <i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255>, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
263   ret <16 x i8> %r
267 define arm_aapcs_vfpcc i32 @build_i2v2i_v2i1_5() {
268 ; CHECK-LABEL: build_i2v2i_v2i1_5:
269 ; CHECK:       @ %bb.0:
270 ; CHECK-NEXT:    movw r0, #61680
271 ; CHECK-NEXT:    bx lr
272   %c = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 61680)
273   %r = call i32 @llvm.arm.mve.pred.v2i.v2i1(<2 x i1> %c)
274   ret i32 %r
276 define arm_aapcs_vfpcc i32 @build_i2v2i_v4i1_5() {
277 ; CHECK-LABEL: build_i2v2i_v4i1_5:
278 ; CHECK:       @ %bb.0:
279 ; CHECK-NEXT:    movw r0, #61680
280 ; CHECK-NEXT:    bx lr
281   %c = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 61680)
282   %r = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> %c)
283   ret i32 %r
285 define arm_aapcs_vfpcc i32 @build_i2v2i_v8i1_5() {
286 ; CHECK-LABEL: build_i2v2i_v8i1_5:
287 ; CHECK:       @ %bb.0:
288 ; CHECK-NEXT:    movw r0, #52428
289 ; CHECK-NEXT:    bx lr
290   %c = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 52428)
291   %r = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> %c)
292   ret i32 %r
294 define arm_aapcs_vfpcc i32 @build_i2v2i_v16i1_5() {
295 ; CHECK-LABEL: build_i2v2i_v16i1_5:
296 ; CHECK:       @ %bb.0:
297 ; CHECK-NEXT:    movw r0, #43690
298 ; CHECK-NEXT:    bx lr
299   %c = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 43690)
300   %r = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> %c)
301   ret i32 %r
305 define arm_aapcs_vfpcc <2 x i64> @build_v2i2v_v4i1_v2i1_5() {
306 ; CHECK-LABEL: build_v2i2v_v4i1_v2i1_5:
307 ; CHECK:       @ %bb.0:
308 ; CHECK-NEXT:    movw r0, #61680
309 ; CHECK-NEXT:    vmov.i32 q0, #0x0
310 ; CHECK-NEXT:    vmsr p0, r0
311 ; CHECK-NEXT:    vmov.i8 q1, #0xff
312 ; CHECK-NEXT:    vpsel q0, q1, q0
313 ; CHECK-NEXT:    bx lr
314   %b = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> <i1 0, i1 1, i1 0, i1 1>)
315   %c = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 %b)
316   %r = select <2 x i1> %c, <2 x i64> <i64 -1, i64 -1>, <2 x i64> zeroinitializer
317   ret <2 x i64> %r
319 define arm_aapcs_vfpcc <2 x i64> @build_v2i2v_v8i1_v2i1_5() {
320 ; CHECK-LABEL: build_v2i2v_v8i1_v2i1_5:
321 ; CHECK:       @ %bb.0:
322 ; CHECK-NEXT:    movw r0, #52428
323 ; CHECK-NEXT:    vmov.i32 q0, #0x0
324 ; CHECK-NEXT:    vmsr p0, r0
325 ; CHECK-NEXT:    vmov.i8 q1, #0xff
326 ; CHECK-NEXT:    vpsel q0, q1, q0
327 ; CHECK-NEXT:    bx lr
328   %b = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
329   %c = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 %b)
330   %r = select <2 x i1> %c, <2 x i64> <i64 -1, i64 -1>, <2 x i64> zeroinitializer
331   ret <2 x i64> %r
333 define arm_aapcs_vfpcc <2 x i64> @build_v2i2v_v16i1_v2i1_5() {
334 ; CHECK-LABEL: build_v2i2v_v16i1_v2i1_5:
335 ; CHECK:       @ %bb.0:
336 ; CHECK-NEXT:    movw r0, #43690
337 ; CHECK-NEXT:    vmov.i32 q0, #0x0
338 ; CHECK-NEXT:    vmsr p0, r0
339 ; CHECK-NEXT:    vmov.i8 q1, #0xff
340 ; CHECK-NEXT:    vpsel q0, q1, q0
341 ; CHECK-NEXT:    bx lr
342   %b = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
343   %c = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 %b)
344   %r = select <2 x i1> %c, <2 x i64> <i64 -1, i64 -1>, <2 x i64> zeroinitializer
345   ret <2 x i64> %r
348 define arm_aapcs_vfpcc <4 x i32> @build_v2i2v_v4i1_v4i1_5() {
349 ; CHECK-LABEL: build_v2i2v_v4i1_v4i1_5:
350 ; CHECK:       @ %bb.0:
351 ; CHECK-NEXT:    movw r0, #61680
352 ; CHECK-NEXT:    vmov.i32 q0, #0x0
353 ; CHECK-NEXT:    vmsr p0, r0
354 ; CHECK-NEXT:    vmov.i8 q1, #0xff
355 ; CHECK-NEXT:    vpsel q0, q1, q0
356 ; CHECK-NEXT:    bx lr
357   %b = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> <i1 0, i1 1, i1 0, i1 1>)
358   %c = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %b)
359   %r = select <4 x i1> %c, <4 x i32> <i32 4294967295, i32 4294967295, i32 4294967295, i32 4294967295>, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
360   ret <4 x i32> %r
362 define arm_aapcs_vfpcc <4 x i32> @build_v2i2v_v8i1_v4i1_5() {
363 ; CHECK-LABEL: build_v2i2v_v8i1_v4i1_5:
364 ; CHECK:       @ %bb.0:
365 ; CHECK-NEXT:    movw r0, #52428
366 ; CHECK-NEXT:    vmov.i32 q0, #0x0
367 ; CHECK-NEXT:    vmsr p0, r0
368 ; CHECK-NEXT:    vmov.i8 q1, #0xff
369 ; CHECK-NEXT:    vpsel q0, q1, q0
370 ; CHECK-NEXT:    bx lr
371   %b = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
372   %c = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %b)
373   %r = select <4 x i1> %c, <4 x i32> <i32 4294967295, i32 4294967295, i32 4294967295, i32 4294967295>, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
374   ret <4 x i32> %r
376 define arm_aapcs_vfpcc <4 x i32> @build_v2i2v_v16i1_v4i1_5() {
377 ; CHECK-LABEL: build_v2i2v_v16i1_v4i1_5:
378 ; CHECK:       @ %bb.0:
379 ; CHECK-NEXT:    movw r0, #43690
380 ; CHECK-NEXT:    vmov.i32 q0, #0x0
381 ; CHECK-NEXT:    vmsr p0, r0
382 ; CHECK-NEXT:    vmov.i8 q1, #0xff
383 ; CHECK-NEXT:    vpsel q0, q1, q0
384 ; CHECK-NEXT:    bx lr
385   %b = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
386   %c = call <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32 %b)
387   %r = select <4 x i1> %c, <4 x i32> <i32 4294967295, i32 4294967295, i32 4294967295, i32 4294967295>, <4 x i32> <i32 0, i32 0, i32 0, i32 0>
388   ret <4 x i32> %r
391 define arm_aapcs_vfpcc <8 x i16> @build_v2i2v_v4i1_v8i1_5() {
392 ; CHECK-LABEL: build_v2i2v_v4i1_v8i1_5:
393 ; CHECK:       @ %bb.0:
394 ; CHECK-NEXT:    movw r0, #61680
395 ; CHECK-NEXT:    vmov.i32 q0, #0x0
396 ; CHECK-NEXT:    vmsr p0, r0
397 ; CHECK-NEXT:    vmov.i8 q1, #0xff
398 ; CHECK-NEXT:    vpsel q0, q1, q0
399 ; CHECK-NEXT:    bx lr
400   %b = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> <i1 0, i1 1, i1 0, i1 1>)
401   %c = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %b)
402   %r = select <8 x i1> %c, <8 x i16> <i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535>, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
403   ret <8 x i16> %r
405 define arm_aapcs_vfpcc <8 x i16> @build_v2i2v_v8i1_v8i1_5() {
406 ; CHECK-LABEL: build_v2i2v_v8i1_v8i1_5:
407 ; CHECK:       @ %bb.0:
408 ; CHECK-NEXT:    movw r0, #52428
409 ; CHECK-NEXT:    vmov.i32 q0, #0x0
410 ; CHECK-NEXT:    vmsr p0, r0
411 ; CHECK-NEXT:    vmov.i8 q1, #0xff
412 ; CHECK-NEXT:    vpsel q0, q1, q0
413 ; CHECK-NEXT:    bx lr
414   %b = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
415   %c = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %b)
416   %r = select <8 x i1> %c, <8 x i16> <i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535>, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
417   ret <8 x i16> %r
419 define arm_aapcs_vfpcc <8 x i16> @build_v2i2v_v16i1_v8i1_5() {
420 ; CHECK-LABEL: build_v2i2v_v16i1_v8i1_5:
421 ; CHECK:       @ %bb.0:
422 ; CHECK-NEXT:    movw r0, #43690
423 ; CHECK-NEXT:    vmov.i32 q0, #0x0
424 ; CHECK-NEXT:    vmsr p0, r0
425 ; CHECK-NEXT:    vmov.i8 q1, #0xff
426 ; CHECK-NEXT:    vpsel q0, q1, q0
427 ; CHECK-NEXT:    bx lr
428   %b = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
429   %c = call <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32 %b)
430   %r = select <8 x i1> %c, <8 x i16> <i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535, i16 65535>, <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>
431   ret <8 x i16> %r
434 define arm_aapcs_vfpcc <16 x i8> @build_v2i2v_v4i1_v16i1_5() {
435 ; CHECK-LABEL: build_v2i2v_v4i1_v16i1_5:
436 ; CHECK:       @ %bb.0:
437 ; CHECK-NEXT:    movw r0, #61680
438 ; CHECK-NEXT:    vmov.i32 q0, #0x0
439 ; CHECK-NEXT:    vmsr p0, r0
440 ; CHECK-NEXT:    vmov.i8 q1, #0xff
441 ; CHECK-NEXT:    vpsel q0, q1, q0
442 ; CHECK-NEXT:    bx lr
443   %b = call i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1> <i1 0, i1 1, i1 0, i1 1>)
444   %c = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %b)
445   %r = select <16 x i1> %c, <16 x i8> <i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255>, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
446   ret <16 x i8> %r
448 define arm_aapcs_vfpcc <16 x i8> @build_v2i2v_v8i1_v16i1_5() {
449 ; CHECK-LABEL: build_v2i2v_v8i1_v16i1_5:
450 ; CHECK:       @ %bb.0:
451 ; CHECK-NEXT:    movw r0, #52428
452 ; CHECK-NEXT:    vmov.i32 q0, #0x0
453 ; CHECK-NEXT:    vmsr p0, r0
454 ; CHECK-NEXT:    vmov.i8 q1, #0xff
455 ; CHECK-NEXT:    vpsel q0, q1, q0
456 ; CHECK-NEXT:    bx lr
457   %b = call i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
458   %c = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %b)
459   %r = select <16 x i1> %c, <16 x i8> <i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255>, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
460   ret <16 x i8> %r
462 define arm_aapcs_vfpcc <16 x i8> @build_v2i2v_v16i1_v16i1_5() {
463 ; CHECK-LABEL: build_v2i2v_v16i1_v16i1_5:
464 ; CHECK:       @ %bb.0:
465 ; CHECK-NEXT:    movw r0, #43690
466 ; CHECK-NEXT:    vmov.i32 q0, #0x0
467 ; CHECK-NEXT:    vmsr p0, r0
468 ; CHECK-NEXT:    vmov.i8 q1, #0xff
469 ; CHECK-NEXT:    vpsel q0, q1, q0
470 ; CHECK-NEXT:    bx lr
471   %b = call i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1> <i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0, i1 1>)
472   %c = call <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32 %b)
473   %r = select <16 x i1> %c, <16 x i8> <i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255, i8 255>, <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
474   ret <16 x i8> %r
477 declare i32 @llvm.arm.mve.pred.v2i.v2i1(<2 x i1>)
478 declare i32 @llvm.arm.mve.pred.v2i.v4i1(<4 x i1>)
479 declare i32 @llvm.arm.mve.pred.v2i.v8i1(<8 x i1>)
480 declare i32 @llvm.arm.mve.pred.v2i.v16i1(<16 x i1>)
482 declare <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32)
483 declare <4 x i1> @llvm.arm.mve.pred.i2v.v4i1(i32)
484 declare <8 x i1> @llvm.arm.mve.pred.i2v.v8i1(i32)
485 declare <16 x i1> @llvm.arm.mve.pred.i2v.v16i1(i32)