1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=ilp32d \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \
5 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <2 x i8> @llvm.vp.ctlz.v2i8(<2 x i8>, i1 immarg, <2 x i1>, i32)
9 define <2 x i8> @vp_ctlz_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vp_ctlz_v2i8:
12 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
13 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
14 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
15 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
16 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
17 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
18 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
19 ; CHECK-NEXT: vnot.v v8, v8, v0.t
20 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
21 ; CHECK-NEXT: li a0, 85
22 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
23 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
24 ; CHECK-NEXT: li a0, 51
25 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
26 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
27 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
28 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
29 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
30 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
31 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
33 %v = call <2 x i8> @llvm.vp.ctlz.v2i8(<2 x i8> %va, i1 false, <2 x i1> %m, i32 %evl)
37 define <2 x i8> @vp_ctlz_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
38 ; CHECK-LABEL: vp_ctlz_v2i8_unmasked:
40 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
41 ; CHECK-NEXT: vsrl.vi v9, v8, 1
42 ; CHECK-NEXT: vor.vv v8, v8, v9
43 ; CHECK-NEXT: vsrl.vi v9, v8, 2
44 ; CHECK-NEXT: vor.vv v8, v8, v9
45 ; CHECK-NEXT: vsrl.vi v9, v8, 4
46 ; CHECK-NEXT: vor.vv v8, v8, v9
47 ; CHECK-NEXT: vnot.v v8, v8
48 ; CHECK-NEXT: vsrl.vi v9, v8, 1
49 ; CHECK-NEXT: li a0, 85
50 ; CHECK-NEXT: vand.vx v9, v9, a0
51 ; CHECK-NEXT: vsub.vv v8, v8, v9
52 ; CHECK-NEXT: li a0, 51
53 ; CHECK-NEXT: vand.vx v9, v8, a0
54 ; CHECK-NEXT: vsrl.vi v8, v8, 2
55 ; CHECK-NEXT: vand.vx v8, v8, a0
56 ; CHECK-NEXT: vadd.vv v8, v9, v8
57 ; CHECK-NEXT: vsrl.vi v9, v8, 4
58 ; CHECK-NEXT: vadd.vv v8, v8, v9
59 ; CHECK-NEXT: vand.vi v8, v8, 15
61 %v = call <2 x i8> @llvm.vp.ctlz.v2i8(<2 x i8> %va, i1 false, <2 x i1> splat (i1 true), i32 %evl)
65 declare <4 x i8> @llvm.vp.ctlz.v4i8(<4 x i8>, i1 immarg, <4 x i1>, i32)
67 define <4 x i8> @vp_ctlz_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
68 ; CHECK-LABEL: vp_ctlz_v4i8:
70 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
71 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
72 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
73 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
74 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
75 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
76 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
77 ; CHECK-NEXT: vnot.v v8, v8, v0.t
78 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
79 ; CHECK-NEXT: li a0, 85
80 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
81 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
82 ; CHECK-NEXT: li a0, 51
83 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
84 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
85 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
86 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
87 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
88 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
89 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
91 %v = call <4 x i8> @llvm.vp.ctlz.v4i8(<4 x i8> %va, i1 false, <4 x i1> %m, i32 %evl)
95 define <4 x i8> @vp_ctlz_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
96 ; CHECK-LABEL: vp_ctlz_v4i8_unmasked:
98 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
99 ; CHECK-NEXT: vsrl.vi v9, v8, 1
100 ; CHECK-NEXT: vor.vv v8, v8, v9
101 ; CHECK-NEXT: vsrl.vi v9, v8, 2
102 ; CHECK-NEXT: vor.vv v8, v8, v9
103 ; CHECK-NEXT: vsrl.vi v9, v8, 4
104 ; CHECK-NEXT: vor.vv v8, v8, v9
105 ; CHECK-NEXT: vnot.v v8, v8
106 ; CHECK-NEXT: vsrl.vi v9, v8, 1
107 ; CHECK-NEXT: li a0, 85
108 ; CHECK-NEXT: vand.vx v9, v9, a0
109 ; CHECK-NEXT: vsub.vv v8, v8, v9
110 ; CHECK-NEXT: li a0, 51
111 ; CHECK-NEXT: vand.vx v9, v8, a0
112 ; CHECK-NEXT: vsrl.vi v8, v8, 2
113 ; CHECK-NEXT: vand.vx v8, v8, a0
114 ; CHECK-NEXT: vadd.vv v8, v9, v8
115 ; CHECK-NEXT: vsrl.vi v9, v8, 4
116 ; CHECK-NEXT: vadd.vv v8, v8, v9
117 ; CHECK-NEXT: vand.vi v8, v8, 15
119 %v = call <4 x i8> @llvm.vp.ctlz.v4i8(<4 x i8> %va, i1 false, <4 x i1> splat (i1 true), i32 %evl)
123 declare <8 x i8> @llvm.vp.ctlz.v8i8(<8 x i8>, i1 immarg, <8 x i1>, i32)
125 define <8 x i8> @vp_ctlz_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
126 ; CHECK-LABEL: vp_ctlz_v8i8:
128 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
129 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
130 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
131 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
132 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
133 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
134 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
135 ; CHECK-NEXT: vnot.v v8, v8, v0.t
136 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
137 ; CHECK-NEXT: li a0, 85
138 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
139 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
140 ; CHECK-NEXT: li a0, 51
141 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
142 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
143 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
144 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
145 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
146 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
147 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
149 %v = call <8 x i8> @llvm.vp.ctlz.v8i8(<8 x i8> %va, i1 false, <8 x i1> %m, i32 %evl)
153 define <8 x i8> @vp_ctlz_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
154 ; CHECK-LABEL: vp_ctlz_v8i8_unmasked:
156 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
157 ; CHECK-NEXT: vsrl.vi v9, v8, 1
158 ; CHECK-NEXT: vor.vv v8, v8, v9
159 ; CHECK-NEXT: vsrl.vi v9, v8, 2
160 ; CHECK-NEXT: vor.vv v8, v8, v9
161 ; CHECK-NEXT: vsrl.vi v9, v8, 4
162 ; CHECK-NEXT: vor.vv v8, v8, v9
163 ; CHECK-NEXT: vnot.v v8, v8
164 ; CHECK-NEXT: vsrl.vi v9, v8, 1
165 ; CHECK-NEXT: li a0, 85
166 ; CHECK-NEXT: vand.vx v9, v9, a0
167 ; CHECK-NEXT: vsub.vv v8, v8, v9
168 ; CHECK-NEXT: li a0, 51
169 ; CHECK-NEXT: vand.vx v9, v8, a0
170 ; CHECK-NEXT: vsrl.vi v8, v8, 2
171 ; CHECK-NEXT: vand.vx v8, v8, a0
172 ; CHECK-NEXT: vadd.vv v8, v9, v8
173 ; CHECK-NEXT: vsrl.vi v9, v8, 4
174 ; CHECK-NEXT: vadd.vv v8, v8, v9
175 ; CHECK-NEXT: vand.vi v8, v8, 15
177 %v = call <8 x i8> @llvm.vp.ctlz.v8i8(<8 x i8> %va, i1 false, <8 x i1> splat (i1 true), i32 %evl)
181 declare <16 x i8> @llvm.vp.ctlz.v16i8(<16 x i8>, i1 immarg, <16 x i1>, i32)
183 define <16 x i8> @vp_ctlz_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
184 ; CHECK-LABEL: vp_ctlz_v16i8:
186 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
187 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
188 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
189 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
190 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
191 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
192 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
193 ; CHECK-NEXT: vnot.v v8, v8, v0.t
194 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
195 ; CHECK-NEXT: li a0, 85
196 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
197 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
198 ; CHECK-NEXT: li a0, 51
199 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
200 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
201 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
202 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
203 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
204 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
205 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
207 %v = call <16 x i8> @llvm.vp.ctlz.v16i8(<16 x i8> %va, i1 false, <16 x i1> %m, i32 %evl)
211 define <16 x i8> @vp_ctlz_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
212 ; CHECK-LABEL: vp_ctlz_v16i8_unmasked:
214 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
215 ; CHECK-NEXT: vsrl.vi v9, v8, 1
216 ; CHECK-NEXT: vor.vv v8, v8, v9
217 ; CHECK-NEXT: vsrl.vi v9, v8, 2
218 ; CHECK-NEXT: vor.vv v8, v8, v9
219 ; CHECK-NEXT: vsrl.vi v9, v8, 4
220 ; CHECK-NEXT: vor.vv v8, v8, v9
221 ; CHECK-NEXT: vnot.v v8, v8
222 ; CHECK-NEXT: vsrl.vi v9, v8, 1
223 ; CHECK-NEXT: li a0, 85
224 ; CHECK-NEXT: vand.vx v9, v9, a0
225 ; CHECK-NEXT: vsub.vv v8, v8, v9
226 ; CHECK-NEXT: li a0, 51
227 ; CHECK-NEXT: vand.vx v9, v8, a0
228 ; CHECK-NEXT: vsrl.vi v8, v8, 2
229 ; CHECK-NEXT: vand.vx v8, v8, a0
230 ; CHECK-NEXT: vadd.vv v8, v9, v8
231 ; CHECK-NEXT: vsrl.vi v9, v8, 4
232 ; CHECK-NEXT: vadd.vv v8, v8, v9
233 ; CHECK-NEXT: vand.vi v8, v8, 15
235 %v = call <16 x i8> @llvm.vp.ctlz.v16i8(<16 x i8> %va, i1 false, <16 x i1> splat (i1 true), i32 %evl)
239 declare <2 x i16> @llvm.vp.ctlz.v2i16(<2 x i16>, i1 immarg, <2 x i1>, i32)
241 define <2 x i16> @vp_ctlz_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
242 ; CHECK-LABEL: vp_ctlz_v2i16:
244 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
245 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
246 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
247 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
248 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
249 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
250 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
251 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
252 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
253 ; CHECK-NEXT: vnot.v v8, v8, v0.t
254 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
255 ; CHECK-NEXT: lui a0, 5
256 ; CHECK-NEXT: addi a0, a0, 1365
257 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
258 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
259 ; CHECK-NEXT: lui a0, 3
260 ; CHECK-NEXT: addi a0, a0, 819
261 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
262 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
263 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
264 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
265 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
266 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
267 ; CHECK-NEXT: lui a0, 1
268 ; CHECK-NEXT: addi a0, a0, -241
269 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
270 ; CHECK-NEXT: li a0, 257
271 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
272 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
274 %v = call <2 x i16> @llvm.vp.ctlz.v2i16(<2 x i16> %va, i1 false, <2 x i1> %m, i32 %evl)
278 define <2 x i16> @vp_ctlz_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
279 ; CHECK-LABEL: vp_ctlz_v2i16_unmasked:
281 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
282 ; CHECK-NEXT: vsrl.vi v9, v8, 1
283 ; CHECK-NEXT: vor.vv v8, v8, v9
284 ; CHECK-NEXT: vsrl.vi v9, v8, 2
285 ; CHECK-NEXT: vor.vv v8, v8, v9
286 ; CHECK-NEXT: vsrl.vi v9, v8, 4
287 ; CHECK-NEXT: vor.vv v8, v8, v9
288 ; CHECK-NEXT: vsrl.vi v9, v8, 8
289 ; CHECK-NEXT: vor.vv v8, v8, v9
290 ; CHECK-NEXT: vnot.v v8, v8
291 ; CHECK-NEXT: vsrl.vi v9, v8, 1
292 ; CHECK-NEXT: lui a0, 5
293 ; CHECK-NEXT: addi a0, a0, 1365
294 ; CHECK-NEXT: vand.vx v9, v9, a0
295 ; CHECK-NEXT: vsub.vv v8, v8, v9
296 ; CHECK-NEXT: lui a0, 3
297 ; CHECK-NEXT: addi a0, a0, 819
298 ; CHECK-NEXT: vand.vx v9, v8, a0
299 ; CHECK-NEXT: vsrl.vi v8, v8, 2
300 ; CHECK-NEXT: vand.vx v8, v8, a0
301 ; CHECK-NEXT: vadd.vv v8, v9, v8
302 ; CHECK-NEXT: vsrl.vi v9, v8, 4
303 ; CHECK-NEXT: vadd.vv v8, v8, v9
304 ; CHECK-NEXT: lui a0, 1
305 ; CHECK-NEXT: addi a0, a0, -241
306 ; CHECK-NEXT: vand.vx v8, v8, a0
307 ; CHECK-NEXT: li a0, 257
308 ; CHECK-NEXT: vmul.vx v8, v8, a0
309 ; CHECK-NEXT: vsrl.vi v8, v8, 8
311 %v = call <2 x i16> @llvm.vp.ctlz.v2i16(<2 x i16> %va, i1 false, <2 x i1> splat (i1 true), i32 %evl)
315 declare <4 x i16> @llvm.vp.ctlz.v4i16(<4 x i16>, i1 immarg, <4 x i1>, i32)
317 define <4 x i16> @vp_ctlz_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
318 ; CHECK-LABEL: vp_ctlz_v4i16:
320 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
321 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
322 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
323 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
324 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
325 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
326 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
327 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
328 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
329 ; CHECK-NEXT: vnot.v v8, v8, v0.t
330 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
331 ; CHECK-NEXT: lui a0, 5
332 ; CHECK-NEXT: addi a0, a0, 1365
333 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
334 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
335 ; CHECK-NEXT: lui a0, 3
336 ; CHECK-NEXT: addi a0, a0, 819
337 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
338 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
339 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
340 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
341 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
342 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
343 ; CHECK-NEXT: lui a0, 1
344 ; CHECK-NEXT: addi a0, a0, -241
345 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
346 ; CHECK-NEXT: li a0, 257
347 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
348 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
350 %v = call <4 x i16> @llvm.vp.ctlz.v4i16(<4 x i16> %va, i1 false, <4 x i1> %m, i32 %evl)
354 define <4 x i16> @vp_ctlz_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
355 ; CHECK-LABEL: vp_ctlz_v4i16_unmasked:
357 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
358 ; CHECK-NEXT: vsrl.vi v9, v8, 1
359 ; CHECK-NEXT: vor.vv v8, v8, v9
360 ; CHECK-NEXT: vsrl.vi v9, v8, 2
361 ; CHECK-NEXT: vor.vv v8, v8, v9
362 ; CHECK-NEXT: vsrl.vi v9, v8, 4
363 ; CHECK-NEXT: vor.vv v8, v8, v9
364 ; CHECK-NEXT: vsrl.vi v9, v8, 8
365 ; CHECK-NEXT: vor.vv v8, v8, v9
366 ; CHECK-NEXT: vnot.v v8, v8
367 ; CHECK-NEXT: vsrl.vi v9, v8, 1
368 ; CHECK-NEXT: lui a0, 5
369 ; CHECK-NEXT: addi a0, a0, 1365
370 ; CHECK-NEXT: vand.vx v9, v9, a0
371 ; CHECK-NEXT: vsub.vv v8, v8, v9
372 ; CHECK-NEXT: lui a0, 3
373 ; CHECK-NEXT: addi a0, a0, 819
374 ; CHECK-NEXT: vand.vx v9, v8, a0
375 ; CHECK-NEXT: vsrl.vi v8, v8, 2
376 ; CHECK-NEXT: vand.vx v8, v8, a0
377 ; CHECK-NEXT: vadd.vv v8, v9, v8
378 ; CHECK-NEXT: vsrl.vi v9, v8, 4
379 ; CHECK-NEXT: vadd.vv v8, v8, v9
380 ; CHECK-NEXT: lui a0, 1
381 ; CHECK-NEXT: addi a0, a0, -241
382 ; CHECK-NEXT: vand.vx v8, v8, a0
383 ; CHECK-NEXT: li a0, 257
384 ; CHECK-NEXT: vmul.vx v8, v8, a0
385 ; CHECK-NEXT: vsrl.vi v8, v8, 8
387 %v = call <4 x i16> @llvm.vp.ctlz.v4i16(<4 x i16> %va, i1 false, <4 x i1> splat (i1 true), i32 %evl)
391 declare <8 x i16> @llvm.vp.ctlz.v8i16(<8 x i16>, i1 immarg, <8 x i1>, i32)
393 define <8 x i16> @vp_ctlz_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
394 ; CHECK-LABEL: vp_ctlz_v8i16:
396 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
397 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
398 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
399 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
400 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
401 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
402 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
403 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
404 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
405 ; CHECK-NEXT: vnot.v v8, v8, v0.t
406 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
407 ; CHECK-NEXT: lui a0, 5
408 ; CHECK-NEXT: addi a0, a0, 1365
409 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
410 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
411 ; CHECK-NEXT: lui a0, 3
412 ; CHECK-NEXT: addi a0, a0, 819
413 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
414 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
415 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
416 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
417 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
418 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
419 ; CHECK-NEXT: lui a0, 1
420 ; CHECK-NEXT: addi a0, a0, -241
421 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
422 ; CHECK-NEXT: li a0, 257
423 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
424 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
426 %v = call <8 x i16> @llvm.vp.ctlz.v8i16(<8 x i16> %va, i1 false, <8 x i1> %m, i32 %evl)
430 define <8 x i16> @vp_ctlz_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
431 ; CHECK-LABEL: vp_ctlz_v8i16_unmasked:
433 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
434 ; CHECK-NEXT: vsrl.vi v9, v8, 1
435 ; CHECK-NEXT: vor.vv v8, v8, v9
436 ; CHECK-NEXT: vsrl.vi v9, v8, 2
437 ; CHECK-NEXT: vor.vv v8, v8, v9
438 ; CHECK-NEXT: vsrl.vi v9, v8, 4
439 ; CHECK-NEXT: vor.vv v8, v8, v9
440 ; CHECK-NEXT: vsrl.vi v9, v8, 8
441 ; CHECK-NEXT: vor.vv v8, v8, v9
442 ; CHECK-NEXT: vnot.v v8, v8
443 ; CHECK-NEXT: vsrl.vi v9, v8, 1
444 ; CHECK-NEXT: lui a0, 5
445 ; CHECK-NEXT: addi a0, a0, 1365
446 ; CHECK-NEXT: vand.vx v9, v9, a0
447 ; CHECK-NEXT: vsub.vv v8, v8, v9
448 ; CHECK-NEXT: lui a0, 3
449 ; CHECK-NEXT: addi a0, a0, 819
450 ; CHECK-NEXT: vand.vx v9, v8, a0
451 ; CHECK-NEXT: vsrl.vi v8, v8, 2
452 ; CHECK-NEXT: vand.vx v8, v8, a0
453 ; CHECK-NEXT: vadd.vv v8, v9, v8
454 ; CHECK-NEXT: vsrl.vi v9, v8, 4
455 ; CHECK-NEXT: vadd.vv v8, v8, v9
456 ; CHECK-NEXT: lui a0, 1
457 ; CHECK-NEXT: addi a0, a0, -241
458 ; CHECK-NEXT: vand.vx v8, v8, a0
459 ; CHECK-NEXT: li a0, 257
460 ; CHECK-NEXT: vmul.vx v8, v8, a0
461 ; CHECK-NEXT: vsrl.vi v8, v8, 8
463 %v = call <8 x i16> @llvm.vp.ctlz.v8i16(<8 x i16> %va, i1 false, <8 x i1> splat (i1 true), i32 %evl)
467 declare <16 x i16> @llvm.vp.ctlz.v16i16(<16 x i16>, i1 immarg, <16 x i1>, i32)
469 define <16 x i16> @vp_ctlz_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
470 ; CHECK-LABEL: vp_ctlz_v16i16:
472 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
473 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
474 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
475 ; CHECK-NEXT: vsrl.vi v10, v8, 2, v0.t
476 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
477 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
478 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
479 ; CHECK-NEXT: vsrl.vi v10, v8, 8, v0.t
480 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
481 ; CHECK-NEXT: vnot.v v8, v8, v0.t
482 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
483 ; CHECK-NEXT: lui a0, 5
484 ; CHECK-NEXT: addi a0, a0, 1365
485 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
486 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
487 ; CHECK-NEXT: lui a0, 3
488 ; CHECK-NEXT: addi a0, a0, 819
489 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
490 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
491 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
492 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
493 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
494 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
495 ; CHECK-NEXT: lui a0, 1
496 ; CHECK-NEXT: addi a0, a0, -241
497 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
498 ; CHECK-NEXT: li a0, 257
499 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
500 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
502 %v = call <16 x i16> @llvm.vp.ctlz.v16i16(<16 x i16> %va, i1 false, <16 x i1> %m, i32 %evl)
506 define <16 x i16> @vp_ctlz_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
507 ; CHECK-LABEL: vp_ctlz_v16i16_unmasked:
509 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
510 ; CHECK-NEXT: vsrl.vi v10, v8, 1
511 ; CHECK-NEXT: vor.vv v8, v8, v10
512 ; CHECK-NEXT: vsrl.vi v10, v8, 2
513 ; CHECK-NEXT: vor.vv v8, v8, v10
514 ; CHECK-NEXT: vsrl.vi v10, v8, 4
515 ; CHECK-NEXT: vor.vv v8, v8, v10
516 ; CHECK-NEXT: vsrl.vi v10, v8, 8
517 ; CHECK-NEXT: vor.vv v8, v8, v10
518 ; CHECK-NEXT: vnot.v v8, v8
519 ; CHECK-NEXT: vsrl.vi v10, v8, 1
520 ; CHECK-NEXT: lui a0, 5
521 ; CHECK-NEXT: addi a0, a0, 1365
522 ; CHECK-NEXT: vand.vx v10, v10, a0
523 ; CHECK-NEXT: vsub.vv v8, v8, v10
524 ; CHECK-NEXT: lui a0, 3
525 ; CHECK-NEXT: addi a0, a0, 819
526 ; CHECK-NEXT: vand.vx v10, v8, a0
527 ; CHECK-NEXT: vsrl.vi v8, v8, 2
528 ; CHECK-NEXT: vand.vx v8, v8, a0
529 ; CHECK-NEXT: vadd.vv v8, v10, v8
530 ; CHECK-NEXT: vsrl.vi v10, v8, 4
531 ; CHECK-NEXT: vadd.vv v8, v8, v10
532 ; CHECK-NEXT: lui a0, 1
533 ; CHECK-NEXT: addi a0, a0, -241
534 ; CHECK-NEXT: vand.vx v8, v8, a0
535 ; CHECK-NEXT: li a0, 257
536 ; CHECK-NEXT: vmul.vx v8, v8, a0
537 ; CHECK-NEXT: vsrl.vi v8, v8, 8
539 %v = call <16 x i16> @llvm.vp.ctlz.v16i16(<16 x i16> %va, i1 false, <16 x i1> splat (i1 true), i32 %evl)
543 declare <2 x i32> @llvm.vp.ctlz.v2i32(<2 x i32>, i1 immarg, <2 x i1>, i32)
545 define <2 x i32> @vp_ctlz_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
546 ; CHECK-LABEL: vp_ctlz_v2i32:
548 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
549 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
550 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
551 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
552 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
553 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
554 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
555 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
556 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
557 ; CHECK-NEXT: vsrl.vi v9, v8, 16, v0.t
558 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
559 ; CHECK-NEXT: vnot.v v8, v8, v0.t
560 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
561 ; CHECK-NEXT: lui a0, 349525
562 ; CHECK-NEXT: addi a0, a0, 1365
563 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
564 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
565 ; CHECK-NEXT: lui a0, 209715
566 ; CHECK-NEXT: addi a0, a0, 819
567 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
568 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
569 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
570 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
571 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
572 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
573 ; CHECK-NEXT: lui a0, 61681
574 ; CHECK-NEXT: addi a0, a0, -241
575 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
576 ; CHECK-NEXT: lui a0, 4112
577 ; CHECK-NEXT: addi a0, a0, 257
578 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
579 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
581 %v = call <2 x i32> @llvm.vp.ctlz.v2i32(<2 x i32> %va, i1 false, <2 x i1> %m, i32 %evl)
585 define <2 x i32> @vp_ctlz_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
586 ; CHECK-LABEL: vp_ctlz_v2i32_unmasked:
588 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
589 ; CHECK-NEXT: vsrl.vi v9, v8, 1
590 ; CHECK-NEXT: vor.vv v8, v8, v9
591 ; CHECK-NEXT: vsrl.vi v9, v8, 2
592 ; CHECK-NEXT: vor.vv v8, v8, v9
593 ; CHECK-NEXT: vsrl.vi v9, v8, 4
594 ; CHECK-NEXT: vor.vv v8, v8, v9
595 ; CHECK-NEXT: vsrl.vi v9, v8, 8
596 ; CHECK-NEXT: vor.vv v8, v8, v9
597 ; CHECK-NEXT: vsrl.vi v9, v8, 16
598 ; CHECK-NEXT: vor.vv v8, v8, v9
599 ; CHECK-NEXT: vnot.v v8, v8
600 ; CHECK-NEXT: vsrl.vi v9, v8, 1
601 ; CHECK-NEXT: lui a0, 349525
602 ; CHECK-NEXT: addi a0, a0, 1365
603 ; CHECK-NEXT: vand.vx v9, v9, a0
604 ; CHECK-NEXT: vsub.vv v8, v8, v9
605 ; CHECK-NEXT: lui a0, 209715
606 ; CHECK-NEXT: addi a0, a0, 819
607 ; CHECK-NEXT: vand.vx v9, v8, a0
608 ; CHECK-NEXT: vsrl.vi v8, v8, 2
609 ; CHECK-NEXT: vand.vx v8, v8, a0
610 ; CHECK-NEXT: vadd.vv v8, v9, v8
611 ; CHECK-NEXT: vsrl.vi v9, v8, 4
612 ; CHECK-NEXT: vadd.vv v8, v8, v9
613 ; CHECK-NEXT: lui a0, 61681
614 ; CHECK-NEXT: addi a0, a0, -241
615 ; CHECK-NEXT: vand.vx v8, v8, a0
616 ; CHECK-NEXT: lui a0, 4112
617 ; CHECK-NEXT: addi a0, a0, 257
618 ; CHECK-NEXT: vmul.vx v8, v8, a0
619 ; CHECK-NEXT: vsrl.vi v8, v8, 24
621 %v = call <2 x i32> @llvm.vp.ctlz.v2i32(<2 x i32> %va, i1 false, <2 x i1> splat (i1 true), i32 %evl)
625 declare <4 x i32> @llvm.vp.ctlz.v4i32(<4 x i32>, i1 immarg, <4 x i1>, i32)
627 define <4 x i32> @vp_ctlz_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
628 ; CHECK-LABEL: vp_ctlz_v4i32:
630 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
631 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
632 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
633 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
634 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
635 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
636 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
637 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
638 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
639 ; CHECK-NEXT: vsrl.vi v9, v8, 16, v0.t
640 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
641 ; CHECK-NEXT: vnot.v v8, v8, v0.t
642 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
643 ; CHECK-NEXT: lui a0, 349525
644 ; CHECK-NEXT: addi a0, a0, 1365
645 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
646 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
647 ; CHECK-NEXT: lui a0, 209715
648 ; CHECK-NEXT: addi a0, a0, 819
649 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
650 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
651 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
652 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
653 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
654 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
655 ; CHECK-NEXT: lui a0, 61681
656 ; CHECK-NEXT: addi a0, a0, -241
657 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
658 ; CHECK-NEXT: lui a0, 4112
659 ; CHECK-NEXT: addi a0, a0, 257
660 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
661 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
663 %v = call <4 x i32> @llvm.vp.ctlz.v4i32(<4 x i32> %va, i1 false, <4 x i1> %m, i32 %evl)
667 define <4 x i32> @vp_ctlz_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
668 ; CHECK-LABEL: vp_ctlz_v4i32_unmasked:
670 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
671 ; CHECK-NEXT: vsrl.vi v9, v8, 1
672 ; CHECK-NEXT: vor.vv v8, v8, v9
673 ; CHECK-NEXT: vsrl.vi v9, v8, 2
674 ; CHECK-NEXT: vor.vv v8, v8, v9
675 ; CHECK-NEXT: vsrl.vi v9, v8, 4
676 ; CHECK-NEXT: vor.vv v8, v8, v9
677 ; CHECK-NEXT: vsrl.vi v9, v8, 8
678 ; CHECK-NEXT: vor.vv v8, v8, v9
679 ; CHECK-NEXT: vsrl.vi v9, v8, 16
680 ; CHECK-NEXT: vor.vv v8, v8, v9
681 ; CHECK-NEXT: vnot.v v8, v8
682 ; CHECK-NEXT: vsrl.vi v9, v8, 1
683 ; CHECK-NEXT: lui a0, 349525
684 ; CHECK-NEXT: addi a0, a0, 1365
685 ; CHECK-NEXT: vand.vx v9, v9, a0
686 ; CHECK-NEXT: vsub.vv v8, v8, v9
687 ; CHECK-NEXT: lui a0, 209715
688 ; CHECK-NEXT: addi a0, a0, 819
689 ; CHECK-NEXT: vand.vx v9, v8, a0
690 ; CHECK-NEXT: vsrl.vi v8, v8, 2
691 ; CHECK-NEXT: vand.vx v8, v8, a0
692 ; CHECK-NEXT: vadd.vv v8, v9, v8
693 ; CHECK-NEXT: vsrl.vi v9, v8, 4
694 ; CHECK-NEXT: vadd.vv v8, v8, v9
695 ; CHECK-NEXT: lui a0, 61681
696 ; CHECK-NEXT: addi a0, a0, -241
697 ; CHECK-NEXT: vand.vx v8, v8, a0
698 ; CHECK-NEXT: lui a0, 4112
699 ; CHECK-NEXT: addi a0, a0, 257
700 ; CHECK-NEXT: vmul.vx v8, v8, a0
701 ; CHECK-NEXT: vsrl.vi v8, v8, 24
703 %v = call <4 x i32> @llvm.vp.ctlz.v4i32(<4 x i32> %va, i1 false, <4 x i1> splat (i1 true), i32 %evl)
707 declare <8 x i32> @llvm.vp.ctlz.v8i32(<8 x i32>, i1 immarg, <8 x i1>, i32)
709 define <8 x i32> @vp_ctlz_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
710 ; CHECK-LABEL: vp_ctlz_v8i32:
712 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
713 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
714 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
715 ; CHECK-NEXT: vsrl.vi v10, v8, 2, v0.t
716 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
717 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
718 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
719 ; CHECK-NEXT: vsrl.vi v10, v8, 8, v0.t
720 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
721 ; CHECK-NEXT: vsrl.vi v10, v8, 16, v0.t
722 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
723 ; CHECK-NEXT: vnot.v v8, v8, v0.t
724 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
725 ; CHECK-NEXT: lui a0, 349525
726 ; CHECK-NEXT: addi a0, a0, 1365
727 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
728 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
729 ; CHECK-NEXT: lui a0, 209715
730 ; CHECK-NEXT: addi a0, a0, 819
731 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
732 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
733 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
734 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
735 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
736 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
737 ; CHECK-NEXT: lui a0, 61681
738 ; CHECK-NEXT: addi a0, a0, -241
739 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
740 ; CHECK-NEXT: lui a0, 4112
741 ; CHECK-NEXT: addi a0, a0, 257
742 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
743 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
745 %v = call <8 x i32> @llvm.vp.ctlz.v8i32(<8 x i32> %va, i1 false, <8 x i1> %m, i32 %evl)
749 define <8 x i32> @vp_ctlz_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
750 ; CHECK-LABEL: vp_ctlz_v8i32_unmasked:
752 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
753 ; CHECK-NEXT: vsrl.vi v10, v8, 1
754 ; CHECK-NEXT: vor.vv v8, v8, v10
755 ; CHECK-NEXT: vsrl.vi v10, v8, 2
756 ; CHECK-NEXT: vor.vv v8, v8, v10
757 ; CHECK-NEXT: vsrl.vi v10, v8, 4
758 ; CHECK-NEXT: vor.vv v8, v8, v10
759 ; CHECK-NEXT: vsrl.vi v10, v8, 8
760 ; CHECK-NEXT: vor.vv v8, v8, v10
761 ; CHECK-NEXT: vsrl.vi v10, v8, 16
762 ; CHECK-NEXT: vor.vv v8, v8, v10
763 ; CHECK-NEXT: vnot.v v8, v8
764 ; CHECK-NEXT: vsrl.vi v10, v8, 1
765 ; CHECK-NEXT: lui a0, 349525
766 ; CHECK-NEXT: addi a0, a0, 1365
767 ; CHECK-NEXT: vand.vx v10, v10, a0
768 ; CHECK-NEXT: vsub.vv v8, v8, v10
769 ; CHECK-NEXT: lui a0, 209715
770 ; CHECK-NEXT: addi a0, a0, 819
771 ; CHECK-NEXT: vand.vx v10, v8, a0
772 ; CHECK-NEXT: vsrl.vi v8, v8, 2
773 ; CHECK-NEXT: vand.vx v8, v8, a0
774 ; CHECK-NEXT: vadd.vv v8, v10, v8
775 ; CHECK-NEXT: vsrl.vi v10, v8, 4
776 ; CHECK-NEXT: vadd.vv v8, v8, v10
777 ; CHECK-NEXT: lui a0, 61681
778 ; CHECK-NEXT: addi a0, a0, -241
779 ; CHECK-NEXT: vand.vx v8, v8, a0
780 ; CHECK-NEXT: lui a0, 4112
781 ; CHECK-NEXT: addi a0, a0, 257
782 ; CHECK-NEXT: vmul.vx v8, v8, a0
783 ; CHECK-NEXT: vsrl.vi v8, v8, 24
785 %v = call <8 x i32> @llvm.vp.ctlz.v8i32(<8 x i32> %va, i1 false, <8 x i1> splat (i1 true), i32 %evl)
789 declare <16 x i32> @llvm.vp.ctlz.v16i32(<16 x i32>, i1 immarg, <16 x i1>, i32)
791 define <16 x i32> @vp_ctlz_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
792 ; CHECK-LABEL: vp_ctlz_v16i32:
794 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
795 ; CHECK-NEXT: vsrl.vi v12, v8, 1, v0.t
796 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
797 ; CHECK-NEXT: vsrl.vi v12, v8, 2, v0.t
798 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
799 ; CHECK-NEXT: vsrl.vi v12, v8, 4, v0.t
800 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
801 ; CHECK-NEXT: vsrl.vi v12, v8, 8, v0.t
802 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
803 ; CHECK-NEXT: vsrl.vi v12, v8, 16, v0.t
804 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
805 ; CHECK-NEXT: vnot.v v8, v8, v0.t
806 ; CHECK-NEXT: vsrl.vi v12, v8, 1, v0.t
807 ; CHECK-NEXT: lui a0, 349525
808 ; CHECK-NEXT: addi a0, a0, 1365
809 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
810 ; CHECK-NEXT: vsub.vv v8, v8, v12, v0.t
811 ; CHECK-NEXT: lui a0, 209715
812 ; CHECK-NEXT: addi a0, a0, 819
813 ; CHECK-NEXT: vand.vx v12, v8, a0, v0.t
814 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
815 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
816 ; CHECK-NEXT: vadd.vv v8, v12, v8, v0.t
817 ; CHECK-NEXT: vsrl.vi v12, v8, 4, v0.t
818 ; CHECK-NEXT: vadd.vv v8, v8, v12, v0.t
819 ; CHECK-NEXT: lui a0, 61681
820 ; CHECK-NEXT: addi a0, a0, -241
821 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
822 ; CHECK-NEXT: lui a0, 4112
823 ; CHECK-NEXT: addi a0, a0, 257
824 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
825 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
827 %v = call <16 x i32> @llvm.vp.ctlz.v16i32(<16 x i32> %va, i1 false, <16 x i1> %m, i32 %evl)
831 define <16 x i32> @vp_ctlz_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
832 ; CHECK-LABEL: vp_ctlz_v16i32_unmasked:
834 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
835 ; CHECK-NEXT: vsrl.vi v12, v8, 1
836 ; CHECK-NEXT: vor.vv v8, v8, v12
837 ; CHECK-NEXT: vsrl.vi v12, v8, 2
838 ; CHECK-NEXT: vor.vv v8, v8, v12
839 ; CHECK-NEXT: vsrl.vi v12, v8, 4
840 ; CHECK-NEXT: vor.vv v8, v8, v12
841 ; CHECK-NEXT: vsrl.vi v12, v8, 8
842 ; CHECK-NEXT: vor.vv v8, v8, v12
843 ; CHECK-NEXT: vsrl.vi v12, v8, 16
844 ; CHECK-NEXT: vor.vv v8, v8, v12
845 ; CHECK-NEXT: vnot.v v8, v8
846 ; CHECK-NEXT: vsrl.vi v12, v8, 1
847 ; CHECK-NEXT: lui a0, 349525
848 ; CHECK-NEXT: addi a0, a0, 1365
849 ; CHECK-NEXT: vand.vx v12, v12, a0
850 ; CHECK-NEXT: vsub.vv v8, v8, v12
851 ; CHECK-NEXT: lui a0, 209715
852 ; CHECK-NEXT: addi a0, a0, 819
853 ; CHECK-NEXT: vand.vx v12, v8, a0
854 ; CHECK-NEXT: vsrl.vi v8, v8, 2
855 ; CHECK-NEXT: vand.vx v8, v8, a0
856 ; CHECK-NEXT: vadd.vv v8, v12, v8
857 ; CHECK-NEXT: vsrl.vi v12, v8, 4
858 ; CHECK-NEXT: vadd.vv v8, v8, v12
859 ; CHECK-NEXT: lui a0, 61681
860 ; CHECK-NEXT: addi a0, a0, -241
861 ; CHECK-NEXT: vand.vx v8, v8, a0
862 ; CHECK-NEXT: lui a0, 4112
863 ; CHECK-NEXT: addi a0, a0, 257
864 ; CHECK-NEXT: vmul.vx v8, v8, a0
865 ; CHECK-NEXT: vsrl.vi v8, v8, 24
867 %v = call <16 x i32> @llvm.vp.ctlz.v16i32(<16 x i32> %va, i1 false, <16 x i1> splat (i1 true), i32 %evl)
871 declare <2 x i64> @llvm.vp.ctlz.v2i64(<2 x i64>, i1 immarg, <2 x i1>, i32)
873 define <2 x i64> @vp_ctlz_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
874 ; RV32-LABEL: vp_ctlz_v2i64:
876 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
877 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
878 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
879 ; RV32-NEXT: vsrl.vi v9, v8, 2, v0.t
880 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
881 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
882 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
883 ; RV32-NEXT: vsrl.vi v9, v8, 8, v0.t
884 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
885 ; RV32-NEXT: vsrl.vi v9, v8, 16, v0.t
886 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
887 ; RV32-NEXT: li a1, 32
888 ; RV32-NEXT: vsrl.vx v9, v8, a1, v0.t
889 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
890 ; RV32-NEXT: vnot.v v8, v8, v0.t
891 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
892 ; RV32-NEXT: lui a1, 349525
893 ; RV32-NEXT: addi a1, a1, 1365
894 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
895 ; RV32-NEXT: vmv.v.x v10, a1
896 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
897 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
898 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
899 ; RV32-NEXT: lui a1, 209715
900 ; RV32-NEXT: addi a1, a1, 819
901 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
902 ; RV32-NEXT: vmv.v.x v9, a1
903 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
904 ; RV32-NEXT: vand.vv v10, v8, v9, v0.t
905 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
906 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
907 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
908 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
909 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
910 ; RV32-NEXT: lui a1, 61681
911 ; RV32-NEXT: addi a1, a1, -241
912 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
913 ; RV32-NEXT: vmv.v.x v9, a1
914 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
915 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
916 ; RV32-NEXT: lui a1, 4112
917 ; RV32-NEXT: addi a1, a1, 257
918 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
919 ; RV32-NEXT: vmv.v.x v9, a1
920 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
921 ; RV32-NEXT: vmul.vv v8, v8, v9, v0.t
922 ; RV32-NEXT: li a0, 56
923 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
926 ; RV64-LABEL: vp_ctlz_v2i64:
928 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
929 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
930 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
931 ; RV64-NEXT: vsrl.vi v9, v8, 2, v0.t
932 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
933 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
934 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
935 ; RV64-NEXT: vsrl.vi v9, v8, 8, v0.t
936 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
937 ; RV64-NEXT: vsrl.vi v9, v8, 16, v0.t
938 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
939 ; RV64-NEXT: li a0, 32
940 ; RV64-NEXT: vsrl.vx v9, v8, a0, v0.t
941 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
942 ; RV64-NEXT: vnot.v v8, v8, v0.t
943 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
944 ; RV64-NEXT: lui a0, 349525
945 ; RV64-NEXT: addiw a0, a0, 1365
946 ; RV64-NEXT: slli a1, a0, 32
947 ; RV64-NEXT: add a0, a0, a1
948 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
949 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
950 ; RV64-NEXT: lui a0, 209715
951 ; RV64-NEXT: addiw a0, a0, 819
952 ; RV64-NEXT: slli a1, a0, 32
953 ; RV64-NEXT: add a0, a0, a1
954 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
955 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
956 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
957 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
958 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
959 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
960 ; RV64-NEXT: lui a0, 61681
961 ; RV64-NEXT: addiw a0, a0, -241
962 ; RV64-NEXT: slli a1, a0, 32
963 ; RV64-NEXT: add a0, a0, a1
964 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
965 ; RV64-NEXT: lui a0, 4112
966 ; RV64-NEXT: addiw a0, a0, 257
967 ; RV64-NEXT: slli a1, a0, 32
968 ; RV64-NEXT: add a0, a0, a1
969 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
970 ; RV64-NEXT: li a0, 56
971 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
973 %v = call <2 x i64> @llvm.vp.ctlz.v2i64(<2 x i64> %va, i1 false, <2 x i1> %m, i32 %evl)
977 define <2 x i64> @vp_ctlz_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
978 ; RV32-LABEL: vp_ctlz_v2i64_unmasked:
980 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
981 ; RV32-NEXT: vsrl.vi v9, v8, 1
982 ; RV32-NEXT: vor.vv v8, v8, v9
983 ; RV32-NEXT: vsrl.vi v9, v8, 2
984 ; RV32-NEXT: vor.vv v8, v8, v9
985 ; RV32-NEXT: vsrl.vi v9, v8, 4
986 ; RV32-NEXT: vor.vv v8, v8, v9
987 ; RV32-NEXT: vsrl.vi v9, v8, 8
988 ; RV32-NEXT: vor.vv v8, v8, v9
989 ; RV32-NEXT: vsrl.vi v9, v8, 16
990 ; RV32-NEXT: vor.vv v8, v8, v9
991 ; RV32-NEXT: li a1, 32
992 ; RV32-NEXT: vsrl.vx v9, v8, a1
993 ; RV32-NEXT: vor.vv v8, v8, v9
994 ; RV32-NEXT: vnot.v v8, v8
995 ; RV32-NEXT: vsrl.vi v9, v8, 1
996 ; RV32-NEXT: lui a1, 349525
997 ; RV32-NEXT: addi a1, a1, 1365
998 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
999 ; RV32-NEXT: vmv.v.x v10, a1
1000 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1001 ; RV32-NEXT: vand.vv v9, v9, v10
1002 ; RV32-NEXT: vsub.vv v8, v8, v9
1003 ; RV32-NEXT: lui a1, 209715
1004 ; RV32-NEXT: addi a1, a1, 819
1005 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1006 ; RV32-NEXT: vmv.v.x v9, a1
1007 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1008 ; RV32-NEXT: vand.vv v10, v8, v9
1009 ; RV32-NEXT: vsrl.vi v8, v8, 2
1010 ; RV32-NEXT: vand.vv v8, v8, v9
1011 ; RV32-NEXT: vadd.vv v8, v10, v8
1012 ; RV32-NEXT: vsrl.vi v9, v8, 4
1013 ; RV32-NEXT: vadd.vv v8, v8, v9
1014 ; RV32-NEXT: lui a1, 61681
1015 ; RV32-NEXT: addi a1, a1, -241
1016 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1017 ; RV32-NEXT: vmv.v.x v9, a1
1018 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1019 ; RV32-NEXT: vand.vv v8, v8, v9
1020 ; RV32-NEXT: lui a1, 4112
1021 ; RV32-NEXT: addi a1, a1, 257
1022 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1023 ; RV32-NEXT: vmv.v.x v9, a1
1024 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1025 ; RV32-NEXT: vmul.vv v8, v8, v9
1026 ; RV32-NEXT: li a0, 56
1027 ; RV32-NEXT: vsrl.vx v8, v8, a0
1030 ; RV64-LABEL: vp_ctlz_v2i64_unmasked:
1032 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1033 ; RV64-NEXT: vsrl.vi v9, v8, 1
1034 ; RV64-NEXT: vor.vv v8, v8, v9
1035 ; RV64-NEXT: vsrl.vi v9, v8, 2
1036 ; RV64-NEXT: vor.vv v8, v8, v9
1037 ; RV64-NEXT: vsrl.vi v9, v8, 4
1038 ; RV64-NEXT: vor.vv v8, v8, v9
1039 ; RV64-NEXT: vsrl.vi v9, v8, 8
1040 ; RV64-NEXT: vor.vv v8, v8, v9
1041 ; RV64-NEXT: vsrl.vi v9, v8, 16
1042 ; RV64-NEXT: vor.vv v8, v8, v9
1043 ; RV64-NEXT: li a0, 32
1044 ; RV64-NEXT: vsrl.vx v9, v8, a0
1045 ; RV64-NEXT: vor.vv v8, v8, v9
1046 ; RV64-NEXT: vnot.v v8, v8
1047 ; RV64-NEXT: vsrl.vi v9, v8, 1
1048 ; RV64-NEXT: lui a0, 349525
1049 ; RV64-NEXT: addiw a0, a0, 1365
1050 ; RV64-NEXT: slli a1, a0, 32
1051 ; RV64-NEXT: add a0, a0, a1
1052 ; RV64-NEXT: vand.vx v9, v9, a0
1053 ; RV64-NEXT: vsub.vv v8, v8, v9
1054 ; RV64-NEXT: lui a0, 209715
1055 ; RV64-NEXT: addiw a0, a0, 819
1056 ; RV64-NEXT: slli a1, a0, 32
1057 ; RV64-NEXT: add a0, a0, a1
1058 ; RV64-NEXT: vand.vx v9, v8, a0
1059 ; RV64-NEXT: vsrl.vi v8, v8, 2
1060 ; RV64-NEXT: vand.vx v8, v8, a0
1061 ; RV64-NEXT: vadd.vv v8, v9, v8
1062 ; RV64-NEXT: vsrl.vi v9, v8, 4
1063 ; RV64-NEXT: vadd.vv v8, v8, v9
1064 ; RV64-NEXT: lui a0, 61681
1065 ; RV64-NEXT: addiw a0, a0, -241
1066 ; RV64-NEXT: slli a1, a0, 32
1067 ; RV64-NEXT: add a0, a0, a1
1068 ; RV64-NEXT: vand.vx v8, v8, a0
1069 ; RV64-NEXT: lui a0, 4112
1070 ; RV64-NEXT: addiw a0, a0, 257
1071 ; RV64-NEXT: slli a1, a0, 32
1072 ; RV64-NEXT: add a0, a0, a1
1073 ; RV64-NEXT: vmul.vx v8, v8, a0
1074 ; RV64-NEXT: li a0, 56
1075 ; RV64-NEXT: vsrl.vx v8, v8, a0
1077 %v = call <2 x i64> @llvm.vp.ctlz.v2i64(<2 x i64> %va, i1 false, <2 x i1> splat (i1 true), i32 %evl)
1081 declare <4 x i64> @llvm.vp.ctlz.v4i64(<4 x i64>, i1 immarg, <4 x i1>, i32)
1083 define <4 x i64> @vp_ctlz_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1084 ; RV32-LABEL: vp_ctlz_v4i64:
1086 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1087 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
1088 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
1089 ; RV32-NEXT: vsrl.vi v10, v8, 2, v0.t
1090 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
1091 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
1092 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
1093 ; RV32-NEXT: vsrl.vi v10, v8, 8, v0.t
1094 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
1095 ; RV32-NEXT: vsrl.vi v10, v8, 16, v0.t
1096 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
1097 ; RV32-NEXT: li a1, 32
1098 ; RV32-NEXT: vsrl.vx v10, v8, a1, v0.t
1099 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
1100 ; RV32-NEXT: vnot.v v8, v8, v0.t
1101 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
1102 ; RV32-NEXT: lui a1, 349525
1103 ; RV32-NEXT: addi a1, a1, 1365
1104 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1105 ; RV32-NEXT: vmv.v.x v12, a1
1106 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1107 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
1108 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
1109 ; RV32-NEXT: lui a1, 209715
1110 ; RV32-NEXT: addi a1, a1, 819
1111 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1112 ; RV32-NEXT: vmv.v.x v10, a1
1113 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1114 ; RV32-NEXT: vand.vv v12, v8, v10, v0.t
1115 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1116 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
1117 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
1118 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
1119 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
1120 ; RV32-NEXT: lui a1, 61681
1121 ; RV32-NEXT: addi a1, a1, -241
1122 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1123 ; RV32-NEXT: vmv.v.x v10, a1
1124 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1125 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
1126 ; RV32-NEXT: lui a1, 4112
1127 ; RV32-NEXT: addi a1, a1, 257
1128 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1129 ; RV32-NEXT: vmv.v.x v10, a1
1130 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1131 ; RV32-NEXT: vmul.vv v8, v8, v10, v0.t
1132 ; RV32-NEXT: li a0, 56
1133 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1136 ; RV64-LABEL: vp_ctlz_v4i64:
1138 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1139 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
1140 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
1141 ; RV64-NEXT: vsrl.vi v10, v8, 2, v0.t
1142 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
1143 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
1144 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
1145 ; RV64-NEXT: vsrl.vi v10, v8, 8, v0.t
1146 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
1147 ; RV64-NEXT: vsrl.vi v10, v8, 16, v0.t
1148 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
1149 ; RV64-NEXT: li a0, 32
1150 ; RV64-NEXT: vsrl.vx v10, v8, a0, v0.t
1151 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
1152 ; RV64-NEXT: vnot.v v8, v8, v0.t
1153 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
1154 ; RV64-NEXT: lui a0, 349525
1155 ; RV64-NEXT: addiw a0, a0, 1365
1156 ; RV64-NEXT: slli a1, a0, 32
1157 ; RV64-NEXT: add a0, a0, a1
1158 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
1159 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
1160 ; RV64-NEXT: lui a0, 209715
1161 ; RV64-NEXT: addiw a0, a0, 819
1162 ; RV64-NEXT: slli a1, a0, 32
1163 ; RV64-NEXT: add a0, a0, a1
1164 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
1165 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1166 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1167 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
1168 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
1169 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
1170 ; RV64-NEXT: lui a0, 61681
1171 ; RV64-NEXT: addiw a0, a0, -241
1172 ; RV64-NEXT: slli a1, a0, 32
1173 ; RV64-NEXT: add a0, a0, a1
1174 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1175 ; RV64-NEXT: lui a0, 4112
1176 ; RV64-NEXT: addiw a0, a0, 257
1177 ; RV64-NEXT: slli a1, a0, 32
1178 ; RV64-NEXT: add a0, a0, a1
1179 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1180 ; RV64-NEXT: li a0, 56
1181 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1183 %v = call <4 x i64> @llvm.vp.ctlz.v4i64(<4 x i64> %va, i1 false, <4 x i1> %m, i32 %evl)
1187 define <4 x i64> @vp_ctlz_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1188 ; RV32-LABEL: vp_ctlz_v4i64_unmasked:
1190 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1191 ; RV32-NEXT: vsrl.vi v10, v8, 1
1192 ; RV32-NEXT: vor.vv v8, v8, v10
1193 ; RV32-NEXT: vsrl.vi v10, v8, 2
1194 ; RV32-NEXT: vor.vv v8, v8, v10
1195 ; RV32-NEXT: vsrl.vi v10, v8, 4
1196 ; RV32-NEXT: vor.vv v8, v8, v10
1197 ; RV32-NEXT: vsrl.vi v10, v8, 8
1198 ; RV32-NEXT: vor.vv v8, v8, v10
1199 ; RV32-NEXT: vsrl.vi v10, v8, 16
1200 ; RV32-NEXT: vor.vv v8, v8, v10
1201 ; RV32-NEXT: li a1, 32
1202 ; RV32-NEXT: vsrl.vx v10, v8, a1
1203 ; RV32-NEXT: vor.vv v8, v8, v10
1204 ; RV32-NEXT: vnot.v v8, v8
1205 ; RV32-NEXT: vsrl.vi v10, v8, 1
1206 ; RV32-NEXT: lui a1, 349525
1207 ; RV32-NEXT: addi a1, a1, 1365
1208 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1209 ; RV32-NEXT: vmv.v.x v12, a1
1210 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1211 ; RV32-NEXT: vand.vv v10, v10, v12
1212 ; RV32-NEXT: vsub.vv v8, v8, v10
1213 ; RV32-NEXT: lui a1, 209715
1214 ; RV32-NEXT: addi a1, a1, 819
1215 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1216 ; RV32-NEXT: vmv.v.x v10, a1
1217 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1218 ; RV32-NEXT: vand.vv v12, v8, v10
1219 ; RV32-NEXT: vsrl.vi v8, v8, 2
1220 ; RV32-NEXT: vand.vv v8, v8, v10
1221 ; RV32-NEXT: vadd.vv v8, v12, v8
1222 ; RV32-NEXT: vsrl.vi v10, v8, 4
1223 ; RV32-NEXT: vadd.vv v8, v8, v10
1224 ; RV32-NEXT: lui a1, 61681
1225 ; RV32-NEXT: addi a1, a1, -241
1226 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1227 ; RV32-NEXT: vmv.v.x v10, a1
1228 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1229 ; RV32-NEXT: vand.vv v8, v8, v10
1230 ; RV32-NEXT: lui a1, 4112
1231 ; RV32-NEXT: addi a1, a1, 257
1232 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1233 ; RV32-NEXT: vmv.v.x v10, a1
1234 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1235 ; RV32-NEXT: vmul.vv v8, v8, v10
1236 ; RV32-NEXT: li a0, 56
1237 ; RV32-NEXT: vsrl.vx v8, v8, a0
1240 ; RV64-LABEL: vp_ctlz_v4i64_unmasked:
1242 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1243 ; RV64-NEXT: vsrl.vi v10, v8, 1
1244 ; RV64-NEXT: vor.vv v8, v8, v10
1245 ; RV64-NEXT: vsrl.vi v10, v8, 2
1246 ; RV64-NEXT: vor.vv v8, v8, v10
1247 ; RV64-NEXT: vsrl.vi v10, v8, 4
1248 ; RV64-NEXT: vor.vv v8, v8, v10
1249 ; RV64-NEXT: vsrl.vi v10, v8, 8
1250 ; RV64-NEXT: vor.vv v8, v8, v10
1251 ; RV64-NEXT: vsrl.vi v10, v8, 16
1252 ; RV64-NEXT: vor.vv v8, v8, v10
1253 ; RV64-NEXT: li a0, 32
1254 ; RV64-NEXT: vsrl.vx v10, v8, a0
1255 ; RV64-NEXT: vor.vv v8, v8, v10
1256 ; RV64-NEXT: vnot.v v8, v8
1257 ; RV64-NEXT: vsrl.vi v10, v8, 1
1258 ; RV64-NEXT: lui a0, 349525
1259 ; RV64-NEXT: addiw a0, a0, 1365
1260 ; RV64-NEXT: slli a1, a0, 32
1261 ; RV64-NEXT: add a0, a0, a1
1262 ; RV64-NEXT: vand.vx v10, v10, a0
1263 ; RV64-NEXT: vsub.vv v8, v8, v10
1264 ; RV64-NEXT: lui a0, 209715
1265 ; RV64-NEXT: addiw a0, a0, 819
1266 ; RV64-NEXT: slli a1, a0, 32
1267 ; RV64-NEXT: add a0, a0, a1
1268 ; RV64-NEXT: vand.vx v10, v8, a0
1269 ; RV64-NEXT: vsrl.vi v8, v8, 2
1270 ; RV64-NEXT: vand.vx v8, v8, a0
1271 ; RV64-NEXT: vadd.vv v8, v10, v8
1272 ; RV64-NEXT: vsrl.vi v10, v8, 4
1273 ; RV64-NEXT: vadd.vv v8, v8, v10
1274 ; RV64-NEXT: lui a0, 61681
1275 ; RV64-NEXT: addiw a0, a0, -241
1276 ; RV64-NEXT: slli a1, a0, 32
1277 ; RV64-NEXT: add a0, a0, a1
1278 ; RV64-NEXT: vand.vx v8, v8, a0
1279 ; RV64-NEXT: lui a0, 4112
1280 ; RV64-NEXT: addiw a0, a0, 257
1281 ; RV64-NEXT: slli a1, a0, 32
1282 ; RV64-NEXT: add a0, a0, a1
1283 ; RV64-NEXT: vmul.vx v8, v8, a0
1284 ; RV64-NEXT: li a0, 56
1285 ; RV64-NEXT: vsrl.vx v8, v8, a0
1287 %v = call <4 x i64> @llvm.vp.ctlz.v4i64(<4 x i64> %va, i1 false, <4 x i1> splat (i1 true), i32 %evl)
1291 declare <8 x i64> @llvm.vp.ctlz.v8i64(<8 x i64>, i1 immarg, <8 x i1>, i32)
1293 define <8 x i64> @vp_ctlz_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1294 ; RV32-LABEL: vp_ctlz_v8i64:
1296 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1297 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
1298 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
1299 ; RV32-NEXT: vsrl.vi v12, v8, 2, v0.t
1300 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
1301 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
1302 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
1303 ; RV32-NEXT: vsrl.vi v12, v8, 8, v0.t
1304 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
1305 ; RV32-NEXT: vsrl.vi v12, v8, 16, v0.t
1306 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
1307 ; RV32-NEXT: li a1, 32
1308 ; RV32-NEXT: vsrl.vx v12, v8, a1, v0.t
1309 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
1310 ; RV32-NEXT: vnot.v v8, v8, v0.t
1311 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
1312 ; RV32-NEXT: lui a1, 349525
1313 ; RV32-NEXT: addi a1, a1, 1365
1314 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1315 ; RV32-NEXT: vmv.v.x v16, a1
1316 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1317 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
1318 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
1319 ; RV32-NEXT: lui a1, 209715
1320 ; RV32-NEXT: addi a1, a1, 819
1321 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1322 ; RV32-NEXT: vmv.v.x v12, a1
1323 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1324 ; RV32-NEXT: vand.vv v16, v8, v12, v0.t
1325 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1326 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1327 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
1328 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
1329 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
1330 ; RV32-NEXT: lui a1, 61681
1331 ; RV32-NEXT: addi a1, a1, -241
1332 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1333 ; RV32-NEXT: vmv.v.x v12, a1
1334 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1335 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1336 ; RV32-NEXT: lui a1, 4112
1337 ; RV32-NEXT: addi a1, a1, 257
1338 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1339 ; RV32-NEXT: vmv.v.x v12, a1
1340 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1341 ; RV32-NEXT: vmul.vv v8, v8, v12, v0.t
1342 ; RV32-NEXT: li a0, 56
1343 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1346 ; RV64-LABEL: vp_ctlz_v8i64:
1348 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1349 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
1350 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
1351 ; RV64-NEXT: vsrl.vi v12, v8, 2, v0.t
1352 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
1353 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
1354 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
1355 ; RV64-NEXT: vsrl.vi v12, v8, 8, v0.t
1356 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
1357 ; RV64-NEXT: vsrl.vi v12, v8, 16, v0.t
1358 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
1359 ; RV64-NEXT: li a0, 32
1360 ; RV64-NEXT: vsrl.vx v12, v8, a0, v0.t
1361 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
1362 ; RV64-NEXT: vnot.v v8, v8, v0.t
1363 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
1364 ; RV64-NEXT: lui a0, 349525
1365 ; RV64-NEXT: addiw a0, a0, 1365
1366 ; RV64-NEXT: slli a1, a0, 32
1367 ; RV64-NEXT: add a0, a0, a1
1368 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
1369 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
1370 ; RV64-NEXT: lui a0, 209715
1371 ; RV64-NEXT: addiw a0, a0, 819
1372 ; RV64-NEXT: slli a1, a0, 32
1373 ; RV64-NEXT: add a0, a0, a1
1374 ; RV64-NEXT: vand.vx v12, v8, a0, v0.t
1375 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1376 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1377 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
1378 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
1379 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
1380 ; RV64-NEXT: lui a0, 61681
1381 ; RV64-NEXT: addiw a0, a0, -241
1382 ; RV64-NEXT: slli a1, a0, 32
1383 ; RV64-NEXT: add a0, a0, a1
1384 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1385 ; RV64-NEXT: lui a0, 4112
1386 ; RV64-NEXT: addiw a0, a0, 257
1387 ; RV64-NEXT: slli a1, a0, 32
1388 ; RV64-NEXT: add a0, a0, a1
1389 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1390 ; RV64-NEXT: li a0, 56
1391 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1393 %v = call <8 x i64> @llvm.vp.ctlz.v8i64(<8 x i64> %va, i1 false, <8 x i1> %m, i32 %evl)
1397 define <8 x i64> @vp_ctlz_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1398 ; RV32-LABEL: vp_ctlz_v8i64_unmasked:
1400 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1401 ; RV32-NEXT: vsrl.vi v12, v8, 1
1402 ; RV32-NEXT: vor.vv v8, v8, v12
1403 ; RV32-NEXT: vsrl.vi v12, v8, 2
1404 ; RV32-NEXT: vor.vv v8, v8, v12
1405 ; RV32-NEXT: vsrl.vi v12, v8, 4
1406 ; RV32-NEXT: vor.vv v8, v8, v12
1407 ; RV32-NEXT: vsrl.vi v12, v8, 8
1408 ; RV32-NEXT: vor.vv v8, v8, v12
1409 ; RV32-NEXT: vsrl.vi v12, v8, 16
1410 ; RV32-NEXT: vor.vv v8, v8, v12
1411 ; RV32-NEXT: li a1, 32
1412 ; RV32-NEXT: vsrl.vx v12, v8, a1
1413 ; RV32-NEXT: vor.vv v8, v8, v12
1414 ; RV32-NEXT: vnot.v v8, v8
1415 ; RV32-NEXT: vsrl.vi v12, v8, 1
1416 ; RV32-NEXT: lui a1, 349525
1417 ; RV32-NEXT: addi a1, a1, 1365
1418 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1419 ; RV32-NEXT: vmv.v.x v16, a1
1420 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1421 ; RV32-NEXT: vand.vv v12, v12, v16
1422 ; RV32-NEXT: vsub.vv v8, v8, v12
1423 ; RV32-NEXT: lui a1, 209715
1424 ; RV32-NEXT: addi a1, a1, 819
1425 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1426 ; RV32-NEXT: vmv.v.x v12, a1
1427 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1428 ; RV32-NEXT: vand.vv v16, v8, v12
1429 ; RV32-NEXT: vsrl.vi v8, v8, 2
1430 ; RV32-NEXT: vand.vv v8, v8, v12
1431 ; RV32-NEXT: vadd.vv v8, v16, v8
1432 ; RV32-NEXT: vsrl.vi v12, v8, 4
1433 ; RV32-NEXT: vadd.vv v8, v8, v12
1434 ; RV32-NEXT: lui a1, 61681
1435 ; RV32-NEXT: addi a1, a1, -241
1436 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1437 ; RV32-NEXT: vmv.v.x v12, a1
1438 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1439 ; RV32-NEXT: vand.vv v8, v8, v12
1440 ; RV32-NEXT: lui a1, 4112
1441 ; RV32-NEXT: addi a1, a1, 257
1442 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1443 ; RV32-NEXT: vmv.v.x v12, a1
1444 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1445 ; RV32-NEXT: vmul.vv v8, v8, v12
1446 ; RV32-NEXT: li a0, 56
1447 ; RV32-NEXT: vsrl.vx v8, v8, a0
1450 ; RV64-LABEL: vp_ctlz_v8i64_unmasked:
1452 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1453 ; RV64-NEXT: vsrl.vi v12, v8, 1
1454 ; RV64-NEXT: vor.vv v8, v8, v12
1455 ; RV64-NEXT: vsrl.vi v12, v8, 2
1456 ; RV64-NEXT: vor.vv v8, v8, v12
1457 ; RV64-NEXT: vsrl.vi v12, v8, 4
1458 ; RV64-NEXT: vor.vv v8, v8, v12
1459 ; RV64-NEXT: vsrl.vi v12, v8, 8
1460 ; RV64-NEXT: vor.vv v8, v8, v12
1461 ; RV64-NEXT: vsrl.vi v12, v8, 16
1462 ; RV64-NEXT: vor.vv v8, v8, v12
1463 ; RV64-NEXT: li a0, 32
1464 ; RV64-NEXT: vsrl.vx v12, v8, a0
1465 ; RV64-NEXT: vor.vv v8, v8, v12
1466 ; RV64-NEXT: vnot.v v8, v8
1467 ; RV64-NEXT: vsrl.vi v12, v8, 1
1468 ; RV64-NEXT: lui a0, 349525
1469 ; RV64-NEXT: addiw a0, a0, 1365
1470 ; RV64-NEXT: slli a1, a0, 32
1471 ; RV64-NEXT: add a0, a0, a1
1472 ; RV64-NEXT: vand.vx v12, v12, a0
1473 ; RV64-NEXT: vsub.vv v8, v8, v12
1474 ; RV64-NEXT: lui a0, 209715
1475 ; RV64-NEXT: addiw a0, a0, 819
1476 ; RV64-NEXT: slli a1, a0, 32
1477 ; RV64-NEXT: add a0, a0, a1
1478 ; RV64-NEXT: vand.vx v12, v8, a0
1479 ; RV64-NEXT: vsrl.vi v8, v8, 2
1480 ; RV64-NEXT: vand.vx v8, v8, a0
1481 ; RV64-NEXT: vadd.vv v8, v12, v8
1482 ; RV64-NEXT: vsrl.vi v12, v8, 4
1483 ; RV64-NEXT: vadd.vv v8, v8, v12
1484 ; RV64-NEXT: lui a0, 61681
1485 ; RV64-NEXT: addiw a0, a0, -241
1486 ; RV64-NEXT: slli a1, a0, 32
1487 ; RV64-NEXT: add a0, a0, a1
1488 ; RV64-NEXT: vand.vx v8, v8, a0
1489 ; RV64-NEXT: lui a0, 4112
1490 ; RV64-NEXT: addiw a0, a0, 257
1491 ; RV64-NEXT: slli a1, a0, 32
1492 ; RV64-NEXT: add a0, a0, a1
1493 ; RV64-NEXT: vmul.vx v8, v8, a0
1494 ; RV64-NEXT: li a0, 56
1495 ; RV64-NEXT: vsrl.vx v8, v8, a0
1497 %v = call <8 x i64> @llvm.vp.ctlz.v8i64(<8 x i64> %va, i1 false, <8 x i1> splat (i1 true), i32 %evl)
1501 declare <15 x i64> @llvm.vp.ctlz.v15i64(<15 x i64>, i1 immarg, <15 x i1>, i32)
1503 define <15 x i64> @vp_ctlz_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
1504 ; RV32-LABEL: vp_ctlz_v15i64:
1506 ; RV32-NEXT: addi sp, sp, -48
1507 ; RV32-NEXT: .cfi_def_cfa_offset 48
1508 ; RV32-NEXT: csrr a1, vlenb
1509 ; RV32-NEXT: slli a1, a1, 4
1510 ; RV32-NEXT: sub sp, sp, a1
1511 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 16 * vlenb
1512 ; RV32-NEXT: lui a1, 349525
1513 ; RV32-NEXT: addi a1, a1, 1365
1514 ; RV32-NEXT: sw a1, 44(sp)
1515 ; RV32-NEXT: sw a1, 40(sp)
1516 ; RV32-NEXT: lui a1, 209715
1517 ; RV32-NEXT: addi a1, a1, 819
1518 ; RV32-NEXT: sw a1, 36(sp)
1519 ; RV32-NEXT: sw a1, 32(sp)
1520 ; RV32-NEXT: lui a1, 61681
1521 ; RV32-NEXT: addi a1, a1, -241
1522 ; RV32-NEXT: sw a1, 28(sp)
1523 ; RV32-NEXT: sw a1, 24(sp)
1524 ; RV32-NEXT: lui a1, 4112
1525 ; RV32-NEXT: addi a1, a1, 257
1526 ; RV32-NEXT: sw a1, 20(sp)
1527 ; RV32-NEXT: sw a1, 16(sp)
1528 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1529 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
1530 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1531 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
1532 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1533 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1534 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1535 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
1536 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1537 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
1538 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1539 ; RV32-NEXT: li a1, 32
1540 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
1541 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1542 ; RV32-NEXT: vnot.v v24, v8, v0.t
1543 ; RV32-NEXT: addi a1, sp, 48
1544 ; RV32-NEXT: vs8r.v v24, (a1) # Unknown-size Folded Spill
1545 ; RV32-NEXT: addi a1, sp, 40
1546 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1547 ; RV32-NEXT: vlse64.v v8, (a1), zero
1548 ; RV32-NEXT: csrr a1, vlenb
1549 ; RV32-NEXT: slli a1, a1, 3
1550 ; RV32-NEXT: add a1, sp, a1
1551 ; RV32-NEXT: addi a1, a1, 48
1552 ; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill
1553 ; RV32-NEXT: addi a1, sp, 32
1554 ; RV32-NEXT: vlse64.v v16, (a1), zero
1555 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1556 ; RV32-NEXT: vsrl.vi v8, v24, 1, v0.t
1557 ; RV32-NEXT: csrr a1, vlenb
1558 ; RV32-NEXT: slli a1, a1, 3
1559 ; RV32-NEXT: add a1, sp, a1
1560 ; RV32-NEXT: addi a1, a1, 48
1561 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
1562 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
1563 ; RV32-NEXT: addi a1, sp, 48
1564 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
1565 ; RV32-NEXT: vsub.vv v8, v24, v8, v0.t
1566 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
1567 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1568 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1569 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
1570 ; RV32-NEXT: addi a1, sp, 24
1571 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1572 ; RV32-NEXT: vlse64.v v16, (a1), zero
1573 ; RV32-NEXT: csrr a1, vlenb
1574 ; RV32-NEXT: slli a1, a1, 3
1575 ; RV32-NEXT: add a1, sp, a1
1576 ; RV32-NEXT: addi a1, a1, 48
1577 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
1578 ; RV32-NEXT: addi a1, sp, 16
1579 ; RV32-NEXT: vlse64.v v24, (a1), zero
1580 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1581 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1582 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1583 ; RV32-NEXT: csrr a0, vlenb
1584 ; RV32-NEXT: slli a0, a0, 3
1585 ; RV32-NEXT: add a0, sp, a0
1586 ; RV32-NEXT: addi a0, a0, 48
1587 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1588 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1589 ; RV32-NEXT: vmul.vv v8, v8, v24, v0.t
1590 ; RV32-NEXT: li a0, 56
1591 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1592 ; RV32-NEXT: csrr a0, vlenb
1593 ; RV32-NEXT: slli a0, a0, 4
1594 ; RV32-NEXT: add sp, sp, a0
1595 ; RV32-NEXT: addi sp, sp, 48
1598 ; RV64-LABEL: vp_ctlz_v15i64:
1600 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1601 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1602 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1603 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
1604 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1605 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1606 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1607 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
1608 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1609 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
1610 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1611 ; RV64-NEXT: li a0, 32
1612 ; RV64-NEXT: vsrl.vx v16, v8, a0, v0.t
1613 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1614 ; RV64-NEXT: vnot.v v8, v8, v0.t
1615 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1616 ; RV64-NEXT: lui a0, 349525
1617 ; RV64-NEXT: addiw a0, a0, 1365
1618 ; RV64-NEXT: slli a1, a0, 32
1619 ; RV64-NEXT: add a0, a0, a1
1620 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1621 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
1622 ; RV64-NEXT: lui a0, 209715
1623 ; RV64-NEXT: addiw a0, a0, 819
1624 ; RV64-NEXT: slli a1, a0, 32
1625 ; RV64-NEXT: add a0, a0, a1
1626 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
1627 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1628 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1629 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
1630 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1631 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
1632 ; RV64-NEXT: lui a0, 61681
1633 ; RV64-NEXT: addiw a0, a0, -241
1634 ; RV64-NEXT: slli a1, a0, 32
1635 ; RV64-NEXT: add a0, a0, a1
1636 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1637 ; RV64-NEXT: lui a0, 4112
1638 ; RV64-NEXT: addiw a0, a0, 257
1639 ; RV64-NEXT: slli a1, a0, 32
1640 ; RV64-NEXT: add a0, a0, a1
1641 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1642 ; RV64-NEXT: li a0, 56
1643 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1645 %v = call <15 x i64> @llvm.vp.ctlz.v15i64(<15 x i64> %va, i1 false, <15 x i1> %m, i32 %evl)
1649 define <15 x i64> @vp_ctlz_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
1650 ; RV32-LABEL: vp_ctlz_v15i64_unmasked:
1652 ; RV32-NEXT: addi sp, sp, -32
1653 ; RV32-NEXT: .cfi_def_cfa_offset 32
1654 ; RV32-NEXT: lui a1, 349525
1655 ; RV32-NEXT: addi a1, a1, 1365
1656 ; RV32-NEXT: sw a1, 28(sp)
1657 ; RV32-NEXT: sw a1, 24(sp)
1658 ; RV32-NEXT: lui a1, 209715
1659 ; RV32-NEXT: addi a1, a1, 819
1660 ; RV32-NEXT: sw a1, 20(sp)
1661 ; RV32-NEXT: sw a1, 16(sp)
1662 ; RV32-NEXT: lui a1, 61681
1663 ; RV32-NEXT: addi a1, a1, -241
1664 ; RV32-NEXT: sw a1, 12(sp)
1665 ; RV32-NEXT: sw a1, 8(sp)
1666 ; RV32-NEXT: lui a1, 4112
1667 ; RV32-NEXT: addi a1, a1, 257
1668 ; RV32-NEXT: sw a1, 4(sp)
1669 ; RV32-NEXT: sw a1, 0(sp)
1670 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1671 ; RV32-NEXT: vsrl.vi v16, v8, 1
1672 ; RV32-NEXT: vor.vv v8, v8, v16
1673 ; RV32-NEXT: vsrl.vi v16, v8, 2
1674 ; RV32-NEXT: vor.vv v8, v8, v16
1675 ; RV32-NEXT: vsrl.vi v16, v8, 4
1676 ; RV32-NEXT: vor.vv v8, v8, v16
1677 ; RV32-NEXT: vsrl.vi v16, v8, 8
1678 ; RV32-NEXT: vor.vv v8, v8, v16
1679 ; RV32-NEXT: vsrl.vi v16, v8, 16
1680 ; RV32-NEXT: vor.vv v8, v8, v16
1681 ; RV32-NEXT: li a1, 32
1682 ; RV32-NEXT: vsrl.vx v16, v8, a1
1683 ; RV32-NEXT: vor.vv v8, v8, v16
1684 ; RV32-NEXT: vnot.v v8, v8
1685 ; RV32-NEXT: addi a1, sp, 24
1686 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1687 ; RV32-NEXT: vlse64.v v16, (a1), zero
1688 ; RV32-NEXT: addi a1, sp, 16
1689 ; RV32-NEXT: vlse64.v v24, (a1), zero
1690 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1691 ; RV32-NEXT: vsrl.vi v0, v8, 1
1692 ; RV32-NEXT: vand.vv v16, v0, v16
1693 ; RV32-NEXT: vsub.vv v8, v8, v16
1694 ; RV32-NEXT: vand.vv v16, v8, v24
1695 ; RV32-NEXT: vsrl.vi v8, v8, 2
1696 ; RV32-NEXT: vand.vv v8, v8, v24
1697 ; RV32-NEXT: vadd.vv v8, v16, v8
1698 ; RV32-NEXT: addi a1, sp, 8
1699 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1700 ; RV32-NEXT: vlse64.v v16, (a1), zero
1701 ; RV32-NEXT: mv a1, sp
1702 ; RV32-NEXT: vlse64.v v24, (a1), zero
1703 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1704 ; RV32-NEXT: vsrl.vi v0, v8, 4
1705 ; RV32-NEXT: vadd.vv v8, v8, v0
1706 ; RV32-NEXT: vand.vv v8, v8, v16
1707 ; RV32-NEXT: vmul.vv v8, v8, v24
1708 ; RV32-NEXT: li a0, 56
1709 ; RV32-NEXT: vsrl.vx v8, v8, a0
1710 ; RV32-NEXT: addi sp, sp, 32
1713 ; RV64-LABEL: vp_ctlz_v15i64_unmasked:
1715 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1716 ; RV64-NEXT: vsrl.vi v16, v8, 1
1717 ; RV64-NEXT: vor.vv v8, v8, v16
1718 ; RV64-NEXT: vsrl.vi v16, v8, 2
1719 ; RV64-NEXT: vor.vv v8, v8, v16
1720 ; RV64-NEXT: vsrl.vi v16, v8, 4
1721 ; RV64-NEXT: vor.vv v8, v8, v16
1722 ; RV64-NEXT: vsrl.vi v16, v8, 8
1723 ; RV64-NEXT: vor.vv v8, v8, v16
1724 ; RV64-NEXT: vsrl.vi v16, v8, 16
1725 ; RV64-NEXT: vor.vv v8, v8, v16
1726 ; RV64-NEXT: li a0, 32
1727 ; RV64-NEXT: vsrl.vx v16, v8, a0
1728 ; RV64-NEXT: vor.vv v8, v8, v16
1729 ; RV64-NEXT: vnot.v v8, v8
1730 ; RV64-NEXT: vsrl.vi v16, v8, 1
1731 ; RV64-NEXT: lui a0, 349525
1732 ; RV64-NEXT: addiw a0, a0, 1365
1733 ; RV64-NEXT: slli a1, a0, 32
1734 ; RV64-NEXT: add a0, a0, a1
1735 ; RV64-NEXT: vand.vx v16, v16, a0
1736 ; RV64-NEXT: vsub.vv v8, v8, v16
1737 ; RV64-NEXT: lui a0, 209715
1738 ; RV64-NEXT: addiw a0, a0, 819
1739 ; RV64-NEXT: slli a1, a0, 32
1740 ; RV64-NEXT: add a0, a0, a1
1741 ; RV64-NEXT: vand.vx v16, v8, a0
1742 ; RV64-NEXT: vsrl.vi v8, v8, 2
1743 ; RV64-NEXT: vand.vx v8, v8, a0
1744 ; RV64-NEXT: vadd.vv v8, v16, v8
1745 ; RV64-NEXT: vsrl.vi v16, v8, 4
1746 ; RV64-NEXT: vadd.vv v8, v8, v16
1747 ; RV64-NEXT: lui a0, 61681
1748 ; RV64-NEXT: addiw a0, a0, -241
1749 ; RV64-NEXT: slli a1, a0, 32
1750 ; RV64-NEXT: add a0, a0, a1
1751 ; RV64-NEXT: vand.vx v8, v8, a0
1752 ; RV64-NEXT: lui a0, 4112
1753 ; RV64-NEXT: addiw a0, a0, 257
1754 ; RV64-NEXT: slli a1, a0, 32
1755 ; RV64-NEXT: add a0, a0, a1
1756 ; RV64-NEXT: vmul.vx v8, v8, a0
1757 ; RV64-NEXT: li a0, 56
1758 ; RV64-NEXT: vsrl.vx v8, v8, a0
1760 %v = call <15 x i64> @llvm.vp.ctlz.v15i64(<15 x i64> %va, i1 false, <15 x i1> splat (i1 true), i32 %evl)
1764 declare <16 x i64> @llvm.vp.ctlz.v16i64(<16 x i64>, i1 immarg, <16 x i1>, i32)
1766 define <16 x i64> @vp_ctlz_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1767 ; RV32-LABEL: vp_ctlz_v16i64:
1769 ; RV32-NEXT: addi sp, sp, -48
1770 ; RV32-NEXT: .cfi_def_cfa_offset 48
1771 ; RV32-NEXT: csrr a1, vlenb
1772 ; RV32-NEXT: slli a1, a1, 4
1773 ; RV32-NEXT: sub sp, sp, a1
1774 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 16 * vlenb
1775 ; RV32-NEXT: lui a1, 349525
1776 ; RV32-NEXT: addi a1, a1, 1365
1777 ; RV32-NEXT: sw a1, 44(sp)
1778 ; RV32-NEXT: sw a1, 40(sp)
1779 ; RV32-NEXT: lui a1, 209715
1780 ; RV32-NEXT: addi a1, a1, 819
1781 ; RV32-NEXT: sw a1, 36(sp)
1782 ; RV32-NEXT: sw a1, 32(sp)
1783 ; RV32-NEXT: lui a1, 61681
1784 ; RV32-NEXT: addi a1, a1, -241
1785 ; RV32-NEXT: sw a1, 28(sp)
1786 ; RV32-NEXT: sw a1, 24(sp)
1787 ; RV32-NEXT: lui a1, 4112
1788 ; RV32-NEXT: addi a1, a1, 257
1789 ; RV32-NEXT: sw a1, 20(sp)
1790 ; RV32-NEXT: sw a1, 16(sp)
1791 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1792 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
1793 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1794 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
1795 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1796 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1797 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1798 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
1799 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1800 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
1801 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1802 ; RV32-NEXT: li a1, 32
1803 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
1804 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1805 ; RV32-NEXT: vnot.v v24, v8, v0.t
1806 ; RV32-NEXT: addi a1, sp, 48
1807 ; RV32-NEXT: vs8r.v v24, (a1) # Unknown-size Folded Spill
1808 ; RV32-NEXT: addi a1, sp, 40
1809 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1810 ; RV32-NEXT: vlse64.v v8, (a1), zero
1811 ; RV32-NEXT: csrr a1, vlenb
1812 ; RV32-NEXT: slli a1, a1, 3
1813 ; RV32-NEXT: add a1, sp, a1
1814 ; RV32-NEXT: addi a1, a1, 48
1815 ; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill
1816 ; RV32-NEXT: addi a1, sp, 32
1817 ; RV32-NEXT: vlse64.v v16, (a1), zero
1818 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1819 ; RV32-NEXT: vsrl.vi v8, v24, 1, v0.t
1820 ; RV32-NEXT: csrr a1, vlenb
1821 ; RV32-NEXT: slli a1, a1, 3
1822 ; RV32-NEXT: add a1, sp, a1
1823 ; RV32-NEXT: addi a1, a1, 48
1824 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
1825 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
1826 ; RV32-NEXT: addi a1, sp, 48
1827 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
1828 ; RV32-NEXT: vsub.vv v8, v24, v8, v0.t
1829 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
1830 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1831 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1832 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
1833 ; RV32-NEXT: addi a1, sp, 24
1834 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1835 ; RV32-NEXT: vlse64.v v16, (a1), zero
1836 ; RV32-NEXT: csrr a1, vlenb
1837 ; RV32-NEXT: slli a1, a1, 3
1838 ; RV32-NEXT: add a1, sp, a1
1839 ; RV32-NEXT: addi a1, a1, 48
1840 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
1841 ; RV32-NEXT: addi a1, sp, 16
1842 ; RV32-NEXT: vlse64.v v24, (a1), zero
1843 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1844 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1845 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1846 ; RV32-NEXT: csrr a0, vlenb
1847 ; RV32-NEXT: slli a0, a0, 3
1848 ; RV32-NEXT: add a0, sp, a0
1849 ; RV32-NEXT: addi a0, a0, 48
1850 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1851 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1852 ; RV32-NEXT: vmul.vv v8, v8, v24, v0.t
1853 ; RV32-NEXT: li a0, 56
1854 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1855 ; RV32-NEXT: csrr a0, vlenb
1856 ; RV32-NEXT: slli a0, a0, 4
1857 ; RV32-NEXT: add sp, sp, a0
1858 ; RV32-NEXT: addi sp, sp, 48
1861 ; RV64-LABEL: vp_ctlz_v16i64:
1863 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1864 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1865 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1866 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
1867 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1868 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1869 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1870 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
1871 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1872 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
1873 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1874 ; RV64-NEXT: li a0, 32
1875 ; RV64-NEXT: vsrl.vx v16, v8, a0, v0.t
1876 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1877 ; RV64-NEXT: vnot.v v8, v8, v0.t
1878 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1879 ; RV64-NEXT: lui a0, 349525
1880 ; RV64-NEXT: addiw a0, a0, 1365
1881 ; RV64-NEXT: slli a1, a0, 32
1882 ; RV64-NEXT: add a0, a0, a1
1883 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1884 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
1885 ; RV64-NEXT: lui a0, 209715
1886 ; RV64-NEXT: addiw a0, a0, 819
1887 ; RV64-NEXT: slli a1, a0, 32
1888 ; RV64-NEXT: add a0, a0, a1
1889 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
1890 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1891 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1892 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
1893 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1894 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
1895 ; RV64-NEXT: lui a0, 61681
1896 ; RV64-NEXT: addiw a0, a0, -241
1897 ; RV64-NEXT: slli a1, a0, 32
1898 ; RV64-NEXT: add a0, a0, a1
1899 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1900 ; RV64-NEXT: lui a0, 4112
1901 ; RV64-NEXT: addiw a0, a0, 257
1902 ; RV64-NEXT: slli a1, a0, 32
1903 ; RV64-NEXT: add a0, a0, a1
1904 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1905 ; RV64-NEXT: li a0, 56
1906 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1908 %v = call <16 x i64> @llvm.vp.ctlz.v16i64(<16 x i64> %va, i1 false, <16 x i1> %m, i32 %evl)
1912 define <16 x i64> @vp_ctlz_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1913 ; RV32-LABEL: vp_ctlz_v16i64_unmasked:
1915 ; RV32-NEXT: addi sp, sp, -32
1916 ; RV32-NEXT: .cfi_def_cfa_offset 32
1917 ; RV32-NEXT: lui a1, 349525
1918 ; RV32-NEXT: addi a1, a1, 1365
1919 ; RV32-NEXT: sw a1, 28(sp)
1920 ; RV32-NEXT: sw a1, 24(sp)
1921 ; RV32-NEXT: lui a1, 209715
1922 ; RV32-NEXT: addi a1, a1, 819
1923 ; RV32-NEXT: sw a1, 20(sp)
1924 ; RV32-NEXT: sw a1, 16(sp)
1925 ; RV32-NEXT: lui a1, 61681
1926 ; RV32-NEXT: addi a1, a1, -241
1927 ; RV32-NEXT: sw a1, 12(sp)
1928 ; RV32-NEXT: sw a1, 8(sp)
1929 ; RV32-NEXT: lui a1, 4112
1930 ; RV32-NEXT: addi a1, a1, 257
1931 ; RV32-NEXT: sw a1, 4(sp)
1932 ; RV32-NEXT: sw a1, 0(sp)
1933 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1934 ; RV32-NEXT: vsrl.vi v16, v8, 1
1935 ; RV32-NEXT: vor.vv v8, v8, v16
1936 ; RV32-NEXT: vsrl.vi v16, v8, 2
1937 ; RV32-NEXT: vor.vv v8, v8, v16
1938 ; RV32-NEXT: vsrl.vi v16, v8, 4
1939 ; RV32-NEXT: vor.vv v8, v8, v16
1940 ; RV32-NEXT: vsrl.vi v16, v8, 8
1941 ; RV32-NEXT: vor.vv v8, v8, v16
1942 ; RV32-NEXT: vsrl.vi v16, v8, 16
1943 ; RV32-NEXT: vor.vv v8, v8, v16
1944 ; RV32-NEXT: li a1, 32
1945 ; RV32-NEXT: vsrl.vx v16, v8, a1
1946 ; RV32-NEXT: vor.vv v8, v8, v16
1947 ; RV32-NEXT: vnot.v v8, v8
1948 ; RV32-NEXT: addi a1, sp, 24
1949 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1950 ; RV32-NEXT: vlse64.v v16, (a1), zero
1951 ; RV32-NEXT: addi a1, sp, 16
1952 ; RV32-NEXT: vlse64.v v24, (a1), zero
1953 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1954 ; RV32-NEXT: vsrl.vi v0, v8, 1
1955 ; RV32-NEXT: vand.vv v16, v0, v16
1956 ; RV32-NEXT: vsub.vv v8, v8, v16
1957 ; RV32-NEXT: vand.vv v16, v8, v24
1958 ; RV32-NEXT: vsrl.vi v8, v8, 2
1959 ; RV32-NEXT: vand.vv v8, v8, v24
1960 ; RV32-NEXT: vadd.vv v8, v16, v8
1961 ; RV32-NEXT: addi a1, sp, 8
1962 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1963 ; RV32-NEXT: vlse64.v v16, (a1), zero
1964 ; RV32-NEXT: mv a1, sp
1965 ; RV32-NEXT: vlse64.v v24, (a1), zero
1966 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1967 ; RV32-NEXT: vsrl.vi v0, v8, 4
1968 ; RV32-NEXT: vadd.vv v8, v8, v0
1969 ; RV32-NEXT: vand.vv v8, v8, v16
1970 ; RV32-NEXT: vmul.vv v8, v8, v24
1971 ; RV32-NEXT: li a0, 56
1972 ; RV32-NEXT: vsrl.vx v8, v8, a0
1973 ; RV32-NEXT: addi sp, sp, 32
1976 ; RV64-LABEL: vp_ctlz_v16i64_unmasked:
1978 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1979 ; RV64-NEXT: vsrl.vi v16, v8, 1
1980 ; RV64-NEXT: vor.vv v8, v8, v16
1981 ; RV64-NEXT: vsrl.vi v16, v8, 2
1982 ; RV64-NEXT: vor.vv v8, v8, v16
1983 ; RV64-NEXT: vsrl.vi v16, v8, 4
1984 ; RV64-NEXT: vor.vv v8, v8, v16
1985 ; RV64-NEXT: vsrl.vi v16, v8, 8
1986 ; RV64-NEXT: vor.vv v8, v8, v16
1987 ; RV64-NEXT: vsrl.vi v16, v8, 16
1988 ; RV64-NEXT: vor.vv v8, v8, v16
1989 ; RV64-NEXT: li a0, 32
1990 ; RV64-NEXT: vsrl.vx v16, v8, a0
1991 ; RV64-NEXT: vor.vv v8, v8, v16
1992 ; RV64-NEXT: vnot.v v8, v8
1993 ; RV64-NEXT: vsrl.vi v16, v8, 1
1994 ; RV64-NEXT: lui a0, 349525
1995 ; RV64-NEXT: addiw a0, a0, 1365
1996 ; RV64-NEXT: slli a1, a0, 32
1997 ; RV64-NEXT: add a0, a0, a1
1998 ; RV64-NEXT: vand.vx v16, v16, a0
1999 ; RV64-NEXT: vsub.vv v8, v8, v16
2000 ; RV64-NEXT: lui a0, 209715
2001 ; RV64-NEXT: addiw a0, a0, 819
2002 ; RV64-NEXT: slli a1, a0, 32
2003 ; RV64-NEXT: add a0, a0, a1
2004 ; RV64-NEXT: vand.vx v16, v8, a0
2005 ; RV64-NEXT: vsrl.vi v8, v8, 2
2006 ; RV64-NEXT: vand.vx v8, v8, a0
2007 ; RV64-NEXT: vadd.vv v8, v16, v8
2008 ; RV64-NEXT: vsrl.vi v16, v8, 4
2009 ; RV64-NEXT: vadd.vv v8, v8, v16
2010 ; RV64-NEXT: lui a0, 61681
2011 ; RV64-NEXT: addiw a0, a0, -241
2012 ; RV64-NEXT: slli a1, a0, 32
2013 ; RV64-NEXT: add a0, a0, a1
2014 ; RV64-NEXT: vand.vx v8, v8, a0
2015 ; RV64-NEXT: lui a0, 4112
2016 ; RV64-NEXT: addiw a0, a0, 257
2017 ; RV64-NEXT: slli a1, a0, 32
2018 ; RV64-NEXT: add a0, a0, a1
2019 ; RV64-NEXT: vmul.vx v8, v8, a0
2020 ; RV64-NEXT: li a0, 56
2021 ; RV64-NEXT: vsrl.vx v8, v8, a0
2023 %v = call <16 x i64> @llvm.vp.ctlz.v16i64(<16 x i64> %va, i1 false, <16 x i1> splat (i1 true), i32 %evl)
2027 declare <32 x i64> @llvm.vp.ctlz.v32i64(<32 x i64>, i1 immarg, <32 x i1>, i32)
2029 define <32 x i64> @vp_ctlz_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
2030 ; RV32-LABEL: vp_ctlz_v32i64:
2032 ; RV32-NEXT: addi sp, sp, -48
2033 ; RV32-NEXT: .cfi_def_cfa_offset 48
2034 ; RV32-NEXT: csrr a1, vlenb
2035 ; RV32-NEXT: li a2, 56
2036 ; RV32-NEXT: mul a1, a1, a2
2037 ; RV32-NEXT: sub sp, sp, a1
2038 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x38, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 56 * vlenb
2039 ; RV32-NEXT: csrr a1, vlenb
2040 ; RV32-NEXT: slli a1, a1, 4
2041 ; RV32-NEXT: add a1, sp, a1
2042 ; RV32-NEXT: addi a1, a1, 48
2043 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2044 ; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
2045 ; RV32-NEXT: vslidedown.vi v24, v0, 2
2046 ; RV32-NEXT: lui a1, 349525
2047 ; RV32-NEXT: addi a1, a1, 1365
2048 ; RV32-NEXT: sw a1, 44(sp)
2049 ; RV32-NEXT: sw a1, 40(sp)
2050 ; RV32-NEXT: lui a1, 209715
2051 ; RV32-NEXT: addi a1, a1, 819
2052 ; RV32-NEXT: sw a1, 36(sp)
2053 ; RV32-NEXT: sw a1, 32(sp)
2054 ; RV32-NEXT: lui a1, 61681
2055 ; RV32-NEXT: addi a1, a1, -241
2056 ; RV32-NEXT: sw a1, 28(sp)
2057 ; RV32-NEXT: sw a1, 24(sp)
2058 ; RV32-NEXT: lui a1, 4112
2059 ; RV32-NEXT: addi a1, a1, 257
2060 ; RV32-NEXT: sw a1, 20(sp)
2061 ; RV32-NEXT: li a3, 16
2062 ; RV32-NEXT: sw a1, 16(sp)
2063 ; RV32-NEXT: mv a2, a0
2064 ; RV32-NEXT: bltu a0, a3, .LBB34_2
2065 ; RV32-NEXT: # %bb.1:
2066 ; RV32-NEXT: li a2, 16
2067 ; RV32-NEXT: .LBB34_2:
2068 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2069 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
2070 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2071 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
2072 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2073 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2074 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2075 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
2076 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2077 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
2078 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2079 ; RV32-NEXT: li a1, 32
2080 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
2081 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2082 ; RV32-NEXT: vnot.v v8, v8, v0.t
2083 ; RV32-NEXT: csrr a3, vlenb
2084 ; RV32-NEXT: slli a3, a3, 5
2085 ; RV32-NEXT: add a3, sp, a3
2086 ; RV32-NEXT: addi a3, a3, 48
2087 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2088 ; RV32-NEXT: addi a3, sp, 40
2089 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2090 ; RV32-NEXT: vlse64.v v8, (a3), zero
2091 ; RV32-NEXT: csrr a3, vlenb
2092 ; RV32-NEXT: li a4, 40
2093 ; RV32-NEXT: mul a3, a3, a4
2094 ; RV32-NEXT: add a3, sp, a3
2095 ; RV32-NEXT: addi a3, a3, 48
2096 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2097 ; RV32-NEXT: addi a3, sp, 32
2098 ; RV32-NEXT: vlse64.v v8, (a3), zero
2099 ; RV32-NEXT: csrr a3, vlenb
2100 ; RV32-NEXT: li a4, 48
2101 ; RV32-NEXT: mul a3, a3, a4
2102 ; RV32-NEXT: add a3, sp, a3
2103 ; RV32-NEXT: addi a3, a3, 48
2104 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2105 ; RV32-NEXT: csrr a3, vlenb
2106 ; RV32-NEXT: slli a3, a3, 5
2107 ; RV32-NEXT: add a3, sp, a3
2108 ; RV32-NEXT: addi a3, a3, 48
2109 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2110 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2111 ; RV32-NEXT: vsrl.vi v8, v16, 1, v0.t
2112 ; RV32-NEXT: csrr a3, vlenb
2113 ; RV32-NEXT: li a4, 24
2114 ; RV32-NEXT: mul a3, a3, a4
2115 ; RV32-NEXT: add a3, sp, a3
2116 ; RV32-NEXT: addi a3, a3, 48
2117 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2118 ; RV32-NEXT: csrr a3, vlenb
2119 ; RV32-NEXT: li a4, 40
2120 ; RV32-NEXT: mul a3, a3, a4
2121 ; RV32-NEXT: add a3, sp, a3
2122 ; RV32-NEXT: addi a3, a3, 48
2123 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2124 ; RV32-NEXT: csrr a3, vlenb
2125 ; RV32-NEXT: li a4, 24
2126 ; RV32-NEXT: mul a3, a3, a4
2127 ; RV32-NEXT: add a3, sp, a3
2128 ; RV32-NEXT: addi a3, a3, 48
2129 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2130 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2131 ; RV32-NEXT: csrr a3, vlenb
2132 ; RV32-NEXT: slli a3, a3, 5
2133 ; RV32-NEXT: add a3, sp, a3
2134 ; RV32-NEXT: addi a3, a3, 48
2135 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2136 ; RV32-NEXT: vsub.vv v16, v16, v8, v0.t
2137 ; RV32-NEXT: csrr a3, vlenb
2138 ; RV32-NEXT: slli a3, a3, 5
2139 ; RV32-NEXT: add a3, sp, a3
2140 ; RV32-NEXT: addi a3, a3, 48
2141 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2142 ; RV32-NEXT: csrr a3, vlenb
2143 ; RV32-NEXT: slli a3, a3, 5
2144 ; RV32-NEXT: add a3, sp, a3
2145 ; RV32-NEXT: addi a3, a3, 48
2146 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2147 ; RV32-NEXT: csrr a3, vlenb
2148 ; RV32-NEXT: li a4, 48
2149 ; RV32-NEXT: mul a3, a3, a4
2150 ; RV32-NEXT: add a3, sp, a3
2151 ; RV32-NEXT: addi a3, a3, 48
2152 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2153 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2154 ; RV32-NEXT: csrr a3, vlenb
2155 ; RV32-NEXT: li a4, 24
2156 ; RV32-NEXT: mul a3, a3, a4
2157 ; RV32-NEXT: add a3, sp, a3
2158 ; RV32-NEXT: addi a3, a3, 48
2159 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2160 ; RV32-NEXT: csrr a3, vlenb
2161 ; RV32-NEXT: slli a3, a3, 5
2162 ; RV32-NEXT: add a3, sp, a3
2163 ; RV32-NEXT: addi a3, a3, 48
2164 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2165 ; RV32-NEXT: vsrl.vi v16, v16, 2, v0.t
2166 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2167 ; RV32-NEXT: csrr a3, vlenb
2168 ; RV32-NEXT: li a4, 24
2169 ; RV32-NEXT: mul a3, a3, a4
2170 ; RV32-NEXT: add a3, sp, a3
2171 ; RV32-NEXT: addi a3, a3, 48
2172 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2173 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
2174 ; RV32-NEXT: csrr a3, vlenb
2175 ; RV32-NEXT: slli a3, a3, 3
2176 ; RV32-NEXT: add a3, sp, a3
2177 ; RV32-NEXT: addi a3, a3, 48
2178 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2179 ; RV32-NEXT: addi a3, sp, 24
2180 ; RV32-NEXT: addi a4, sp, 16
2181 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2182 ; RV32-NEXT: vlse64.v v8, (a3), zero
2183 ; RV32-NEXT: csrr a3, vlenb
2184 ; RV32-NEXT: li a5, 24
2185 ; RV32-NEXT: mul a3, a3, a5
2186 ; RV32-NEXT: add a3, sp, a3
2187 ; RV32-NEXT: addi a3, a3, 48
2188 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2189 ; RV32-NEXT: vlse64.v v8, (a4), zero
2190 ; RV32-NEXT: csrr a3, vlenb
2191 ; RV32-NEXT: slli a3, a3, 5
2192 ; RV32-NEXT: add a3, sp, a3
2193 ; RV32-NEXT: addi a3, a3, 48
2194 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2195 ; RV32-NEXT: csrr a3, vlenb
2196 ; RV32-NEXT: slli a3, a3, 3
2197 ; RV32-NEXT: add a3, sp, a3
2198 ; RV32-NEXT: addi a3, a3, 48
2199 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
2200 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2201 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2202 ; RV32-NEXT: addi a2, sp, 48
2203 ; RV32-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill
2204 ; RV32-NEXT: vl8r.v v16, (a2) # Unknown-size Folded Reload
2205 ; RV32-NEXT: vadd.vv v16, v8, v16, v0.t
2206 ; RV32-NEXT: csrr a2, vlenb
2207 ; RV32-NEXT: li a3, 24
2208 ; RV32-NEXT: mul a2, a2, a3
2209 ; RV32-NEXT: add a2, sp, a2
2210 ; RV32-NEXT: addi a2, a2, 48
2211 ; RV32-NEXT: vl8r.v v8, (a2) # Unknown-size Folded Reload
2212 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2213 ; RV32-NEXT: csrr a2, vlenb
2214 ; RV32-NEXT: slli a2, a2, 5
2215 ; RV32-NEXT: add a2, sp, a2
2216 ; RV32-NEXT: addi a2, a2, 48
2217 ; RV32-NEXT: vl8r.v v8, (a2) # Unknown-size Folded Reload
2218 ; RV32-NEXT: vmul.vv v8, v16, v8, v0.t
2219 ; RV32-NEXT: li a2, 56
2220 ; RV32-NEXT: vsrl.vx v8, v8, a2, v0.t
2221 ; RV32-NEXT: csrr a3, vlenb
2222 ; RV32-NEXT: slli a3, a3, 3
2223 ; RV32-NEXT: add a3, sp, a3
2224 ; RV32-NEXT: addi a3, a3, 48
2225 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2226 ; RV32-NEXT: addi a3, a0, -16
2227 ; RV32-NEXT: sltu a0, a0, a3
2228 ; RV32-NEXT: addi a0, a0, -1
2229 ; RV32-NEXT: and a0, a0, a3
2230 ; RV32-NEXT: vmv1r.v v0, v24
2231 ; RV32-NEXT: csrr a3, vlenb
2232 ; RV32-NEXT: slli a3, a3, 4
2233 ; RV32-NEXT: add a3, sp, a3
2234 ; RV32-NEXT: addi a3, a3, 48
2235 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
2236 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2237 ; RV32-NEXT: vsrl.vi v8, v16, 1, v0.t
2238 ; RV32-NEXT: vor.vv v8, v16, v8, v0.t
2239 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
2240 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2241 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2242 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2243 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
2244 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2245 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
2246 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2247 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
2248 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2249 ; RV32-NEXT: vnot.v v8, v8, v0.t
2250 ; RV32-NEXT: addi a0, sp, 48
2251 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2252 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
2253 ; RV32-NEXT: csrr a0, vlenb
2254 ; RV32-NEXT: slli a0, a0, 4
2255 ; RV32-NEXT: add a0, sp, a0
2256 ; RV32-NEXT: addi a0, a0, 48
2257 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2258 ; RV32-NEXT: csrr a0, vlenb
2259 ; RV32-NEXT: li a1, 40
2260 ; RV32-NEXT: mul a0, a0, a1
2261 ; RV32-NEXT: add a0, sp, a0
2262 ; RV32-NEXT: addi a0, a0, 48
2263 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2264 ; RV32-NEXT: csrr a0, vlenb
2265 ; RV32-NEXT: slli a0, a0, 4
2266 ; RV32-NEXT: add a0, sp, a0
2267 ; RV32-NEXT: addi a0, a0, 48
2268 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2269 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
2270 ; RV32-NEXT: addi a0, sp, 48
2271 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2272 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
2273 ; RV32-NEXT: csrr a0, vlenb
2274 ; RV32-NEXT: li a1, 40
2275 ; RV32-NEXT: mul a0, a0, a1
2276 ; RV32-NEXT: add a0, sp, a0
2277 ; RV32-NEXT: addi a0, a0, 48
2278 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2279 ; RV32-NEXT: csrr a0, vlenb
2280 ; RV32-NEXT: li a1, 48
2281 ; RV32-NEXT: mul a0, a0, a1
2282 ; RV32-NEXT: add a0, sp, a0
2283 ; RV32-NEXT: addi a0, a0, 48
2284 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2285 ; RV32-NEXT: csrr a0, vlenb
2286 ; RV32-NEXT: li a1, 40
2287 ; RV32-NEXT: mul a0, a0, a1
2288 ; RV32-NEXT: add a0, sp, a0
2289 ; RV32-NEXT: addi a0, a0, 48
2290 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2291 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2292 ; RV32-NEXT: csrr a0, vlenb
2293 ; RV32-NEXT: slli a0, a0, 4
2294 ; RV32-NEXT: add a0, sp, a0
2295 ; RV32-NEXT: addi a0, a0, 48
2296 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
2297 ; RV32-NEXT: csrr a0, vlenb
2298 ; RV32-NEXT: li a1, 40
2299 ; RV32-NEXT: mul a0, a0, a1
2300 ; RV32-NEXT: add a0, sp, a0
2301 ; RV32-NEXT: addi a0, a0, 48
2302 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2303 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
2304 ; RV32-NEXT: csrr a0, vlenb
2305 ; RV32-NEXT: li a1, 48
2306 ; RV32-NEXT: mul a0, a0, a1
2307 ; RV32-NEXT: add a0, sp, a0
2308 ; RV32-NEXT: addi a0, a0, 48
2309 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2310 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2311 ; RV32-NEXT: csrr a0, vlenb
2312 ; RV32-NEXT: slli a0, a0, 4
2313 ; RV32-NEXT: add a0, sp, a0
2314 ; RV32-NEXT: addi a0, a0, 48
2315 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2316 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
2317 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2318 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
2319 ; RV32-NEXT: csrr a0, vlenb
2320 ; RV32-NEXT: li a1, 24
2321 ; RV32-NEXT: mul a0, a0, a1
2322 ; RV32-NEXT: add a0, sp, a0
2323 ; RV32-NEXT: addi a0, a0, 48
2324 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2325 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2326 ; RV32-NEXT: csrr a0, vlenb
2327 ; RV32-NEXT: slli a0, a0, 5
2328 ; RV32-NEXT: add a0, sp, a0
2329 ; RV32-NEXT: addi a0, a0, 48
2330 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2331 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
2332 ; RV32-NEXT: vsrl.vx v16, v8, a2, v0.t
2333 ; RV32-NEXT: csrr a0, vlenb
2334 ; RV32-NEXT: slli a0, a0, 3
2335 ; RV32-NEXT: add a0, sp, a0
2336 ; RV32-NEXT: addi a0, a0, 48
2337 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2338 ; RV32-NEXT: csrr a0, vlenb
2339 ; RV32-NEXT: li a1, 56
2340 ; RV32-NEXT: mul a0, a0, a1
2341 ; RV32-NEXT: add sp, sp, a0
2342 ; RV32-NEXT: addi sp, sp, 48
2345 ; RV64-LABEL: vp_ctlz_v32i64:
2347 ; RV64-NEXT: addi sp, sp, -16
2348 ; RV64-NEXT: .cfi_def_cfa_offset 16
2349 ; RV64-NEXT: csrr a1, vlenb
2350 ; RV64-NEXT: slli a1, a1, 4
2351 ; RV64-NEXT: sub sp, sp, a1
2352 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
2353 ; RV64-NEXT: csrr a1, vlenb
2354 ; RV64-NEXT: slli a1, a1, 3
2355 ; RV64-NEXT: add a1, sp, a1
2356 ; RV64-NEXT: addi a1, a1, 16
2357 ; RV64-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2358 ; RV64-NEXT: li a2, 16
2359 ; RV64-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
2360 ; RV64-NEXT: vslidedown.vi v24, v0, 2
2361 ; RV64-NEXT: mv a1, a0
2362 ; RV64-NEXT: bltu a0, a2, .LBB34_2
2363 ; RV64-NEXT: # %bb.1:
2364 ; RV64-NEXT: li a1, 16
2365 ; RV64-NEXT: .LBB34_2:
2366 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2367 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2368 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2369 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
2370 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2371 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2372 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2373 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
2374 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2375 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
2376 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2377 ; RV64-NEXT: li a1, 32
2378 ; RV64-NEXT: vsrl.vx v16, v8, a1, v0.t
2379 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2380 ; RV64-NEXT: vnot.v v8, v8, v0.t
2381 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2382 ; RV64-NEXT: lui a2, 349525
2383 ; RV64-NEXT: addiw a2, a2, 1365
2384 ; RV64-NEXT: slli a3, a2, 32
2385 ; RV64-NEXT: add a2, a2, a3
2386 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
2387 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
2388 ; RV64-NEXT: lui a3, 209715
2389 ; RV64-NEXT: addiw a3, a3, 819
2390 ; RV64-NEXT: slli a4, a3, 32
2391 ; RV64-NEXT: add a3, a3, a4
2392 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
2393 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
2394 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
2395 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
2396 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2397 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
2398 ; RV64-NEXT: lui a4, 61681
2399 ; RV64-NEXT: addiw a4, a4, -241
2400 ; RV64-NEXT: slli a5, a4, 32
2401 ; RV64-NEXT: add a4, a4, a5
2402 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
2403 ; RV64-NEXT: lui a5, 4112
2404 ; RV64-NEXT: addiw a5, a5, 257
2405 ; RV64-NEXT: slli a6, a5, 32
2406 ; RV64-NEXT: add a5, a5, a6
2407 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
2408 ; RV64-NEXT: li a6, 56
2409 ; RV64-NEXT: vsrl.vx v8, v8, a6, v0.t
2410 ; RV64-NEXT: addi a7, sp, 16
2411 ; RV64-NEXT: vs8r.v v8, (a7) # Unknown-size Folded Spill
2412 ; RV64-NEXT: addi a7, a0, -16
2413 ; RV64-NEXT: sltu a0, a0, a7
2414 ; RV64-NEXT: addi a0, a0, -1
2415 ; RV64-NEXT: and a0, a0, a7
2416 ; RV64-NEXT: vmv1r.v v0, v24
2417 ; RV64-NEXT: csrr a7, vlenb
2418 ; RV64-NEXT: slli a7, a7, 3
2419 ; RV64-NEXT: add a7, sp, a7
2420 ; RV64-NEXT: addi a7, a7, 16
2421 ; RV64-NEXT: vl8r.v v8, (a7) # Unknown-size Folded Reload
2422 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2423 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2424 ; RV64-NEXT: vor.vv v16, v8, v16, v0.t
2425 ; RV64-NEXT: vsrl.vi v8, v16, 2, v0.t
2426 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
2427 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2428 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2429 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
2430 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2431 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
2432 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2433 ; RV64-NEXT: vsrl.vx v16, v8, a1, v0.t
2434 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2435 ; RV64-NEXT: vnot.v v8, v8, v0.t
2436 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2437 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
2438 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
2439 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
2440 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
2441 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
2442 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
2443 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2444 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
2445 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
2446 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
2447 ; RV64-NEXT: vsrl.vx v16, v8, a6, v0.t
2448 ; RV64-NEXT: addi a0, sp, 16
2449 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2450 ; RV64-NEXT: csrr a0, vlenb
2451 ; RV64-NEXT: slli a0, a0, 4
2452 ; RV64-NEXT: add sp, sp, a0
2453 ; RV64-NEXT: addi sp, sp, 16
2455 %v = call <32 x i64> @llvm.vp.ctlz.v32i64(<32 x i64> %va, i1 false, <32 x i1> %m, i32 %evl)
2459 define <32 x i64> @vp_ctlz_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
2460 ; RV32-LABEL: vp_ctlz_v32i64_unmasked:
2462 ; RV32-NEXT: addi sp, sp, -48
2463 ; RV32-NEXT: .cfi_def_cfa_offset 48
2464 ; RV32-NEXT: csrr a1, vlenb
2465 ; RV32-NEXT: slli a1, a1, 4
2466 ; RV32-NEXT: sub sp, sp, a1
2467 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 16 * vlenb
2468 ; RV32-NEXT: csrr a1, vlenb
2469 ; RV32-NEXT: slli a1, a1, 3
2470 ; RV32-NEXT: add a1, sp, a1
2471 ; RV32-NEXT: addi a1, a1, 48
2472 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2473 ; RV32-NEXT: lui a1, 349525
2474 ; RV32-NEXT: addi a1, a1, 1365
2475 ; RV32-NEXT: sw a1, 44(sp)
2476 ; RV32-NEXT: sw a1, 40(sp)
2477 ; RV32-NEXT: lui a1, 209715
2478 ; RV32-NEXT: addi a1, a1, 819
2479 ; RV32-NEXT: sw a1, 36(sp)
2480 ; RV32-NEXT: sw a1, 32(sp)
2481 ; RV32-NEXT: lui a1, 61681
2482 ; RV32-NEXT: addi a1, a1, -241
2483 ; RV32-NEXT: sw a1, 28(sp)
2484 ; RV32-NEXT: sw a1, 24(sp)
2485 ; RV32-NEXT: lui a1, 4112
2486 ; RV32-NEXT: addi a1, a1, 257
2487 ; RV32-NEXT: sw a1, 20(sp)
2488 ; RV32-NEXT: li a2, 16
2489 ; RV32-NEXT: sw a1, 16(sp)
2490 ; RV32-NEXT: mv a1, a0
2491 ; RV32-NEXT: bltu a0, a2, .LBB35_2
2492 ; RV32-NEXT: # %bb.1:
2493 ; RV32-NEXT: li a1, 16
2494 ; RV32-NEXT: .LBB35_2:
2495 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2496 ; RV32-NEXT: vsrl.vi v24, v8, 1
2497 ; RV32-NEXT: vor.vv v8, v8, v24
2498 ; RV32-NEXT: vsrl.vi v24, v8, 2
2499 ; RV32-NEXT: vor.vv v8, v8, v24
2500 ; RV32-NEXT: vsrl.vi v24, v8, 4
2501 ; RV32-NEXT: vor.vv v8, v8, v24
2502 ; RV32-NEXT: vsrl.vi v24, v8, 8
2503 ; RV32-NEXT: vor.vv v8, v8, v24
2504 ; RV32-NEXT: vsrl.vi v24, v8, 16
2505 ; RV32-NEXT: vor.vv v8, v8, v24
2506 ; RV32-NEXT: li a2, 32
2507 ; RV32-NEXT: vsrl.vx v24, v8, a2
2508 ; RV32-NEXT: vor.vv v8, v8, v24
2509 ; RV32-NEXT: vnot.v v0, v8
2510 ; RV32-NEXT: addi a3, sp, 40
2511 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2512 ; RV32-NEXT: vlse64.v v16, (a3), zero
2513 ; RV32-NEXT: addi a3, sp, 32
2514 ; RV32-NEXT: vlse64.v v8, (a3), zero
2515 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2516 ; RV32-NEXT: vsrl.vi v24, v0, 1
2517 ; RV32-NEXT: vand.vv v24, v24, v16
2518 ; RV32-NEXT: vsub.vv v24, v0, v24
2519 ; RV32-NEXT: vand.vv v0, v24, v8
2520 ; RV32-NEXT: vsrl.vi v24, v24, 2
2521 ; RV32-NEXT: vand.vv v24, v24, v8
2522 ; RV32-NEXT: vadd.vv v24, v0, v24
2523 ; RV32-NEXT: vsrl.vi v0, v24, 4
2524 ; RV32-NEXT: vadd.vv v24, v24, v0
2525 ; RV32-NEXT: addi a3, sp, 48
2526 ; RV32-NEXT: vs8r.v v24, (a3) # Unknown-size Folded Spill
2527 ; RV32-NEXT: addi a3, a0, -16
2528 ; RV32-NEXT: sltu a0, a0, a3
2529 ; RV32-NEXT: addi a0, a0, -1
2530 ; RV32-NEXT: and a0, a0, a3
2531 ; RV32-NEXT: csrr a3, vlenb
2532 ; RV32-NEXT: slli a3, a3, 3
2533 ; RV32-NEXT: add a3, sp, a3
2534 ; RV32-NEXT: addi a3, a3, 48
2535 ; RV32-NEXT: vl8r.v v0, (a3) # Unknown-size Folded Reload
2536 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2537 ; RV32-NEXT: vsrl.vi v24, v0, 1
2538 ; RV32-NEXT: vor.vv v24, v0, v24
2539 ; RV32-NEXT: vsrl.vi v0, v24, 2
2540 ; RV32-NEXT: vor.vv v24, v24, v0
2541 ; RV32-NEXT: vsrl.vi v0, v24, 4
2542 ; RV32-NEXT: vor.vv v24, v24, v0
2543 ; RV32-NEXT: vsrl.vi v0, v24, 8
2544 ; RV32-NEXT: vor.vv v24, v24, v0
2545 ; RV32-NEXT: vsrl.vi v0, v24, 16
2546 ; RV32-NEXT: vor.vv v24, v24, v0
2547 ; RV32-NEXT: vsrl.vx v0, v24, a2
2548 ; RV32-NEXT: vor.vv v24, v24, v0
2549 ; RV32-NEXT: vnot.v v24, v24
2550 ; RV32-NEXT: vsrl.vi v0, v24, 1
2551 ; RV32-NEXT: vand.vv v16, v0, v16
2552 ; RV32-NEXT: addi a2, sp, 24
2553 ; RV32-NEXT: vsub.vv v16, v24, v16
2554 ; RV32-NEXT: vand.vv v24, v16, v8
2555 ; RV32-NEXT: vsrl.vi v16, v16, 2
2556 ; RV32-NEXT: vand.vv v8, v16, v8
2557 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2558 ; RV32-NEXT: vlse64.v v16, (a2), zero
2559 ; RV32-NEXT: addi a2, sp, 16
2560 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2561 ; RV32-NEXT: vadd.vv v8, v24, v8
2562 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2563 ; RV32-NEXT: vlse64.v v24, (a2), zero
2564 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2565 ; RV32-NEXT: vsrl.vi v0, v8, 4
2566 ; RV32-NEXT: vadd.vv v8, v8, v0
2567 ; RV32-NEXT: addi a2, sp, 48
2568 ; RV32-NEXT: vl8r.v v0, (a2) # Unknown-size Folded Reload
2569 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2570 ; RV32-NEXT: vand.vv v0, v0, v16
2571 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2572 ; RV32-NEXT: vand.vv v8, v8, v16
2573 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2574 ; RV32-NEXT: vmul.vv v16, v0, v24
2575 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2576 ; RV32-NEXT: vmul.vv v24, v8, v24
2577 ; RV32-NEXT: li a2, 56
2578 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2579 ; RV32-NEXT: vsrl.vx v8, v16, a2
2580 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2581 ; RV32-NEXT: vsrl.vx v16, v24, a2
2582 ; RV32-NEXT: csrr a0, vlenb
2583 ; RV32-NEXT: slli a0, a0, 4
2584 ; RV32-NEXT: add sp, sp, a0
2585 ; RV32-NEXT: addi sp, sp, 48
2588 ; RV64-LABEL: vp_ctlz_v32i64_unmasked:
2590 ; RV64-NEXT: li a2, 16
2591 ; RV64-NEXT: mv a1, a0
2592 ; RV64-NEXT: bltu a0, a2, .LBB35_2
2593 ; RV64-NEXT: # %bb.1:
2594 ; RV64-NEXT: li a1, 16
2595 ; RV64-NEXT: .LBB35_2:
2596 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2597 ; RV64-NEXT: vsrl.vi v24, v8, 1
2598 ; RV64-NEXT: vor.vv v8, v8, v24
2599 ; RV64-NEXT: vsrl.vi v24, v8, 2
2600 ; RV64-NEXT: vor.vv v8, v8, v24
2601 ; RV64-NEXT: vsrl.vi v24, v8, 4
2602 ; RV64-NEXT: vor.vv v8, v8, v24
2603 ; RV64-NEXT: vsrl.vi v24, v8, 8
2604 ; RV64-NEXT: vor.vv v8, v8, v24
2605 ; RV64-NEXT: vsrl.vi v24, v8, 16
2606 ; RV64-NEXT: vor.vv v8, v8, v24
2607 ; RV64-NEXT: li a1, 32
2608 ; RV64-NEXT: vsrl.vx v24, v8, a1
2609 ; RV64-NEXT: vor.vv v8, v8, v24
2610 ; RV64-NEXT: vnot.v v8, v8
2611 ; RV64-NEXT: vsrl.vi v24, v8, 1
2612 ; RV64-NEXT: lui a2, 349525
2613 ; RV64-NEXT: addiw a2, a2, 1365
2614 ; RV64-NEXT: slli a3, a2, 32
2615 ; RV64-NEXT: add a2, a2, a3
2616 ; RV64-NEXT: vand.vx v24, v24, a2
2617 ; RV64-NEXT: vsub.vv v8, v8, v24
2618 ; RV64-NEXT: lui a3, 209715
2619 ; RV64-NEXT: addiw a3, a3, 819
2620 ; RV64-NEXT: slli a4, a3, 32
2621 ; RV64-NEXT: add a3, a3, a4
2622 ; RV64-NEXT: vand.vx v24, v8, a3
2623 ; RV64-NEXT: vsrl.vi v8, v8, 2
2624 ; RV64-NEXT: vand.vx v8, v8, a3
2625 ; RV64-NEXT: vadd.vv v8, v24, v8
2626 ; RV64-NEXT: vsrl.vi v24, v8, 4
2627 ; RV64-NEXT: vadd.vv v8, v8, v24
2628 ; RV64-NEXT: lui a4, 61681
2629 ; RV64-NEXT: addiw a4, a4, -241
2630 ; RV64-NEXT: slli a5, a4, 32
2631 ; RV64-NEXT: add a4, a4, a5
2632 ; RV64-NEXT: vand.vx v8, v8, a4
2633 ; RV64-NEXT: lui a5, 4112
2634 ; RV64-NEXT: addiw a5, a5, 257
2635 ; RV64-NEXT: slli a6, a5, 32
2636 ; RV64-NEXT: add a5, a5, a6
2637 ; RV64-NEXT: vmul.vx v8, v8, a5
2638 ; RV64-NEXT: li a6, 56
2639 ; RV64-NEXT: vsrl.vx v8, v8, a6
2640 ; RV64-NEXT: addi a7, a0, -16
2641 ; RV64-NEXT: sltu a0, a0, a7
2642 ; RV64-NEXT: addi a0, a0, -1
2643 ; RV64-NEXT: and a0, a0, a7
2644 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2645 ; RV64-NEXT: vsrl.vi v24, v16, 1
2646 ; RV64-NEXT: vor.vv v16, v16, v24
2647 ; RV64-NEXT: vsrl.vi v24, v16, 2
2648 ; RV64-NEXT: vor.vv v16, v16, v24
2649 ; RV64-NEXT: vsrl.vi v24, v16, 4
2650 ; RV64-NEXT: vor.vv v16, v16, v24
2651 ; RV64-NEXT: vsrl.vi v24, v16, 8
2652 ; RV64-NEXT: vor.vv v16, v16, v24
2653 ; RV64-NEXT: vsrl.vi v24, v16, 16
2654 ; RV64-NEXT: vor.vv v16, v16, v24
2655 ; RV64-NEXT: vsrl.vx v24, v16, a1
2656 ; RV64-NEXT: vor.vv v16, v16, v24
2657 ; RV64-NEXT: vnot.v v16, v16
2658 ; RV64-NEXT: vsrl.vi v24, v16, 1
2659 ; RV64-NEXT: vand.vx v24, v24, a2
2660 ; RV64-NEXT: vsub.vv v16, v16, v24
2661 ; RV64-NEXT: vand.vx v24, v16, a3
2662 ; RV64-NEXT: vsrl.vi v16, v16, 2
2663 ; RV64-NEXT: vand.vx v16, v16, a3
2664 ; RV64-NEXT: vadd.vv v16, v24, v16
2665 ; RV64-NEXT: vsrl.vi v24, v16, 4
2666 ; RV64-NEXT: vadd.vv v16, v16, v24
2667 ; RV64-NEXT: vand.vx v16, v16, a4
2668 ; RV64-NEXT: vmul.vx v16, v16, a5
2669 ; RV64-NEXT: vsrl.vx v16, v16, a6
2671 %v = call <32 x i64> @llvm.vp.ctlz.v32i64(<32 x i64> %va, i1 false, <32 x i1> splat (i1 true), i32 %evl)
2675 define <2 x i8> @vp_ctlz_zero_undef_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
2676 ; CHECK-LABEL: vp_ctlz_zero_undef_v2i8:
2678 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
2679 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2680 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2681 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
2682 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2683 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2684 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2685 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2686 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2687 ; CHECK-NEXT: li a0, 85
2688 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2689 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2690 ; CHECK-NEXT: li a0, 51
2691 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2692 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2693 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2694 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2695 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2696 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2697 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2699 %v = call <2 x i8> @llvm.vp.ctlz.v2i8(<2 x i8> %va, i1 true, <2 x i1> %m, i32 %evl)
2703 define <2 x i8> @vp_ctlz_zero_undef_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
2704 ; CHECK-LABEL: vp_ctlz_zero_undef_v2i8_unmasked:
2706 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
2707 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2708 ; CHECK-NEXT: vor.vv v8, v8, v9
2709 ; CHECK-NEXT: vsrl.vi v9, v8, 2
2710 ; CHECK-NEXT: vor.vv v8, v8, v9
2711 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2712 ; CHECK-NEXT: vor.vv v8, v8, v9
2713 ; CHECK-NEXT: vnot.v v8, v8
2714 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2715 ; CHECK-NEXT: li a0, 85
2716 ; CHECK-NEXT: vand.vx v9, v9, a0
2717 ; CHECK-NEXT: vsub.vv v8, v8, v9
2718 ; CHECK-NEXT: li a0, 51
2719 ; CHECK-NEXT: vand.vx v9, v8, a0
2720 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2721 ; CHECK-NEXT: vand.vx v8, v8, a0
2722 ; CHECK-NEXT: vadd.vv v8, v9, v8
2723 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2724 ; CHECK-NEXT: vadd.vv v8, v8, v9
2725 ; CHECK-NEXT: vand.vi v8, v8, 15
2727 %v = call <2 x i8> @llvm.vp.ctlz.v2i8(<2 x i8> %va, i1 true, <2 x i1> splat (i1 true), i32 %evl)
2731 define <4 x i8> @vp_ctlz_zero_undef_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
2732 ; CHECK-LABEL: vp_ctlz_zero_undef_v4i8:
2734 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
2735 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2736 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2737 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
2738 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2739 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2740 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2741 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2742 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2743 ; CHECK-NEXT: li a0, 85
2744 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2745 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2746 ; CHECK-NEXT: li a0, 51
2747 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2748 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2749 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2750 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2751 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2752 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2753 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2755 %v = call <4 x i8> @llvm.vp.ctlz.v4i8(<4 x i8> %va, i1 true, <4 x i1> %m, i32 %evl)
2759 define <4 x i8> @vp_ctlz_zero_undef_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
2760 ; CHECK-LABEL: vp_ctlz_zero_undef_v4i8_unmasked:
2762 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
2763 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2764 ; CHECK-NEXT: vor.vv v8, v8, v9
2765 ; CHECK-NEXT: vsrl.vi v9, v8, 2
2766 ; CHECK-NEXT: vor.vv v8, v8, v9
2767 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2768 ; CHECK-NEXT: vor.vv v8, v8, v9
2769 ; CHECK-NEXT: vnot.v v8, v8
2770 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2771 ; CHECK-NEXT: li a0, 85
2772 ; CHECK-NEXT: vand.vx v9, v9, a0
2773 ; CHECK-NEXT: vsub.vv v8, v8, v9
2774 ; CHECK-NEXT: li a0, 51
2775 ; CHECK-NEXT: vand.vx v9, v8, a0
2776 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2777 ; CHECK-NEXT: vand.vx v8, v8, a0
2778 ; CHECK-NEXT: vadd.vv v8, v9, v8
2779 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2780 ; CHECK-NEXT: vadd.vv v8, v8, v9
2781 ; CHECK-NEXT: vand.vi v8, v8, 15
2783 %v = call <4 x i8> @llvm.vp.ctlz.v4i8(<4 x i8> %va, i1 true, <4 x i1> splat (i1 true), i32 %evl)
2787 define <8 x i8> @vp_ctlz_zero_undef_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
2788 ; CHECK-LABEL: vp_ctlz_zero_undef_v8i8:
2790 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
2791 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2792 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2793 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
2794 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2795 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2796 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2797 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2798 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2799 ; CHECK-NEXT: li a0, 85
2800 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2801 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2802 ; CHECK-NEXT: li a0, 51
2803 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2804 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2805 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2806 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2807 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2808 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2809 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2811 %v = call <8 x i8> @llvm.vp.ctlz.v8i8(<8 x i8> %va, i1 true, <8 x i1> %m, i32 %evl)
2815 define <8 x i8> @vp_ctlz_zero_undef_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
2816 ; CHECK-LABEL: vp_ctlz_zero_undef_v8i8_unmasked:
2818 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
2819 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2820 ; CHECK-NEXT: vor.vv v8, v8, v9
2821 ; CHECK-NEXT: vsrl.vi v9, v8, 2
2822 ; CHECK-NEXT: vor.vv v8, v8, v9
2823 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2824 ; CHECK-NEXT: vor.vv v8, v8, v9
2825 ; CHECK-NEXT: vnot.v v8, v8
2826 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2827 ; CHECK-NEXT: li a0, 85
2828 ; CHECK-NEXT: vand.vx v9, v9, a0
2829 ; CHECK-NEXT: vsub.vv v8, v8, v9
2830 ; CHECK-NEXT: li a0, 51
2831 ; CHECK-NEXT: vand.vx v9, v8, a0
2832 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2833 ; CHECK-NEXT: vand.vx v8, v8, a0
2834 ; CHECK-NEXT: vadd.vv v8, v9, v8
2835 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2836 ; CHECK-NEXT: vadd.vv v8, v8, v9
2837 ; CHECK-NEXT: vand.vi v8, v8, 15
2839 %v = call <8 x i8> @llvm.vp.ctlz.v8i8(<8 x i8> %va, i1 true, <8 x i1> splat (i1 true), i32 %evl)
2843 define <16 x i8> @vp_ctlz_zero_undef_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
2844 ; CHECK-LABEL: vp_ctlz_zero_undef_v16i8:
2846 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
2847 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2848 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2849 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
2850 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2851 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2852 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2853 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2854 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2855 ; CHECK-NEXT: li a0, 85
2856 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2857 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2858 ; CHECK-NEXT: li a0, 51
2859 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2860 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2861 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2862 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2863 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2864 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2865 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2867 %v = call <16 x i8> @llvm.vp.ctlz.v16i8(<16 x i8> %va, i1 true, <16 x i1> %m, i32 %evl)
2871 define <16 x i8> @vp_ctlz_zero_undef_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
2872 ; CHECK-LABEL: vp_ctlz_zero_undef_v16i8_unmasked:
2874 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
2875 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2876 ; CHECK-NEXT: vor.vv v8, v8, v9
2877 ; CHECK-NEXT: vsrl.vi v9, v8, 2
2878 ; CHECK-NEXT: vor.vv v8, v8, v9
2879 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2880 ; CHECK-NEXT: vor.vv v8, v8, v9
2881 ; CHECK-NEXT: vnot.v v8, v8
2882 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2883 ; CHECK-NEXT: li a0, 85
2884 ; CHECK-NEXT: vand.vx v9, v9, a0
2885 ; CHECK-NEXT: vsub.vv v8, v8, v9
2886 ; CHECK-NEXT: li a0, 51
2887 ; CHECK-NEXT: vand.vx v9, v8, a0
2888 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2889 ; CHECK-NEXT: vand.vx v8, v8, a0
2890 ; CHECK-NEXT: vadd.vv v8, v9, v8
2891 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2892 ; CHECK-NEXT: vadd.vv v8, v8, v9
2893 ; CHECK-NEXT: vand.vi v8, v8, 15
2895 %v = call <16 x i8> @llvm.vp.ctlz.v16i8(<16 x i8> %va, i1 true, <16 x i1> splat (i1 true), i32 %evl)
2899 define <2 x i16> @vp_ctlz_zero_undef_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
2900 ; CHECK-LABEL: vp_ctlz_zero_undef_v2i16:
2902 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2903 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2904 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2905 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
2906 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2907 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2908 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2909 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
2910 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2911 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2912 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2913 ; CHECK-NEXT: lui a0, 5
2914 ; CHECK-NEXT: addi a0, a0, 1365
2915 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2916 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2917 ; CHECK-NEXT: lui a0, 3
2918 ; CHECK-NEXT: addi a0, a0, 819
2919 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2920 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2921 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2922 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2923 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2924 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2925 ; CHECK-NEXT: lui a0, 1
2926 ; CHECK-NEXT: addi a0, a0, -241
2927 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2928 ; CHECK-NEXT: li a0, 257
2929 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2930 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
2932 %v = call <2 x i16> @llvm.vp.ctlz.v2i16(<2 x i16> %va, i1 true, <2 x i1> %m, i32 %evl)
2936 define <2 x i16> @vp_ctlz_zero_undef_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
2937 ; CHECK-LABEL: vp_ctlz_zero_undef_v2i16_unmasked:
2939 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2940 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2941 ; CHECK-NEXT: vor.vv v8, v8, v9
2942 ; CHECK-NEXT: vsrl.vi v9, v8, 2
2943 ; CHECK-NEXT: vor.vv v8, v8, v9
2944 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2945 ; CHECK-NEXT: vor.vv v8, v8, v9
2946 ; CHECK-NEXT: vsrl.vi v9, v8, 8
2947 ; CHECK-NEXT: vor.vv v8, v8, v9
2948 ; CHECK-NEXT: vnot.v v8, v8
2949 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2950 ; CHECK-NEXT: lui a0, 5
2951 ; CHECK-NEXT: addi a0, a0, 1365
2952 ; CHECK-NEXT: vand.vx v9, v9, a0
2953 ; CHECK-NEXT: vsub.vv v8, v8, v9
2954 ; CHECK-NEXT: lui a0, 3
2955 ; CHECK-NEXT: addi a0, a0, 819
2956 ; CHECK-NEXT: vand.vx v9, v8, a0
2957 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2958 ; CHECK-NEXT: vand.vx v8, v8, a0
2959 ; CHECK-NEXT: vadd.vv v8, v9, v8
2960 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2961 ; CHECK-NEXT: vadd.vv v8, v8, v9
2962 ; CHECK-NEXT: lui a0, 1
2963 ; CHECK-NEXT: addi a0, a0, -241
2964 ; CHECK-NEXT: vand.vx v8, v8, a0
2965 ; CHECK-NEXT: li a0, 257
2966 ; CHECK-NEXT: vmul.vx v8, v8, a0
2967 ; CHECK-NEXT: vsrl.vi v8, v8, 8
2969 %v = call <2 x i16> @llvm.vp.ctlz.v2i16(<2 x i16> %va, i1 true, <2 x i1> splat (i1 true), i32 %evl)
2973 define <4 x i16> @vp_ctlz_zero_undef_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
2974 ; CHECK-LABEL: vp_ctlz_zero_undef_v4i16:
2976 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2977 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2978 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2979 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
2980 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2981 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2982 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2983 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
2984 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
2985 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2986 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2987 ; CHECK-NEXT: lui a0, 5
2988 ; CHECK-NEXT: addi a0, a0, 1365
2989 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2990 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2991 ; CHECK-NEXT: lui a0, 3
2992 ; CHECK-NEXT: addi a0, a0, 819
2993 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2994 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2995 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2996 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2997 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2998 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2999 ; CHECK-NEXT: lui a0, 1
3000 ; CHECK-NEXT: addi a0, a0, -241
3001 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3002 ; CHECK-NEXT: li a0, 257
3003 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
3004 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
3006 %v = call <4 x i16> @llvm.vp.ctlz.v4i16(<4 x i16> %va, i1 true, <4 x i1> %m, i32 %evl)
3010 define <4 x i16> @vp_ctlz_zero_undef_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
3011 ; CHECK-LABEL: vp_ctlz_zero_undef_v4i16_unmasked:
3013 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
3014 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3015 ; CHECK-NEXT: vor.vv v8, v8, v9
3016 ; CHECK-NEXT: vsrl.vi v9, v8, 2
3017 ; CHECK-NEXT: vor.vv v8, v8, v9
3018 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3019 ; CHECK-NEXT: vor.vv v8, v8, v9
3020 ; CHECK-NEXT: vsrl.vi v9, v8, 8
3021 ; CHECK-NEXT: vor.vv v8, v8, v9
3022 ; CHECK-NEXT: vnot.v v8, v8
3023 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3024 ; CHECK-NEXT: lui a0, 5
3025 ; CHECK-NEXT: addi a0, a0, 1365
3026 ; CHECK-NEXT: vand.vx v9, v9, a0
3027 ; CHECK-NEXT: vsub.vv v8, v8, v9
3028 ; CHECK-NEXT: lui a0, 3
3029 ; CHECK-NEXT: addi a0, a0, 819
3030 ; CHECK-NEXT: vand.vx v9, v8, a0
3031 ; CHECK-NEXT: vsrl.vi v8, v8, 2
3032 ; CHECK-NEXT: vand.vx v8, v8, a0
3033 ; CHECK-NEXT: vadd.vv v8, v9, v8
3034 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3035 ; CHECK-NEXT: vadd.vv v8, v8, v9
3036 ; CHECK-NEXT: lui a0, 1
3037 ; CHECK-NEXT: addi a0, a0, -241
3038 ; CHECK-NEXT: vand.vx v8, v8, a0
3039 ; CHECK-NEXT: li a0, 257
3040 ; CHECK-NEXT: vmul.vx v8, v8, a0
3041 ; CHECK-NEXT: vsrl.vi v8, v8, 8
3043 %v = call <4 x i16> @llvm.vp.ctlz.v4i16(<4 x i16> %va, i1 true, <4 x i1> splat (i1 true), i32 %evl)
3047 define <8 x i16> @vp_ctlz_zero_undef_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
3048 ; CHECK-LABEL: vp_ctlz_zero_undef_v8i16:
3050 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
3051 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
3052 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3053 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
3054 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3055 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
3056 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3057 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
3058 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3059 ; CHECK-NEXT: vnot.v v8, v8, v0.t
3060 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
3061 ; CHECK-NEXT: lui a0, 5
3062 ; CHECK-NEXT: addi a0, a0, 1365
3063 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
3064 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
3065 ; CHECK-NEXT: lui a0, 3
3066 ; CHECK-NEXT: addi a0, a0, 819
3067 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
3068 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
3069 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3070 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
3071 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
3072 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
3073 ; CHECK-NEXT: lui a0, 1
3074 ; CHECK-NEXT: addi a0, a0, -241
3075 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3076 ; CHECK-NEXT: li a0, 257
3077 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
3078 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
3080 %v = call <8 x i16> @llvm.vp.ctlz.v8i16(<8 x i16> %va, i1 true, <8 x i1> %m, i32 %evl)
3084 define <8 x i16> @vp_ctlz_zero_undef_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
3085 ; CHECK-LABEL: vp_ctlz_zero_undef_v8i16_unmasked:
3087 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
3088 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3089 ; CHECK-NEXT: vor.vv v8, v8, v9
3090 ; CHECK-NEXT: vsrl.vi v9, v8, 2
3091 ; CHECK-NEXT: vor.vv v8, v8, v9
3092 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3093 ; CHECK-NEXT: vor.vv v8, v8, v9
3094 ; CHECK-NEXT: vsrl.vi v9, v8, 8
3095 ; CHECK-NEXT: vor.vv v8, v8, v9
3096 ; CHECK-NEXT: vnot.v v8, v8
3097 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3098 ; CHECK-NEXT: lui a0, 5
3099 ; CHECK-NEXT: addi a0, a0, 1365
3100 ; CHECK-NEXT: vand.vx v9, v9, a0
3101 ; CHECK-NEXT: vsub.vv v8, v8, v9
3102 ; CHECK-NEXT: lui a0, 3
3103 ; CHECK-NEXT: addi a0, a0, 819
3104 ; CHECK-NEXT: vand.vx v9, v8, a0
3105 ; CHECK-NEXT: vsrl.vi v8, v8, 2
3106 ; CHECK-NEXT: vand.vx v8, v8, a0
3107 ; CHECK-NEXT: vadd.vv v8, v9, v8
3108 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3109 ; CHECK-NEXT: vadd.vv v8, v8, v9
3110 ; CHECK-NEXT: lui a0, 1
3111 ; CHECK-NEXT: addi a0, a0, -241
3112 ; CHECK-NEXT: vand.vx v8, v8, a0
3113 ; CHECK-NEXT: li a0, 257
3114 ; CHECK-NEXT: vmul.vx v8, v8, a0
3115 ; CHECK-NEXT: vsrl.vi v8, v8, 8
3117 %v = call <8 x i16> @llvm.vp.ctlz.v8i16(<8 x i16> %va, i1 true, <8 x i1> splat (i1 true), i32 %evl)
3121 define <16 x i16> @vp_ctlz_zero_undef_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
3122 ; CHECK-LABEL: vp_ctlz_zero_undef_v16i16:
3124 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3125 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
3126 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3127 ; CHECK-NEXT: vsrl.vi v10, v8, 2, v0.t
3128 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3129 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
3130 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3131 ; CHECK-NEXT: vsrl.vi v10, v8, 8, v0.t
3132 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3133 ; CHECK-NEXT: vnot.v v8, v8, v0.t
3134 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
3135 ; CHECK-NEXT: lui a0, 5
3136 ; CHECK-NEXT: addi a0, a0, 1365
3137 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
3138 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
3139 ; CHECK-NEXT: lui a0, 3
3140 ; CHECK-NEXT: addi a0, a0, 819
3141 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
3142 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
3143 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3144 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
3145 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
3146 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
3147 ; CHECK-NEXT: lui a0, 1
3148 ; CHECK-NEXT: addi a0, a0, -241
3149 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3150 ; CHECK-NEXT: li a0, 257
3151 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
3152 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
3154 %v = call <16 x i16> @llvm.vp.ctlz.v16i16(<16 x i16> %va, i1 true, <16 x i1> %m, i32 %evl)
3158 define <16 x i16> @vp_ctlz_zero_undef_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
3159 ; CHECK-LABEL: vp_ctlz_zero_undef_v16i16_unmasked:
3161 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3162 ; CHECK-NEXT: vsrl.vi v10, v8, 1
3163 ; CHECK-NEXT: vor.vv v8, v8, v10
3164 ; CHECK-NEXT: vsrl.vi v10, v8, 2
3165 ; CHECK-NEXT: vor.vv v8, v8, v10
3166 ; CHECK-NEXT: vsrl.vi v10, v8, 4
3167 ; CHECK-NEXT: vor.vv v8, v8, v10
3168 ; CHECK-NEXT: vsrl.vi v10, v8, 8
3169 ; CHECK-NEXT: vor.vv v8, v8, v10
3170 ; CHECK-NEXT: vnot.v v8, v8
3171 ; CHECK-NEXT: vsrl.vi v10, v8, 1
3172 ; CHECK-NEXT: lui a0, 5
3173 ; CHECK-NEXT: addi a0, a0, 1365
3174 ; CHECK-NEXT: vand.vx v10, v10, a0
3175 ; CHECK-NEXT: vsub.vv v8, v8, v10
3176 ; CHECK-NEXT: lui a0, 3
3177 ; CHECK-NEXT: addi a0, a0, 819
3178 ; CHECK-NEXT: vand.vx v10, v8, a0
3179 ; CHECK-NEXT: vsrl.vi v8, v8, 2
3180 ; CHECK-NEXT: vand.vx v8, v8, a0
3181 ; CHECK-NEXT: vadd.vv v8, v10, v8
3182 ; CHECK-NEXT: vsrl.vi v10, v8, 4
3183 ; CHECK-NEXT: vadd.vv v8, v8, v10
3184 ; CHECK-NEXT: lui a0, 1
3185 ; CHECK-NEXT: addi a0, a0, -241
3186 ; CHECK-NEXT: vand.vx v8, v8, a0
3187 ; CHECK-NEXT: li a0, 257
3188 ; CHECK-NEXT: vmul.vx v8, v8, a0
3189 ; CHECK-NEXT: vsrl.vi v8, v8, 8
3191 %v = call <16 x i16> @llvm.vp.ctlz.v16i16(<16 x i16> %va, i1 true, <16 x i1> splat (i1 true), i32 %evl)
3195 define <2 x i32> @vp_ctlz_zero_undef_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
3196 ; CHECK-LABEL: vp_ctlz_zero_undef_v2i32:
3198 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3199 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
3200 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3201 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
3202 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3203 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
3204 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3205 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
3206 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3207 ; CHECK-NEXT: vsrl.vi v9, v8, 16, v0.t
3208 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3209 ; CHECK-NEXT: vnot.v v8, v8, v0.t
3210 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
3211 ; CHECK-NEXT: lui a0, 349525
3212 ; CHECK-NEXT: addi a0, a0, 1365
3213 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
3214 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
3215 ; CHECK-NEXT: lui a0, 209715
3216 ; CHECK-NEXT: addi a0, a0, 819
3217 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
3218 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
3219 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3220 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
3221 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
3222 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
3223 ; CHECK-NEXT: lui a0, 61681
3224 ; CHECK-NEXT: addi a0, a0, -241
3225 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3226 ; CHECK-NEXT: lui a0, 4112
3227 ; CHECK-NEXT: addi a0, a0, 257
3228 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
3229 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
3231 %v = call <2 x i32> @llvm.vp.ctlz.v2i32(<2 x i32> %va, i1 true, <2 x i1> %m, i32 %evl)
3235 define <2 x i32> @vp_ctlz_zero_undef_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
3236 ; CHECK-LABEL: vp_ctlz_zero_undef_v2i32_unmasked:
3238 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3239 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3240 ; CHECK-NEXT: vor.vv v8, v8, v9
3241 ; CHECK-NEXT: vsrl.vi v9, v8, 2
3242 ; CHECK-NEXT: vor.vv v8, v8, v9
3243 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3244 ; CHECK-NEXT: vor.vv v8, v8, v9
3245 ; CHECK-NEXT: vsrl.vi v9, v8, 8
3246 ; CHECK-NEXT: vor.vv v8, v8, v9
3247 ; CHECK-NEXT: vsrl.vi v9, v8, 16
3248 ; CHECK-NEXT: vor.vv v8, v8, v9
3249 ; CHECK-NEXT: vnot.v v8, v8
3250 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3251 ; CHECK-NEXT: lui a0, 349525
3252 ; CHECK-NEXT: addi a0, a0, 1365
3253 ; CHECK-NEXT: vand.vx v9, v9, a0
3254 ; CHECK-NEXT: vsub.vv v8, v8, v9
3255 ; CHECK-NEXT: lui a0, 209715
3256 ; CHECK-NEXT: addi a0, a0, 819
3257 ; CHECK-NEXT: vand.vx v9, v8, a0
3258 ; CHECK-NEXT: vsrl.vi v8, v8, 2
3259 ; CHECK-NEXT: vand.vx v8, v8, a0
3260 ; CHECK-NEXT: vadd.vv v8, v9, v8
3261 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3262 ; CHECK-NEXT: vadd.vv v8, v8, v9
3263 ; CHECK-NEXT: lui a0, 61681
3264 ; CHECK-NEXT: addi a0, a0, -241
3265 ; CHECK-NEXT: vand.vx v8, v8, a0
3266 ; CHECK-NEXT: lui a0, 4112
3267 ; CHECK-NEXT: addi a0, a0, 257
3268 ; CHECK-NEXT: vmul.vx v8, v8, a0
3269 ; CHECK-NEXT: vsrl.vi v8, v8, 24
3271 %v = call <2 x i32> @llvm.vp.ctlz.v2i32(<2 x i32> %va, i1 true, <2 x i1> splat (i1 true), i32 %evl)
3275 define <4 x i32> @vp_ctlz_zero_undef_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
3276 ; CHECK-LABEL: vp_ctlz_zero_undef_v4i32:
3278 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
3279 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
3280 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3281 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
3282 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3283 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
3284 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3285 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
3286 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3287 ; CHECK-NEXT: vsrl.vi v9, v8, 16, v0.t
3288 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
3289 ; CHECK-NEXT: vnot.v v8, v8, v0.t
3290 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
3291 ; CHECK-NEXT: lui a0, 349525
3292 ; CHECK-NEXT: addi a0, a0, 1365
3293 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
3294 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
3295 ; CHECK-NEXT: lui a0, 209715
3296 ; CHECK-NEXT: addi a0, a0, 819
3297 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
3298 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
3299 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3300 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
3301 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
3302 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
3303 ; CHECK-NEXT: lui a0, 61681
3304 ; CHECK-NEXT: addi a0, a0, -241
3305 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3306 ; CHECK-NEXT: lui a0, 4112
3307 ; CHECK-NEXT: addi a0, a0, 257
3308 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
3309 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
3311 %v = call <4 x i32> @llvm.vp.ctlz.v4i32(<4 x i32> %va, i1 true, <4 x i1> %m, i32 %evl)
3315 define <4 x i32> @vp_ctlz_zero_undef_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
3316 ; CHECK-LABEL: vp_ctlz_zero_undef_v4i32_unmasked:
3318 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
3319 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3320 ; CHECK-NEXT: vor.vv v8, v8, v9
3321 ; CHECK-NEXT: vsrl.vi v9, v8, 2
3322 ; CHECK-NEXT: vor.vv v8, v8, v9
3323 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3324 ; CHECK-NEXT: vor.vv v8, v8, v9
3325 ; CHECK-NEXT: vsrl.vi v9, v8, 8
3326 ; CHECK-NEXT: vor.vv v8, v8, v9
3327 ; CHECK-NEXT: vsrl.vi v9, v8, 16
3328 ; CHECK-NEXT: vor.vv v8, v8, v9
3329 ; CHECK-NEXT: vnot.v v8, v8
3330 ; CHECK-NEXT: vsrl.vi v9, v8, 1
3331 ; CHECK-NEXT: lui a0, 349525
3332 ; CHECK-NEXT: addi a0, a0, 1365
3333 ; CHECK-NEXT: vand.vx v9, v9, a0
3334 ; CHECK-NEXT: vsub.vv v8, v8, v9
3335 ; CHECK-NEXT: lui a0, 209715
3336 ; CHECK-NEXT: addi a0, a0, 819
3337 ; CHECK-NEXT: vand.vx v9, v8, a0
3338 ; CHECK-NEXT: vsrl.vi v8, v8, 2
3339 ; CHECK-NEXT: vand.vx v8, v8, a0
3340 ; CHECK-NEXT: vadd.vv v8, v9, v8
3341 ; CHECK-NEXT: vsrl.vi v9, v8, 4
3342 ; CHECK-NEXT: vadd.vv v8, v8, v9
3343 ; CHECK-NEXT: lui a0, 61681
3344 ; CHECK-NEXT: addi a0, a0, -241
3345 ; CHECK-NEXT: vand.vx v8, v8, a0
3346 ; CHECK-NEXT: lui a0, 4112
3347 ; CHECK-NEXT: addi a0, a0, 257
3348 ; CHECK-NEXT: vmul.vx v8, v8, a0
3349 ; CHECK-NEXT: vsrl.vi v8, v8, 24
3351 %v = call <4 x i32> @llvm.vp.ctlz.v4i32(<4 x i32> %va, i1 true, <4 x i1> splat (i1 true), i32 %evl)
3355 define <8 x i32> @vp_ctlz_zero_undef_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
3356 ; CHECK-LABEL: vp_ctlz_zero_undef_v8i32:
3358 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3359 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
3360 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3361 ; CHECK-NEXT: vsrl.vi v10, v8, 2, v0.t
3362 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3363 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
3364 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3365 ; CHECK-NEXT: vsrl.vi v10, v8, 8, v0.t
3366 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3367 ; CHECK-NEXT: vsrl.vi v10, v8, 16, v0.t
3368 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
3369 ; CHECK-NEXT: vnot.v v8, v8, v0.t
3370 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
3371 ; CHECK-NEXT: lui a0, 349525
3372 ; CHECK-NEXT: addi a0, a0, 1365
3373 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
3374 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
3375 ; CHECK-NEXT: lui a0, 209715
3376 ; CHECK-NEXT: addi a0, a0, 819
3377 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
3378 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
3379 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3380 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
3381 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
3382 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
3383 ; CHECK-NEXT: lui a0, 61681
3384 ; CHECK-NEXT: addi a0, a0, -241
3385 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3386 ; CHECK-NEXT: lui a0, 4112
3387 ; CHECK-NEXT: addi a0, a0, 257
3388 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
3389 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
3391 %v = call <8 x i32> @llvm.vp.ctlz.v8i32(<8 x i32> %va, i1 true, <8 x i1> %m, i32 %evl)
3395 define <8 x i32> @vp_ctlz_zero_undef_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
3396 ; CHECK-LABEL: vp_ctlz_zero_undef_v8i32_unmasked:
3398 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3399 ; CHECK-NEXT: vsrl.vi v10, v8, 1
3400 ; CHECK-NEXT: vor.vv v8, v8, v10
3401 ; CHECK-NEXT: vsrl.vi v10, v8, 2
3402 ; CHECK-NEXT: vor.vv v8, v8, v10
3403 ; CHECK-NEXT: vsrl.vi v10, v8, 4
3404 ; CHECK-NEXT: vor.vv v8, v8, v10
3405 ; CHECK-NEXT: vsrl.vi v10, v8, 8
3406 ; CHECK-NEXT: vor.vv v8, v8, v10
3407 ; CHECK-NEXT: vsrl.vi v10, v8, 16
3408 ; CHECK-NEXT: vor.vv v8, v8, v10
3409 ; CHECK-NEXT: vnot.v v8, v8
3410 ; CHECK-NEXT: vsrl.vi v10, v8, 1
3411 ; CHECK-NEXT: lui a0, 349525
3412 ; CHECK-NEXT: addi a0, a0, 1365
3413 ; CHECK-NEXT: vand.vx v10, v10, a0
3414 ; CHECK-NEXT: vsub.vv v8, v8, v10
3415 ; CHECK-NEXT: lui a0, 209715
3416 ; CHECK-NEXT: addi a0, a0, 819
3417 ; CHECK-NEXT: vand.vx v10, v8, a0
3418 ; CHECK-NEXT: vsrl.vi v8, v8, 2
3419 ; CHECK-NEXT: vand.vx v8, v8, a0
3420 ; CHECK-NEXT: vadd.vv v8, v10, v8
3421 ; CHECK-NEXT: vsrl.vi v10, v8, 4
3422 ; CHECK-NEXT: vadd.vv v8, v8, v10
3423 ; CHECK-NEXT: lui a0, 61681
3424 ; CHECK-NEXT: addi a0, a0, -241
3425 ; CHECK-NEXT: vand.vx v8, v8, a0
3426 ; CHECK-NEXT: lui a0, 4112
3427 ; CHECK-NEXT: addi a0, a0, 257
3428 ; CHECK-NEXT: vmul.vx v8, v8, a0
3429 ; CHECK-NEXT: vsrl.vi v8, v8, 24
3431 %v = call <8 x i32> @llvm.vp.ctlz.v8i32(<8 x i32> %va, i1 true, <8 x i1> splat (i1 true), i32 %evl)
3435 define <16 x i32> @vp_ctlz_zero_undef_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
3436 ; CHECK-LABEL: vp_ctlz_zero_undef_v16i32:
3438 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
3439 ; CHECK-NEXT: vsrl.vi v12, v8, 1, v0.t
3440 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
3441 ; CHECK-NEXT: vsrl.vi v12, v8, 2, v0.t
3442 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
3443 ; CHECK-NEXT: vsrl.vi v12, v8, 4, v0.t
3444 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
3445 ; CHECK-NEXT: vsrl.vi v12, v8, 8, v0.t
3446 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
3447 ; CHECK-NEXT: vsrl.vi v12, v8, 16, v0.t
3448 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
3449 ; CHECK-NEXT: vnot.v v8, v8, v0.t
3450 ; CHECK-NEXT: vsrl.vi v12, v8, 1, v0.t
3451 ; CHECK-NEXT: lui a0, 349525
3452 ; CHECK-NEXT: addi a0, a0, 1365
3453 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
3454 ; CHECK-NEXT: vsub.vv v8, v8, v12, v0.t
3455 ; CHECK-NEXT: lui a0, 209715
3456 ; CHECK-NEXT: addi a0, a0, 819
3457 ; CHECK-NEXT: vand.vx v12, v8, a0, v0.t
3458 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
3459 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3460 ; CHECK-NEXT: vadd.vv v8, v12, v8, v0.t
3461 ; CHECK-NEXT: vsrl.vi v12, v8, 4, v0.t
3462 ; CHECK-NEXT: vadd.vv v8, v8, v12, v0.t
3463 ; CHECK-NEXT: lui a0, 61681
3464 ; CHECK-NEXT: addi a0, a0, -241
3465 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
3466 ; CHECK-NEXT: lui a0, 4112
3467 ; CHECK-NEXT: addi a0, a0, 257
3468 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
3469 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
3471 %v = call <16 x i32> @llvm.vp.ctlz.v16i32(<16 x i32> %va, i1 true, <16 x i1> %m, i32 %evl)
3475 define <16 x i32> @vp_ctlz_zero_undef_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
3476 ; CHECK-LABEL: vp_ctlz_zero_undef_v16i32_unmasked:
3478 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
3479 ; CHECK-NEXT: vsrl.vi v12, v8, 1
3480 ; CHECK-NEXT: vor.vv v8, v8, v12
3481 ; CHECK-NEXT: vsrl.vi v12, v8, 2
3482 ; CHECK-NEXT: vor.vv v8, v8, v12
3483 ; CHECK-NEXT: vsrl.vi v12, v8, 4
3484 ; CHECK-NEXT: vor.vv v8, v8, v12
3485 ; CHECK-NEXT: vsrl.vi v12, v8, 8
3486 ; CHECK-NEXT: vor.vv v8, v8, v12
3487 ; CHECK-NEXT: vsrl.vi v12, v8, 16
3488 ; CHECK-NEXT: vor.vv v8, v8, v12
3489 ; CHECK-NEXT: vnot.v v8, v8
3490 ; CHECK-NEXT: vsrl.vi v12, v8, 1
3491 ; CHECK-NEXT: lui a0, 349525
3492 ; CHECK-NEXT: addi a0, a0, 1365
3493 ; CHECK-NEXT: vand.vx v12, v12, a0
3494 ; CHECK-NEXT: vsub.vv v8, v8, v12
3495 ; CHECK-NEXT: lui a0, 209715
3496 ; CHECK-NEXT: addi a0, a0, 819
3497 ; CHECK-NEXT: vand.vx v12, v8, a0
3498 ; CHECK-NEXT: vsrl.vi v8, v8, 2
3499 ; CHECK-NEXT: vand.vx v8, v8, a0
3500 ; CHECK-NEXT: vadd.vv v8, v12, v8
3501 ; CHECK-NEXT: vsrl.vi v12, v8, 4
3502 ; CHECK-NEXT: vadd.vv v8, v8, v12
3503 ; CHECK-NEXT: lui a0, 61681
3504 ; CHECK-NEXT: addi a0, a0, -241
3505 ; CHECK-NEXT: vand.vx v8, v8, a0
3506 ; CHECK-NEXT: lui a0, 4112
3507 ; CHECK-NEXT: addi a0, a0, 257
3508 ; CHECK-NEXT: vmul.vx v8, v8, a0
3509 ; CHECK-NEXT: vsrl.vi v8, v8, 24
3511 %v = call <16 x i32> @llvm.vp.ctlz.v16i32(<16 x i32> %va, i1 true, <16 x i1> splat (i1 true), i32 %evl)
3515 define <2 x i64> @vp_ctlz_zero_undef_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
3516 ; RV32-LABEL: vp_ctlz_zero_undef_v2i64:
3518 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3519 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
3520 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
3521 ; RV32-NEXT: vsrl.vi v9, v8, 2, v0.t
3522 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
3523 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
3524 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
3525 ; RV32-NEXT: vsrl.vi v9, v8, 8, v0.t
3526 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
3527 ; RV32-NEXT: vsrl.vi v9, v8, 16, v0.t
3528 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
3529 ; RV32-NEXT: li a1, 32
3530 ; RV32-NEXT: vsrl.vx v9, v8, a1, v0.t
3531 ; RV32-NEXT: vor.vv v8, v8, v9, v0.t
3532 ; RV32-NEXT: vnot.v v8, v8, v0.t
3533 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
3534 ; RV32-NEXT: lui a1, 349525
3535 ; RV32-NEXT: addi a1, a1, 1365
3536 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3537 ; RV32-NEXT: vmv.v.x v10, a1
3538 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3539 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
3540 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
3541 ; RV32-NEXT: lui a1, 209715
3542 ; RV32-NEXT: addi a1, a1, 819
3543 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3544 ; RV32-NEXT: vmv.v.x v9, a1
3545 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3546 ; RV32-NEXT: vand.vv v10, v8, v9, v0.t
3547 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3548 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3549 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
3550 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
3551 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
3552 ; RV32-NEXT: lui a1, 61681
3553 ; RV32-NEXT: addi a1, a1, -241
3554 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3555 ; RV32-NEXT: vmv.v.x v9, a1
3556 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3557 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3558 ; RV32-NEXT: lui a1, 4112
3559 ; RV32-NEXT: addi a1, a1, 257
3560 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3561 ; RV32-NEXT: vmv.v.x v9, a1
3562 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3563 ; RV32-NEXT: vmul.vv v8, v8, v9, v0.t
3564 ; RV32-NEXT: li a0, 56
3565 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3568 ; RV64-LABEL: vp_ctlz_zero_undef_v2i64:
3570 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3571 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
3572 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
3573 ; RV64-NEXT: vsrl.vi v9, v8, 2, v0.t
3574 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
3575 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
3576 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
3577 ; RV64-NEXT: vsrl.vi v9, v8, 8, v0.t
3578 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
3579 ; RV64-NEXT: vsrl.vi v9, v8, 16, v0.t
3580 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
3581 ; RV64-NEXT: li a0, 32
3582 ; RV64-NEXT: vsrl.vx v9, v8, a0, v0.t
3583 ; RV64-NEXT: vor.vv v8, v8, v9, v0.t
3584 ; RV64-NEXT: vnot.v v8, v8, v0.t
3585 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
3586 ; RV64-NEXT: lui a0, 349525
3587 ; RV64-NEXT: addiw a0, a0, 1365
3588 ; RV64-NEXT: slli a1, a0, 32
3589 ; RV64-NEXT: add a0, a0, a1
3590 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
3591 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
3592 ; RV64-NEXT: lui a0, 209715
3593 ; RV64-NEXT: addiw a0, a0, 819
3594 ; RV64-NEXT: slli a1, a0, 32
3595 ; RV64-NEXT: add a0, a0, a1
3596 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
3597 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3598 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3599 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
3600 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
3601 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
3602 ; RV64-NEXT: lui a0, 61681
3603 ; RV64-NEXT: addiw a0, a0, -241
3604 ; RV64-NEXT: slli a1, a0, 32
3605 ; RV64-NEXT: add a0, a0, a1
3606 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3607 ; RV64-NEXT: lui a0, 4112
3608 ; RV64-NEXT: addiw a0, a0, 257
3609 ; RV64-NEXT: slli a1, a0, 32
3610 ; RV64-NEXT: add a0, a0, a1
3611 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3612 ; RV64-NEXT: li a0, 56
3613 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3615 %v = call <2 x i64> @llvm.vp.ctlz.v2i64(<2 x i64> %va, i1 true, <2 x i1> %m, i32 %evl)
3619 define <2 x i64> @vp_ctlz_zero_undef_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
3620 ; RV32-LABEL: vp_ctlz_zero_undef_v2i64_unmasked:
3622 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3623 ; RV32-NEXT: vsrl.vi v9, v8, 1
3624 ; RV32-NEXT: vor.vv v8, v8, v9
3625 ; RV32-NEXT: vsrl.vi v9, v8, 2
3626 ; RV32-NEXT: vor.vv v8, v8, v9
3627 ; RV32-NEXT: vsrl.vi v9, v8, 4
3628 ; RV32-NEXT: vor.vv v8, v8, v9
3629 ; RV32-NEXT: vsrl.vi v9, v8, 8
3630 ; RV32-NEXT: vor.vv v8, v8, v9
3631 ; RV32-NEXT: vsrl.vi v9, v8, 16
3632 ; RV32-NEXT: vor.vv v8, v8, v9
3633 ; RV32-NEXT: li a1, 32
3634 ; RV32-NEXT: vsrl.vx v9, v8, a1
3635 ; RV32-NEXT: vor.vv v8, v8, v9
3636 ; RV32-NEXT: vnot.v v8, v8
3637 ; RV32-NEXT: vsrl.vi v9, v8, 1
3638 ; RV32-NEXT: lui a1, 349525
3639 ; RV32-NEXT: addi a1, a1, 1365
3640 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3641 ; RV32-NEXT: vmv.v.x v10, a1
3642 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3643 ; RV32-NEXT: vand.vv v9, v9, v10
3644 ; RV32-NEXT: vsub.vv v8, v8, v9
3645 ; RV32-NEXT: lui a1, 209715
3646 ; RV32-NEXT: addi a1, a1, 819
3647 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3648 ; RV32-NEXT: vmv.v.x v9, a1
3649 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3650 ; RV32-NEXT: vand.vv v10, v8, v9
3651 ; RV32-NEXT: vsrl.vi v8, v8, 2
3652 ; RV32-NEXT: vand.vv v8, v8, v9
3653 ; RV32-NEXT: vadd.vv v8, v10, v8
3654 ; RV32-NEXT: vsrl.vi v9, v8, 4
3655 ; RV32-NEXT: vadd.vv v8, v8, v9
3656 ; RV32-NEXT: lui a1, 61681
3657 ; RV32-NEXT: addi a1, a1, -241
3658 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3659 ; RV32-NEXT: vmv.v.x v9, a1
3660 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3661 ; RV32-NEXT: vand.vv v8, v8, v9
3662 ; RV32-NEXT: lui a1, 4112
3663 ; RV32-NEXT: addi a1, a1, 257
3664 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3665 ; RV32-NEXT: vmv.v.x v9, a1
3666 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3667 ; RV32-NEXT: vmul.vv v8, v8, v9
3668 ; RV32-NEXT: li a0, 56
3669 ; RV32-NEXT: vsrl.vx v8, v8, a0
3672 ; RV64-LABEL: vp_ctlz_zero_undef_v2i64_unmasked:
3674 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3675 ; RV64-NEXT: vsrl.vi v9, v8, 1
3676 ; RV64-NEXT: vor.vv v8, v8, v9
3677 ; RV64-NEXT: vsrl.vi v9, v8, 2
3678 ; RV64-NEXT: vor.vv v8, v8, v9
3679 ; RV64-NEXT: vsrl.vi v9, v8, 4
3680 ; RV64-NEXT: vor.vv v8, v8, v9
3681 ; RV64-NEXT: vsrl.vi v9, v8, 8
3682 ; RV64-NEXT: vor.vv v8, v8, v9
3683 ; RV64-NEXT: vsrl.vi v9, v8, 16
3684 ; RV64-NEXT: vor.vv v8, v8, v9
3685 ; RV64-NEXT: li a0, 32
3686 ; RV64-NEXT: vsrl.vx v9, v8, a0
3687 ; RV64-NEXT: vor.vv v8, v8, v9
3688 ; RV64-NEXT: vnot.v v8, v8
3689 ; RV64-NEXT: vsrl.vi v9, v8, 1
3690 ; RV64-NEXT: lui a0, 349525
3691 ; RV64-NEXT: addiw a0, a0, 1365
3692 ; RV64-NEXT: slli a1, a0, 32
3693 ; RV64-NEXT: add a0, a0, a1
3694 ; RV64-NEXT: vand.vx v9, v9, a0
3695 ; RV64-NEXT: vsub.vv v8, v8, v9
3696 ; RV64-NEXT: lui a0, 209715
3697 ; RV64-NEXT: addiw a0, a0, 819
3698 ; RV64-NEXT: slli a1, a0, 32
3699 ; RV64-NEXT: add a0, a0, a1
3700 ; RV64-NEXT: vand.vx v9, v8, a0
3701 ; RV64-NEXT: vsrl.vi v8, v8, 2
3702 ; RV64-NEXT: vand.vx v8, v8, a0
3703 ; RV64-NEXT: vadd.vv v8, v9, v8
3704 ; RV64-NEXT: vsrl.vi v9, v8, 4
3705 ; RV64-NEXT: vadd.vv v8, v8, v9
3706 ; RV64-NEXT: lui a0, 61681
3707 ; RV64-NEXT: addiw a0, a0, -241
3708 ; RV64-NEXT: slli a1, a0, 32
3709 ; RV64-NEXT: add a0, a0, a1
3710 ; RV64-NEXT: vand.vx v8, v8, a0
3711 ; RV64-NEXT: lui a0, 4112
3712 ; RV64-NEXT: addiw a0, a0, 257
3713 ; RV64-NEXT: slli a1, a0, 32
3714 ; RV64-NEXT: add a0, a0, a1
3715 ; RV64-NEXT: vmul.vx v8, v8, a0
3716 ; RV64-NEXT: li a0, 56
3717 ; RV64-NEXT: vsrl.vx v8, v8, a0
3719 %v = call <2 x i64> @llvm.vp.ctlz.v2i64(<2 x i64> %va, i1 true, <2 x i1> splat (i1 true), i32 %evl)
3723 define <4 x i64> @vp_ctlz_zero_undef_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
3724 ; RV32-LABEL: vp_ctlz_zero_undef_v4i64:
3726 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3727 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
3728 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
3729 ; RV32-NEXT: vsrl.vi v10, v8, 2, v0.t
3730 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
3731 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
3732 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
3733 ; RV32-NEXT: vsrl.vi v10, v8, 8, v0.t
3734 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
3735 ; RV32-NEXT: vsrl.vi v10, v8, 16, v0.t
3736 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
3737 ; RV32-NEXT: li a1, 32
3738 ; RV32-NEXT: vsrl.vx v10, v8, a1, v0.t
3739 ; RV32-NEXT: vor.vv v8, v8, v10, v0.t
3740 ; RV32-NEXT: vnot.v v8, v8, v0.t
3741 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
3742 ; RV32-NEXT: lui a1, 349525
3743 ; RV32-NEXT: addi a1, a1, 1365
3744 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3745 ; RV32-NEXT: vmv.v.x v12, a1
3746 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3747 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
3748 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
3749 ; RV32-NEXT: lui a1, 209715
3750 ; RV32-NEXT: addi a1, a1, 819
3751 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3752 ; RV32-NEXT: vmv.v.x v10, a1
3753 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3754 ; RV32-NEXT: vand.vv v12, v8, v10, v0.t
3755 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3756 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3757 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
3758 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
3759 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
3760 ; RV32-NEXT: lui a1, 61681
3761 ; RV32-NEXT: addi a1, a1, -241
3762 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3763 ; RV32-NEXT: vmv.v.x v10, a1
3764 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3765 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3766 ; RV32-NEXT: lui a1, 4112
3767 ; RV32-NEXT: addi a1, a1, 257
3768 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3769 ; RV32-NEXT: vmv.v.x v10, a1
3770 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3771 ; RV32-NEXT: vmul.vv v8, v8, v10, v0.t
3772 ; RV32-NEXT: li a0, 56
3773 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3776 ; RV64-LABEL: vp_ctlz_zero_undef_v4i64:
3778 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3779 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
3780 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
3781 ; RV64-NEXT: vsrl.vi v10, v8, 2, v0.t
3782 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
3783 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
3784 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
3785 ; RV64-NEXT: vsrl.vi v10, v8, 8, v0.t
3786 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
3787 ; RV64-NEXT: vsrl.vi v10, v8, 16, v0.t
3788 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
3789 ; RV64-NEXT: li a0, 32
3790 ; RV64-NEXT: vsrl.vx v10, v8, a0, v0.t
3791 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
3792 ; RV64-NEXT: vnot.v v8, v8, v0.t
3793 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
3794 ; RV64-NEXT: lui a0, 349525
3795 ; RV64-NEXT: addiw a0, a0, 1365
3796 ; RV64-NEXT: slli a1, a0, 32
3797 ; RV64-NEXT: add a0, a0, a1
3798 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
3799 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
3800 ; RV64-NEXT: lui a0, 209715
3801 ; RV64-NEXT: addiw a0, a0, 819
3802 ; RV64-NEXT: slli a1, a0, 32
3803 ; RV64-NEXT: add a0, a0, a1
3804 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
3805 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3806 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3807 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
3808 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
3809 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
3810 ; RV64-NEXT: lui a0, 61681
3811 ; RV64-NEXT: addiw a0, a0, -241
3812 ; RV64-NEXT: slli a1, a0, 32
3813 ; RV64-NEXT: add a0, a0, a1
3814 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3815 ; RV64-NEXT: lui a0, 4112
3816 ; RV64-NEXT: addiw a0, a0, 257
3817 ; RV64-NEXT: slli a1, a0, 32
3818 ; RV64-NEXT: add a0, a0, a1
3819 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3820 ; RV64-NEXT: li a0, 56
3821 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3823 %v = call <4 x i64> @llvm.vp.ctlz.v4i64(<4 x i64> %va, i1 true, <4 x i1> %m, i32 %evl)
3827 define <4 x i64> @vp_ctlz_zero_undef_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
3828 ; RV32-LABEL: vp_ctlz_zero_undef_v4i64_unmasked:
3830 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3831 ; RV32-NEXT: vsrl.vi v10, v8, 1
3832 ; RV32-NEXT: vor.vv v8, v8, v10
3833 ; RV32-NEXT: vsrl.vi v10, v8, 2
3834 ; RV32-NEXT: vor.vv v8, v8, v10
3835 ; RV32-NEXT: vsrl.vi v10, v8, 4
3836 ; RV32-NEXT: vor.vv v8, v8, v10
3837 ; RV32-NEXT: vsrl.vi v10, v8, 8
3838 ; RV32-NEXT: vor.vv v8, v8, v10
3839 ; RV32-NEXT: vsrl.vi v10, v8, 16
3840 ; RV32-NEXT: vor.vv v8, v8, v10
3841 ; RV32-NEXT: li a1, 32
3842 ; RV32-NEXT: vsrl.vx v10, v8, a1
3843 ; RV32-NEXT: vor.vv v8, v8, v10
3844 ; RV32-NEXT: vnot.v v8, v8
3845 ; RV32-NEXT: vsrl.vi v10, v8, 1
3846 ; RV32-NEXT: lui a1, 349525
3847 ; RV32-NEXT: addi a1, a1, 1365
3848 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3849 ; RV32-NEXT: vmv.v.x v12, a1
3850 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3851 ; RV32-NEXT: vand.vv v10, v10, v12
3852 ; RV32-NEXT: vsub.vv v8, v8, v10
3853 ; RV32-NEXT: lui a1, 209715
3854 ; RV32-NEXT: addi a1, a1, 819
3855 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3856 ; RV32-NEXT: vmv.v.x v10, a1
3857 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3858 ; RV32-NEXT: vand.vv v12, v8, v10
3859 ; RV32-NEXT: vsrl.vi v8, v8, 2
3860 ; RV32-NEXT: vand.vv v8, v8, v10
3861 ; RV32-NEXT: vadd.vv v8, v12, v8
3862 ; RV32-NEXT: vsrl.vi v10, v8, 4
3863 ; RV32-NEXT: vadd.vv v8, v8, v10
3864 ; RV32-NEXT: lui a1, 61681
3865 ; RV32-NEXT: addi a1, a1, -241
3866 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3867 ; RV32-NEXT: vmv.v.x v10, a1
3868 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3869 ; RV32-NEXT: vand.vv v8, v8, v10
3870 ; RV32-NEXT: lui a1, 4112
3871 ; RV32-NEXT: addi a1, a1, 257
3872 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3873 ; RV32-NEXT: vmv.v.x v10, a1
3874 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3875 ; RV32-NEXT: vmul.vv v8, v8, v10
3876 ; RV32-NEXT: li a0, 56
3877 ; RV32-NEXT: vsrl.vx v8, v8, a0
3880 ; RV64-LABEL: vp_ctlz_zero_undef_v4i64_unmasked:
3882 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3883 ; RV64-NEXT: vsrl.vi v10, v8, 1
3884 ; RV64-NEXT: vor.vv v8, v8, v10
3885 ; RV64-NEXT: vsrl.vi v10, v8, 2
3886 ; RV64-NEXT: vor.vv v8, v8, v10
3887 ; RV64-NEXT: vsrl.vi v10, v8, 4
3888 ; RV64-NEXT: vor.vv v8, v8, v10
3889 ; RV64-NEXT: vsrl.vi v10, v8, 8
3890 ; RV64-NEXT: vor.vv v8, v8, v10
3891 ; RV64-NEXT: vsrl.vi v10, v8, 16
3892 ; RV64-NEXT: vor.vv v8, v8, v10
3893 ; RV64-NEXT: li a0, 32
3894 ; RV64-NEXT: vsrl.vx v10, v8, a0
3895 ; RV64-NEXT: vor.vv v8, v8, v10
3896 ; RV64-NEXT: vnot.v v8, v8
3897 ; RV64-NEXT: vsrl.vi v10, v8, 1
3898 ; RV64-NEXT: lui a0, 349525
3899 ; RV64-NEXT: addiw a0, a0, 1365
3900 ; RV64-NEXT: slli a1, a0, 32
3901 ; RV64-NEXT: add a0, a0, a1
3902 ; RV64-NEXT: vand.vx v10, v10, a0
3903 ; RV64-NEXT: vsub.vv v8, v8, v10
3904 ; RV64-NEXT: lui a0, 209715
3905 ; RV64-NEXT: addiw a0, a0, 819
3906 ; RV64-NEXT: slli a1, a0, 32
3907 ; RV64-NEXT: add a0, a0, a1
3908 ; RV64-NEXT: vand.vx v10, v8, a0
3909 ; RV64-NEXT: vsrl.vi v8, v8, 2
3910 ; RV64-NEXT: vand.vx v8, v8, a0
3911 ; RV64-NEXT: vadd.vv v8, v10, v8
3912 ; RV64-NEXT: vsrl.vi v10, v8, 4
3913 ; RV64-NEXT: vadd.vv v8, v8, v10
3914 ; RV64-NEXT: lui a0, 61681
3915 ; RV64-NEXT: addiw a0, a0, -241
3916 ; RV64-NEXT: slli a1, a0, 32
3917 ; RV64-NEXT: add a0, a0, a1
3918 ; RV64-NEXT: vand.vx v8, v8, a0
3919 ; RV64-NEXT: lui a0, 4112
3920 ; RV64-NEXT: addiw a0, a0, 257
3921 ; RV64-NEXT: slli a1, a0, 32
3922 ; RV64-NEXT: add a0, a0, a1
3923 ; RV64-NEXT: vmul.vx v8, v8, a0
3924 ; RV64-NEXT: li a0, 56
3925 ; RV64-NEXT: vsrl.vx v8, v8, a0
3927 %v = call <4 x i64> @llvm.vp.ctlz.v4i64(<4 x i64> %va, i1 true, <4 x i1> splat (i1 true), i32 %evl)
3931 define <8 x i64> @vp_ctlz_zero_undef_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
3932 ; RV32-LABEL: vp_ctlz_zero_undef_v8i64:
3934 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3935 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
3936 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
3937 ; RV32-NEXT: vsrl.vi v12, v8, 2, v0.t
3938 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
3939 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
3940 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
3941 ; RV32-NEXT: vsrl.vi v12, v8, 8, v0.t
3942 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
3943 ; RV32-NEXT: vsrl.vi v12, v8, 16, v0.t
3944 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
3945 ; RV32-NEXT: li a1, 32
3946 ; RV32-NEXT: vsrl.vx v12, v8, a1, v0.t
3947 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
3948 ; RV32-NEXT: vnot.v v8, v8, v0.t
3949 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
3950 ; RV32-NEXT: lui a1, 349525
3951 ; RV32-NEXT: addi a1, a1, 1365
3952 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
3953 ; RV32-NEXT: vmv.v.x v16, a1
3954 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3955 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
3956 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
3957 ; RV32-NEXT: lui a1, 209715
3958 ; RV32-NEXT: addi a1, a1, 819
3959 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
3960 ; RV32-NEXT: vmv.v.x v12, a1
3961 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3962 ; RV32-NEXT: vand.vv v16, v8, v12, v0.t
3963 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3964 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
3965 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
3966 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
3967 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
3968 ; RV32-NEXT: lui a1, 61681
3969 ; RV32-NEXT: addi a1, a1, -241
3970 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
3971 ; RV32-NEXT: vmv.v.x v12, a1
3972 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3973 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
3974 ; RV32-NEXT: lui a1, 4112
3975 ; RV32-NEXT: addi a1, a1, 257
3976 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
3977 ; RV32-NEXT: vmv.v.x v12, a1
3978 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3979 ; RV32-NEXT: vmul.vv v8, v8, v12, v0.t
3980 ; RV32-NEXT: li a0, 56
3981 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3984 ; RV64-LABEL: vp_ctlz_zero_undef_v8i64:
3986 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3987 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
3988 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
3989 ; RV64-NEXT: vsrl.vi v12, v8, 2, v0.t
3990 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
3991 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
3992 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
3993 ; RV64-NEXT: vsrl.vi v12, v8, 8, v0.t
3994 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
3995 ; RV64-NEXT: vsrl.vi v12, v8, 16, v0.t
3996 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
3997 ; RV64-NEXT: li a0, 32
3998 ; RV64-NEXT: vsrl.vx v12, v8, a0, v0.t
3999 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
4000 ; RV64-NEXT: vnot.v v8, v8, v0.t
4001 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
4002 ; RV64-NEXT: lui a0, 349525
4003 ; RV64-NEXT: addiw a0, a0, 1365
4004 ; RV64-NEXT: slli a1, a0, 32
4005 ; RV64-NEXT: add a0, a0, a1
4006 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
4007 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
4008 ; RV64-NEXT: lui a0, 209715
4009 ; RV64-NEXT: addiw a0, a0, 819
4010 ; RV64-NEXT: slli a1, a0, 32
4011 ; RV64-NEXT: add a0, a0, a1
4012 ; RV64-NEXT: vand.vx v12, v8, a0, v0.t
4013 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4014 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4015 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
4016 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
4017 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
4018 ; RV64-NEXT: lui a0, 61681
4019 ; RV64-NEXT: addiw a0, a0, -241
4020 ; RV64-NEXT: slli a1, a0, 32
4021 ; RV64-NEXT: add a0, a0, a1
4022 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4023 ; RV64-NEXT: lui a0, 4112
4024 ; RV64-NEXT: addiw a0, a0, 257
4025 ; RV64-NEXT: slli a1, a0, 32
4026 ; RV64-NEXT: add a0, a0, a1
4027 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
4028 ; RV64-NEXT: li a0, 56
4029 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
4031 %v = call <8 x i64> @llvm.vp.ctlz.v8i64(<8 x i64> %va, i1 true, <8 x i1> %m, i32 %evl)
4035 define <8 x i64> @vp_ctlz_zero_undef_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
4036 ; RV32-LABEL: vp_ctlz_zero_undef_v8i64_unmasked:
4038 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4039 ; RV32-NEXT: vsrl.vi v12, v8, 1
4040 ; RV32-NEXT: vor.vv v8, v8, v12
4041 ; RV32-NEXT: vsrl.vi v12, v8, 2
4042 ; RV32-NEXT: vor.vv v8, v8, v12
4043 ; RV32-NEXT: vsrl.vi v12, v8, 4
4044 ; RV32-NEXT: vor.vv v8, v8, v12
4045 ; RV32-NEXT: vsrl.vi v12, v8, 8
4046 ; RV32-NEXT: vor.vv v8, v8, v12
4047 ; RV32-NEXT: vsrl.vi v12, v8, 16
4048 ; RV32-NEXT: vor.vv v8, v8, v12
4049 ; RV32-NEXT: li a1, 32
4050 ; RV32-NEXT: vsrl.vx v12, v8, a1
4051 ; RV32-NEXT: vor.vv v8, v8, v12
4052 ; RV32-NEXT: vnot.v v8, v8
4053 ; RV32-NEXT: vsrl.vi v12, v8, 1
4054 ; RV32-NEXT: lui a1, 349525
4055 ; RV32-NEXT: addi a1, a1, 1365
4056 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4057 ; RV32-NEXT: vmv.v.x v16, a1
4058 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4059 ; RV32-NEXT: vand.vv v12, v12, v16
4060 ; RV32-NEXT: vsub.vv v8, v8, v12
4061 ; RV32-NEXT: lui a1, 209715
4062 ; RV32-NEXT: addi a1, a1, 819
4063 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4064 ; RV32-NEXT: vmv.v.x v12, a1
4065 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4066 ; RV32-NEXT: vand.vv v16, v8, v12
4067 ; RV32-NEXT: vsrl.vi v8, v8, 2
4068 ; RV32-NEXT: vand.vv v8, v8, v12
4069 ; RV32-NEXT: vadd.vv v8, v16, v8
4070 ; RV32-NEXT: vsrl.vi v12, v8, 4
4071 ; RV32-NEXT: vadd.vv v8, v8, v12
4072 ; RV32-NEXT: lui a1, 61681
4073 ; RV32-NEXT: addi a1, a1, -241
4074 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4075 ; RV32-NEXT: vmv.v.x v12, a1
4076 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4077 ; RV32-NEXT: vand.vv v8, v8, v12
4078 ; RV32-NEXT: lui a1, 4112
4079 ; RV32-NEXT: addi a1, a1, 257
4080 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4081 ; RV32-NEXT: vmv.v.x v12, a1
4082 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4083 ; RV32-NEXT: vmul.vv v8, v8, v12
4084 ; RV32-NEXT: li a0, 56
4085 ; RV32-NEXT: vsrl.vx v8, v8, a0
4088 ; RV64-LABEL: vp_ctlz_zero_undef_v8i64_unmasked:
4090 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4091 ; RV64-NEXT: vsrl.vi v12, v8, 1
4092 ; RV64-NEXT: vor.vv v8, v8, v12
4093 ; RV64-NEXT: vsrl.vi v12, v8, 2
4094 ; RV64-NEXT: vor.vv v8, v8, v12
4095 ; RV64-NEXT: vsrl.vi v12, v8, 4
4096 ; RV64-NEXT: vor.vv v8, v8, v12
4097 ; RV64-NEXT: vsrl.vi v12, v8, 8
4098 ; RV64-NEXT: vor.vv v8, v8, v12
4099 ; RV64-NEXT: vsrl.vi v12, v8, 16
4100 ; RV64-NEXT: vor.vv v8, v8, v12
4101 ; RV64-NEXT: li a0, 32
4102 ; RV64-NEXT: vsrl.vx v12, v8, a0
4103 ; RV64-NEXT: vor.vv v8, v8, v12
4104 ; RV64-NEXT: vnot.v v8, v8
4105 ; RV64-NEXT: vsrl.vi v12, v8, 1
4106 ; RV64-NEXT: lui a0, 349525
4107 ; RV64-NEXT: addiw a0, a0, 1365
4108 ; RV64-NEXT: slli a1, a0, 32
4109 ; RV64-NEXT: add a0, a0, a1
4110 ; RV64-NEXT: vand.vx v12, v12, a0
4111 ; RV64-NEXT: vsub.vv v8, v8, v12
4112 ; RV64-NEXT: lui a0, 209715
4113 ; RV64-NEXT: addiw a0, a0, 819
4114 ; RV64-NEXT: slli a1, a0, 32
4115 ; RV64-NEXT: add a0, a0, a1
4116 ; RV64-NEXT: vand.vx v12, v8, a0
4117 ; RV64-NEXT: vsrl.vi v8, v8, 2
4118 ; RV64-NEXT: vand.vx v8, v8, a0
4119 ; RV64-NEXT: vadd.vv v8, v12, v8
4120 ; RV64-NEXT: vsrl.vi v12, v8, 4
4121 ; RV64-NEXT: vadd.vv v8, v8, v12
4122 ; RV64-NEXT: lui a0, 61681
4123 ; RV64-NEXT: addiw a0, a0, -241
4124 ; RV64-NEXT: slli a1, a0, 32
4125 ; RV64-NEXT: add a0, a0, a1
4126 ; RV64-NEXT: vand.vx v8, v8, a0
4127 ; RV64-NEXT: lui a0, 4112
4128 ; RV64-NEXT: addiw a0, a0, 257
4129 ; RV64-NEXT: slli a1, a0, 32
4130 ; RV64-NEXT: add a0, a0, a1
4131 ; RV64-NEXT: vmul.vx v8, v8, a0
4132 ; RV64-NEXT: li a0, 56
4133 ; RV64-NEXT: vsrl.vx v8, v8, a0
4135 %v = call <8 x i64> @llvm.vp.ctlz.v8i64(<8 x i64> %va, i1 true, <8 x i1> splat (i1 true), i32 %evl)
4139 define <15 x i64> @vp_ctlz_zero_undef_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
4140 ; RV32-LABEL: vp_ctlz_zero_undef_v15i64:
4142 ; RV32-NEXT: addi sp, sp, -48
4143 ; RV32-NEXT: .cfi_def_cfa_offset 48
4144 ; RV32-NEXT: csrr a1, vlenb
4145 ; RV32-NEXT: slli a1, a1, 4
4146 ; RV32-NEXT: sub sp, sp, a1
4147 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 16 * vlenb
4148 ; RV32-NEXT: lui a1, 349525
4149 ; RV32-NEXT: addi a1, a1, 1365
4150 ; RV32-NEXT: sw a1, 44(sp)
4151 ; RV32-NEXT: sw a1, 40(sp)
4152 ; RV32-NEXT: lui a1, 209715
4153 ; RV32-NEXT: addi a1, a1, 819
4154 ; RV32-NEXT: sw a1, 36(sp)
4155 ; RV32-NEXT: sw a1, 32(sp)
4156 ; RV32-NEXT: lui a1, 61681
4157 ; RV32-NEXT: addi a1, a1, -241
4158 ; RV32-NEXT: sw a1, 28(sp)
4159 ; RV32-NEXT: sw a1, 24(sp)
4160 ; RV32-NEXT: lui a1, 4112
4161 ; RV32-NEXT: addi a1, a1, 257
4162 ; RV32-NEXT: sw a1, 20(sp)
4163 ; RV32-NEXT: sw a1, 16(sp)
4164 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4165 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
4166 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4167 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
4168 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4169 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4170 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4171 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
4172 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4173 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
4174 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4175 ; RV32-NEXT: li a1, 32
4176 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
4177 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4178 ; RV32-NEXT: vnot.v v24, v8, v0.t
4179 ; RV32-NEXT: addi a1, sp, 48
4180 ; RV32-NEXT: vs8r.v v24, (a1) # Unknown-size Folded Spill
4181 ; RV32-NEXT: addi a1, sp, 40
4182 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4183 ; RV32-NEXT: vlse64.v v8, (a1), zero
4184 ; RV32-NEXT: csrr a1, vlenb
4185 ; RV32-NEXT: slli a1, a1, 3
4186 ; RV32-NEXT: add a1, sp, a1
4187 ; RV32-NEXT: addi a1, a1, 48
4188 ; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill
4189 ; RV32-NEXT: addi a1, sp, 32
4190 ; RV32-NEXT: vlse64.v v16, (a1), zero
4191 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4192 ; RV32-NEXT: vsrl.vi v8, v24, 1, v0.t
4193 ; RV32-NEXT: csrr a1, vlenb
4194 ; RV32-NEXT: slli a1, a1, 3
4195 ; RV32-NEXT: add a1, sp, a1
4196 ; RV32-NEXT: addi a1, a1, 48
4197 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
4198 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
4199 ; RV32-NEXT: addi a1, sp, 48
4200 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
4201 ; RV32-NEXT: vsub.vv v8, v24, v8, v0.t
4202 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
4203 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4204 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4205 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
4206 ; RV32-NEXT: addi a1, sp, 24
4207 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4208 ; RV32-NEXT: vlse64.v v16, (a1), zero
4209 ; RV32-NEXT: csrr a1, vlenb
4210 ; RV32-NEXT: slli a1, a1, 3
4211 ; RV32-NEXT: add a1, sp, a1
4212 ; RV32-NEXT: addi a1, a1, 48
4213 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
4214 ; RV32-NEXT: addi a1, sp, 16
4215 ; RV32-NEXT: vlse64.v v24, (a1), zero
4216 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4217 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4218 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4219 ; RV32-NEXT: csrr a0, vlenb
4220 ; RV32-NEXT: slli a0, a0, 3
4221 ; RV32-NEXT: add a0, sp, a0
4222 ; RV32-NEXT: addi a0, a0, 48
4223 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4224 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4225 ; RV32-NEXT: vmul.vv v8, v8, v24, v0.t
4226 ; RV32-NEXT: li a0, 56
4227 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
4228 ; RV32-NEXT: csrr a0, vlenb
4229 ; RV32-NEXT: slli a0, a0, 4
4230 ; RV32-NEXT: add sp, sp, a0
4231 ; RV32-NEXT: addi sp, sp, 48
4234 ; RV64-LABEL: vp_ctlz_zero_undef_v15i64:
4236 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4237 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4238 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4239 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
4240 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4241 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4242 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4243 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
4244 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4245 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
4246 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4247 ; RV64-NEXT: li a0, 32
4248 ; RV64-NEXT: vsrl.vx v16, v8, a0, v0.t
4249 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4250 ; RV64-NEXT: vnot.v v8, v8, v0.t
4251 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4252 ; RV64-NEXT: lui a0, 349525
4253 ; RV64-NEXT: addiw a0, a0, 1365
4254 ; RV64-NEXT: slli a1, a0, 32
4255 ; RV64-NEXT: add a0, a0, a1
4256 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
4257 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4258 ; RV64-NEXT: lui a0, 209715
4259 ; RV64-NEXT: addiw a0, a0, 819
4260 ; RV64-NEXT: slli a1, a0, 32
4261 ; RV64-NEXT: add a0, a0, a1
4262 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
4263 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4264 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4265 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4266 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4267 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4268 ; RV64-NEXT: lui a0, 61681
4269 ; RV64-NEXT: addiw a0, a0, -241
4270 ; RV64-NEXT: slli a1, a0, 32
4271 ; RV64-NEXT: add a0, a0, a1
4272 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4273 ; RV64-NEXT: lui a0, 4112
4274 ; RV64-NEXT: addiw a0, a0, 257
4275 ; RV64-NEXT: slli a1, a0, 32
4276 ; RV64-NEXT: add a0, a0, a1
4277 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
4278 ; RV64-NEXT: li a0, 56
4279 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
4281 %v = call <15 x i64> @llvm.vp.ctlz.v15i64(<15 x i64> %va, i1 true, <15 x i1> %m, i32 %evl)
4285 define <15 x i64> @vp_ctlz_zero_undef_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
4286 ; RV32-LABEL: vp_ctlz_zero_undef_v15i64_unmasked:
4288 ; RV32-NEXT: addi sp, sp, -32
4289 ; RV32-NEXT: .cfi_def_cfa_offset 32
4290 ; RV32-NEXT: lui a1, 349525
4291 ; RV32-NEXT: addi a1, a1, 1365
4292 ; RV32-NEXT: sw a1, 28(sp)
4293 ; RV32-NEXT: sw a1, 24(sp)
4294 ; RV32-NEXT: lui a1, 209715
4295 ; RV32-NEXT: addi a1, a1, 819
4296 ; RV32-NEXT: sw a1, 20(sp)
4297 ; RV32-NEXT: sw a1, 16(sp)
4298 ; RV32-NEXT: lui a1, 61681
4299 ; RV32-NEXT: addi a1, a1, -241
4300 ; RV32-NEXT: sw a1, 12(sp)
4301 ; RV32-NEXT: sw a1, 8(sp)
4302 ; RV32-NEXT: lui a1, 4112
4303 ; RV32-NEXT: addi a1, a1, 257
4304 ; RV32-NEXT: sw a1, 4(sp)
4305 ; RV32-NEXT: sw a1, 0(sp)
4306 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4307 ; RV32-NEXT: vsrl.vi v16, v8, 1
4308 ; RV32-NEXT: vor.vv v8, v8, v16
4309 ; RV32-NEXT: vsrl.vi v16, v8, 2
4310 ; RV32-NEXT: vor.vv v8, v8, v16
4311 ; RV32-NEXT: vsrl.vi v16, v8, 4
4312 ; RV32-NEXT: vor.vv v8, v8, v16
4313 ; RV32-NEXT: vsrl.vi v16, v8, 8
4314 ; RV32-NEXT: vor.vv v8, v8, v16
4315 ; RV32-NEXT: vsrl.vi v16, v8, 16
4316 ; RV32-NEXT: vor.vv v8, v8, v16
4317 ; RV32-NEXT: li a1, 32
4318 ; RV32-NEXT: vsrl.vx v16, v8, a1
4319 ; RV32-NEXT: vor.vv v8, v8, v16
4320 ; RV32-NEXT: vnot.v v8, v8
4321 ; RV32-NEXT: addi a1, sp, 24
4322 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4323 ; RV32-NEXT: vlse64.v v16, (a1), zero
4324 ; RV32-NEXT: addi a1, sp, 16
4325 ; RV32-NEXT: vlse64.v v24, (a1), zero
4326 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4327 ; RV32-NEXT: vsrl.vi v0, v8, 1
4328 ; RV32-NEXT: vand.vv v16, v0, v16
4329 ; RV32-NEXT: vsub.vv v8, v8, v16
4330 ; RV32-NEXT: vand.vv v16, v8, v24
4331 ; RV32-NEXT: vsrl.vi v8, v8, 2
4332 ; RV32-NEXT: vand.vv v8, v8, v24
4333 ; RV32-NEXT: vadd.vv v8, v16, v8
4334 ; RV32-NEXT: addi a1, sp, 8
4335 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4336 ; RV32-NEXT: vlse64.v v16, (a1), zero
4337 ; RV32-NEXT: mv a1, sp
4338 ; RV32-NEXT: vlse64.v v24, (a1), zero
4339 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4340 ; RV32-NEXT: vsrl.vi v0, v8, 4
4341 ; RV32-NEXT: vadd.vv v8, v8, v0
4342 ; RV32-NEXT: vand.vv v8, v8, v16
4343 ; RV32-NEXT: vmul.vv v8, v8, v24
4344 ; RV32-NEXT: li a0, 56
4345 ; RV32-NEXT: vsrl.vx v8, v8, a0
4346 ; RV32-NEXT: addi sp, sp, 32
4349 ; RV64-LABEL: vp_ctlz_zero_undef_v15i64_unmasked:
4351 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4352 ; RV64-NEXT: vsrl.vi v16, v8, 1
4353 ; RV64-NEXT: vor.vv v8, v8, v16
4354 ; RV64-NEXT: vsrl.vi v16, v8, 2
4355 ; RV64-NEXT: vor.vv v8, v8, v16
4356 ; RV64-NEXT: vsrl.vi v16, v8, 4
4357 ; RV64-NEXT: vor.vv v8, v8, v16
4358 ; RV64-NEXT: vsrl.vi v16, v8, 8
4359 ; RV64-NEXT: vor.vv v8, v8, v16
4360 ; RV64-NEXT: vsrl.vi v16, v8, 16
4361 ; RV64-NEXT: vor.vv v8, v8, v16
4362 ; RV64-NEXT: li a0, 32
4363 ; RV64-NEXT: vsrl.vx v16, v8, a0
4364 ; RV64-NEXT: vor.vv v8, v8, v16
4365 ; RV64-NEXT: vnot.v v8, v8
4366 ; RV64-NEXT: vsrl.vi v16, v8, 1
4367 ; RV64-NEXT: lui a0, 349525
4368 ; RV64-NEXT: addiw a0, a0, 1365
4369 ; RV64-NEXT: slli a1, a0, 32
4370 ; RV64-NEXT: add a0, a0, a1
4371 ; RV64-NEXT: vand.vx v16, v16, a0
4372 ; RV64-NEXT: vsub.vv v8, v8, v16
4373 ; RV64-NEXT: lui a0, 209715
4374 ; RV64-NEXT: addiw a0, a0, 819
4375 ; RV64-NEXT: slli a1, a0, 32
4376 ; RV64-NEXT: add a0, a0, a1
4377 ; RV64-NEXT: vand.vx v16, v8, a0
4378 ; RV64-NEXT: vsrl.vi v8, v8, 2
4379 ; RV64-NEXT: vand.vx v8, v8, a0
4380 ; RV64-NEXT: vadd.vv v8, v16, v8
4381 ; RV64-NEXT: vsrl.vi v16, v8, 4
4382 ; RV64-NEXT: vadd.vv v8, v8, v16
4383 ; RV64-NEXT: lui a0, 61681
4384 ; RV64-NEXT: addiw a0, a0, -241
4385 ; RV64-NEXT: slli a1, a0, 32
4386 ; RV64-NEXT: add a0, a0, a1
4387 ; RV64-NEXT: vand.vx v8, v8, a0
4388 ; RV64-NEXT: lui a0, 4112
4389 ; RV64-NEXT: addiw a0, a0, 257
4390 ; RV64-NEXT: slli a1, a0, 32
4391 ; RV64-NEXT: add a0, a0, a1
4392 ; RV64-NEXT: vmul.vx v8, v8, a0
4393 ; RV64-NEXT: li a0, 56
4394 ; RV64-NEXT: vsrl.vx v8, v8, a0
4396 %v = call <15 x i64> @llvm.vp.ctlz.v15i64(<15 x i64> %va, i1 true, <15 x i1> splat (i1 true), i32 %evl)
4400 define <16 x i64> @vp_ctlz_zero_undef_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
4401 ; RV32-LABEL: vp_ctlz_zero_undef_v16i64:
4403 ; RV32-NEXT: addi sp, sp, -48
4404 ; RV32-NEXT: .cfi_def_cfa_offset 48
4405 ; RV32-NEXT: csrr a1, vlenb
4406 ; RV32-NEXT: slli a1, a1, 4
4407 ; RV32-NEXT: sub sp, sp, a1
4408 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 16 * vlenb
4409 ; RV32-NEXT: lui a1, 349525
4410 ; RV32-NEXT: addi a1, a1, 1365
4411 ; RV32-NEXT: sw a1, 44(sp)
4412 ; RV32-NEXT: sw a1, 40(sp)
4413 ; RV32-NEXT: lui a1, 209715
4414 ; RV32-NEXT: addi a1, a1, 819
4415 ; RV32-NEXT: sw a1, 36(sp)
4416 ; RV32-NEXT: sw a1, 32(sp)
4417 ; RV32-NEXT: lui a1, 61681
4418 ; RV32-NEXT: addi a1, a1, -241
4419 ; RV32-NEXT: sw a1, 28(sp)
4420 ; RV32-NEXT: sw a1, 24(sp)
4421 ; RV32-NEXT: lui a1, 4112
4422 ; RV32-NEXT: addi a1, a1, 257
4423 ; RV32-NEXT: sw a1, 20(sp)
4424 ; RV32-NEXT: sw a1, 16(sp)
4425 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4426 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
4427 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4428 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
4429 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4430 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4431 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4432 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
4433 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4434 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
4435 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4436 ; RV32-NEXT: li a1, 32
4437 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
4438 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4439 ; RV32-NEXT: vnot.v v24, v8, v0.t
4440 ; RV32-NEXT: addi a1, sp, 48
4441 ; RV32-NEXT: vs8r.v v24, (a1) # Unknown-size Folded Spill
4442 ; RV32-NEXT: addi a1, sp, 40
4443 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4444 ; RV32-NEXT: vlse64.v v8, (a1), zero
4445 ; RV32-NEXT: csrr a1, vlenb
4446 ; RV32-NEXT: slli a1, a1, 3
4447 ; RV32-NEXT: add a1, sp, a1
4448 ; RV32-NEXT: addi a1, a1, 48
4449 ; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill
4450 ; RV32-NEXT: addi a1, sp, 32
4451 ; RV32-NEXT: vlse64.v v16, (a1), zero
4452 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4453 ; RV32-NEXT: vsrl.vi v8, v24, 1, v0.t
4454 ; RV32-NEXT: csrr a1, vlenb
4455 ; RV32-NEXT: slli a1, a1, 3
4456 ; RV32-NEXT: add a1, sp, a1
4457 ; RV32-NEXT: addi a1, a1, 48
4458 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
4459 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
4460 ; RV32-NEXT: addi a1, sp, 48
4461 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
4462 ; RV32-NEXT: vsub.vv v8, v24, v8, v0.t
4463 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
4464 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4465 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4466 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
4467 ; RV32-NEXT: addi a1, sp, 24
4468 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4469 ; RV32-NEXT: vlse64.v v16, (a1), zero
4470 ; RV32-NEXT: csrr a1, vlenb
4471 ; RV32-NEXT: slli a1, a1, 3
4472 ; RV32-NEXT: add a1, sp, a1
4473 ; RV32-NEXT: addi a1, a1, 48
4474 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
4475 ; RV32-NEXT: addi a1, sp, 16
4476 ; RV32-NEXT: vlse64.v v24, (a1), zero
4477 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4478 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4479 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4480 ; RV32-NEXT: csrr a0, vlenb
4481 ; RV32-NEXT: slli a0, a0, 3
4482 ; RV32-NEXT: add a0, sp, a0
4483 ; RV32-NEXT: addi a0, a0, 48
4484 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4485 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4486 ; RV32-NEXT: vmul.vv v8, v8, v24, v0.t
4487 ; RV32-NEXT: li a0, 56
4488 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
4489 ; RV32-NEXT: csrr a0, vlenb
4490 ; RV32-NEXT: slli a0, a0, 4
4491 ; RV32-NEXT: add sp, sp, a0
4492 ; RV32-NEXT: addi sp, sp, 48
4495 ; RV64-LABEL: vp_ctlz_zero_undef_v16i64:
4497 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4498 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4499 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4500 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
4501 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4502 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4503 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4504 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
4505 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4506 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
4507 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4508 ; RV64-NEXT: li a0, 32
4509 ; RV64-NEXT: vsrl.vx v16, v8, a0, v0.t
4510 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
4511 ; RV64-NEXT: vnot.v v8, v8, v0.t
4512 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4513 ; RV64-NEXT: lui a0, 349525
4514 ; RV64-NEXT: addiw a0, a0, 1365
4515 ; RV64-NEXT: slli a1, a0, 32
4516 ; RV64-NEXT: add a0, a0, a1
4517 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
4518 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4519 ; RV64-NEXT: lui a0, 209715
4520 ; RV64-NEXT: addiw a0, a0, 819
4521 ; RV64-NEXT: slli a1, a0, 32
4522 ; RV64-NEXT: add a0, a0, a1
4523 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
4524 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4525 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4526 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4527 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4528 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4529 ; RV64-NEXT: lui a0, 61681
4530 ; RV64-NEXT: addiw a0, a0, -241
4531 ; RV64-NEXT: slli a1, a0, 32
4532 ; RV64-NEXT: add a0, a0, a1
4533 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4534 ; RV64-NEXT: lui a0, 4112
4535 ; RV64-NEXT: addiw a0, a0, 257
4536 ; RV64-NEXT: slli a1, a0, 32
4537 ; RV64-NEXT: add a0, a0, a1
4538 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
4539 ; RV64-NEXT: li a0, 56
4540 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
4542 %v = call <16 x i64> @llvm.vp.ctlz.v16i64(<16 x i64> %va, i1 true, <16 x i1> %m, i32 %evl)
4546 define <16 x i64> @vp_ctlz_zero_undef_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
4547 ; RV32-LABEL: vp_ctlz_zero_undef_v16i64_unmasked:
4549 ; RV32-NEXT: addi sp, sp, -32
4550 ; RV32-NEXT: .cfi_def_cfa_offset 32
4551 ; RV32-NEXT: lui a1, 349525
4552 ; RV32-NEXT: addi a1, a1, 1365
4553 ; RV32-NEXT: sw a1, 28(sp)
4554 ; RV32-NEXT: sw a1, 24(sp)
4555 ; RV32-NEXT: lui a1, 209715
4556 ; RV32-NEXT: addi a1, a1, 819
4557 ; RV32-NEXT: sw a1, 20(sp)
4558 ; RV32-NEXT: sw a1, 16(sp)
4559 ; RV32-NEXT: lui a1, 61681
4560 ; RV32-NEXT: addi a1, a1, -241
4561 ; RV32-NEXT: sw a1, 12(sp)
4562 ; RV32-NEXT: sw a1, 8(sp)
4563 ; RV32-NEXT: lui a1, 4112
4564 ; RV32-NEXT: addi a1, a1, 257
4565 ; RV32-NEXT: sw a1, 4(sp)
4566 ; RV32-NEXT: sw a1, 0(sp)
4567 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4568 ; RV32-NEXT: vsrl.vi v16, v8, 1
4569 ; RV32-NEXT: vor.vv v8, v8, v16
4570 ; RV32-NEXT: vsrl.vi v16, v8, 2
4571 ; RV32-NEXT: vor.vv v8, v8, v16
4572 ; RV32-NEXT: vsrl.vi v16, v8, 4
4573 ; RV32-NEXT: vor.vv v8, v8, v16
4574 ; RV32-NEXT: vsrl.vi v16, v8, 8
4575 ; RV32-NEXT: vor.vv v8, v8, v16
4576 ; RV32-NEXT: vsrl.vi v16, v8, 16
4577 ; RV32-NEXT: vor.vv v8, v8, v16
4578 ; RV32-NEXT: li a1, 32
4579 ; RV32-NEXT: vsrl.vx v16, v8, a1
4580 ; RV32-NEXT: vor.vv v8, v8, v16
4581 ; RV32-NEXT: vnot.v v8, v8
4582 ; RV32-NEXT: addi a1, sp, 24
4583 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4584 ; RV32-NEXT: vlse64.v v16, (a1), zero
4585 ; RV32-NEXT: addi a1, sp, 16
4586 ; RV32-NEXT: vlse64.v v24, (a1), zero
4587 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4588 ; RV32-NEXT: vsrl.vi v0, v8, 1
4589 ; RV32-NEXT: vand.vv v16, v0, v16
4590 ; RV32-NEXT: vsub.vv v8, v8, v16
4591 ; RV32-NEXT: vand.vv v16, v8, v24
4592 ; RV32-NEXT: vsrl.vi v8, v8, 2
4593 ; RV32-NEXT: vand.vv v8, v8, v24
4594 ; RV32-NEXT: vadd.vv v8, v16, v8
4595 ; RV32-NEXT: addi a1, sp, 8
4596 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4597 ; RV32-NEXT: vlse64.v v16, (a1), zero
4598 ; RV32-NEXT: mv a1, sp
4599 ; RV32-NEXT: vlse64.v v24, (a1), zero
4600 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4601 ; RV32-NEXT: vsrl.vi v0, v8, 4
4602 ; RV32-NEXT: vadd.vv v8, v8, v0
4603 ; RV32-NEXT: vand.vv v8, v8, v16
4604 ; RV32-NEXT: vmul.vv v8, v8, v24
4605 ; RV32-NEXT: li a0, 56
4606 ; RV32-NEXT: vsrl.vx v8, v8, a0
4607 ; RV32-NEXT: addi sp, sp, 32
4610 ; RV64-LABEL: vp_ctlz_zero_undef_v16i64_unmasked:
4612 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4613 ; RV64-NEXT: vsrl.vi v16, v8, 1
4614 ; RV64-NEXT: vor.vv v8, v8, v16
4615 ; RV64-NEXT: vsrl.vi v16, v8, 2
4616 ; RV64-NEXT: vor.vv v8, v8, v16
4617 ; RV64-NEXT: vsrl.vi v16, v8, 4
4618 ; RV64-NEXT: vor.vv v8, v8, v16
4619 ; RV64-NEXT: vsrl.vi v16, v8, 8
4620 ; RV64-NEXT: vor.vv v8, v8, v16
4621 ; RV64-NEXT: vsrl.vi v16, v8, 16
4622 ; RV64-NEXT: vor.vv v8, v8, v16
4623 ; RV64-NEXT: li a0, 32
4624 ; RV64-NEXT: vsrl.vx v16, v8, a0
4625 ; RV64-NEXT: vor.vv v8, v8, v16
4626 ; RV64-NEXT: vnot.v v8, v8
4627 ; RV64-NEXT: vsrl.vi v16, v8, 1
4628 ; RV64-NEXT: lui a0, 349525
4629 ; RV64-NEXT: addiw a0, a0, 1365
4630 ; RV64-NEXT: slli a1, a0, 32
4631 ; RV64-NEXT: add a0, a0, a1
4632 ; RV64-NEXT: vand.vx v16, v16, a0
4633 ; RV64-NEXT: vsub.vv v8, v8, v16
4634 ; RV64-NEXT: lui a0, 209715
4635 ; RV64-NEXT: addiw a0, a0, 819
4636 ; RV64-NEXT: slli a1, a0, 32
4637 ; RV64-NEXT: add a0, a0, a1
4638 ; RV64-NEXT: vand.vx v16, v8, a0
4639 ; RV64-NEXT: vsrl.vi v8, v8, 2
4640 ; RV64-NEXT: vand.vx v8, v8, a0
4641 ; RV64-NEXT: vadd.vv v8, v16, v8
4642 ; RV64-NEXT: vsrl.vi v16, v8, 4
4643 ; RV64-NEXT: vadd.vv v8, v8, v16
4644 ; RV64-NEXT: lui a0, 61681
4645 ; RV64-NEXT: addiw a0, a0, -241
4646 ; RV64-NEXT: slli a1, a0, 32
4647 ; RV64-NEXT: add a0, a0, a1
4648 ; RV64-NEXT: vand.vx v8, v8, a0
4649 ; RV64-NEXT: lui a0, 4112
4650 ; RV64-NEXT: addiw a0, a0, 257
4651 ; RV64-NEXT: slli a1, a0, 32
4652 ; RV64-NEXT: add a0, a0, a1
4653 ; RV64-NEXT: vmul.vx v8, v8, a0
4654 ; RV64-NEXT: li a0, 56
4655 ; RV64-NEXT: vsrl.vx v8, v8, a0
4657 %v = call <16 x i64> @llvm.vp.ctlz.v16i64(<16 x i64> %va, i1 true, <16 x i1> splat (i1 true), i32 %evl)
4661 define <32 x i64> @vp_ctlz_zero_undef_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
4662 ; RV32-LABEL: vp_ctlz_zero_undef_v32i64:
4664 ; RV32-NEXT: addi sp, sp, -48
4665 ; RV32-NEXT: .cfi_def_cfa_offset 48
4666 ; RV32-NEXT: csrr a1, vlenb
4667 ; RV32-NEXT: li a2, 56
4668 ; RV32-NEXT: mul a1, a1, a2
4669 ; RV32-NEXT: sub sp, sp, a1
4670 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x38, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 56 * vlenb
4671 ; RV32-NEXT: csrr a1, vlenb
4672 ; RV32-NEXT: slli a1, a1, 4
4673 ; RV32-NEXT: add a1, sp, a1
4674 ; RV32-NEXT: addi a1, a1, 48
4675 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
4676 ; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
4677 ; RV32-NEXT: vslidedown.vi v24, v0, 2
4678 ; RV32-NEXT: lui a1, 349525
4679 ; RV32-NEXT: addi a1, a1, 1365
4680 ; RV32-NEXT: sw a1, 44(sp)
4681 ; RV32-NEXT: sw a1, 40(sp)
4682 ; RV32-NEXT: lui a1, 209715
4683 ; RV32-NEXT: addi a1, a1, 819
4684 ; RV32-NEXT: sw a1, 36(sp)
4685 ; RV32-NEXT: sw a1, 32(sp)
4686 ; RV32-NEXT: lui a1, 61681
4687 ; RV32-NEXT: addi a1, a1, -241
4688 ; RV32-NEXT: sw a1, 28(sp)
4689 ; RV32-NEXT: sw a1, 24(sp)
4690 ; RV32-NEXT: lui a1, 4112
4691 ; RV32-NEXT: addi a1, a1, 257
4692 ; RV32-NEXT: sw a1, 20(sp)
4693 ; RV32-NEXT: li a3, 16
4694 ; RV32-NEXT: sw a1, 16(sp)
4695 ; RV32-NEXT: mv a2, a0
4696 ; RV32-NEXT: bltu a0, a3, .LBB70_2
4697 ; RV32-NEXT: # %bb.1:
4698 ; RV32-NEXT: li a2, 16
4699 ; RV32-NEXT: .LBB70_2:
4700 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4701 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
4702 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4703 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
4704 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4705 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4706 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4707 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
4708 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4709 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
4710 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4711 ; RV32-NEXT: li a1, 32
4712 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
4713 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4714 ; RV32-NEXT: vnot.v v8, v8, v0.t
4715 ; RV32-NEXT: csrr a3, vlenb
4716 ; RV32-NEXT: slli a3, a3, 5
4717 ; RV32-NEXT: add a3, sp, a3
4718 ; RV32-NEXT: addi a3, a3, 48
4719 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4720 ; RV32-NEXT: addi a3, sp, 40
4721 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4722 ; RV32-NEXT: vlse64.v v8, (a3), zero
4723 ; RV32-NEXT: csrr a3, vlenb
4724 ; RV32-NEXT: li a4, 40
4725 ; RV32-NEXT: mul a3, a3, a4
4726 ; RV32-NEXT: add a3, sp, a3
4727 ; RV32-NEXT: addi a3, a3, 48
4728 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4729 ; RV32-NEXT: addi a3, sp, 32
4730 ; RV32-NEXT: vlse64.v v8, (a3), zero
4731 ; RV32-NEXT: csrr a3, vlenb
4732 ; RV32-NEXT: li a4, 48
4733 ; RV32-NEXT: mul a3, a3, a4
4734 ; RV32-NEXT: add a3, sp, a3
4735 ; RV32-NEXT: addi a3, a3, 48
4736 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4737 ; RV32-NEXT: csrr a3, vlenb
4738 ; RV32-NEXT: slli a3, a3, 5
4739 ; RV32-NEXT: add a3, sp, a3
4740 ; RV32-NEXT: addi a3, a3, 48
4741 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
4742 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4743 ; RV32-NEXT: vsrl.vi v8, v16, 1, v0.t
4744 ; RV32-NEXT: csrr a3, vlenb
4745 ; RV32-NEXT: li a4, 24
4746 ; RV32-NEXT: mul a3, a3, a4
4747 ; RV32-NEXT: add a3, sp, a3
4748 ; RV32-NEXT: addi a3, a3, 48
4749 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4750 ; RV32-NEXT: csrr a3, vlenb
4751 ; RV32-NEXT: li a4, 40
4752 ; RV32-NEXT: mul a3, a3, a4
4753 ; RV32-NEXT: add a3, sp, a3
4754 ; RV32-NEXT: addi a3, a3, 48
4755 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
4756 ; RV32-NEXT: csrr a3, vlenb
4757 ; RV32-NEXT: li a4, 24
4758 ; RV32-NEXT: mul a3, a3, a4
4759 ; RV32-NEXT: add a3, sp, a3
4760 ; RV32-NEXT: addi a3, a3, 48
4761 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
4762 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4763 ; RV32-NEXT: csrr a3, vlenb
4764 ; RV32-NEXT: slli a3, a3, 5
4765 ; RV32-NEXT: add a3, sp, a3
4766 ; RV32-NEXT: addi a3, a3, 48
4767 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
4768 ; RV32-NEXT: vsub.vv v16, v16, v8, v0.t
4769 ; RV32-NEXT: csrr a3, vlenb
4770 ; RV32-NEXT: slli a3, a3, 5
4771 ; RV32-NEXT: add a3, sp, a3
4772 ; RV32-NEXT: addi a3, a3, 48
4773 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
4774 ; RV32-NEXT: csrr a3, vlenb
4775 ; RV32-NEXT: slli a3, a3, 5
4776 ; RV32-NEXT: add a3, sp, a3
4777 ; RV32-NEXT: addi a3, a3, 48
4778 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
4779 ; RV32-NEXT: csrr a3, vlenb
4780 ; RV32-NEXT: li a4, 48
4781 ; RV32-NEXT: mul a3, a3, a4
4782 ; RV32-NEXT: add a3, sp, a3
4783 ; RV32-NEXT: addi a3, a3, 48
4784 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
4785 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4786 ; RV32-NEXT: csrr a3, vlenb
4787 ; RV32-NEXT: li a4, 24
4788 ; RV32-NEXT: mul a3, a3, a4
4789 ; RV32-NEXT: add a3, sp, a3
4790 ; RV32-NEXT: addi a3, a3, 48
4791 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
4792 ; RV32-NEXT: csrr a3, vlenb
4793 ; RV32-NEXT: slli a3, a3, 5
4794 ; RV32-NEXT: add a3, sp, a3
4795 ; RV32-NEXT: addi a3, a3, 48
4796 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
4797 ; RV32-NEXT: vsrl.vi v16, v16, 2, v0.t
4798 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4799 ; RV32-NEXT: csrr a3, vlenb
4800 ; RV32-NEXT: li a4, 24
4801 ; RV32-NEXT: mul a3, a3, a4
4802 ; RV32-NEXT: add a3, sp, a3
4803 ; RV32-NEXT: addi a3, a3, 48
4804 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
4805 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4806 ; RV32-NEXT: csrr a3, vlenb
4807 ; RV32-NEXT: slli a3, a3, 3
4808 ; RV32-NEXT: add a3, sp, a3
4809 ; RV32-NEXT: addi a3, a3, 48
4810 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4811 ; RV32-NEXT: addi a3, sp, 24
4812 ; RV32-NEXT: addi a4, sp, 16
4813 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4814 ; RV32-NEXT: vlse64.v v8, (a3), zero
4815 ; RV32-NEXT: csrr a3, vlenb
4816 ; RV32-NEXT: li a5, 24
4817 ; RV32-NEXT: mul a3, a3, a5
4818 ; RV32-NEXT: add a3, sp, a3
4819 ; RV32-NEXT: addi a3, a3, 48
4820 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4821 ; RV32-NEXT: vlse64.v v8, (a4), zero
4822 ; RV32-NEXT: csrr a3, vlenb
4823 ; RV32-NEXT: slli a3, a3, 5
4824 ; RV32-NEXT: add a3, sp, a3
4825 ; RV32-NEXT: addi a3, a3, 48
4826 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4827 ; RV32-NEXT: csrr a3, vlenb
4828 ; RV32-NEXT: slli a3, a3, 3
4829 ; RV32-NEXT: add a3, sp, a3
4830 ; RV32-NEXT: addi a3, a3, 48
4831 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
4832 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4833 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4834 ; RV32-NEXT: addi a2, sp, 48
4835 ; RV32-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill
4836 ; RV32-NEXT: vl8r.v v16, (a2) # Unknown-size Folded Reload
4837 ; RV32-NEXT: vadd.vv v16, v8, v16, v0.t
4838 ; RV32-NEXT: csrr a2, vlenb
4839 ; RV32-NEXT: li a3, 24
4840 ; RV32-NEXT: mul a2, a2, a3
4841 ; RV32-NEXT: add a2, sp, a2
4842 ; RV32-NEXT: addi a2, a2, 48
4843 ; RV32-NEXT: vl8r.v v8, (a2) # Unknown-size Folded Reload
4844 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4845 ; RV32-NEXT: csrr a2, vlenb
4846 ; RV32-NEXT: slli a2, a2, 5
4847 ; RV32-NEXT: add a2, sp, a2
4848 ; RV32-NEXT: addi a2, a2, 48
4849 ; RV32-NEXT: vl8r.v v8, (a2) # Unknown-size Folded Reload
4850 ; RV32-NEXT: vmul.vv v8, v16, v8, v0.t
4851 ; RV32-NEXT: li a2, 56
4852 ; RV32-NEXT: vsrl.vx v8, v8, a2, v0.t
4853 ; RV32-NEXT: csrr a3, vlenb
4854 ; RV32-NEXT: slli a3, a3, 3
4855 ; RV32-NEXT: add a3, sp, a3
4856 ; RV32-NEXT: addi a3, a3, 48
4857 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4858 ; RV32-NEXT: addi a3, a0, -16
4859 ; RV32-NEXT: sltu a0, a0, a3
4860 ; RV32-NEXT: addi a0, a0, -1
4861 ; RV32-NEXT: and a0, a0, a3
4862 ; RV32-NEXT: vmv1r.v v0, v24
4863 ; RV32-NEXT: csrr a3, vlenb
4864 ; RV32-NEXT: slli a3, a3, 4
4865 ; RV32-NEXT: add a3, sp, a3
4866 ; RV32-NEXT: addi a3, a3, 48
4867 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
4868 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4869 ; RV32-NEXT: vsrl.vi v8, v16, 1, v0.t
4870 ; RV32-NEXT: vor.vv v8, v16, v8, v0.t
4871 ; RV32-NEXT: vsrl.vi v16, v8, 2, v0.t
4872 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4873 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4874 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4875 ; RV32-NEXT: vsrl.vi v16, v8, 8, v0.t
4876 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4877 ; RV32-NEXT: vsrl.vi v16, v8, 16, v0.t
4878 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4879 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
4880 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
4881 ; RV32-NEXT: vnot.v v8, v8, v0.t
4882 ; RV32-NEXT: addi a0, sp, 48
4883 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
4884 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
4885 ; RV32-NEXT: csrr a0, vlenb
4886 ; RV32-NEXT: slli a0, a0, 4
4887 ; RV32-NEXT: add a0, sp, a0
4888 ; RV32-NEXT: addi a0, a0, 48
4889 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
4890 ; RV32-NEXT: csrr a0, vlenb
4891 ; RV32-NEXT: li a1, 40
4892 ; RV32-NEXT: mul a0, a0, a1
4893 ; RV32-NEXT: add a0, sp, a0
4894 ; RV32-NEXT: addi a0, a0, 48
4895 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4896 ; RV32-NEXT: csrr a0, vlenb
4897 ; RV32-NEXT: slli a0, a0, 4
4898 ; RV32-NEXT: add a0, sp, a0
4899 ; RV32-NEXT: addi a0, a0, 48
4900 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4901 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
4902 ; RV32-NEXT: addi a0, sp, 48
4903 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4904 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
4905 ; RV32-NEXT: csrr a0, vlenb
4906 ; RV32-NEXT: li a1, 40
4907 ; RV32-NEXT: mul a0, a0, a1
4908 ; RV32-NEXT: add a0, sp, a0
4909 ; RV32-NEXT: addi a0, a0, 48
4910 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
4911 ; RV32-NEXT: csrr a0, vlenb
4912 ; RV32-NEXT: li a1, 48
4913 ; RV32-NEXT: mul a0, a0, a1
4914 ; RV32-NEXT: add a0, sp, a0
4915 ; RV32-NEXT: addi a0, a0, 48
4916 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4917 ; RV32-NEXT: csrr a0, vlenb
4918 ; RV32-NEXT: li a1, 40
4919 ; RV32-NEXT: mul a0, a0, a1
4920 ; RV32-NEXT: add a0, sp, a0
4921 ; RV32-NEXT: addi a0, a0, 48
4922 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4923 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4924 ; RV32-NEXT: csrr a0, vlenb
4925 ; RV32-NEXT: slli a0, a0, 4
4926 ; RV32-NEXT: add a0, sp, a0
4927 ; RV32-NEXT: addi a0, a0, 48
4928 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
4929 ; RV32-NEXT: csrr a0, vlenb
4930 ; RV32-NEXT: li a1, 40
4931 ; RV32-NEXT: mul a0, a0, a1
4932 ; RV32-NEXT: add a0, sp, a0
4933 ; RV32-NEXT: addi a0, a0, 48
4934 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4935 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4936 ; RV32-NEXT: csrr a0, vlenb
4937 ; RV32-NEXT: li a1, 48
4938 ; RV32-NEXT: mul a0, a0, a1
4939 ; RV32-NEXT: add a0, sp, a0
4940 ; RV32-NEXT: addi a0, a0, 48
4941 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4942 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4943 ; RV32-NEXT: csrr a0, vlenb
4944 ; RV32-NEXT: slli a0, a0, 4
4945 ; RV32-NEXT: add a0, sp, a0
4946 ; RV32-NEXT: addi a0, a0, 48
4947 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4948 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
4949 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4950 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4951 ; RV32-NEXT: csrr a0, vlenb
4952 ; RV32-NEXT: li a1, 24
4953 ; RV32-NEXT: mul a0, a0, a1
4954 ; RV32-NEXT: add a0, sp, a0
4955 ; RV32-NEXT: addi a0, a0, 48
4956 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4957 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4958 ; RV32-NEXT: csrr a0, vlenb
4959 ; RV32-NEXT: slli a0, a0, 5
4960 ; RV32-NEXT: add a0, sp, a0
4961 ; RV32-NEXT: addi a0, a0, 48
4962 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4963 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
4964 ; RV32-NEXT: vsrl.vx v16, v8, a2, v0.t
4965 ; RV32-NEXT: csrr a0, vlenb
4966 ; RV32-NEXT: slli a0, a0, 3
4967 ; RV32-NEXT: add a0, sp, a0
4968 ; RV32-NEXT: addi a0, a0, 48
4969 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4970 ; RV32-NEXT: csrr a0, vlenb
4971 ; RV32-NEXT: li a1, 56
4972 ; RV32-NEXT: mul a0, a0, a1
4973 ; RV32-NEXT: add sp, sp, a0
4974 ; RV32-NEXT: addi sp, sp, 48
4977 ; RV64-LABEL: vp_ctlz_zero_undef_v32i64:
4979 ; RV64-NEXT: addi sp, sp, -16
4980 ; RV64-NEXT: .cfi_def_cfa_offset 16
4981 ; RV64-NEXT: csrr a1, vlenb
4982 ; RV64-NEXT: slli a1, a1, 4
4983 ; RV64-NEXT: sub sp, sp, a1
4984 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
4985 ; RV64-NEXT: csrr a1, vlenb
4986 ; RV64-NEXT: slli a1, a1, 3
4987 ; RV64-NEXT: add a1, sp, a1
4988 ; RV64-NEXT: addi a1, a1, 16
4989 ; RV64-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
4990 ; RV64-NEXT: li a2, 16
4991 ; RV64-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
4992 ; RV64-NEXT: vslidedown.vi v24, v0, 2
4993 ; RV64-NEXT: mv a1, a0
4994 ; RV64-NEXT: bltu a0, a2, .LBB70_2
4995 ; RV64-NEXT: # %bb.1:
4996 ; RV64-NEXT: li a1, 16
4997 ; RV64-NEXT: .LBB70_2:
4998 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4999 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
5000 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5001 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
5002 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5003 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
5004 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5005 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
5006 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5007 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
5008 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5009 ; RV64-NEXT: li a1, 32
5010 ; RV64-NEXT: vsrl.vx v16, v8, a1, v0.t
5011 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5012 ; RV64-NEXT: vnot.v v8, v8, v0.t
5013 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
5014 ; RV64-NEXT: lui a2, 349525
5015 ; RV64-NEXT: addiw a2, a2, 1365
5016 ; RV64-NEXT: slli a3, a2, 32
5017 ; RV64-NEXT: add a2, a2, a3
5018 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
5019 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
5020 ; RV64-NEXT: lui a3, 209715
5021 ; RV64-NEXT: addiw a3, a3, 819
5022 ; RV64-NEXT: slli a4, a3, 32
5023 ; RV64-NEXT: add a3, a3, a4
5024 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
5025 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
5026 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
5027 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
5028 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
5029 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
5030 ; RV64-NEXT: lui a4, 61681
5031 ; RV64-NEXT: addiw a4, a4, -241
5032 ; RV64-NEXT: slli a5, a4, 32
5033 ; RV64-NEXT: add a4, a4, a5
5034 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
5035 ; RV64-NEXT: lui a5, 4112
5036 ; RV64-NEXT: addiw a5, a5, 257
5037 ; RV64-NEXT: slli a6, a5, 32
5038 ; RV64-NEXT: add a5, a5, a6
5039 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
5040 ; RV64-NEXT: li a6, 56
5041 ; RV64-NEXT: vsrl.vx v8, v8, a6, v0.t
5042 ; RV64-NEXT: addi a7, sp, 16
5043 ; RV64-NEXT: vs8r.v v8, (a7) # Unknown-size Folded Spill
5044 ; RV64-NEXT: addi a7, a0, -16
5045 ; RV64-NEXT: sltu a0, a0, a7
5046 ; RV64-NEXT: addi a0, a0, -1
5047 ; RV64-NEXT: and a0, a0, a7
5048 ; RV64-NEXT: vmv1r.v v0, v24
5049 ; RV64-NEXT: csrr a7, vlenb
5050 ; RV64-NEXT: slli a7, a7, 3
5051 ; RV64-NEXT: add a7, sp, a7
5052 ; RV64-NEXT: addi a7, a7, 16
5053 ; RV64-NEXT: vl8r.v v8, (a7) # Unknown-size Folded Reload
5054 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5055 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
5056 ; RV64-NEXT: vor.vv v16, v8, v16, v0.t
5057 ; RV64-NEXT: vsrl.vi v8, v16, 2, v0.t
5058 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
5059 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
5060 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5061 ; RV64-NEXT: vsrl.vi v16, v8, 8, v0.t
5062 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5063 ; RV64-NEXT: vsrl.vi v16, v8, 16, v0.t
5064 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5065 ; RV64-NEXT: vsrl.vx v16, v8, a1, v0.t
5066 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
5067 ; RV64-NEXT: vnot.v v8, v8, v0.t
5068 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
5069 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
5070 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
5071 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
5072 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
5073 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
5074 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
5075 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
5076 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
5077 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
5078 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
5079 ; RV64-NEXT: vsrl.vx v16, v8, a6, v0.t
5080 ; RV64-NEXT: addi a0, sp, 16
5081 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
5082 ; RV64-NEXT: csrr a0, vlenb
5083 ; RV64-NEXT: slli a0, a0, 4
5084 ; RV64-NEXT: add sp, sp, a0
5085 ; RV64-NEXT: addi sp, sp, 16
5087 %v = call <32 x i64> @llvm.vp.ctlz.v32i64(<32 x i64> %va, i1 true, <32 x i1> %m, i32 %evl)
5091 define <32 x i64> @vp_ctlz_zero_undef_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
5092 ; RV32-LABEL: vp_ctlz_zero_undef_v32i64_unmasked:
5094 ; RV32-NEXT: addi sp, sp, -48
5095 ; RV32-NEXT: .cfi_def_cfa_offset 48
5096 ; RV32-NEXT: csrr a1, vlenb
5097 ; RV32-NEXT: slli a1, a1, 4
5098 ; RV32-NEXT: sub sp, sp, a1
5099 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 16 * vlenb
5100 ; RV32-NEXT: csrr a1, vlenb
5101 ; RV32-NEXT: slli a1, a1, 3
5102 ; RV32-NEXT: add a1, sp, a1
5103 ; RV32-NEXT: addi a1, a1, 48
5104 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
5105 ; RV32-NEXT: lui a1, 349525
5106 ; RV32-NEXT: addi a1, a1, 1365
5107 ; RV32-NEXT: sw a1, 44(sp)
5108 ; RV32-NEXT: sw a1, 40(sp)
5109 ; RV32-NEXT: lui a1, 209715
5110 ; RV32-NEXT: addi a1, a1, 819
5111 ; RV32-NEXT: sw a1, 36(sp)
5112 ; RV32-NEXT: sw a1, 32(sp)
5113 ; RV32-NEXT: lui a1, 61681
5114 ; RV32-NEXT: addi a1, a1, -241
5115 ; RV32-NEXT: sw a1, 28(sp)
5116 ; RV32-NEXT: sw a1, 24(sp)
5117 ; RV32-NEXT: lui a1, 4112
5118 ; RV32-NEXT: addi a1, a1, 257
5119 ; RV32-NEXT: sw a1, 20(sp)
5120 ; RV32-NEXT: li a2, 16
5121 ; RV32-NEXT: sw a1, 16(sp)
5122 ; RV32-NEXT: mv a1, a0
5123 ; RV32-NEXT: bltu a0, a2, .LBB71_2
5124 ; RV32-NEXT: # %bb.1:
5125 ; RV32-NEXT: li a1, 16
5126 ; RV32-NEXT: .LBB71_2:
5127 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5128 ; RV32-NEXT: vsrl.vi v24, v8, 1
5129 ; RV32-NEXT: vor.vv v8, v8, v24
5130 ; RV32-NEXT: vsrl.vi v24, v8, 2
5131 ; RV32-NEXT: vor.vv v8, v8, v24
5132 ; RV32-NEXT: vsrl.vi v24, v8, 4
5133 ; RV32-NEXT: vor.vv v8, v8, v24
5134 ; RV32-NEXT: vsrl.vi v24, v8, 8
5135 ; RV32-NEXT: vor.vv v8, v8, v24
5136 ; RV32-NEXT: vsrl.vi v24, v8, 16
5137 ; RV32-NEXT: vor.vv v8, v8, v24
5138 ; RV32-NEXT: li a2, 32
5139 ; RV32-NEXT: vsrl.vx v24, v8, a2
5140 ; RV32-NEXT: vor.vv v8, v8, v24
5141 ; RV32-NEXT: vnot.v v0, v8
5142 ; RV32-NEXT: addi a3, sp, 40
5143 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
5144 ; RV32-NEXT: vlse64.v v16, (a3), zero
5145 ; RV32-NEXT: addi a3, sp, 32
5146 ; RV32-NEXT: vlse64.v v8, (a3), zero
5147 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5148 ; RV32-NEXT: vsrl.vi v24, v0, 1
5149 ; RV32-NEXT: vand.vv v24, v24, v16
5150 ; RV32-NEXT: vsub.vv v24, v0, v24
5151 ; RV32-NEXT: vand.vv v0, v24, v8
5152 ; RV32-NEXT: vsrl.vi v24, v24, 2
5153 ; RV32-NEXT: vand.vv v24, v24, v8
5154 ; RV32-NEXT: vadd.vv v24, v0, v24
5155 ; RV32-NEXT: vsrl.vi v0, v24, 4
5156 ; RV32-NEXT: vadd.vv v24, v24, v0
5157 ; RV32-NEXT: addi a3, sp, 48
5158 ; RV32-NEXT: vs8r.v v24, (a3) # Unknown-size Folded Spill
5159 ; RV32-NEXT: addi a3, a0, -16
5160 ; RV32-NEXT: sltu a0, a0, a3
5161 ; RV32-NEXT: addi a0, a0, -1
5162 ; RV32-NEXT: and a0, a0, a3
5163 ; RV32-NEXT: csrr a3, vlenb
5164 ; RV32-NEXT: slli a3, a3, 3
5165 ; RV32-NEXT: add a3, sp, a3
5166 ; RV32-NEXT: addi a3, a3, 48
5167 ; RV32-NEXT: vl8r.v v0, (a3) # Unknown-size Folded Reload
5168 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5169 ; RV32-NEXT: vsrl.vi v24, v0, 1
5170 ; RV32-NEXT: vor.vv v24, v0, v24
5171 ; RV32-NEXT: vsrl.vi v0, v24, 2
5172 ; RV32-NEXT: vor.vv v24, v24, v0
5173 ; RV32-NEXT: vsrl.vi v0, v24, 4
5174 ; RV32-NEXT: vor.vv v24, v24, v0
5175 ; RV32-NEXT: vsrl.vi v0, v24, 8
5176 ; RV32-NEXT: vor.vv v24, v24, v0
5177 ; RV32-NEXT: vsrl.vi v0, v24, 16
5178 ; RV32-NEXT: vor.vv v24, v24, v0
5179 ; RV32-NEXT: vsrl.vx v0, v24, a2
5180 ; RV32-NEXT: vor.vv v24, v24, v0
5181 ; RV32-NEXT: vnot.v v24, v24
5182 ; RV32-NEXT: vsrl.vi v0, v24, 1
5183 ; RV32-NEXT: vand.vv v16, v0, v16
5184 ; RV32-NEXT: addi a2, sp, 24
5185 ; RV32-NEXT: vsub.vv v16, v24, v16
5186 ; RV32-NEXT: vand.vv v24, v16, v8
5187 ; RV32-NEXT: vsrl.vi v16, v16, 2
5188 ; RV32-NEXT: vand.vv v8, v16, v8
5189 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
5190 ; RV32-NEXT: vlse64.v v16, (a2), zero
5191 ; RV32-NEXT: addi a2, sp, 16
5192 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5193 ; RV32-NEXT: vadd.vv v8, v24, v8
5194 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
5195 ; RV32-NEXT: vlse64.v v24, (a2), zero
5196 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5197 ; RV32-NEXT: vsrl.vi v0, v8, 4
5198 ; RV32-NEXT: vadd.vv v8, v8, v0
5199 ; RV32-NEXT: addi a2, sp, 48
5200 ; RV32-NEXT: vl8r.v v0, (a2) # Unknown-size Folded Reload
5201 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5202 ; RV32-NEXT: vand.vv v0, v0, v16
5203 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5204 ; RV32-NEXT: vand.vv v8, v8, v16
5205 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5206 ; RV32-NEXT: vmul.vv v16, v0, v24
5207 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5208 ; RV32-NEXT: vmul.vv v24, v8, v24
5209 ; RV32-NEXT: li a2, 56
5210 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5211 ; RV32-NEXT: vsrl.vx v8, v16, a2
5212 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5213 ; RV32-NEXT: vsrl.vx v16, v24, a2
5214 ; RV32-NEXT: csrr a0, vlenb
5215 ; RV32-NEXT: slli a0, a0, 4
5216 ; RV32-NEXT: add sp, sp, a0
5217 ; RV32-NEXT: addi sp, sp, 48
5220 ; RV64-LABEL: vp_ctlz_zero_undef_v32i64_unmasked:
5222 ; RV64-NEXT: li a2, 16
5223 ; RV64-NEXT: mv a1, a0
5224 ; RV64-NEXT: bltu a0, a2, .LBB71_2
5225 ; RV64-NEXT: # %bb.1:
5226 ; RV64-NEXT: li a1, 16
5227 ; RV64-NEXT: .LBB71_2:
5228 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5229 ; RV64-NEXT: vsrl.vi v24, v8, 1
5230 ; RV64-NEXT: vor.vv v8, v8, v24
5231 ; RV64-NEXT: vsrl.vi v24, v8, 2
5232 ; RV64-NEXT: vor.vv v8, v8, v24
5233 ; RV64-NEXT: vsrl.vi v24, v8, 4
5234 ; RV64-NEXT: vor.vv v8, v8, v24
5235 ; RV64-NEXT: vsrl.vi v24, v8, 8
5236 ; RV64-NEXT: vor.vv v8, v8, v24
5237 ; RV64-NEXT: vsrl.vi v24, v8, 16
5238 ; RV64-NEXT: vor.vv v8, v8, v24
5239 ; RV64-NEXT: li a1, 32
5240 ; RV64-NEXT: vsrl.vx v24, v8, a1
5241 ; RV64-NEXT: vor.vv v8, v8, v24
5242 ; RV64-NEXT: vnot.v v8, v8
5243 ; RV64-NEXT: vsrl.vi v24, v8, 1
5244 ; RV64-NEXT: lui a2, 349525
5245 ; RV64-NEXT: addiw a2, a2, 1365
5246 ; RV64-NEXT: slli a3, a2, 32
5247 ; RV64-NEXT: add a2, a2, a3
5248 ; RV64-NEXT: vand.vx v24, v24, a2
5249 ; RV64-NEXT: vsub.vv v8, v8, v24
5250 ; RV64-NEXT: lui a3, 209715
5251 ; RV64-NEXT: addiw a3, a3, 819
5252 ; RV64-NEXT: slli a4, a3, 32
5253 ; RV64-NEXT: add a3, a3, a4
5254 ; RV64-NEXT: vand.vx v24, v8, a3
5255 ; RV64-NEXT: vsrl.vi v8, v8, 2
5256 ; RV64-NEXT: vand.vx v8, v8, a3
5257 ; RV64-NEXT: vadd.vv v8, v24, v8
5258 ; RV64-NEXT: vsrl.vi v24, v8, 4
5259 ; RV64-NEXT: vadd.vv v8, v8, v24
5260 ; RV64-NEXT: lui a4, 61681
5261 ; RV64-NEXT: addiw a4, a4, -241
5262 ; RV64-NEXT: slli a5, a4, 32
5263 ; RV64-NEXT: add a4, a4, a5
5264 ; RV64-NEXT: vand.vx v8, v8, a4
5265 ; RV64-NEXT: lui a5, 4112
5266 ; RV64-NEXT: addiw a5, a5, 257
5267 ; RV64-NEXT: slli a6, a5, 32
5268 ; RV64-NEXT: add a5, a5, a6
5269 ; RV64-NEXT: vmul.vx v8, v8, a5
5270 ; RV64-NEXT: li a6, 56
5271 ; RV64-NEXT: vsrl.vx v8, v8, a6
5272 ; RV64-NEXT: addi a7, a0, -16
5273 ; RV64-NEXT: sltu a0, a0, a7
5274 ; RV64-NEXT: addi a0, a0, -1
5275 ; RV64-NEXT: and a0, a0, a7
5276 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5277 ; RV64-NEXT: vsrl.vi v24, v16, 1
5278 ; RV64-NEXT: vor.vv v16, v16, v24
5279 ; RV64-NEXT: vsrl.vi v24, v16, 2
5280 ; RV64-NEXT: vor.vv v16, v16, v24
5281 ; RV64-NEXT: vsrl.vi v24, v16, 4
5282 ; RV64-NEXT: vor.vv v16, v16, v24
5283 ; RV64-NEXT: vsrl.vi v24, v16, 8
5284 ; RV64-NEXT: vor.vv v16, v16, v24
5285 ; RV64-NEXT: vsrl.vi v24, v16, 16
5286 ; RV64-NEXT: vor.vv v16, v16, v24
5287 ; RV64-NEXT: vsrl.vx v24, v16, a1
5288 ; RV64-NEXT: vor.vv v16, v16, v24
5289 ; RV64-NEXT: vnot.v v16, v16
5290 ; RV64-NEXT: vsrl.vi v24, v16, 1
5291 ; RV64-NEXT: vand.vx v24, v24, a2
5292 ; RV64-NEXT: vsub.vv v16, v16, v24
5293 ; RV64-NEXT: vand.vx v24, v16, a3
5294 ; RV64-NEXT: vsrl.vi v16, v16, 2
5295 ; RV64-NEXT: vand.vx v16, v16, a3
5296 ; RV64-NEXT: vadd.vv v16, v24, v16
5297 ; RV64-NEXT: vsrl.vi v24, v16, 4
5298 ; RV64-NEXT: vadd.vv v16, v16, v24
5299 ; RV64-NEXT: vand.vx v16, v16, a4
5300 ; RV64-NEXT: vmul.vx v16, v16, a5
5301 ; RV64-NEXT: vsrl.vx v16, v16, a6
5303 %v = call <32 x i64> @llvm.vp.ctlz.v32i64(<32 x i64> %va, i1 true, <32 x i1> splat (i1 true), i32 %evl)