[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / sve-intrinsics-while.ll
blob0590c74d2efc9a0756bd196a03a0ceb064af8533
1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
4 ; WHILELE
7 define <vscale x 16 x i1> @whilele_b_ww(i32 %a, i32 %b) {
8 ; CHECK-LABEL: whilele_b_ww:
9 ; CHECK: whilele p0.b, w0, w1
10 ; CHECK-NEXT: ret
11   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32 %a, i32 %b)
12   ret <vscale x 16 x i1> %out
15 define <vscale x 16 x i1> @whilele_b_xx(i64 %a, i64 %b) {
16 ; CHECK-LABEL: whilele_b_xx:
17 ; CHECK: whilele p0.b, x0, x1
18 ; CHECK-NEXT: ret
19   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64 %a, i64 %b)
20   ret <vscale x 16 x i1> %out
23 define <vscale x 8 x i1> @whilele_h_ww(i32 %a, i32 %b) {
24 ; CHECK-LABEL: whilele_h_ww:
25 ; CHECK: whilele p0.h, w0, w1
26 ; CHECK-NEXT: ret
27   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i32(i32 %a, i32 %b)
28   ret <vscale x 8 x i1> %out
31 define <vscale x 8 x i1> @whilele_h_xx(i64 %a, i64 %b) {
32 ; CHECK-LABEL: whilele_h_xx:
33 ; CHECK: whilele p0.h, x0, x1
34 ; CHECK-NEXT: ret
35   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i64(i64 %a, i64 %b)
36   ret <vscale x 8 x i1> %out
39 define <vscale x 4 x i1> @whilele_s_ww(i32 %a, i32 %b) {
40 ; CHECK-LABEL: whilele_s_ww:
41 ; CHECK: whilele p0.s, w0, w1
42 ; CHECK-NEXT: ret
43   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i32(i32 %a, i32 %b)
44   ret <vscale x 4 x i1> %out
47 define <vscale x 4 x i1> @whilele_s_xx(i64 %a, i64 %b) {
48 ; CHECK-LABEL: whilele_s_xx:
49 ; CHECK: whilele p0.s, x0, x1
50 ; CHECK-NEXT: ret
51   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i64(i64 %a, i64 %b)
52   ret <vscale x 4 x i1> %out
55 define <vscale x 2 x i1> @whilele_d_ww(i32 %a, i32 %b) {
56 ; CHECK-LABEL: whilele_d_ww:
57 ; CHECK: whilele p0.d, w0, w1
58 ; CHECK-NEXT: ret
59   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i32(i32 %a, i32 %b)
60   ret <vscale x 2 x i1> %out
63 define <vscale x 2 x i1> @whilele_d_xx(i64 %a, i64 %b) {
64 ; CHECK-LABEL: whilele_d_xx:
65 ; CHECK: whilele p0.d, x0, x1
66 ; CHECK-NEXT: ret
67   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64 %a, i64 %b)
68   ret <vscale x 2 x i1> %out
72 ; WHILELO
75 define <vscale x 16 x i1> @whilelo_b_ww(i32 %a, i32 %b) {
76 ; CHECK-LABEL: whilelo_b_ww:
77 ; CHECK: whilelo p0.b, w0, w1
78 ; CHECK-NEXT: ret
79   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 %a, i32 %b)
80   ret <vscale x 16 x i1> %out
83 define <vscale x 16 x i1> @whilelo_b_xx(i64 %a, i64 %b) {
84 ; CHECK-LABEL: whilelo_b_xx:
85 ; CHECK: whilelo p0.b, x0, x1
86 ; CHECK-NEXT: ret
87   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 %a, i64 %b)
88   ret <vscale x 16 x i1> %out
91 define <vscale x 8 x i1> @whilelo_h_ww(i32 %a, i32 %b) {
92 ; CHECK-LABEL: whilelo_h_ww:
93 ; CHECK: whilelo p0.h, w0, w1
94 ; CHECK-NEXT: ret
95   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32 %a, i32 %b)
96   ret <vscale x 8 x i1> %out
99 define <vscale x 8 x i1> @whilelo_h_xx(i64 %a, i64 %b) {
100 ; CHECK-LABEL: whilelo_h_xx:
101 ; CHECK: whilelo p0.h, x0, x1
102 ; CHECK-NEXT: ret
103   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64 %a, i64 %b)
104   ret <vscale x 8 x i1> %out
107 define <vscale x 4 x i1> @whilelo_s_ww(i32 %a, i32 %b) {
108 ; CHECK-LABEL: whilelo_s_ww:
109 ; CHECK: whilelo p0.s, w0, w1
110 ; CHECK-NEXT: ret
111   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32 %a, i32 %b)
112   ret <vscale x 4 x i1> %out
115 define <vscale x 4 x i1> @whilelo_s_xx(i64 %a, i64 %b) {
116 ; CHECK-LABEL: whilelo_s_xx:
117 ; CHECK: whilelo p0.s, x0, x1
118 ; CHECK-NEXT: ret
119   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64 %a, i64 %b)
120   ret <vscale x 4 x i1> %out
123 define <vscale x 2 x i1> @whilelo_d_ww(i32 %a, i32 %b) {
124 ; CHECK-LABEL: whilelo_d_ww:
125 ; CHECK: whilelo p0.d, w0, w1
126 ; CHECK-NEXT: ret
127   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32 %a, i32 %b)
128   ret <vscale x 2 x i1> %out
131 define <vscale x 2 x i1> @whilelo_d_xx(i64 %a, i64 %b) {
132 ; CHECK-LABEL: whilelo_d_xx:
133 ; CHECK: whilelo p0.d, x0, x1
134 ; CHECK-NEXT: ret
135   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64 %a, i64 %b)
136   ret <vscale x 2 x i1> %out
140 ; WHILELS
143 define <vscale x 16 x i1> @whilels_b_ww(i32 %a, i32 %b) {
144 ; CHECK-LABEL: whilels_b_ww:
145 ; CHECK: whilels p0.b, w0, w1
146 ; CHECK-NEXT: ret
147   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32 %a, i32 %b)
148   ret <vscale x 16 x i1> %out
151 define <vscale x 16 x i1> @whilels_b_xx(i64 %a, i64 %b) {
152 ; CHECK-LABEL: whilels_b_xx:
153 ; CHECK: whilels p0.b, x0, x1
154 ; CHECK-NEXT: ret
155   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64 %a, i64 %b)
156   ret <vscale x 16 x i1> %out
159 define <vscale x 8 x i1> @whilels_h_ww(i32 %a, i32 %b) {
160 ; CHECK-LABEL: whilels_h_ww:
161 ; CHECK: whilels p0.h, w0, w1
162 ; CHECK-NEXT: ret
163   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i32(i32 %a, i32 %b)
164   ret <vscale x 8 x i1> %out
167 define <vscale x 8 x i1> @whilels_h_xx(i64 %a, i64 %b) {
168 ; CHECK-LABEL: whilels_h_xx:
169 ; CHECK: whilels p0.h, x0, x1
170 ; CHECK-NEXT: ret
171   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i64(i64 %a, i64 %b)
172   ret <vscale x 8 x i1> %out
175 define <vscale x 4 x i1> @whilels_s_ww(i32 %a, i32 %b) {
176 ; CHECK-LABEL: whilels_s_ww:
177 ; CHECK: whilels p0.s, w0, w1
178 ; CHECK-NEXT: ret
179   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i32(i32 %a, i32 %b)
180   ret <vscale x 4 x i1> %out
183 define <vscale x 4 x i1> @whilels_s_xx(i64 %a, i64 %b) {
184 ; CHECK-LABEL: whilels_s_xx:
185 ; CHECK: whilels p0.s, x0, x1
186 ; CHECK-NEXT: ret
187   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i64(i64 %a, i64 %b)
188   ret <vscale x 4 x i1> %out
191 define <vscale x 2 x i1> @whilels_d_ww(i32 %a, i32 %b) {
192 ; CHECK-LABEL: whilels_d_ww:
193 ; CHECK: whilels p0.d, w0, w1
194 ; CHECK-NEXT: ret
195   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i32(i32 %a, i32 %b)
196   ret <vscale x 2 x i1> %out
199 define <vscale x 2 x i1> @whilels_d_xx(i64 %a, i64 %b) {
200 ; CHECK-LABEL: whilels_d_xx:
201 ; CHECK: whilels p0.d, x0, x1
202 ; CHECK-NEXT: ret
203   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64 %a, i64 %b)
204   ret <vscale x 2 x i1> %out
208 ; WHILELT
211 define <vscale x 16 x i1> @whilelt_b_ww(i32 %a, i32 %b) {
212 ; CHECK-LABEL: whilelt_b_ww:
213 ; CHECK: whilelt p0.b, w0, w1
214 ; CHECK-NEXT: ret
215   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32 %a, i32 %b)
216   ret <vscale x 16 x i1> %out
219 define <vscale x 16 x i1> @whilelt_b_xx(i64 %a, i64 %b) {
220 ; CHECK-LABEL: whilelt_b_xx:
221 ; CHECK: whilelt p0.b, x0, x1
222 ; CHECK-NEXT: ret
223   %out = call <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64 %a, i64 %b)
224   ret <vscale x 16 x i1> %out
227 define <vscale x 8 x i1> @whilelt_h_ww(i32 %a, i32 %b) {
228 ; CHECK-LABEL: whilelt_h_ww:
229 ; CHECK: whilelt p0.h, w0, w1
230 ; CHECK-NEXT: ret
231   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i32(i32 %a, i32 %b)
232   ret <vscale x 8 x i1> %out
235 define <vscale x 8 x i1> @whilelt_h_xx(i64 %a, i64 %b) {
236 ; CHECK-LABEL: whilelt_h_xx:
237 ; CHECK: whilelt p0.h, x0, x1
238 ; CHECK-NEXT: ret
239   %out = call <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i64(i64 %a, i64 %b)
240   ret <vscale x 8 x i1> %out
243 define <vscale x 4 x i1> @whilelt_s_ww(i32 %a, i32 %b) {
244 ; CHECK-LABEL: whilelt_s_ww:
245 ; CHECK: whilelt p0.s, w0, w1
246 ; CHECK-NEXT: ret
247   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32 %a, i32 %b)
248   ret <vscale x 4 x i1> %out
251 define <vscale x 4 x i1> @whilelt_s_xx(i64 %a, i64 %b) {
252 ; CHECK-LABEL: whilelt_s_xx:
253 ; CHECK: whilelt p0.s, x0, x1
254 ; CHECK-NEXT: ret
255   %out = call <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i64(i64 %a, i64 %b)
256   ret <vscale x 4 x i1> %out
259 define <vscale x 2 x i1> @whilelt_d_ww(i32 %a, i32 %b) {
260 ; CHECK-LABEL: whilelt_d_ww:
261 ; CHECK: whilelt p0.d, w0, w1
262 ; CHECK-NEXT: ret
263   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i32(i32 %a, i32 %b)
264   ret <vscale x 2 x i1> %out
267 define <vscale x 2 x i1> @whilelt_d_xx(i64 %a, i64 %b) {
268 ; CHECK-LABEL: whilelt_d_xx:
269 ; CHECK: whilelt p0.d, x0, x1
270 ; CHECK-NEXT: ret
271   %out = call <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64 %a, i64 %b)
272   ret <vscale x 2 x i1> %out
275 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i32(i32, i32)
276 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilele.nxv16i1.i64(i64, i64)
277 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i32(i32, i32)
278 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilele.nxv8i1.i64(i64, i64)
279 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i32(i32, i32)
280 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilele.nxv4i1.i64(i64, i64)
281 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i32(i32, i32)
282 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilele.nxv2i1.i64(i64, i64)
284 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32, i32)
285 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64, i64)
286 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32, i32)
287 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64, i64)
288 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32, i32)
289 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64, i64)
290 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32, i32)
291 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64, i64)
293 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i32(i32, i32)
294 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilels.nxv16i1.i64(i64, i64)
295 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i32(i32, i32)
296 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilels.nxv8i1.i64(i64, i64)
297 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i32(i32, i32)
298 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilels.nxv4i1.i64(i64, i64)
299 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i32(i32, i32)
300 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilels.nxv2i1.i64(i64, i64)
302 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i32(i32, i32)
303 declare <vscale x 16 x i1> @llvm.aarch64.sve.whilelt.nxv16i1.i64(i64, i64)
304 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i32(i32, i32)
305 declare <vscale x 8 x i1> @llvm.aarch64.sve.whilelt.nxv8i1.i64(i64, i64)
306 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i32(i32, i32)
307 declare <vscale x 4 x i1> @llvm.aarch64.sve.whilelt.nxv4i1.i64(i64, i64)
308 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i32(i32, i32)
309 declare <vscale x 2 x i1> @llvm.aarch64.sve.whilelt.nxv2i1.i64(i64, i64)