11; RUN: llc -mtriple aarch64 -mattr=+sve -asm-verbose=0 < %s | FileCheck %s
2- ; RUN: opt -mtriple=aarch64 -passes=' require<profile-summary>,function(codegenprepare)' -S < %s | llc -mtriple=aarch64 -mattr=+sve -asm-verbose=0 | FileCheck %s
2+ ; RUN: opt -mtriple=aarch64 -passes=" require<profile-summary>,function(codegenprepare)" -S < %s | llc -mtriple=aarch64 -mattr=+sve -asm-verbose=0 | FileCheck %s
33
44;
55; RDVL
66;
77
8+ define i8 @rdvl_i8 () nounwind {
89; CHECK-LABEL: rdvl_i8:
910; CHECK: rdvl x0, #1
1011; CHECK-NEXT: ret
11- define i8 @rdvl_i8 () nounwind {
1212 %vscale = call i8 @llvm.vscale.i8 ()
1313 %1 = mul nsw i8 %vscale , 16
1414 ret i8 %1
1515}
1616
17+ define i16 @rdvl_i16 () nounwind {
1718; CHECK-LABEL: rdvl_i16:
1819; CHECK: rdvl x0, #1
1920; CHECK-NEXT: ret
20- define i16 @rdvl_i16 () nounwind {
2121 %vscale = call i16 @llvm.vscale.i16 ()
2222 %1 = mul nsw i16 %vscale , 16
2323 ret i16 %1
2424}
2525
26+ define i32 @rdvl_i32 () nounwind {
2627; CHECK-LABEL: rdvl_i32:
2728; CHECK: rdvl x0, #1
2829; CHECK-NEXT: ret
29- define i32 @rdvl_i32 () nounwind {
3030 %vscale = call i32 @llvm.vscale.i32 ()
3131 %1 = mul nsw i32 %vscale , 16
3232 ret i32 %1
3333}
3434
35+ define i64 @rdvl_i64 () nounwind {
3536; CHECK-LABEL: rdvl_i64:
3637; CHECK: rdvl x0, #1
3738; CHECK-NEXT: ret
38- define i64 @rdvl_i64 () nounwind {
3939 %vscale = call i64 @llvm.vscale.i64 ()
4040 %1 = mul nsw i64 %vscale , 16
4141 ret i64 %1
4242}
4343
44+ define i32 @rdvl_const () nounwind {
4445; CHECK-LABEL: rdvl_const:
4546; CHECK: rdvl x0, #1
4647; CHECK-NEXT: ret
47- define i32 @rdvl_const () nounwind {
4848 %vscale.ptr = getelementptr <vscale x 1 x i8 >, ptr null , i64 1
4949 %vscale.int = ptrtoint ptr %vscale.ptr to i32
5050 %vscale.scaled = mul nsw i32 %vscale.int , 16
@@ -70,32 +70,31 @@ define i32 @vscale_neg1() nounwind {
7070 ret i32 %neg
7171}
7272
73+ define i32 @rdvl_3 () nounwind {
7374; CHECK-LABEL: rdvl_3:
7475; CHECK: rdvl [[VL_B:x[0-9]+]], #1
7576; CHECK-NEXT: mov w[[MUL:[0-9]+]], #3
7677; CHECK-NEXT: lsr [[VL_Q:x[0-9]+]], [[VL_B]], #4
7778; CHECK-NEXT: mul x0, [[VL_Q]], x[[MUL]]
7879; CHECK-NEXT: ret
79- define i32 @rdvl_3 () nounwind {
8080 %vscale = call i32 @llvm.vscale.i32 ()
8181 %1 = mul nsw i32 %vscale , 3
8282 ret i32 %1
8383}
8484
85-
85+ define i32 @rdvl_min () nounwind {
8686; CHECK-LABEL: rdvl_min:
8787; CHECK: rdvl x0, #-32
8888; CHECK-NEXT: ret
89- define i32 @rdvl_min () nounwind {
9089 %vscale = call i32 @llvm.vscale.i32 ()
9190 %1 = mul nsw i32 %vscale , -512
9291 ret i32 %1
9392}
9493
94+ define i32 @rdvl_max () nounwind {
9595; CHECK-LABEL: rdvl_max:
9696; CHECK: rdvl x0, #31
9797; CHECK-NEXT: ret
98- define i32 @rdvl_max () nounwind {
9998 %vscale = call i32 @llvm.vscale.i32 ()
10099 %1 = mul nsw i32 %vscale , 496
101100 ret i32 %1
@@ -116,29 +115,29 @@ define i1 @rdvl_i1() {
116115; CNTH
117116;
118117
118+ define i32 @cnth () nounwind {
119119; CHECK-LABEL: cnth:
120120; CHECK: cnth x0{{$}}
121121; CHECK-NEXT: ret
122- define i32 @cnth () nounwind {
123122 %vscale = call i32 @llvm.vscale.i32 ()
124123 %1 = shl nsw i32 %vscale , 3
125124 ret i32 %1
126125}
127126
127+ define i32 @cnth_max () nounwind {
128128; CHECK-LABEL: cnth_max:
129129; CHECK: cnth x0, all, mul #15
130130; CHECK-NEXT: ret
131- define i32 @cnth_max () nounwind {
132131 %vscale = call i32 @llvm.vscale.i32 ()
133132 %1 = mul nsw i32 %vscale , 120
134133 ret i32 %1
135134}
136135
136+ define i32 @cnth_neg () nounwind {
137137; CHECK-LABEL: cnth_neg:
138138; CHECK: cnth [[CNT:x[0-9]+]]
139139; CHECK: neg x0, [[CNT]]
140140; CHECK-NEXT: ret
141- define i32 @cnth_neg () nounwind {
142141 %vscale = call i32 @llvm.vscale.i32 ()
143142 %1 = mul nsw i32 %vscale , -8
144143 ret i32 %1
@@ -148,29 +147,29 @@ define i32 @cnth_neg() nounwind {
148147; CNTW
149148;
150149
150+ define i32 @cntw () nounwind {
151151; CHECK-LABEL: cntw:
152152; CHECK: cntw x0{{$}}
153153; CHECK-NEXT: ret
154- define i32 @cntw () nounwind {
155154 %vscale = call i32 @llvm.vscale.i32 ()
156155 %1 = shl nsw i32 %vscale , 2
157156 ret i32 %1
158157}
159158
159+ define i32 @cntw_max () nounwind {
160160; CHECK-LABEL: cntw_max:
161161; CHECK: cntw x0, all, mul #15
162162; CHECK-NEXT: ret
163- define i32 @cntw_max () nounwind {
164163 %vscale = call i32 @llvm.vscale.i32 ()
165164 %1 = mul nsw i32 %vscale , 60
166165 ret i32 %1
167166}
168167
168+ define i32 @cntw_neg () nounwind {
169169; CHECK-LABEL: cntw_neg:
170170; CHECK: cntw [[CNT:x[0-9]+]]
171171; CHECK: neg x0, [[CNT]]
172172; CHECK-NEXT: ret
173- define i32 @cntw_neg () nounwind {
174173 %vscale = call i32 @llvm.vscale.i32 ()
175174 %1 = mul nsw i32 %vscale , -4
176175 ret i32 %1
@@ -180,29 +179,29 @@ define i32 @cntw_neg() nounwind {
180179; CNTD
181180;
182181
182+ define i32 @cntd () nounwind {
183183; CHECK-LABEL: cntd:
184184; CHECK: cntd x0{{$}}
185185; CHECK-NEXT: ret
186- define i32 @cntd () nounwind {
187186 %vscale = call i32 @llvm.vscale.i32 ()
188187 %1 = shl nsw i32 %vscale , 1
189188 ret i32 %1
190189}
191190
191+ define i32 @cntd_max () nounwind {
192192; CHECK-LABEL: cntd_max:
193193; CHECK: cntd x0, all, mul #15
194194; CHECK-NEXT: ret
195- define i32 @cntd_max () nounwind {
196195 %vscale = call i32 @llvm.vscale.i32 ()
197196 %1 = mul nsw i32 %vscale , 30
198197 ret i32 %1
199198}
200199
200+ define i32 @cntd_neg () nounwind {
201201; CHECK-LABEL: cntd_neg:
202202; CHECK: cntd [[CNT:x[0-9]+]]
203203; CHECK: neg x0, [[CNT]]
204204; CHECK-NEXT: ret
205- define i32 @cntd_neg () nounwind {
206205 %vscale = call i32 @llvm.vscale.i32 ()
207206 %1 = mul nsw i32 %vscale , -2
208207 ret i32 %1
0 commit comments