1 ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)