@@ -78,68 +78,16 @@ define <vscale x 2 x i1> @whilege_d_xx(i64 %a, i64 %b) {
78
78
ret <vscale x 2 x i1 > %out
79
79
}
80
80
81
- define <vscale x 2 x i1 > @whilege_d_ii_dont_fold_to_ptrue_larger_than_minvec () {
82
- ; CHECK-LABEL: whilege_d_ii_dont_fold_to_ptrue_larger_than_minvec:
83
- ; CHECK: // %bb.0:
84
- ; CHECK-NEXT: mov w8, #3
85
- ; CHECK-NEXT: whilege p0.d, x8, xzr
86
- ; CHECK-NEXT: ret
87
- %out = call <vscale x 2 x i1 > @llvm.aarch64.sve.whilege.nxv2i1.i64 (i64 3 , i64 0 )
88
- ret <vscale x 2 x i1 > %out
89
- }
90
-
81
+ ; Ensure we don't convert constant decrementing while instructions to ptrue.
91
82
define <vscale x 16 x i1 > @whilege_b_ii () {
92
83
; CHECK-LABEL: whilege_b_ii:
93
84
; CHECK: // %bb.0: // %entry
94
- ; CHECK-NEXT: ptrue p0.b, vl6
95
- ; CHECK-NEXT: ret
96
- entry:
97
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i32 (i32 3 , i32 -2 )
98
- ret <vscale x 16 x i1 > %out
99
- }
100
-
101
- define <vscale x 16 x i1 > @whilege_b_ii_dont_fold_to_ptrue_nonexistent_vl9 () {
102
- ; CHECK-LABEL: whilege_b_ii_dont_fold_to_ptrue_nonexistent_vl9:
103
- ; CHECK: // %bb.0: // %entry
104
- ; CHECK-NEXT: mov w8, #9
105
- ; CHECK-NEXT: whilege p0.b, x8, xzr
106
- ; CHECK-NEXT: ret
107
- entry:
108
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i64 (i64 9 , i64 0 )
109
- ret <vscale x 16 x i1 > %out
110
- }
111
-
112
- define <vscale x 16 x i1 > @whilege_b_ii_vl_maximum () vscale_range(16 , 16 ) {
113
- ; CHECK-LABEL: whilege_b_ii_vl_maximum:
114
- ; CHECK: // %bb.0:
115
- ; CHECK-NEXT: ptrue p0.b, vl256
116
- ; CHECK-NEXT: ret
117
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i64 (i64 255 , i64 0 )
118
- ret <vscale x 16 x i1 > %out
119
- }
120
-
121
- define <vscale x 16 x i1 > @whilege_b_ii_dont_fold_to_ptrue_overflow () {
122
- ; CHECK-LABEL: whilege_b_ii_dont_fold_to_ptrue_overflow:
123
- ; CHECK: // %bb.0: // %entry
124
- ; CHECK-NEXT: mov w8, #2
125
- ; CHECK-NEXT: mov w9, #2147483647
126
- ; CHECK-NEXT: movk w8, #32768, lsl #16
85
+ ; CHECK-NEXT: mov w8, #-2 // =0xfffffffe
86
+ ; CHECK-NEXT: mov w9, #3 // =0x3
127
87
; CHECK-NEXT: whilege p0.b, w9, w8
128
88
; CHECK-NEXT: ret
129
89
entry:
130
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i32 (i32 2147483647 , i32 -2147483646 )
131
- ret <vscale x 16 x i1 > %out
132
- }
133
-
134
- define <vscale x 16 x i1 > @whilege_b_ii_dont_fold_to_ptrue_increment_overflow () {
135
- ; CHECK-LABEL: whilege_b_ii_dont_fold_to_ptrue_increment_overflow:
136
- ; CHECK: // %bb.0: // %entry
137
- ; CHECK-NEXT: mov w8, #2147483647
138
- ; CHECK-NEXT: mov w9, #-2147483641
139
- ; CHECK-NEXT: whilege p0.b, w9, w8
140
- ; CHECK-NEXT: ret
141
- entry:
142
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i32 (i32 -2147483641 , i32 2147483647 )
90
+ %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i32 (i32 3 , i32 -2 )
143
91
ret <vscale x 16 x i1 > %out
144
92
}
145
93
@@ -219,69 +167,19 @@ define <vscale x 2 x i1> @whilehs_d_xx(i64 %a, i64 %b) {
219
167
ret <vscale x 2 x i1 > %out
220
168
}
221
169
222
- define <vscale x 2 x i1 > @whilehs_d_ii_dont_fold_to_ptrue_larger_than_minvec () {
223
- ; CHECK-LABEL: whilehs_d_ii_dont_fold_to_ptrue_larger_than_minvec:
224
- ; CHECK: // %bb.0:
225
- ; CHECK-NEXT: mov w8, #3
226
- ; CHECK-NEXT: whilehs p0.d, x8, xzr
227
- ; CHECK-NEXT: ret
228
- %out = call <vscale x 2 x i1 > @llvm.aarch64.sve.whilehs.nxv2i1.i64 (i64 3 , i64 0 )
229
- ret <vscale x 2 x i1 > %out
230
- }
231
-
170
+ ; Ensure we don't convert constant decrementing while instructions to ptrue.
232
171
define <vscale x 16 x i1 > @whilehs_b_ii () {
233
172
; CHECK-LABEL: whilehs_b_ii:
234
173
; CHECK: // %bb.0: // %entry
235
- ; CHECK-NEXT: ptrue p0.b, vl7
174
+ ; CHECK-NEXT: mov w8, #2 // =0x2
175
+ ; CHECK-NEXT: mov w9, #8 // =0x8
176
+ ; CHECK-NEXT: whilehs p0.b, x9, x8
236
177
; CHECK-NEXT: ret
237
178
entry:
238
179
%out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehs.nxv16i1.i64 (i64 8 , i64 2 )
239
180
ret <vscale x 16 x i1 > %out
240
181
}
241
182
242
- define <vscale x 16 x i1 > @whilehs_b_ii_dont_fold_to_ptrue_nonexistent_vl9 () {
243
- ; CHECK-LABEL: whilehs_b_ii_dont_fold_to_ptrue_nonexistent_vl9:
244
- ; CHECK: // %bb.0: // %entry
245
- ; CHECK-NEXT: mov w8, #9
246
- ; CHECK-NEXT: whilehs p0.b, x8, xzr
247
- ; CHECK-NEXT: ret
248
- entry:
249
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehs.nxv16i1.i64 (i64 9 , i64 0 )
250
- ret <vscale x 16 x i1 > %out
251
- }
252
-
253
- define <vscale x 16 x i1 > @whilehs_b_ii_vl_maximum () vscale_range(16 , 16 ) {
254
- ; CHECK-LABEL: whilehs_b_ii_vl_maximum:
255
- ; CHECK: // %bb.0:
256
- ; CHECK-NEXT: ptrue p0.b, vl256
257
- ; CHECK-NEXT: ret
258
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehs.nxv16i1.i64 (i64 255 , i64 0 )
259
- ret <vscale x 16 x i1 > %out
260
- }
261
-
262
- define <vscale x 16 x i1 > @whilehs_b_ii_dont_fold_to_ptrue_overflow () {
263
- ; CHECK-LABEL: whilehs_b_ii_dont_fold_to_ptrue_overflow:
264
- ; CHECK: // %bb.0: // %entry
265
- ; CHECK-NEXT: mov w8, #-1
266
- ; CHECK-NEXT: mov w9, #6
267
- ; CHECK-NEXT: whilehs p0.b, w9, w8
268
- ; CHECK-NEXT: ret
269
- entry:
270
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehs.nxv16i1.i32 (i32 6 , i32 4294967295 )
271
- ret <vscale x 16 x i1 > %out
272
- }
273
-
274
- define <vscale x 16 x i1 > @whilehs_b_ii_dont_fold_to_ptrue_increment_overflow () {
275
- ; CHECK-LABEL: whilehs_b_ii_dont_fold_to_ptrue_increment_overflow:
276
- ; CHECK: // %bb.0: // %entry
277
- ; CHECK-NEXT: mov w8, #-1
278
- ; CHECK-NEXT: whilehs p0.b, w8, wzr
279
- ; CHECK-NEXT: ret
280
- entry:
281
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehs.nxv16i1.i32 (i32 4294967295 , i32 0 )
282
- ret <vscale x 16 x i1 > %out
283
- }
284
-
285
183
;
286
184
; WHILEGT
287
185
;
@@ -358,55 +256,16 @@ define <vscale x 2 x i1> @whilegt_d_xx(i64 %a, i64 %b) {
358
256
ret <vscale x 2 x i1 > %out
359
257
}
360
258
361
- define <vscale x 2 x i1 > @whilegt_d_ii_dont_fold_to_ptrue_larger_than_minvec () {
362
- ; CHECK-LABEL: whilegt_d_ii_dont_fold_to_ptrue_larger_than_minvec:
363
- ; CHECK: // %bb.0:
364
- ; CHECK-NEXT: mov w8, #3
365
- ; CHECK-NEXT: whilegt p0.d, x8, xzr
366
- ; CHECK-NEXT: ret
367
- %out = call <vscale x 2 x i1 > @llvm.aarch64.sve.whilegt.nxv2i1.i64 (i64 3 , i64 0 )
368
- ret <vscale x 2 x i1 > %out
369
- }
370
-
259
+ ; Ensure we don't convert constant decrementing while instructions to ptrue.
371
260
define <vscale x 16 x i1 > @whilegt_b_ii () {
372
261
; CHECK-LABEL: whilegt_b_ii:
373
262
; CHECK: // %bb.0: // %entry
374
- ; CHECK-NEXT: ptrue p0.b, vl5
375
- ; CHECK-NEXT: ret
376
- entry:
377
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilegt.nxv16i1.i32 (i32 3 , i32 -2 )
378
- ret <vscale x 16 x i1 > %out
379
- }
380
-
381
- define <vscale x 16 x i1 > @whilegt_b_ii_fold_to_ptrue_nonexistent_vl9 () {
382
- ; CHECK-LABEL: whilegt_b_ii_fold_to_ptrue_nonexistent_vl9:
383
- ; CHECK: // %bb.0: // %entry
384
- ; CHECK-NEXT: mov w8, #9
385
- ; CHECK-NEXT: whilegt p0.b, x8, xzr
386
- ; CHECK-NEXT: ret
387
- entry:
388
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilegt.nxv16i1.i64 (i64 9 , i64 0 )
389
- ret <vscale x 16 x i1 > %out
390
- }
391
-
392
- define <vscale x 16 x i1 > @whilegt_b_ii_vl_maximum () vscale_range(16 , 16 ) {
393
- ; CHECK-LABEL: whilegt_b_ii_vl_maximum:
394
- ; CHECK: // %bb.0:
395
- ; CHECK-NEXT: ptrue p0.b, vl256
396
- ; CHECK-NEXT: ret
397
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilegt.nxv16i1.i64 (i64 256 , i64 0 )
398
- ret <vscale x 16 x i1 > %out
399
- }
400
-
401
- define <vscale x 16 x i1 > @whilegt_b_ii_dont_fold_to_ptrue_overflow () {
402
- ; CHECK-LABEL: whilegt_b_ii_dont_fold_to_ptrue_overflow:
403
- ; CHECK: // %bb.0: // %entry
404
- ; CHECK-NEXT: mov w8, #2147483647
405
- ; CHECK-NEXT: mov w9, #-2147483641
263
+ ; CHECK-NEXT: mov w8, #-2 // =0xfffffffe
264
+ ; CHECK-NEXT: mov w9, #3 // =0x3
406
265
; CHECK-NEXT: whilegt p0.b, w9, w8
407
266
; CHECK-NEXT: ret
408
267
entry:
409
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilegt.nxv16i1.i32 (i32 - 2147483641 , i32 2147483647 )
268
+ %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilegt.nxv16i1.i32 (i32 3 , i32 - 2 )
410
269
ret <vscale x 16 x i1 > %out
411
270
}
412
271
@@ -486,58 +345,19 @@ define <vscale x 2 x i1> @whilehi_d_xx(i64 %a, i64 %b) {
486
345
ret <vscale x 2 x i1 > %out
487
346
}
488
347
489
- define <vscale x 2 x i1 > @whilehi_d_ii_dont_fold_to_ptrue_larger_than_minvec () {
490
- ; CHECK-LABEL: whilehi_d_ii_dont_fold_to_ptrue_larger_than_minvec:
491
- ; CHECK: // %bb.0:
492
- ; CHECK-NEXT: mov w8, #3
493
- ; CHECK-NEXT: whilehi p0.d, x8, xzr
494
- ; CHECK-NEXT: ret
495
- %out = call <vscale x 2 x i1 > @llvm.aarch64.sve.whilehi.nxv2i1.i64 (i64 3 , i64 0 )
496
- ret <vscale x 2 x i1 > %out
497
- }
498
-
348
+ ; Ensure we don't convert constant decrementing while instructions to ptrue.
499
349
define <vscale x 16 x i1 > @whilehi_b_ii () {
500
350
; CHECK-LABEL: whilehi_b_ii:
501
351
; CHECK: // %bb.0: // %entry
502
- ; CHECK-NEXT: ptrue p0.b, vl6
352
+ ; CHECK-NEXT: mov w8, #2 // =0x2
353
+ ; CHECK-NEXT: mov w9, #8 // =0x8
354
+ ; CHECK-NEXT: whilehi p0.b, x9, x8
503
355
; CHECK-NEXT: ret
504
356
entry:
505
357
%out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehi.nxv16i1.i64 (i64 8 , i64 2 )
506
358
ret <vscale x 16 x i1 > %out
507
359
}
508
360
509
- define <vscale x 16 x i1 > @whilehi_b_ii_dont_fold_to_ptrue_nonexistent_vl9 () {
510
- ; CHECK-LABEL: whilehi_b_ii_dont_fold_to_ptrue_nonexistent_vl9:
511
- ; CHECK: // %bb.0: // %entry
512
- ; CHECK-NEXT: mov w8, #9
513
- ; CHECK-NEXT: whilehi p0.b, x8, xzr
514
- ; CHECK-NEXT: ret
515
- entry:
516
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehi.nxv16i1.i64 (i64 9 , i64 0 )
517
- ret <vscale x 16 x i1 > %out
518
- }
519
-
520
- define <vscale x 16 x i1 > @whilehi_b_ii_vl_maximum () vscale_range(16 , 16 ) {
521
- ; CHECK-LABEL: whilehi_b_ii_vl_maximum:
522
- ; CHECK: // %bb.0:
523
- ; CHECK-NEXT: ptrue p0.b, vl256
524
- ; CHECK-NEXT: ret
525
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehi.nxv16i1.i64 (i64 256 , i64 0 )
526
- ret <vscale x 16 x i1 > %out
527
- }
528
-
529
- define <vscale x 16 x i1 > @whilelhi_b_ii_dont_fold_to_ptrue_overflow () {
530
- ; CHECK-LABEL: whilelhi_b_ii_dont_fold_to_ptrue_overflow:
531
- ; CHECK: // %bb.0: // %entry
532
- ; CHECK-NEXT: mov w8, #-1
533
- ; CHECK-NEXT: mov w9, #7
534
- ; CHECK-NEXT: whilehi p0.b, w9, w8
535
- ; CHECK-NEXT: ret
536
- entry:
537
- %out = call <vscale x 16 x i1 > @llvm.aarch64.sve.whilehi.nxv16i1.i32 (i32 7 , i32 4294967295 )
538
- ret <vscale x 16 x i1 > %out
539
- }
540
-
541
361
declare <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i32 (i32 , i32 )
542
362
declare <vscale x 16 x i1 > @llvm.aarch64.sve.whilege.nxv16i1.i64 (i64 , i64 )
543
363
declare <vscale x 8 x i1 > @llvm.aarch64.sve.whilege.nxv8i1.i32 (i32 , i32 )
0 commit comments