1
1
; 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
3
3
4
4
;
5
5
; RDVL
6
6
;
7
7
8
+ define i8 @rdvl_i8 () nounwind {
8
9
; CHECK-LABEL: rdvl_i8:
9
10
; CHECK: rdvl x0, #1
10
11
; CHECK-NEXT: ret
11
- define i8 @rdvl_i8 () nounwind {
12
12
%vscale = call i8 @llvm.vscale.i8 ()
13
13
%1 = mul nsw i8 %vscale , 16
14
14
ret i8 %1
15
15
}
16
16
17
+ define i16 @rdvl_i16 () nounwind {
17
18
; CHECK-LABEL: rdvl_i16:
18
19
; CHECK: rdvl x0, #1
19
20
; CHECK-NEXT: ret
20
- define i16 @rdvl_i16 () nounwind {
21
21
%vscale = call i16 @llvm.vscale.i16 ()
22
22
%1 = mul nsw i16 %vscale , 16
23
23
ret i16 %1
24
24
}
25
25
26
+ define i32 @rdvl_i32 () nounwind {
26
27
; CHECK-LABEL: rdvl_i32:
27
28
; CHECK: rdvl x0, #1
28
29
; CHECK-NEXT: ret
29
- define i32 @rdvl_i32 () nounwind {
30
30
%vscale = call i32 @llvm.vscale.i32 ()
31
31
%1 = mul nsw i32 %vscale , 16
32
32
ret i32 %1
33
33
}
34
34
35
+ define i64 @rdvl_i64 () nounwind {
35
36
; CHECK-LABEL: rdvl_i64:
36
37
; CHECK: rdvl x0, #1
37
38
; CHECK-NEXT: ret
38
- define i64 @rdvl_i64 () nounwind {
39
39
%vscale = call i64 @llvm.vscale.i64 ()
40
40
%1 = mul nsw i64 %vscale , 16
41
41
ret i64 %1
42
42
}
43
43
44
+ define i32 @rdvl_const () nounwind {
44
45
; CHECK-LABEL: rdvl_const:
45
46
; CHECK: rdvl x0, #1
46
47
; CHECK-NEXT: ret
47
- define i32 @rdvl_const () nounwind {
48
48
%vscale.ptr = getelementptr <vscale x 1 x i8 >, ptr null , i64 1
49
49
%vscale.int = ptrtoint ptr %vscale.ptr to i32
50
50
%vscale.scaled = mul nsw i32 %vscale.int , 16
@@ -70,32 +70,31 @@ define i32 @vscale_neg1() nounwind {
70
70
ret i32 %neg
71
71
}
72
72
73
+ define i32 @rdvl_3 () nounwind {
73
74
; CHECK-LABEL: rdvl_3:
74
75
; CHECK: rdvl [[VL_B:x[0-9]+]], #1
75
76
; CHECK-NEXT: mov w[[MUL:[0-9]+]], #3
76
77
; CHECK-NEXT: lsr [[VL_Q:x[0-9]+]], [[VL_B]], #4
77
78
; CHECK-NEXT: mul x0, [[VL_Q]], x[[MUL]]
78
79
; CHECK-NEXT: ret
79
- define i32 @rdvl_3 () nounwind {
80
80
%vscale = call i32 @llvm.vscale.i32 ()
81
81
%1 = mul nsw i32 %vscale , 3
82
82
ret i32 %1
83
83
}
84
84
85
-
85
+ define i32 @rdvl_min () nounwind {
86
86
; CHECK-LABEL: rdvl_min:
87
87
; CHECK: rdvl x0, #-32
88
88
; CHECK-NEXT: ret
89
- define i32 @rdvl_min () nounwind {
90
89
%vscale = call i32 @llvm.vscale.i32 ()
91
90
%1 = mul nsw i32 %vscale , -512
92
91
ret i32 %1
93
92
}
94
93
94
+ define i32 @rdvl_max () nounwind {
95
95
; CHECK-LABEL: rdvl_max:
96
96
; CHECK: rdvl x0, #31
97
97
; CHECK-NEXT: ret
98
- define i32 @rdvl_max () nounwind {
99
98
%vscale = call i32 @llvm.vscale.i32 ()
100
99
%1 = mul nsw i32 %vscale , 496
101
100
ret i32 %1
@@ -116,29 +115,29 @@ define i1 @rdvl_i1() {
116
115
; CNTH
117
116
;
118
117
118
+ define i32 @cnth () nounwind {
119
119
; CHECK-LABEL: cnth:
120
120
; CHECK: cnth x0{{$}}
121
121
; CHECK-NEXT: ret
122
- define i32 @cnth () nounwind {
123
122
%vscale = call i32 @llvm.vscale.i32 ()
124
123
%1 = shl nsw i32 %vscale , 3
125
124
ret i32 %1
126
125
}
127
126
127
+ define i32 @cnth_max () nounwind {
128
128
; CHECK-LABEL: cnth_max:
129
129
; CHECK: cnth x0, all, mul #15
130
130
; CHECK-NEXT: ret
131
- define i32 @cnth_max () nounwind {
132
131
%vscale = call i32 @llvm.vscale.i32 ()
133
132
%1 = mul nsw i32 %vscale , 120
134
133
ret i32 %1
135
134
}
136
135
136
+ define i32 @cnth_neg () nounwind {
137
137
; CHECK-LABEL: cnth_neg:
138
138
; CHECK: cnth [[CNT:x[0-9]+]]
139
139
; CHECK: neg x0, [[CNT]]
140
140
; CHECK-NEXT: ret
141
- define i32 @cnth_neg () nounwind {
142
141
%vscale = call i32 @llvm.vscale.i32 ()
143
142
%1 = mul nsw i32 %vscale , -8
144
143
ret i32 %1
@@ -148,29 +147,29 @@ define i32 @cnth_neg() nounwind {
148
147
; CNTW
149
148
;
150
149
150
+ define i32 @cntw () nounwind {
151
151
; CHECK-LABEL: cntw:
152
152
; CHECK: cntw x0{{$}}
153
153
; CHECK-NEXT: ret
154
- define i32 @cntw () nounwind {
155
154
%vscale = call i32 @llvm.vscale.i32 ()
156
155
%1 = shl nsw i32 %vscale , 2
157
156
ret i32 %1
158
157
}
159
158
159
+ define i32 @cntw_max () nounwind {
160
160
; CHECK-LABEL: cntw_max:
161
161
; CHECK: cntw x0, all, mul #15
162
162
; CHECK-NEXT: ret
163
- define i32 @cntw_max () nounwind {
164
163
%vscale = call i32 @llvm.vscale.i32 ()
165
164
%1 = mul nsw i32 %vscale , 60
166
165
ret i32 %1
167
166
}
168
167
168
+ define i32 @cntw_neg () nounwind {
169
169
; CHECK-LABEL: cntw_neg:
170
170
; CHECK: cntw [[CNT:x[0-9]+]]
171
171
; CHECK: neg x0, [[CNT]]
172
172
; CHECK-NEXT: ret
173
- define i32 @cntw_neg () nounwind {
174
173
%vscale = call i32 @llvm.vscale.i32 ()
175
174
%1 = mul nsw i32 %vscale , -4
176
175
ret i32 %1
@@ -180,29 +179,29 @@ define i32 @cntw_neg() nounwind {
180
179
; CNTD
181
180
;
182
181
182
+ define i32 @cntd () nounwind {
183
183
; CHECK-LABEL: cntd:
184
184
; CHECK: cntd x0{{$}}
185
185
; CHECK-NEXT: ret
186
- define i32 @cntd () nounwind {
187
186
%vscale = call i32 @llvm.vscale.i32 ()
188
187
%1 = shl nsw i32 %vscale , 1
189
188
ret i32 %1
190
189
}
191
190
191
+ define i32 @cntd_max () nounwind {
192
192
; CHECK-LABEL: cntd_max:
193
193
; CHECK: cntd x0, all, mul #15
194
194
; CHECK-NEXT: ret
195
- define i32 @cntd_max () nounwind {
196
195
%vscale = call i32 @llvm.vscale.i32 ()
197
196
%1 = mul nsw i32 %vscale , 30
198
197
ret i32 %1
199
198
}
200
199
200
+ define i32 @cntd_neg () nounwind {
201
201
; CHECK-LABEL: cntd_neg:
202
202
; CHECK: cntd [[CNT:x[0-9]+]]
203
203
; CHECK: neg x0, [[CNT]]
204
204
; CHECK-NEXT: ret
205
- define i32 @cntd_neg () nounwind {
206
205
%vscale = call i32 @llvm.vscale.i32 ()
207
206
%1 = mul nsw i32 %vscale , -2
208
207
ret i32 %1
0 commit comments