1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2
2
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_SCALAR_INC
3
3
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -sve-use-scalar-inc-vl=true -verify-machineinstrs < %s | FileCheck %s
4
+ ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,disable-fast-inc-vl -sve-use-scalar-inc-vl=true -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_FAST_INC
4
5
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -verify-machineinstrs < %s | FileCheck %s
5
6
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -sve-use-scalar-inc-vl=false -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_SCALAR_INC
7
+ ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2,disable-fast-inc-vl -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_FAST_INC
6
8
7
9
define <vscale x 8 x i16 > @inch_vec (<vscale x 8 x i16 > %a ) {
8
10
; NO_SCALAR_INC-LABEL: inch_vec:
@@ -14,6 +16,11 @@ define <vscale x 8 x i16> @inch_vec(<vscale x 8 x i16> %a) {
14
16
; CHECK: // %bb.0:
15
17
; CHECK-NEXT: inch z0.h
16
18
; CHECK-NEXT: ret
19
+ ;
20
+ ; NO_FAST_INC-LABEL: inch_vec:
21
+ ; NO_FAST_INC: // %bb.0:
22
+ ; NO_FAST_INC-NEXT: inch z0.h
23
+ ; NO_FAST_INC-NEXT: ret
17
24
%vscale = call i16 @llvm.vscale.i16 ()
18
25
%mul = mul i16 %vscale , 8
19
26
%vl = insertelement <vscale x 8 x i16 > poison, i16 %mul , i32 0
@@ -32,6 +39,11 @@ define <vscale x 4 x i32> @incw_vec(<vscale x 4 x i32> %a) {
32
39
; CHECK: // %bb.0:
33
40
; CHECK-NEXT: incw z0.s
34
41
; CHECK-NEXT: ret
42
+ ;
43
+ ; NO_FAST_INC-LABEL: incw_vec:
44
+ ; NO_FAST_INC: // %bb.0:
45
+ ; NO_FAST_INC-NEXT: incw z0.s
46
+ ; NO_FAST_INC-NEXT: ret
35
47
%vscale = call i32 @llvm.vscale.i32 ()
36
48
%mul = mul i32 %vscale , 4
37
49
%vl = insertelement <vscale x 4 x i32 > poison, i32 %mul , i32 0
@@ -50,6 +62,11 @@ define <vscale x 2 x i64> @incd_vec(<vscale x 2 x i64> %a) {
50
62
; CHECK: // %bb.0:
51
63
; CHECK-NEXT: incd z0.d
52
64
; CHECK-NEXT: ret
65
+ ;
66
+ ; NO_FAST_INC-LABEL: incd_vec:
67
+ ; NO_FAST_INC: // %bb.0:
68
+ ; NO_FAST_INC-NEXT: incd z0.d
69
+ ; NO_FAST_INC-NEXT: ret
53
70
%vscale = call i64 @llvm.vscale.i64 ()
54
71
%mul = mul i64 %vscale , 2
55
72
%vl = insertelement <vscale x 2 x i64 > poison, i64 %mul , i32 0
@@ -68,6 +85,11 @@ define <vscale x 8 x i16> @dech_vec(<vscale x 8 x i16> %a) {
68
85
; CHECK: // %bb.0:
69
86
; CHECK-NEXT: dech z0.h, all, mul #2
70
87
; CHECK-NEXT: ret
88
+ ;
89
+ ; NO_FAST_INC-LABEL: dech_vec:
90
+ ; NO_FAST_INC: // %bb.0:
91
+ ; NO_FAST_INC-NEXT: dech z0.h, all, mul #2
92
+ ; NO_FAST_INC-NEXT: ret
71
93
%vscale = call i16 @llvm.vscale.i16 ()
72
94
%mul = mul i16 %vscale , 16
73
95
%vl = insertelement <vscale x 8 x i16 > poison, i16 %mul , i32 0
@@ -86,6 +108,11 @@ define <vscale x 4 x i32> @decw_vec(<vscale x 4 x i32> %a) {
86
108
; CHECK: // %bb.0:
87
109
; CHECK-NEXT: decw z0.s, all, mul #4
88
110
; CHECK-NEXT: ret
111
+ ;
112
+ ; NO_FAST_INC-LABEL: decw_vec:
113
+ ; NO_FAST_INC: // %bb.0:
114
+ ; NO_FAST_INC-NEXT: decw z0.s, all, mul #4
115
+ ; NO_FAST_INC-NEXT: ret
89
116
%vscale = call i32 @llvm.vscale.i32 ()
90
117
%mul = mul i32 %vscale , 16
91
118
%vl = insertelement <vscale x 4 x i32 > poison, i32 %mul , i32 0
@@ -104,6 +131,11 @@ define <vscale x 2 x i64> @decd_vec(<vscale x 2 x i64> %a) {
104
131
; CHECK: // %bb.0:
105
132
; CHECK-NEXT: decd z0.d, all, mul #8
106
133
; CHECK-NEXT: ret
134
+ ;
135
+ ; NO_FAST_INC-LABEL: decd_vec:
136
+ ; NO_FAST_INC: // %bb.0:
137
+ ; NO_FAST_INC-NEXT: decd z0.d, all, mul #8
138
+ ; NO_FAST_INC-NEXT: ret
107
139
%vscale = call i64 @llvm.vscale.i64 ()
108
140
%mul = mul i64 %vscale , 16
109
141
%vl = insertelement <vscale x 2 x i64 > poison, i64 %mul , i32 0
@@ -123,8 +155,13 @@ define i64 @incb_scalar_i64(i64 %a) {
123
155
;
124
156
; CHECK-LABEL: incb_scalar_i64:
125
157
; CHECK: // %bb.0:
126
- ; CHECK-NEXT: addvl x0, x0, #1
158
+ ; CHECK-NEXT: incb x0
127
159
; CHECK-NEXT: ret
160
+ ;
161
+ ; NO_FAST_INC-LABEL: incb_scalar_i64:
162
+ ; NO_FAST_INC: // %bb.0:
163
+ ; NO_FAST_INC-NEXT: addvl x0, x0, #1
164
+ ; NO_FAST_INC-NEXT: ret
128
165
%vscale = call i64 @llvm.vscale.i64 ()
129
166
%mul = mul i64 %vscale , 16
130
167
%add = add i64 %a , %mul
@@ -142,6 +179,11 @@ define i64 @inch_scalar_i64(i64 %a) {
142
179
; CHECK: // %bb.0:
143
180
; CHECK-NEXT: inch x0
144
181
; CHECK-NEXT: ret
182
+ ;
183
+ ; NO_FAST_INC-LABEL: inch_scalar_i64:
184
+ ; NO_FAST_INC: // %bb.0:
185
+ ; NO_FAST_INC-NEXT: inch x0
186
+ ; NO_FAST_INC-NEXT: ret
145
187
%vscale = call i64 @llvm.vscale.i64 ()
146
188
%mul = mul i64 %vscale , 8
147
189
%add = add i64 %a , %mul
@@ -159,6 +201,11 @@ define i64 @incw_scalar_i64(i64 %a) {
159
201
; CHECK: // %bb.0:
160
202
; CHECK-NEXT: incw x0
161
203
; CHECK-NEXT: ret
204
+ ;
205
+ ; NO_FAST_INC-LABEL: incw_scalar_i64:
206
+ ; NO_FAST_INC: // %bb.0:
207
+ ; NO_FAST_INC-NEXT: incw x0
208
+ ; NO_FAST_INC-NEXT: ret
162
209
%vscale = call i64 @llvm.vscale.i64 ()
163
210
%mul = mul i64 %vscale , 4
164
211
%add = add i64 %a , %mul
@@ -176,6 +223,11 @@ define i64 @incd_scalar_i64(i64 %a) {
176
223
; CHECK: // %bb.0:
177
224
; CHECK-NEXT: incd x0
178
225
; CHECK-NEXT: ret
226
+ ;
227
+ ; NO_FAST_INC-LABEL: incd_scalar_i64:
228
+ ; NO_FAST_INC: // %bb.0:
229
+ ; NO_FAST_INC-NEXT: incd x0
230
+ ; NO_FAST_INC-NEXT: ret
179
231
%vscale = call i64 @llvm.vscale.i64 ()
180
232
%mul = mul i64 %vscale , 2
181
233
%add = add i64 %a , %mul
@@ -193,8 +245,13 @@ define i64 @decb_scalar_i64(i64 %a) {
193
245
;
194
246
; CHECK-LABEL: decb_scalar_i64:
195
247
; CHECK: // %bb.0:
196
- ; CHECK-NEXT: addvl x0, x0, #- 2
248
+ ; CHECK-NEXT: decb x0, all, mul # 2
197
249
; CHECK-NEXT: ret
250
+ ;
251
+ ; NO_FAST_INC-LABEL: decb_scalar_i64:
252
+ ; NO_FAST_INC: // %bb.0:
253
+ ; NO_FAST_INC-NEXT: addvl x0, x0, #-2
254
+ ; NO_FAST_INC-NEXT: ret
198
255
%vscale = call i64 @llvm.vscale.i64 ()
199
256
%mul = mul i64 %vscale , 32
200
257
%sub = sub i64 %a , %mul
@@ -212,6 +269,11 @@ define i64 @dech_scalar_i64(i64 %a) {
212
269
; CHECK: // %bb.0:
213
270
; CHECK-NEXT: dech x0, all, mul #3
214
271
; CHECK-NEXT: ret
272
+ ;
273
+ ; NO_FAST_INC-LABEL: dech_scalar_i64:
274
+ ; NO_FAST_INC: // %bb.0:
275
+ ; NO_FAST_INC-NEXT: dech x0, all, mul #3
276
+ ; NO_FAST_INC-NEXT: ret
215
277
%vscale = call i64 @llvm.vscale.i64 ()
216
278
%mul = mul i64 %vscale , 24
217
279
%sub = sub i64 %a , %mul
@@ -229,6 +291,11 @@ define i64 @decw_scalar_i64(i64 %a) {
229
291
; CHECK: // %bb.0:
230
292
; CHECK-NEXT: decw x0, all, mul #3
231
293
; CHECK-NEXT: ret
294
+ ;
295
+ ; NO_FAST_INC-LABEL: decw_scalar_i64:
296
+ ; NO_FAST_INC: // %bb.0:
297
+ ; NO_FAST_INC-NEXT: decw x0, all, mul #3
298
+ ; NO_FAST_INC-NEXT: ret
232
299
%vscale = call i64 @llvm.vscale.i64 ()
233
300
%mul = mul i64 %vscale , 12
234
301
%sub = sub i64 %a , %mul
@@ -246,6 +313,11 @@ define i64 @decd_scalar_i64(i64 %a) {
246
313
; CHECK: // %bb.0:
247
314
; CHECK-NEXT: decd x0, all, mul #3
248
315
; CHECK-NEXT: ret
316
+ ;
317
+ ; NO_FAST_INC-LABEL: decd_scalar_i64:
318
+ ; NO_FAST_INC: // %bb.0:
319
+ ; NO_FAST_INC-NEXT: decd x0, all, mul #3
320
+ ; NO_FAST_INC-NEXT: ret
249
321
%vscale = call i64 @llvm.vscale.i64 ()
250
322
%mul = mul i64 %vscale , 6
251
323
%sub = sub i64 %a , %mul
@@ -267,6 +339,13 @@ define i32 @incb_scalar_i32(i32 %a) {
267
339
; CHECK-NEXT: addvl x0, x0, #3
268
340
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
269
341
; CHECK-NEXT: ret
342
+ ;
343
+ ; NO_FAST_INC-LABEL: incb_scalar_i32:
344
+ ; NO_FAST_INC: // %bb.0:
345
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
346
+ ; NO_FAST_INC-NEXT: addvl x0, x0, #3
347
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
348
+ ; NO_FAST_INC-NEXT: ret
270
349
271
350
%vscale = call i64 @llvm.vscale.i64 ()
272
351
%mul = mul i64 %vscale , 48
@@ -288,6 +367,13 @@ define i32 @inch_scalar_i32(i32 %a) {
288
367
; CHECK-NEXT: inch x0, all, mul #7
289
368
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
290
369
; CHECK-NEXT: ret
370
+ ;
371
+ ; NO_FAST_INC-LABEL: inch_scalar_i32:
372
+ ; NO_FAST_INC: // %bb.0:
373
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
374
+ ; NO_FAST_INC-NEXT: inch x0, all, mul #7
375
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
376
+ ; NO_FAST_INC-NEXT: ret
291
377
292
378
%vscale = call i64 @llvm.vscale.i64 ()
293
379
%mul = mul i64 %vscale , 56
@@ -309,6 +395,13 @@ define i32 @incw_scalar_i32(i32 %a) {
309
395
; CHECK-NEXT: incw x0, all, mul #7
310
396
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
311
397
; CHECK-NEXT: ret
398
+ ;
399
+ ; NO_FAST_INC-LABEL: incw_scalar_i32:
400
+ ; NO_FAST_INC: // %bb.0:
401
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
402
+ ; NO_FAST_INC-NEXT: incw x0, all, mul #7
403
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
404
+ ; NO_FAST_INC-NEXT: ret
312
405
313
406
%vscale = call i64 @llvm.vscale.i64 ()
314
407
%mul = mul i64 %vscale , 28
@@ -330,6 +423,13 @@ define i32 @incd_scalar_i32(i32 %a) {
330
423
; CHECK-NEXT: incd x0, all, mul #7
331
424
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
332
425
; CHECK-NEXT: ret
426
+ ;
427
+ ; NO_FAST_INC-LABEL: incd_scalar_i32:
428
+ ; NO_FAST_INC: // %bb.0:
429
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
430
+ ; NO_FAST_INC-NEXT: incd x0, all, mul #7
431
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
432
+ ; NO_FAST_INC-NEXT: ret
333
433
334
434
%vscale = call i64 @llvm.vscale.i64 ()
335
435
%mul = mul i64 %vscale , 14
@@ -350,9 +450,16 @@ define i32 @decb_scalar_i32(i32 %a) {
350
450
; CHECK-LABEL: decb_scalar_i32:
351
451
; CHECK: // %bb.0:
352
452
; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
353
- ; CHECK-NEXT: addvl x0, x0, #- 4
453
+ ; CHECK-NEXT: decb x0, all, mul # 4
354
454
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
355
455
; CHECK-NEXT: ret
456
+ ;
457
+ ; NO_FAST_INC-LABEL: decb_scalar_i32:
458
+ ; NO_FAST_INC: // %bb.0:
459
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
460
+ ; NO_FAST_INC-NEXT: addvl x0, x0, #-4
461
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
462
+ ; NO_FAST_INC-NEXT: ret
356
463
357
464
%vscale = call i64 @llvm.vscale.i64 ()
358
465
%mul = mul i64 %vscale , 64
@@ -374,6 +481,13 @@ define i32 @dech_scalar_i32(i32 %a) {
374
481
; CHECK-NEXT: dech x0
375
482
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
376
483
; CHECK-NEXT: ret
484
+ ;
485
+ ; NO_FAST_INC-LABEL: dech_scalar_i32:
486
+ ; NO_FAST_INC: // %bb.0:
487
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
488
+ ; NO_FAST_INC-NEXT: dech x0
489
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
490
+ ; NO_FAST_INC-NEXT: ret
377
491
378
492
%vscale = call i64 @llvm.vscale.i64 ()
379
493
%mul = mul i64 %vscale , 8
@@ -395,6 +509,13 @@ define i32 @decw_scalar_i32(i32 %a) {
395
509
; CHECK-NEXT: decw x0
396
510
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
397
511
; CHECK-NEXT: ret
512
+ ;
513
+ ; NO_FAST_INC-LABEL: decw_scalar_i32:
514
+ ; NO_FAST_INC: // %bb.0:
515
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
516
+ ; NO_FAST_INC-NEXT: decw x0
517
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
518
+ ; NO_FAST_INC-NEXT: ret
398
519
399
520
%vscale = call i64 @llvm.vscale.i64 ()
400
521
%mul = mul i64 %vscale , 4
@@ -416,6 +537,13 @@ define i32 @decd_scalar_i32(i32 %a) {
416
537
; CHECK-NEXT: decd x0
417
538
; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
418
539
; CHECK-NEXT: ret
540
+ ;
541
+ ; NO_FAST_INC-LABEL: decd_scalar_i32:
542
+ ; NO_FAST_INC: // %bb.0:
543
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 def $x0
544
+ ; NO_FAST_INC-NEXT: decd x0
545
+ ; NO_FAST_INC-NEXT: // kill: def $w0 killed $w0 killed $x0
546
+ ; NO_FAST_INC-NEXT: ret
419
547
%vscale = call i64 @llvm.vscale.i64 ()
420
548
%mul = mul i64 %vscale , 2
421
549
%vl = trunc i64 %mul to i32
0 commit comments