11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
22; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -verify-machineinstrs < %s | FileCheck %s -check-prefix=NO_SCALAR_INC
33; 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
45; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 -verify-machineinstrs < %s | FileCheck %s
56; 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
68
79define <vscale x 8 x i16 > @inch_vec (<vscale x 8 x i16 > %a ) {
810; NO_SCALAR_INC-LABEL: inch_vec:
@@ -14,6 +16,11 @@ define <vscale x 8 x i16> @inch_vec(<vscale x 8 x i16> %a) {
1416; CHECK: // %bb.0:
1517; CHECK-NEXT: inch z0.h
1618; 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
1724 %vscale = call i16 @llvm.vscale.i16 ()
1825 %mul = mul i16 %vscale , 8
1926 %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) {
3239; CHECK: // %bb.0:
3340; CHECK-NEXT: incw z0.s
3441; 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
3547 %vscale = call i32 @llvm.vscale.i32 ()
3648 %mul = mul i32 %vscale , 4
3749 %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) {
5062; CHECK: // %bb.0:
5163; CHECK-NEXT: incd z0.d
5264; 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
5370 %vscale = call i64 @llvm.vscale.i64 ()
5471 %mul = mul i64 %vscale , 2
5572 %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) {
6885; CHECK: // %bb.0:
6986; CHECK-NEXT: dech z0.h, all, mul #2
7087; 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
7193 %vscale = call i16 @llvm.vscale.i16 ()
7294 %mul = mul i16 %vscale , 16
7395 %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) {
86108; CHECK: // %bb.0:
87109; CHECK-NEXT: decw z0.s, all, mul #4
88110; 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
89116 %vscale = call i32 @llvm.vscale.i32 ()
90117 %mul = mul i32 %vscale , 16
91118 %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) {
104131; CHECK: // %bb.0:
105132; CHECK-NEXT: decd z0.d, all, mul #8
106133; 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
107139 %vscale = call i64 @llvm.vscale.i64 ()
108140 %mul = mul i64 %vscale , 16
109141 %vl = insertelement <vscale x 2 x i64 > poison, i64 %mul , i32 0
@@ -123,8 +155,13 @@ define i64 @incb_scalar_i64(i64 %a) {
123155;
124156; CHECK-LABEL: incb_scalar_i64:
125157; CHECK: // %bb.0:
126- ; CHECK-NEXT: addvl x0, x0, #1
158+ ; CHECK-NEXT: incb x0
127159; 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
128165 %vscale = call i64 @llvm.vscale.i64 ()
129166 %mul = mul i64 %vscale , 16
130167 %add = add i64 %a , %mul
@@ -142,6 +179,11 @@ define i64 @inch_scalar_i64(i64 %a) {
142179; CHECK: // %bb.0:
143180; CHECK-NEXT: inch x0
144181; 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
145187 %vscale = call i64 @llvm.vscale.i64 ()
146188 %mul = mul i64 %vscale , 8
147189 %add = add i64 %a , %mul
@@ -159,6 +201,11 @@ define i64 @incw_scalar_i64(i64 %a) {
159201; CHECK: // %bb.0:
160202; CHECK-NEXT: incw x0
161203; 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
162209 %vscale = call i64 @llvm.vscale.i64 ()
163210 %mul = mul i64 %vscale , 4
164211 %add = add i64 %a , %mul
@@ -176,6 +223,11 @@ define i64 @incd_scalar_i64(i64 %a) {
176223; CHECK: // %bb.0:
177224; CHECK-NEXT: incd x0
178225; 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
179231 %vscale = call i64 @llvm.vscale.i64 ()
180232 %mul = mul i64 %vscale , 2
181233 %add = add i64 %a , %mul
@@ -193,8 +245,13 @@ define i64 @decb_scalar_i64(i64 %a) {
193245;
194246; CHECK-LABEL: decb_scalar_i64:
195247; CHECK: // %bb.0:
196- ; CHECK-NEXT: addvl x0, x0, #- 2
248+ ; CHECK-NEXT: decb x0, all, mul # 2
197249; 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
198255 %vscale = call i64 @llvm.vscale.i64 ()
199256 %mul = mul i64 %vscale , 32
200257 %sub = sub i64 %a , %mul
@@ -212,6 +269,11 @@ define i64 @dech_scalar_i64(i64 %a) {
212269; CHECK: // %bb.0:
213270; CHECK-NEXT: dech x0, all, mul #3
214271; 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
215277 %vscale = call i64 @llvm.vscale.i64 ()
216278 %mul = mul i64 %vscale , 24
217279 %sub = sub i64 %a , %mul
@@ -229,6 +291,11 @@ define i64 @decw_scalar_i64(i64 %a) {
229291; CHECK: // %bb.0:
230292; CHECK-NEXT: decw x0, all, mul #3
231293; 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
232299 %vscale = call i64 @llvm.vscale.i64 ()
233300 %mul = mul i64 %vscale , 12
234301 %sub = sub i64 %a , %mul
@@ -246,6 +313,11 @@ define i64 @decd_scalar_i64(i64 %a) {
246313; CHECK: // %bb.0:
247314; CHECK-NEXT: decd x0, all, mul #3
248315; 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
249321 %vscale = call i64 @llvm.vscale.i64 ()
250322 %mul = mul i64 %vscale , 6
251323 %sub = sub i64 %a , %mul
@@ -267,6 +339,13 @@ define i32 @incb_scalar_i32(i32 %a) {
267339; CHECK-NEXT: addvl x0, x0, #3
268340; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
269341; 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
270349
271350 %vscale = call i64 @llvm.vscale.i64 ()
272351 %mul = mul i64 %vscale , 48
@@ -288,6 +367,13 @@ define i32 @inch_scalar_i32(i32 %a) {
288367; CHECK-NEXT: inch x0, all, mul #7
289368; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
290369; 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
291377
292378 %vscale = call i64 @llvm.vscale.i64 ()
293379 %mul = mul i64 %vscale , 56
@@ -309,6 +395,13 @@ define i32 @incw_scalar_i32(i32 %a) {
309395; CHECK-NEXT: incw x0, all, mul #7
310396; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
311397; 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
312405
313406 %vscale = call i64 @llvm.vscale.i64 ()
314407 %mul = mul i64 %vscale , 28
@@ -330,6 +423,13 @@ define i32 @incd_scalar_i32(i32 %a) {
330423; CHECK-NEXT: incd x0, all, mul #7
331424; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
332425; 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
333433
334434 %vscale = call i64 @llvm.vscale.i64 ()
335435 %mul = mul i64 %vscale , 14
@@ -350,9 +450,16 @@ define i32 @decb_scalar_i32(i32 %a) {
350450; CHECK-LABEL: decb_scalar_i32:
351451; CHECK: // %bb.0:
352452; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
353- ; CHECK-NEXT: addvl x0, x0, #- 4
453+ ; CHECK-NEXT: decb x0, all, mul # 4
354454; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
355455; 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
356463
357464 %vscale = call i64 @llvm.vscale.i64 ()
358465 %mul = mul i64 %vscale , 64
@@ -374,6 +481,13 @@ define i32 @dech_scalar_i32(i32 %a) {
374481; CHECK-NEXT: dech x0
375482; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
376483; 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
377491
378492 %vscale = call i64 @llvm.vscale.i64 ()
379493 %mul = mul i64 %vscale , 8
@@ -395,6 +509,13 @@ define i32 @decw_scalar_i32(i32 %a) {
395509; CHECK-NEXT: decw x0
396510; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
397511; 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
398519
399520 %vscale = call i64 @llvm.vscale.i64 ()
400521 %mul = mul i64 %vscale , 4
@@ -416,6 +537,13 @@ define i32 @decd_scalar_i32(i32 %a) {
416537; CHECK-NEXT: decd x0
417538; CHECK-NEXT: // kill: def $w0 killed $w0 killed $x0
418539; 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
419547 %vscale = call i64 @llvm.vscale.i64 ()
420548 %mul = mul i64 %vscale , 2
421549 %vl = trunc i64 %mul to i32
0 commit comments