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.cttz.v2i8(<2 x i8>, i1 immarg, <2 x i1>, i32)
9 define <2 x i8> @vp_cttz_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vp_cttz_v2i8:
12 ; CHECK-NEXT: li a1, 1
13 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
14 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
15 ; CHECK-NEXT: vnot.v v8, v8, v0.t
16 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
17 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
18 ; CHECK-NEXT: li a0, 85
19 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
20 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
21 ; CHECK-NEXT: li a0, 51
22 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
23 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
24 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
25 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
26 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
27 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
28 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
30 %v = call <2 x i8> @llvm.vp.cttz.v2i8(<2 x i8> %va, i1 false, <2 x i1> %m, i32 %evl)
34 define <2 x i8> @vp_cttz_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
35 ; CHECK-LABEL: vp_cttz_v2i8_unmasked:
37 ; CHECK-NEXT: li a1, 1
38 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT: vsub.vx v9, v8, a1
40 ; CHECK-NEXT: vnot.v v8, v8
41 ; CHECK-NEXT: vand.vv v8, v8, v9
42 ; CHECK-NEXT: vsrl.vi v9, v8, 1
43 ; CHECK-NEXT: li a0, 85
44 ; CHECK-NEXT: vand.vx v9, v9, a0
45 ; CHECK-NEXT: vsub.vv v8, v8, v9
46 ; CHECK-NEXT: li a0, 51
47 ; CHECK-NEXT: vand.vx v9, v8, a0
48 ; CHECK-NEXT: vsrl.vi v8, v8, 2
49 ; CHECK-NEXT: vand.vx v8, v8, a0
50 ; CHECK-NEXT: vadd.vv v8, v9, v8
51 ; CHECK-NEXT: vsrl.vi v9, v8, 4
52 ; CHECK-NEXT: vadd.vv v8, v8, v9
53 ; CHECK-NEXT: vand.vi v8, v8, 15
55 %head = insertelement <2 x i1> poison, i1 true, i32 0
56 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
57 %v = call <2 x i8> @llvm.vp.cttz.v2i8(<2 x i8> %va, i1 false, <2 x i1> %m, i32 %evl)
61 declare <4 x i8> @llvm.vp.cttz.v4i8(<4 x i8>, i1 immarg, <4 x i1>, i32)
63 define <4 x i8> @vp_cttz_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
64 ; CHECK-LABEL: vp_cttz_v4i8:
66 ; CHECK-NEXT: li a1, 1
67 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
68 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
69 ; CHECK-NEXT: vnot.v v8, v8, v0.t
70 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
71 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
72 ; CHECK-NEXT: li a0, 85
73 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
74 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
75 ; CHECK-NEXT: li a0, 51
76 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
77 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
78 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
79 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
80 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
81 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
82 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
84 %v = call <4 x i8> @llvm.vp.cttz.v4i8(<4 x i8> %va, i1 false, <4 x i1> %m, i32 %evl)
88 define <4 x i8> @vp_cttz_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
89 ; CHECK-LABEL: vp_cttz_v4i8_unmasked:
91 ; CHECK-NEXT: li a1, 1
92 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
93 ; CHECK-NEXT: vsub.vx v9, v8, a1
94 ; CHECK-NEXT: vnot.v v8, v8
95 ; CHECK-NEXT: vand.vv v8, v8, v9
96 ; CHECK-NEXT: vsrl.vi v9, v8, 1
97 ; CHECK-NEXT: li a0, 85
98 ; CHECK-NEXT: vand.vx v9, v9, a0
99 ; CHECK-NEXT: vsub.vv v8, v8, v9
100 ; CHECK-NEXT: li a0, 51
101 ; CHECK-NEXT: vand.vx v9, v8, a0
102 ; CHECK-NEXT: vsrl.vi v8, v8, 2
103 ; CHECK-NEXT: vand.vx v8, v8, a0
104 ; CHECK-NEXT: vadd.vv v8, v9, v8
105 ; CHECK-NEXT: vsrl.vi v9, v8, 4
106 ; CHECK-NEXT: vadd.vv v8, v8, v9
107 ; CHECK-NEXT: vand.vi v8, v8, 15
109 %head = insertelement <4 x i1> poison, i1 true, i32 0
110 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
111 %v = call <4 x i8> @llvm.vp.cttz.v4i8(<4 x i8> %va, i1 false, <4 x i1> %m, i32 %evl)
115 declare <8 x i8> @llvm.vp.cttz.v8i8(<8 x i8>, i1 immarg, <8 x i1>, i32)
117 define <8 x i8> @vp_cttz_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
118 ; CHECK-LABEL: vp_cttz_v8i8:
120 ; CHECK-NEXT: li a1, 1
121 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
122 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
123 ; CHECK-NEXT: vnot.v v8, v8, v0.t
124 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
125 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
126 ; CHECK-NEXT: li a0, 85
127 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
128 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
129 ; CHECK-NEXT: li a0, 51
130 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
131 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
132 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
133 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
134 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
135 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
136 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
138 %v = call <8 x i8> @llvm.vp.cttz.v8i8(<8 x i8> %va, i1 false, <8 x i1> %m, i32 %evl)
142 define <8 x i8> @vp_cttz_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
143 ; CHECK-LABEL: vp_cttz_v8i8_unmasked:
145 ; CHECK-NEXT: li a1, 1
146 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
147 ; CHECK-NEXT: vsub.vx v9, v8, a1
148 ; CHECK-NEXT: vnot.v v8, v8
149 ; CHECK-NEXT: vand.vv v8, v8, v9
150 ; CHECK-NEXT: vsrl.vi v9, v8, 1
151 ; CHECK-NEXT: li a0, 85
152 ; CHECK-NEXT: vand.vx v9, v9, a0
153 ; CHECK-NEXT: vsub.vv v8, v8, v9
154 ; CHECK-NEXT: li a0, 51
155 ; CHECK-NEXT: vand.vx v9, v8, a0
156 ; CHECK-NEXT: vsrl.vi v8, v8, 2
157 ; CHECK-NEXT: vand.vx v8, v8, a0
158 ; CHECK-NEXT: vadd.vv v8, v9, v8
159 ; CHECK-NEXT: vsrl.vi v9, v8, 4
160 ; CHECK-NEXT: vadd.vv v8, v8, v9
161 ; CHECK-NEXT: vand.vi v8, v8, 15
163 %head = insertelement <8 x i1> poison, i1 true, i32 0
164 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
165 %v = call <8 x i8> @llvm.vp.cttz.v8i8(<8 x i8> %va, i1 false, <8 x i1> %m, i32 %evl)
169 declare <16 x i8> @llvm.vp.cttz.v16i8(<16 x i8>, i1 immarg, <16 x i1>, i32)
171 define <16 x i8> @vp_cttz_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
172 ; CHECK-LABEL: vp_cttz_v16i8:
174 ; CHECK-NEXT: li a1, 1
175 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
176 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
177 ; CHECK-NEXT: vnot.v v8, v8, v0.t
178 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
179 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
180 ; CHECK-NEXT: li a0, 85
181 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
182 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
183 ; CHECK-NEXT: li a0, 51
184 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
185 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
186 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
187 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
188 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
189 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
190 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
192 %v = call <16 x i8> @llvm.vp.cttz.v16i8(<16 x i8> %va, i1 false, <16 x i1> %m, i32 %evl)
196 define <16 x i8> @vp_cttz_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
197 ; CHECK-LABEL: vp_cttz_v16i8_unmasked:
199 ; CHECK-NEXT: li a1, 1
200 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
201 ; CHECK-NEXT: vsub.vx v9, v8, a1
202 ; CHECK-NEXT: vnot.v v8, v8
203 ; CHECK-NEXT: vand.vv v8, v8, v9
204 ; CHECK-NEXT: vsrl.vi v9, v8, 1
205 ; CHECK-NEXT: li a0, 85
206 ; CHECK-NEXT: vand.vx v9, v9, a0
207 ; CHECK-NEXT: vsub.vv v8, v8, v9
208 ; CHECK-NEXT: li a0, 51
209 ; CHECK-NEXT: vand.vx v9, v8, a0
210 ; CHECK-NEXT: vsrl.vi v8, v8, 2
211 ; CHECK-NEXT: vand.vx v8, v8, a0
212 ; CHECK-NEXT: vadd.vv v8, v9, v8
213 ; CHECK-NEXT: vsrl.vi v9, v8, 4
214 ; CHECK-NEXT: vadd.vv v8, v8, v9
215 ; CHECK-NEXT: vand.vi v8, v8, 15
217 %head = insertelement <16 x i1> poison, i1 true, i32 0
218 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
219 %v = call <16 x i8> @llvm.vp.cttz.v16i8(<16 x i8> %va, i1 false, <16 x i1> %m, i32 %evl)
223 declare <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16>, i1 immarg, <2 x i1>, i32)
225 define <2 x i16> @vp_cttz_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
226 ; CHECK-LABEL: vp_cttz_v2i16:
228 ; CHECK-NEXT: li a1, 1
229 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
230 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
231 ; CHECK-NEXT: vnot.v v8, v8, v0.t
232 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
233 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
234 ; CHECK-NEXT: lui a0, 5
235 ; CHECK-NEXT: addi a0, a0, 1365
236 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
237 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
238 ; CHECK-NEXT: lui a0, 3
239 ; CHECK-NEXT: addi a0, a0, 819
240 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
241 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
242 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
243 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
244 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
245 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
246 ; CHECK-NEXT: lui a0, 1
247 ; CHECK-NEXT: addi a0, a0, -241
248 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
249 ; CHECK-NEXT: li a0, 257
250 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
251 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
253 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 false, <2 x i1> %m, i32 %evl)
257 define <2 x i16> @vp_cttz_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
258 ; CHECK-LABEL: vp_cttz_v2i16_unmasked:
260 ; CHECK-NEXT: li a1, 1
261 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
262 ; CHECK-NEXT: vsub.vx v9, v8, a1
263 ; CHECK-NEXT: vnot.v v8, v8
264 ; CHECK-NEXT: vand.vv v8, v8, v9
265 ; CHECK-NEXT: vsrl.vi v9, v8, 1
266 ; CHECK-NEXT: lui a0, 5
267 ; CHECK-NEXT: addi a0, a0, 1365
268 ; CHECK-NEXT: vand.vx v9, v9, a0
269 ; CHECK-NEXT: vsub.vv v8, v8, v9
270 ; CHECK-NEXT: lui a0, 3
271 ; CHECK-NEXT: addi a0, a0, 819
272 ; CHECK-NEXT: vand.vx v9, v8, a0
273 ; CHECK-NEXT: vsrl.vi v8, v8, 2
274 ; CHECK-NEXT: vand.vx v8, v8, a0
275 ; CHECK-NEXT: vadd.vv v8, v9, v8
276 ; CHECK-NEXT: vsrl.vi v9, v8, 4
277 ; CHECK-NEXT: vadd.vv v8, v8, v9
278 ; CHECK-NEXT: lui a0, 1
279 ; CHECK-NEXT: addi a0, a0, -241
280 ; CHECK-NEXT: vand.vx v8, v8, a0
281 ; CHECK-NEXT: li a0, 257
282 ; CHECK-NEXT: vmul.vx v8, v8, a0
283 ; CHECK-NEXT: vsrl.vi v8, v8, 8
285 %head = insertelement <2 x i1> poison, i1 true, i32 0
286 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
287 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 false, <2 x i1> %m, i32 %evl)
291 declare <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16>, i1 immarg, <4 x i1>, i32)
293 define <4 x i16> @vp_cttz_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
294 ; CHECK-LABEL: vp_cttz_v4i16:
296 ; CHECK-NEXT: li a1, 1
297 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
298 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
299 ; CHECK-NEXT: vnot.v v8, v8, v0.t
300 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
301 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
302 ; CHECK-NEXT: lui a0, 5
303 ; CHECK-NEXT: addi a0, a0, 1365
304 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
305 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
306 ; CHECK-NEXT: lui a0, 3
307 ; CHECK-NEXT: addi a0, a0, 819
308 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
309 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
310 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
311 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
312 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
313 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
314 ; CHECK-NEXT: lui a0, 1
315 ; CHECK-NEXT: addi a0, a0, -241
316 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
317 ; CHECK-NEXT: li a0, 257
318 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
319 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
321 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 false, <4 x i1> %m, i32 %evl)
325 define <4 x i16> @vp_cttz_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
326 ; CHECK-LABEL: vp_cttz_v4i16_unmasked:
328 ; CHECK-NEXT: li a1, 1
329 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
330 ; CHECK-NEXT: vsub.vx v9, v8, a1
331 ; CHECK-NEXT: vnot.v v8, v8
332 ; CHECK-NEXT: vand.vv v8, v8, v9
333 ; CHECK-NEXT: vsrl.vi v9, v8, 1
334 ; CHECK-NEXT: lui a0, 5
335 ; CHECK-NEXT: addi a0, a0, 1365
336 ; CHECK-NEXT: vand.vx v9, v9, a0
337 ; CHECK-NEXT: vsub.vv v8, v8, v9
338 ; CHECK-NEXT: lui a0, 3
339 ; CHECK-NEXT: addi a0, a0, 819
340 ; CHECK-NEXT: vand.vx v9, v8, a0
341 ; CHECK-NEXT: vsrl.vi v8, v8, 2
342 ; CHECK-NEXT: vand.vx v8, v8, a0
343 ; CHECK-NEXT: vadd.vv v8, v9, v8
344 ; CHECK-NEXT: vsrl.vi v9, v8, 4
345 ; CHECK-NEXT: vadd.vv v8, v8, v9
346 ; CHECK-NEXT: lui a0, 1
347 ; CHECK-NEXT: addi a0, a0, -241
348 ; CHECK-NEXT: vand.vx v8, v8, a0
349 ; CHECK-NEXT: li a0, 257
350 ; CHECK-NEXT: vmul.vx v8, v8, a0
351 ; CHECK-NEXT: vsrl.vi v8, v8, 8
353 %head = insertelement <4 x i1> poison, i1 true, i32 0
354 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
355 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 false, <4 x i1> %m, i32 %evl)
359 declare <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16>, i1 immarg, <8 x i1>, i32)
361 define <8 x i16> @vp_cttz_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
362 ; CHECK-LABEL: vp_cttz_v8i16:
364 ; CHECK-NEXT: li a1, 1
365 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
366 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
367 ; CHECK-NEXT: vnot.v v8, v8, v0.t
368 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
369 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
370 ; CHECK-NEXT: lui a0, 5
371 ; CHECK-NEXT: addi a0, a0, 1365
372 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
373 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
374 ; CHECK-NEXT: lui a0, 3
375 ; CHECK-NEXT: addi a0, a0, 819
376 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
377 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
378 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
379 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
380 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
381 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
382 ; CHECK-NEXT: lui a0, 1
383 ; CHECK-NEXT: addi a0, a0, -241
384 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
385 ; CHECK-NEXT: li a0, 257
386 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
387 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
389 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 false, <8 x i1> %m, i32 %evl)
393 define <8 x i16> @vp_cttz_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
394 ; CHECK-LABEL: vp_cttz_v8i16_unmasked:
396 ; CHECK-NEXT: li a1, 1
397 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
398 ; CHECK-NEXT: vsub.vx v9, v8, a1
399 ; CHECK-NEXT: vnot.v v8, v8
400 ; CHECK-NEXT: vand.vv v8, v8, v9
401 ; CHECK-NEXT: vsrl.vi v9, v8, 1
402 ; CHECK-NEXT: lui a0, 5
403 ; CHECK-NEXT: addi a0, a0, 1365
404 ; CHECK-NEXT: vand.vx v9, v9, a0
405 ; CHECK-NEXT: vsub.vv v8, v8, v9
406 ; CHECK-NEXT: lui a0, 3
407 ; CHECK-NEXT: addi a0, a0, 819
408 ; CHECK-NEXT: vand.vx v9, v8, a0
409 ; CHECK-NEXT: vsrl.vi v8, v8, 2
410 ; CHECK-NEXT: vand.vx v8, v8, a0
411 ; CHECK-NEXT: vadd.vv v8, v9, v8
412 ; CHECK-NEXT: vsrl.vi v9, v8, 4
413 ; CHECK-NEXT: vadd.vv v8, v8, v9
414 ; CHECK-NEXT: lui a0, 1
415 ; CHECK-NEXT: addi a0, a0, -241
416 ; CHECK-NEXT: vand.vx v8, v8, a0
417 ; CHECK-NEXT: li a0, 257
418 ; CHECK-NEXT: vmul.vx v8, v8, a0
419 ; CHECK-NEXT: vsrl.vi v8, v8, 8
421 %head = insertelement <8 x i1> poison, i1 true, i32 0
422 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
423 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 false, <8 x i1> %m, i32 %evl)
427 declare <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16>, i1 immarg, <16 x i1>, i32)
429 define <16 x i16> @vp_cttz_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
430 ; CHECK-LABEL: vp_cttz_v16i16:
432 ; CHECK-NEXT: li a1, 1
433 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
434 ; CHECK-NEXT: vsub.vx v10, v8, a1, v0.t
435 ; CHECK-NEXT: vnot.v v8, v8, v0.t
436 ; CHECK-NEXT: vand.vv v8, v8, v10, v0.t
437 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
438 ; CHECK-NEXT: lui a0, 5
439 ; CHECK-NEXT: addi a0, a0, 1365
440 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
441 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
442 ; CHECK-NEXT: lui a0, 3
443 ; CHECK-NEXT: addi a0, a0, 819
444 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
445 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
446 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
447 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
448 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
449 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
450 ; CHECK-NEXT: lui a0, 1
451 ; CHECK-NEXT: addi a0, a0, -241
452 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
453 ; CHECK-NEXT: li a0, 257
454 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
455 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
457 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 false, <16 x i1> %m, i32 %evl)
461 define <16 x i16> @vp_cttz_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
462 ; CHECK-LABEL: vp_cttz_v16i16_unmasked:
464 ; CHECK-NEXT: li a1, 1
465 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
466 ; CHECK-NEXT: vsub.vx v10, v8, a1
467 ; CHECK-NEXT: vnot.v v8, v8
468 ; CHECK-NEXT: vand.vv v8, v8, v10
469 ; CHECK-NEXT: vsrl.vi v10, v8, 1
470 ; CHECK-NEXT: lui a0, 5
471 ; CHECK-NEXT: addi a0, a0, 1365
472 ; CHECK-NEXT: vand.vx v10, v10, a0
473 ; CHECK-NEXT: vsub.vv v8, v8, v10
474 ; CHECK-NEXT: lui a0, 3
475 ; CHECK-NEXT: addi a0, a0, 819
476 ; CHECK-NEXT: vand.vx v10, v8, a0
477 ; CHECK-NEXT: vsrl.vi v8, v8, 2
478 ; CHECK-NEXT: vand.vx v8, v8, a0
479 ; CHECK-NEXT: vadd.vv v8, v10, v8
480 ; CHECK-NEXT: vsrl.vi v10, v8, 4
481 ; CHECK-NEXT: vadd.vv v8, v8, v10
482 ; CHECK-NEXT: lui a0, 1
483 ; CHECK-NEXT: addi a0, a0, -241
484 ; CHECK-NEXT: vand.vx v8, v8, a0
485 ; CHECK-NEXT: li a0, 257
486 ; CHECK-NEXT: vmul.vx v8, v8, a0
487 ; CHECK-NEXT: vsrl.vi v8, v8, 8
489 %head = insertelement <16 x i1> poison, i1 true, i32 0
490 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
491 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 false, <16 x i1> %m, i32 %evl)
495 declare <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32>, i1 immarg, <2 x i1>, i32)
497 define <2 x i32> @vp_cttz_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
498 ; CHECK-LABEL: vp_cttz_v2i32:
500 ; CHECK-NEXT: li a1, 1
501 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
502 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
503 ; CHECK-NEXT: vnot.v v8, v8, v0.t
504 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
505 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
506 ; CHECK-NEXT: lui a0, 349525
507 ; CHECK-NEXT: addi a0, a0, 1365
508 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
509 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
510 ; CHECK-NEXT: lui a0, 209715
511 ; CHECK-NEXT: addi a0, a0, 819
512 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
513 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
514 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
515 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
516 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
517 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
518 ; CHECK-NEXT: lui a0, 61681
519 ; CHECK-NEXT: addi a0, a0, -241
520 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
521 ; CHECK-NEXT: lui a0, 4112
522 ; CHECK-NEXT: addi a0, a0, 257
523 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
524 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
526 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 false, <2 x i1> %m, i32 %evl)
530 define <2 x i32> @vp_cttz_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
531 ; CHECK-LABEL: vp_cttz_v2i32_unmasked:
533 ; CHECK-NEXT: li a1, 1
534 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
535 ; CHECK-NEXT: vsub.vx v9, v8, a1
536 ; CHECK-NEXT: vnot.v v8, v8
537 ; CHECK-NEXT: vand.vv v8, v8, v9
538 ; CHECK-NEXT: vsrl.vi v9, v8, 1
539 ; CHECK-NEXT: lui a0, 349525
540 ; CHECK-NEXT: addi a0, a0, 1365
541 ; CHECK-NEXT: vand.vx v9, v9, a0
542 ; CHECK-NEXT: vsub.vv v8, v8, v9
543 ; CHECK-NEXT: lui a0, 209715
544 ; CHECK-NEXT: addi a0, a0, 819
545 ; CHECK-NEXT: vand.vx v9, v8, a0
546 ; CHECK-NEXT: vsrl.vi v8, v8, 2
547 ; CHECK-NEXT: vand.vx v8, v8, a0
548 ; CHECK-NEXT: vadd.vv v8, v9, v8
549 ; CHECK-NEXT: vsrl.vi v9, v8, 4
550 ; CHECK-NEXT: vadd.vv v8, v8, v9
551 ; CHECK-NEXT: lui a0, 61681
552 ; CHECK-NEXT: addi a0, a0, -241
553 ; CHECK-NEXT: vand.vx v8, v8, a0
554 ; CHECK-NEXT: lui a0, 4112
555 ; CHECK-NEXT: addi a0, a0, 257
556 ; CHECK-NEXT: vmul.vx v8, v8, a0
557 ; CHECK-NEXT: vsrl.vi v8, v8, 24
559 %head = insertelement <2 x i1> poison, i1 true, i32 0
560 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
561 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 false, <2 x i1> %m, i32 %evl)
565 declare <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32>, i1 immarg, <4 x i1>, i32)
567 define <4 x i32> @vp_cttz_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
568 ; CHECK-LABEL: vp_cttz_v4i32:
570 ; CHECK-NEXT: li a1, 1
571 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
572 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
573 ; CHECK-NEXT: vnot.v v8, v8, v0.t
574 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
575 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
576 ; CHECK-NEXT: lui a0, 349525
577 ; CHECK-NEXT: addi a0, a0, 1365
578 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
579 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
580 ; CHECK-NEXT: lui a0, 209715
581 ; CHECK-NEXT: addi a0, a0, 819
582 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
583 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
584 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
585 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
586 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
587 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
588 ; CHECK-NEXT: lui a0, 61681
589 ; CHECK-NEXT: addi a0, a0, -241
590 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
591 ; CHECK-NEXT: lui a0, 4112
592 ; CHECK-NEXT: addi a0, a0, 257
593 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
594 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
596 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 false, <4 x i1> %m, i32 %evl)
600 define <4 x i32> @vp_cttz_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
601 ; CHECK-LABEL: vp_cttz_v4i32_unmasked:
603 ; CHECK-NEXT: li a1, 1
604 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
605 ; CHECK-NEXT: vsub.vx v9, v8, a1
606 ; CHECK-NEXT: vnot.v v8, v8
607 ; CHECK-NEXT: vand.vv v8, v8, v9
608 ; CHECK-NEXT: vsrl.vi v9, v8, 1
609 ; CHECK-NEXT: lui a0, 349525
610 ; CHECK-NEXT: addi a0, a0, 1365
611 ; CHECK-NEXT: vand.vx v9, v9, a0
612 ; CHECK-NEXT: vsub.vv v8, v8, v9
613 ; CHECK-NEXT: lui a0, 209715
614 ; CHECK-NEXT: addi a0, a0, 819
615 ; CHECK-NEXT: vand.vx v9, v8, a0
616 ; CHECK-NEXT: vsrl.vi v8, v8, 2
617 ; CHECK-NEXT: vand.vx v8, v8, a0
618 ; CHECK-NEXT: vadd.vv v8, v9, v8
619 ; CHECK-NEXT: vsrl.vi v9, v8, 4
620 ; CHECK-NEXT: vadd.vv v8, v8, v9
621 ; CHECK-NEXT: lui a0, 61681
622 ; CHECK-NEXT: addi a0, a0, -241
623 ; CHECK-NEXT: vand.vx v8, v8, a0
624 ; CHECK-NEXT: lui a0, 4112
625 ; CHECK-NEXT: addi a0, a0, 257
626 ; CHECK-NEXT: vmul.vx v8, v8, a0
627 ; CHECK-NEXT: vsrl.vi v8, v8, 24
629 %head = insertelement <4 x i1> poison, i1 true, i32 0
630 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
631 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 false, <4 x i1> %m, i32 %evl)
635 declare <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32>, i1 immarg, <8 x i1>, i32)
637 define <8 x i32> @vp_cttz_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
638 ; CHECK-LABEL: vp_cttz_v8i32:
640 ; CHECK-NEXT: li a1, 1
641 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
642 ; CHECK-NEXT: vsub.vx v10, v8, a1, v0.t
643 ; CHECK-NEXT: vnot.v v8, v8, v0.t
644 ; CHECK-NEXT: vand.vv v8, v8, v10, v0.t
645 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
646 ; CHECK-NEXT: lui a0, 349525
647 ; CHECK-NEXT: addi a0, a0, 1365
648 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
649 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
650 ; CHECK-NEXT: lui a0, 209715
651 ; CHECK-NEXT: addi a0, a0, 819
652 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
653 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
654 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
655 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
656 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
657 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
658 ; CHECK-NEXT: lui a0, 61681
659 ; CHECK-NEXT: addi a0, a0, -241
660 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
661 ; CHECK-NEXT: lui a0, 4112
662 ; CHECK-NEXT: addi a0, a0, 257
663 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
664 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
666 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 false, <8 x i1> %m, i32 %evl)
670 define <8 x i32> @vp_cttz_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
671 ; CHECK-LABEL: vp_cttz_v8i32_unmasked:
673 ; CHECK-NEXT: li a1, 1
674 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
675 ; CHECK-NEXT: vsub.vx v10, v8, a1
676 ; CHECK-NEXT: vnot.v v8, v8
677 ; CHECK-NEXT: vand.vv v8, v8, v10
678 ; CHECK-NEXT: vsrl.vi v10, v8, 1
679 ; CHECK-NEXT: lui a0, 349525
680 ; CHECK-NEXT: addi a0, a0, 1365
681 ; CHECK-NEXT: vand.vx v10, v10, a0
682 ; CHECK-NEXT: vsub.vv v8, v8, v10
683 ; CHECK-NEXT: lui a0, 209715
684 ; CHECK-NEXT: addi a0, a0, 819
685 ; CHECK-NEXT: vand.vx v10, v8, a0
686 ; CHECK-NEXT: vsrl.vi v8, v8, 2
687 ; CHECK-NEXT: vand.vx v8, v8, a0
688 ; CHECK-NEXT: vadd.vv v8, v10, v8
689 ; CHECK-NEXT: vsrl.vi v10, v8, 4
690 ; CHECK-NEXT: vadd.vv v8, v8, v10
691 ; CHECK-NEXT: lui a0, 61681
692 ; CHECK-NEXT: addi a0, a0, -241
693 ; CHECK-NEXT: vand.vx v8, v8, a0
694 ; CHECK-NEXT: lui a0, 4112
695 ; CHECK-NEXT: addi a0, a0, 257
696 ; CHECK-NEXT: vmul.vx v8, v8, a0
697 ; CHECK-NEXT: vsrl.vi v8, v8, 24
699 %head = insertelement <8 x i1> poison, i1 true, i32 0
700 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
701 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 false, <8 x i1> %m, i32 %evl)
705 declare <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32>, i1 immarg, <16 x i1>, i32)
707 define <16 x i32> @vp_cttz_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
708 ; CHECK-LABEL: vp_cttz_v16i32:
710 ; CHECK-NEXT: li a1, 1
711 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
712 ; CHECK-NEXT: vsub.vx v12, v8, a1, v0.t
713 ; CHECK-NEXT: vnot.v v8, v8, v0.t
714 ; CHECK-NEXT: vand.vv v8, v8, v12, v0.t
715 ; CHECK-NEXT: vsrl.vi v12, v8, 1, v0.t
716 ; CHECK-NEXT: lui a0, 349525
717 ; CHECK-NEXT: addi a0, a0, 1365
718 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
719 ; CHECK-NEXT: vsub.vv v8, v8, v12, v0.t
720 ; CHECK-NEXT: lui a0, 209715
721 ; CHECK-NEXT: addi a0, a0, 819
722 ; CHECK-NEXT: vand.vx v12, v8, a0, v0.t
723 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
724 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
725 ; CHECK-NEXT: vadd.vv v8, v12, v8, v0.t
726 ; CHECK-NEXT: vsrl.vi v12, v8, 4, v0.t
727 ; CHECK-NEXT: vadd.vv v8, v8, v12, v0.t
728 ; CHECK-NEXT: lui a0, 61681
729 ; CHECK-NEXT: addi a0, a0, -241
730 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
731 ; CHECK-NEXT: lui a0, 4112
732 ; CHECK-NEXT: addi a0, a0, 257
733 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
734 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
736 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 false, <16 x i1> %m, i32 %evl)
740 define <16 x i32> @vp_cttz_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
741 ; CHECK-LABEL: vp_cttz_v16i32_unmasked:
743 ; CHECK-NEXT: li a1, 1
744 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
745 ; CHECK-NEXT: vsub.vx v12, v8, a1
746 ; CHECK-NEXT: vnot.v v8, v8
747 ; CHECK-NEXT: vand.vv v8, v8, v12
748 ; CHECK-NEXT: vsrl.vi v12, v8, 1
749 ; CHECK-NEXT: lui a0, 349525
750 ; CHECK-NEXT: addi a0, a0, 1365
751 ; CHECK-NEXT: vand.vx v12, v12, a0
752 ; CHECK-NEXT: vsub.vv v8, v8, v12
753 ; CHECK-NEXT: lui a0, 209715
754 ; CHECK-NEXT: addi a0, a0, 819
755 ; CHECK-NEXT: vand.vx v12, v8, a0
756 ; CHECK-NEXT: vsrl.vi v8, v8, 2
757 ; CHECK-NEXT: vand.vx v8, v8, a0
758 ; CHECK-NEXT: vadd.vv v8, v12, v8
759 ; CHECK-NEXT: vsrl.vi v12, v8, 4
760 ; CHECK-NEXT: vadd.vv v8, v8, v12
761 ; CHECK-NEXT: lui a0, 61681
762 ; CHECK-NEXT: addi a0, a0, -241
763 ; CHECK-NEXT: vand.vx v8, v8, a0
764 ; CHECK-NEXT: lui a0, 4112
765 ; CHECK-NEXT: addi a0, a0, 257
766 ; CHECK-NEXT: vmul.vx v8, v8, a0
767 ; CHECK-NEXT: vsrl.vi v8, v8, 24
769 %head = insertelement <16 x i1> poison, i1 true, i32 0
770 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
771 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 false, <16 x i1> %m, i32 %evl)
775 declare <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64>, i1 immarg, <2 x i1>, i32)
777 define <2 x i64> @vp_cttz_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
778 ; RV32-LABEL: vp_cttz_v2i64:
780 ; RV32-NEXT: li a1, 1
781 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
782 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
783 ; RV32-NEXT: vnot.v v8, v8, v0.t
784 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
785 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
786 ; RV32-NEXT: lui a1, 349525
787 ; RV32-NEXT: addi a1, a1, 1365
788 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
789 ; RV32-NEXT: vmv.v.x v10, a1
790 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
791 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
792 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
793 ; RV32-NEXT: lui a1, 209715
794 ; RV32-NEXT: addi a1, a1, 819
795 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
796 ; RV32-NEXT: vmv.v.x v9, a1
797 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
798 ; RV32-NEXT: vand.vv v10, v8, v9, v0.t
799 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
800 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
801 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
802 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
803 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
804 ; RV32-NEXT: lui a1, 61681
805 ; RV32-NEXT: addi a1, a1, -241
806 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
807 ; RV32-NEXT: vmv.v.x v9, a1
808 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
809 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
810 ; RV32-NEXT: lui a1, 4112
811 ; RV32-NEXT: addi a1, a1, 257
812 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
813 ; RV32-NEXT: vmv.v.x v9, a1
814 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
815 ; RV32-NEXT: vmul.vv v8, v8, v9, v0.t
816 ; RV32-NEXT: li a0, 56
817 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
820 ; RV64-LABEL: vp_cttz_v2i64:
822 ; RV64-NEXT: li a1, 1
823 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
824 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
825 ; RV64-NEXT: vnot.v v8, v8, v0.t
826 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
827 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
828 ; RV64-NEXT: lui a0, 349525
829 ; RV64-NEXT: addiw a0, a0, 1365
830 ; RV64-NEXT: slli a1, a0, 32
831 ; RV64-NEXT: add a0, a0, a1
832 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
833 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
834 ; RV64-NEXT: lui a0, 209715
835 ; RV64-NEXT: addiw a0, a0, 819
836 ; RV64-NEXT: slli a1, a0, 32
837 ; RV64-NEXT: add a0, a0, a1
838 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
839 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
840 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
841 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
842 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
843 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
844 ; RV64-NEXT: lui a0, 61681
845 ; RV64-NEXT: addiw a0, a0, -241
846 ; RV64-NEXT: slli a1, a0, 32
847 ; RV64-NEXT: add a0, a0, a1
848 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
849 ; RV64-NEXT: lui a0, 4112
850 ; RV64-NEXT: addiw a0, a0, 257
851 ; RV64-NEXT: slli a1, a0, 32
852 ; RV64-NEXT: add a0, a0, a1
853 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
854 ; RV64-NEXT: li a0, 56
855 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
857 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 false, <2 x i1> %m, i32 %evl)
861 define <2 x i64> @vp_cttz_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
862 ; RV32-LABEL: vp_cttz_v2i64_unmasked:
864 ; RV32-NEXT: li a1, 1
865 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
866 ; RV32-NEXT: vsub.vx v9, v8, a1
867 ; RV32-NEXT: vnot.v v8, v8
868 ; RV32-NEXT: vand.vv v8, v8, v9
869 ; RV32-NEXT: vsrl.vi v9, v8, 1
870 ; RV32-NEXT: lui a1, 349525
871 ; RV32-NEXT: addi a1, a1, 1365
872 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
873 ; RV32-NEXT: vmv.v.x v10, a1
874 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
875 ; RV32-NEXT: vand.vv v9, v9, v10
876 ; RV32-NEXT: vsub.vv v8, v8, v9
877 ; RV32-NEXT: lui a1, 209715
878 ; RV32-NEXT: addi a1, a1, 819
879 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
880 ; RV32-NEXT: vmv.v.x v9, a1
881 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
882 ; RV32-NEXT: vand.vv v10, v8, v9
883 ; RV32-NEXT: vsrl.vi v8, v8, 2
884 ; RV32-NEXT: vand.vv v8, v8, v9
885 ; RV32-NEXT: vadd.vv v8, v10, v8
886 ; RV32-NEXT: vsrl.vi v9, v8, 4
887 ; RV32-NEXT: vadd.vv v8, v8, v9
888 ; RV32-NEXT: lui a1, 61681
889 ; RV32-NEXT: addi a1, a1, -241
890 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
891 ; RV32-NEXT: vmv.v.x v9, a1
892 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
893 ; RV32-NEXT: vand.vv v8, v8, v9
894 ; RV32-NEXT: lui a1, 4112
895 ; RV32-NEXT: addi a1, a1, 257
896 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
897 ; RV32-NEXT: vmv.v.x v9, a1
898 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
899 ; RV32-NEXT: vmul.vv v8, v8, v9
900 ; RV32-NEXT: li a0, 56
901 ; RV32-NEXT: vsrl.vx v8, v8, a0
904 ; RV64-LABEL: vp_cttz_v2i64_unmasked:
906 ; RV64-NEXT: li a1, 1
907 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
908 ; RV64-NEXT: vsub.vx v9, v8, a1
909 ; RV64-NEXT: vnot.v v8, v8
910 ; RV64-NEXT: vand.vv v8, v8, v9
911 ; RV64-NEXT: vsrl.vi v9, v8, 1
912 ; RV64-NEXT: lui a0, 349525
913 ; RV64-NEXT: addiw a0, a0, 1365
914 ; RV64-NEXT: slli a1, a0, 32
915 ; RV64-NEXT: add a0, a0, a1
916 ; RV64-NEXT: vand.vx v9, v9, a0
917 ; RV64-NEXT: vsub.vv v8, v8, v9
918 ; RV64-NEXT: lui a0, 209715
919 ; RV64-NEXT: addiw a0, a0, 819
920 ; RV64-NEXT: slli a1, a0, 32
921 ; RV64-NEXT: add a0, a0, a1
922 ; RV64-NEXT: vand.vx v9, v8, a0
923 ; RV64-NEXT: vsrl.vi v8, v8, 2
924 ; RV64-NEXT: vand.vx v8, v8, a0
925 ; RV64-NEXT: vadd.vv v8, v9, v8
926 ; RV64-NEXT: vsrl.vi v9, v8, 4
927 ; RV64-NEXT: vadd.vv v8, v8, v9
928 ; RV64-NEXT: lui a0, 61681
929 ; RV64-NEXT: addiw a0, a0, -241
930 ; RV64-NEXT: slli a1, a0, 32
931 ; RV64-NEXT: add a0, a0, a1
932 ; RV64-NEXT: vand.vx v8, v8, a0
933 ; RV64-NEXT: lui a0, 4112
934 ; RV64-NEXT: addiw a0, a0, 257
935 ; RV64-NEXT: slli a1, a0, 32
936 ; RV64-NEXT: add a0, a0, a1
937 ; RV64-NEXT: vmul.vx v8, v8, a0
938 ; RV64-NEXT: li a0, 56
939 ; RV64-NEXT: vsrl.vx v8, v8, a0
941 %head = insertelement <2 x i1> poison, i1 true, i32 0
942 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
943 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 false, <2 x i1> %m, i32 %evl)
947 declare <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64>, i1 immarg, <4 x i1>, i32)
949 define <4 x i64> @vp_cttz_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
950 ; RV32-LABEL: vp_cttz_v4i64:
952 ; RV32-NEXT: li a1, 1
953 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
954 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
955 ; RV32-NEXT: vnot.v v8, v8, v0.t
956 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
957 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
958 ; RV32-NEXT: lui a1, 349525
959 ; RV32-NEXT: addi a1, a1, 1365
960 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
961 ; RV32-NEXT: vmv.v.x v12, a1
962 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
963 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
964 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
965 ; RV32-NEXT: lui a1, 209715
966 ; RV32-NEXT: addi a1, a1, 819
967 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
968 ; RV32-NEXT: vmv.v.x v10, a1
969 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
970 ; RV32-NEXT: vand.vv v12, v8, v10, v0.t
971 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
972 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
973 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
974 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
975 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
976 ; RV32-NEXT: lui a1, 61681
977 ; RV32-NEXT: addi a1, a1, -241
978 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
979 ; RV32-NEXT: vmv.v.x v10, a1
980 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
981 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
982 ; RV32-NEXT: lui a1, 4112
983 ; RV32-NEXT: addi a1, a1, 257
984 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
985 ; RV32-NEXT: vmv.v.x v10, a1
986 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
987 ; RV32-NEXT: vmul.vv v8, v8, v10, v0.t
988 ; RV32-NEXT: li a0, 56
989 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
992 ; RV64-LABEL: vp_cttz_v4i64:
994 ; RV64-NEXT: li a1, 1
995 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
996 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
997 ; RV64-NEXT: vnot.v v8, v8, v0.t
998 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
999 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
1000 ; RV64-NEXT: lui a0, 349525
1001 ; RV64-NEXT: addiw a0, a0, 1365
1002 ; RV64-NEXT: slli a1, a0, 32
1003 ; RV64-NEXT: add a0, a0, a1
1004 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
1005 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
1006 ; RV64-NEXT: lui a0, 209715
1007 ; RV64-NEXT: addiw a0, a0, 819
1008 ; RV64-NEXT: slli a1, a0, 32
1009 ; RV64-NEXT: add a0, a0, a1
1010 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
1011 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1012 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1013 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
1014 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
1015 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
1016 ; RV64-NEXT: lui a0, 61681
1017 ; RV64-NEXT: addiw a0, a0, -241
1018 ; RV64-NEXT: slli a1, a0, 32
1019 ; RV64-NEXT: add a0, a0, a1
1020 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1021 ; RV64-NEXT: lui a0, 4112
1022 ; RV64-NEXT: addiw a0, a0, 257
1023 ; RV64-NEXT: slli a1, a0, 32
1024 ; RV64-NEXT: add a0, a0, a1
1025 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1026 ; RV64-NEXT: li a0, 56
1027 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1029 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 false, <4 x i1> %m, i32 %evl)
1033 define <4 x i64> @vp_cttz_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1034 ; RV32-LABEL: vp_cttz_v4i64_unmasked:
1036 ; RV32-NEXT: li a1, 1
1037 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1038 ; RV32-NEXT: vsub.vx v10, v8, a1
1039 ; RV32-NEXT: vnot.v v8, v8
1040 ; RV32-NEXT: vand.vv v8, v8, v10
1041 ; RV32-NEXT: vsrl.vi v10, v8, 1
1042 ; RV32-NEXT: lui a1, 349525
1043 ; RV32-NEXT: addi a1, a1, 1365
1044 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1045 ; RV32-NEXT: vmv.v.x v12, a1
1046 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1047 ; RV32-NEXT: vand.vv v10, v10, v12
1048 ; RV32-NEXT: vsub.vv v8, v8, v10
1049 ; RV32-NEXT: lui a1, 209715
1050 ; RV32-NEXT: addi a1, a1, 819
1051 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1052 ; RV32-NEXT: vmv.v.x v10, a1
1053 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1054 ; RV32-NEXT: vand.vv v12, v8, v10
1055 ; RV32-NEXT: vsrl.vi v8, v8, 2
1056 ; RV32-NEXT: vand.vv v8, v8, v10
1057 ; RV32-NEXT: vadd.vv v8, v12, v8
1058 ; RV32-NEXT: vsrl.vi v10, v8, 4
1059 ; RV32-NEXT: vadd.vv v8, v8, v10
1060 ; RV32-NEXT: lui a1, 61681
1061 ; RV32-NEXT: addi a1, a1, -241
1062 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1063 ; RV32-NEXT: vmv.v.x v10, a1
1064 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1065 ; RV32-NEXT: vand.vv v8, v8, v10
1066 ; RV32-NEXT: lui a1, 4112
1067 ; RV32-NEXT: addi a1, a1, 257
1068 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1069 ; RV32-NEXT: vmv.v.x v10, a1
1070 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1071 ; RV32-NEXT: vmul.vv v8, v8, v10
1072 ; RV32-NEXT: li a0, 56
1073 ; RV32-NEXT: vsrl.vx v8, v8, a0
1076 ; RV64-LABEL: vp_cttz_v4i64_unmasked:
1078 ; RV64-NEXT: li a1, 1
1079 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1080 ; RV64-NEXT: vsub.vx v10, v8, a1
1081 ; RV64-NEXT: vnot.v v8, v8
1082 ; RV64-NEXT: vand.vv v8, v8, v10
1083 ; RV64-NEXT: vsrl.vi v10, v8, 1
1084 ; RV64-NEXT: lui a0, 349525
1085 ; RV64-NEXT: addiw a0, a0, 1365
1086 ; RV64-NEXT: slli a1, a0, 32
1087 ; RV64-NEXT: add a0, a0, a1
1088 ; RV64-NEXT: vand.vx v10, v10, a0
1089 ; RV64-NEXT: vsub.vv v8, v8, v10
1090 ; RV64-NEXT: lui a0, 209715
1091 ; RV64-NEXT: addiw a0, a0, 819
1092 ; RV64-NEXT: slli a1, a0, 32
1093 ; RV64-NEXT: add a0, a0, a1
1094 ; RV64-NEXT: vand.vx v10, v8, a0
1095 ; RV64-NEXT: vsrl.vi v8, v8, 2
1096 ; RV64-NEXT: vand.vx v8, v8, a0
1097 ; RV64-NEXT: vadd.vv v8, v10, v8
1098 ; RV64-NEXT: vsrl.vi v10, v8, 4
1099 ; RV64-NEXT: vadd.vv v8, v8, v10
1100 ; RV64-NEXT: lui a0, 61681
1101 ; RV64-NEXT: addiw a0, a0, -241
1102 ; RV64-NEXT: slli a1, a0, 32
1103 ; RV64-NEXT: add a0, a0, a1
1104 ; RV64-NEXT: vand.vx v8, v8, a0
1105 ; RV64-NEXT: lui a0, 4112
1106 ; RV64-NEXT: addiw a0, a0, 257
1107 ; RV64-NEXT: slli a1, a0, 32
1108 ; RV64-NEXT: add a0, a0, a1
1109 ; RV64-NEXT: vmul.vx v8, v8, a0
1110 ; RV64-NEXT: li a0, 56
1111 ; RV64-NEXT: vsrl.vx v8, v8, a0
1113 %head = insertelement <4 x i1> poison, i1 true, i32 0
1114 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1115 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 false, <4 x i1> %m, i32 %evl)
1119 declare <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64>, i1 immarg, <8 x i1>, i32)
1121 define <8 x i64> @vp_cttz_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1122 ; RV32-LABEL: vp_cttz_v8i64:
1124 ; RV32-NEXT: li a1, 1
1125 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1126 ; RV32-NEXT: vsub.vx v12, v8, a1, v0.t
1127 ; RV32-NEXT: vnot.v v8, v8, v0.t
1128 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1129 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
1130 ; RV32-NEXT: lui a1, 349525
1131 ; RV32-NEXT: addi a1, a1, 1365
1132 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1133 ; RV32-NEXT: vmv.v.x v16, a1
1134 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1135 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
1136 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
1137 ; RV32-NEXT: lui a1, 209715
1138 ; RV32-NEXT: addi a1, a1, 819
1139 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1140 ; RV32-NEXT: vmv.v.x v12, a1
1141 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1142 ; RV32-NEXT: vand.vv v16, v8, v12, v0.t
1143 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1144 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1145 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
1146 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
1147 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
1148 ; RV32-NEXT: lui a1, 61681
1149 ; RV32-NEXT: addi a1, a1, -241
1150 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1151 ; RV32-NEXT: vmv.v.x v12, a1
1152 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1153 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1154 ; RV32-NEXT: lui a1, 4112
1155 ; RV32-NEXT: addi a1, a1, 257
1156 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1157 ; RV32-NEXT: vmv.v.x v12, a1
1158 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1159 ; RV32-NEXT: vmul.vv v8, v8, v12, v0.t
1160 ; RV32-NEXT: li a0, 56
1161 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1164 ; RV64-LABEL: vp_cttz_v8i64:
1166 ; RV64-NEXT: li a1, 1
1167 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1168 ; RV64-NEXT: vsub.vx v12, v8, a1, v0.t
1169 ; RV64-NEXT: vnot.v v8, v8, v0.t
1170 ; RV64-NEXT: vand.vv v8, v8, v12, v0.t
1171 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
1172 ; RV64-NEXT: lui a0, 349525
1173 ; RV64-NEXT: addiw a0, a0, 1365
1174 ; RV64-NEXT: slli a1, a0, 32
1175 ; RV64-NEXT: add a0, a0, a1
1176 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
1177 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
1178 ; RV64-NEXT: lui a0, 209715
1179 ; RV64-NEXT: addiw a0, a0, 819
1180 ; RV64-NEXT: slli a1, a0, 32
1181 ; RV64-NEXT: add a0, a0, a1
1182 ; RV64-NEXT: vand.vx v12, v8, a0, v0.t
1183 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1184 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1185 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
1186 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
1187 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
1188 ; RV64-NEXT: lui a0, 61681
1189 ; RV64-NEXT: addiw a0, a0, -241
1190 ; RV64-NEXT: slli a1, a0, 32
1191 ; RV64-NEXT: add a0, a0, a1
1192 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1193 ; RV64-NEXT: lui a0, 4112
1194 ; RV64-NEXT: addiw a0, a0, 257
1195 ; RV64-NEXT: slli a1, a0, 32
1196 ; RV64-NEXT: add a0, a0, a1
1197 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1198 ; RV64-NEXT: li a0, 56
1199 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1201 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 false, <8 x i1> %m, i32 %evl)
1205 define <8 x i64> @vp_cttz_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1206 ; RV32-LABEL: vp_cttz_v8i64_unmasked:
1208 ; RV32-NEXT: li a1, 1
1209 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1210 ; RV32-NEXT: vsub.vx v12, v8, a1
1211 ; RV32-NEXT: vnot.v v8, v8
1212 ; RV32-NEXT: vand.vv v8, v8, v12
1213 ; RV32-NEXT: vsrl.vi v12, v8, 1
1214 ; RV32-NEXT: lui a1, 349525
1215 ; RV32-NEXT: addi a1, a1, 1365
1216 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1217 ; RV32-NEXT: vmv.v.x v16, a1
1218 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1219 ; RV32-NEXT: vand.vv v12, v12, v16
1220 ; RV32-NEXT: vsub.vv v8, v8, v12
1221 ; RV32-NEXT: lui a1, 209715
1222 ; RV32-NEXT: addi a1, a1, 819
1223 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1224 ; RV32-NEXT: vmv.v.x v12, a1
1225 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1226 ; RV32-NEXT: vand.vv v16, v8, v12
1227 ; RV32-NEXT: vsrl.vi v8, v8, 2
1228 ; RV32-NEXT: vand.vv v8, v8, v12
1229 ; RV32-NEXT: vadd.vv v8, v16, v8
1230 ; RV32-NEXT: vsrl.vi v12, v8, 4
1231 ; RV32-NEXT: vadd.vv v8, v8, v12
1232 ; RV32-NEXT: lui a1, 61681
1233 ; RV32-NEXT: addi a1, a1, -241
1234 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1235 ; RV32-NEXT: vmv.v.x v12, a1
1236 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1237 ; RV32-NEXT: vand.vv v8, v8, v12
1238 ; RV32-NEXT: lui a1, 4112
1239 ; RV32-NEXT: addi a1, a1, 257
1240 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
1241 ; RV32-NEXT: vmv.v.x v12, a1
1242 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1243 ; RV32-NEXT: vmul.vv v8, v8, v12
1244 ; RV32-NEXT: li a0, 56
1245 ; RV32-NEXT: vsrl.vx v8, v8, a0
1248 ; RV64-LABEL: vp_cttz_v8i64_unmasked:
1250 ; RV64-NEXT: li a1, 1
1251 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1252 ; RV64-NEXT: vsub.vx v12, v8, a1
1253 ; RV64-NEXT: vnot.v v8, v8
1254 ; RV64-NEXT: vand.vv v8, v8, v12
1255 ; RV64-NEXT: vsrl.vi v12, v8, 1
1256 ; RV64-NEXT: lui a0, 349525
1257 ; RV64-NEXT: addiw a0, a0, 1365
1258 ; RV64-NEXT: slli a1, a0, 32
1259 ; RV64-NEXT: add a0, a0, a1
1260 ; RV64-NEXT: vand.vx v12, v12, a0
1261 ; RV64-NEXT: vsub.vv v8, v8, v12
1262 ; RV64-NEXT: lui a0, 209715
1263 ; RV64-NEXT: addiw a0, a0, 819
1264 ; RV64-NEXT: slli a1, a0, 32
1265 ; RV64-NEXT: add a0, a0, a1
1266 ; RV64-NEXT: vand.vx v12, v8, a0
1267 ; RV64-NEXT: vsrl.vi v8, v8, 2
1268 ; RV64-NEXT: vand.vx v8, v8, a0
1269 ; RV64-NEXT: vadd.vv v8, v12, v8
1270 ; RV64-NEXT: vsrl.vi v12, v8, 4
1271 ; RV64-NEXT: vadd.vv v8, v8, v12
1272 ; RV64-NEXT: lui a0, 61681
1273 ; RV64-NEXT: addiw a0, a0, -241
1274 ; RV64-NEXT: slli a1, a0, 32
1275 ; RV64-NEXT: add a0, a0, a1
1276 ; RV64-NEXT: vand.vx v8, v8, a0
1277 ; RV64-NEXT: lui a0, 4112
1278 ; RV64-NEXT: addiw a0, a0, 257
1279 ; RV64-NEXT: slli a1, a0, 32
1280 ; RV64-NEXT: add a0, a0, a1
1281 ; RV64-NEXT: vmul.vx v8, v8, a0
1282 ; RV64-NEXT: li a0, 56
1283 ; RV64-NEXT: vsrl.vx v8, v8, a0
1285 %head = insertelement <8 x i1> poison, i1 true, i32 0
1286 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1287 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 false, <8 x i1> %m, i32 %evl)
1291 declare <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64>, i1 immarg, <15 x i1>, i32)
1293 define <15 x i64> @vp_cttz_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
1294 ; RV32-LABEL: vp_cttz_v15i64:
1296 ; RV32-NEXT: addi sp, sp, -32
1297 ; RV32-NEXT: .cfi_def_cfa_offset 32
1298 ; RV32-NEXT: lui a1, 349525
1299 ; RV32-NEXT: addi a1, a1, 1365
1300 ; RV32-NEXT: sw a1, 28(sp)
1301 ; RV32-NEXT: sw a1, 24(sp)
1302 ; RV32-NEXT: lui a1, 209715
1303 ; RV32-NEXT: addi a1, a1, 819
1304 ; RV32-NEXT: sw a1, 20(sp)
1305 ; RV32-NEXT: sw a1, 16(sp)
1306 ; RV32-NEXT: lui a1, 61681
1307 ; RV32-NEXT: addi a1, a1, -241
1308 ; RV32-NEXT: sw a1, 12(sp)
1309 ; RV32-NEXT: sw a1, 8(sp)
1310 ; RV32-NEXT: lui a1, 4112
1311 ; RV32-NEXT: addi a1, a1, 257
1312 ; RV32-NEXT: sw a1, 4(sp)
1313 ; RV32-NEXT: sw a1, 0(sp)
1314 ; RV32-NEXT: li a1, 1
1315 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1316 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
1317 ; RV32-NEXT: vnot.v v8, v8, v0.t
1318 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1319 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
1320 ; RV32-NEXT: addi a1, sp, 24
1321 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1322 ; RV32-NEXT: vlse64.v v24, (a1), zero
1323 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1324 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
1325 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
1326 ; RV32-NEXT: addi a1, sp, 16
1327 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1328 ; RV32-NEXT: vlse64.v v16, (a1), zero
1329 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1330 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
1331 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1332 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1333 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
1334 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1335 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1336 ; RV32-NEXT: addi a1, sp, 8
1337 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1338 ; RV32-NEXT: vlse64.v v16, (a1), zero
1339 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1340 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1341 ; RV32-NEXT: mv a1, sp
1342 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1343 ; RV32-NEXT: vlse64.v v16, (a1), zero
1344 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1345 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
1346 ; RV32-NEXT: li a0, 56
1347 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1348 ; RV32-NEXT: addi sp, sp, 32
1351 ; RV64-LABEL: vp_cttz_v15i64:
1353 ; RV64-NEXT: li a1, 1
1354 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1355 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
1356 ; RV64-NEXT: vnot.v v8, v8, v0.t
1357 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
1358 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1359 ; RV64-NEXT: lui a0, 349525
1360 ; RV64-NEXT: addiw a0, a0, 1365
1361 ; RV64-NEXT: slli a1, a0, 32
1362 ; RV64-NEXT: add a0, a0, a1
1363 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1364 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
1365 ; RV64-NEXT: lui a0, 209715
1366 ; RV64-NEXT: addiw a0, a0, 819
1367 ; RV64-NEXT: slli a1, a0, 32
1368 ; RV64-NEXT: add a0, a0, a1
1369 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
1370 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1371 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1372 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
1373 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1374 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
1375 ; RV64-NEXT: lui a0, 61681
1376 ; RV64-NEXT: addiw a0, a0, -241
1377 ; RV64-NEXT: slli a1, a0, 32
1378 ; RV64-NEXT: add a0, a0, a1
1379 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1380 ; RV64-NEXT: lui a0, 4112
1381 ; RV64-NEXT: addiw a0, a0, 257
1382 ; RV64-NEXT: slli a1, a0, 32
1383 ; RV64-NEXT: add a0, a0, a1
1384 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1385 ; RV64-NEXT: li a0, 56
1386 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1388 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 false, <15 x i1> %m, i32 %evl)
1392 define <15 x i64> @vp_cttz_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
1393 ; RV32-LABEL: vp_cttz_v15i64_unmasked:
1395 ; RV32-NEXT: addi sp, sp, -32
1396 ; RV32-NEXT: .cfi_def_cfa_offset 32
1397 ; RV32-NEXT: lui a1, 349525
1398 ; RV32-NEXT: addi a1, a1, 1365
1399 ; RV32-NEXT: sw a1, 28(sp)
1400 ; RV32-NEXT: sw a1, 24(sp)
1401 ; RV32-NEXT: lui a1, 209715
1402 ; RV32-NEXT: addi a1, a1, 819
1403 ; RV32-NEXT: sw a1, 20(sp)
1404 ; RV32-NEXT: sw a1, 16(sp)
1405 ; RV32-NEXT: lui a1, 61681
1406 ; RV32-NEXT: addi a1, a1, -241
1407 ; RV32-NEXT: sw a1, 12(sp)
1408 ; RV32-NEXT: sw a1, 8(sp)
1409 ; RV32-NEXT: lui a1, 4112
1410 ; RV32-NEXT: addi a1, a1, 257
1411 ; RV32-NEXT: sw a1, 4(sp)
1412 ; RV32-NEXT: sw a1, 0(sp)
1413 ; RV32-NEXT: li a1, 1
1414 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1415 ; RV32-NEXT: vsub.vx v16, v8, a1
1416 ; RV32-NEXT: vnot.v v8, v8
1417 ; RV32-NEXT: vand.vv v8, v8, v16
1418 ; RV32-NEXT: vsrl.vi v16, v8, 1
1419 ; RV32-NEXT: addi a1, sp, 24
1420 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1421 ; RV32-NEXT: vlse64.v v24, (a1), zero
1422 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1423 ; RV32-NEXT: vand.vv v16, v16, v24
1424 ; RV32-NEXT: vsub.vv v8, v8, v16
1425 ; RV32-NEXT: addi a1, sp, 16
1426 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1427 ; RV32-NEXT: vlse64.v v16, (a1), zero
1428 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1429 ; RV32-NEXT: vand.vv v24, v8, v16
1430 ; RV32-NEXT: vsrl.vi v8, v8, 2
1431 ; RV32-NEXT: vand.vv v8, v8, v16
1432 ; RV32-NEXT: vadd.vv v8, v24, v8
1433 ; RV32-NEXT: vsrl.vi v16, v8, 4
1434 ; RV32-NEXT: vadd.vv v8, v8, v16
1435 ; RV32-NEXT: addi a1, sp, 8
1436 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1437 ; RV32-NEXT: vlse64.v v16, (a1), zero
1438 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1439 ; RV32-NEXT: vand.vv v8, v8, v16
1440 ; RV32-NEXT: mv a1, sp
1441 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1442 ; RV32-NEXT: vlse64.v v16, (a1), zero
1443 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1444 ; RV32-NEXT: vmul.vv v8, v8, v16
1445 ; RV32-NEXT: li a0, 56
1446 ; RV32-NEXT: vsrl.vx v8, v8, a0
1447 ; RV32-NEXT: addi sp, sp, 32
1450 ; RV64-LABEL: vp_cttz_v15i64_unmasked:
1452 ; RV64-NEXT: li a1, 1
1453 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1454 ; RV64-NEXT: vsub.vx v16, v8, a1
1455 ; RV64-NEXT: vnot.v v8, v8
1456 ; RV64-NEXT: vand.vv v8, v8, v16
1457 ; RV64-NEXT: vsrl.vi v16, v8, 1
1458 ; RV64-NEXT: lui a0, 349525
1459 ; RV64-NEXT: addiw a0, a0, 1365
1460 ; RV64-NEXT: slli a1, a0, 32
1461 ; RV64-NEXT: add a0, a0, a1
1462 ; RV64-NEXT: vand.vx v16, v16, a0
1463 ; RV64-NEXT: vsub.vv v8, v8, v16
1464 ; RV64-NEXT: lui a0, 209715
1465 ; RV64-NEXT: addiw a0, a0, 819
1466 ; RV64-NEXT: slli a1, a0, 32
1467 ; RV64-NEXT: add a0, a0, a1
1468 ; RV64-NEXT: vand.vx v16, v8, a0
1469 ; RV64-NEXT: vsrl.vi v8, v8, 2
1470 ; RV64-NEXT: vand.vx v8, v8, a0
1471 ; RV64-NEXT: vadd.vv v8, v16, v8
1472 ; RV64-NEXT: vsrl.vi v16, v8, 4
1473 ; RV64-NEXT: vadd.vv v8, v8, v16
1474 ; RV64-NEXT: lui a0, 61681
1475 ; RV64-NEXT: addiw a0, a0, -241
1476 ; RV64-NEXT: slli a1, a0, 32
1477 ; RV64-NEXT: add a0, a0, a1
1478 ; RV64-NEXT: vand.vx v8, v8, a0
1479 ; RV64-NEXT: lui a0, 4112
1480 ; RV64-NEXT: addiw a0, a0, 257
1481 ; RV64-NEXT: slli a1, a0, 32
1482 ; RV64-NEXT: add a0, a0, a1
1483 ; RV64-NEXT: vmul.vx v8, v8, a0
1484 ; RV64-NEXT: li a0, 56
1485 ; RV64-NEXT: vsrl.vx v8, v8, a0
1487 %head = insertelement <15 x i1> poison, i1 true, i32 0
1488 %m = shufflevector <15 x i1> %head, <15 x i1> poison, <15 x i32> zeroinitializer
1489 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 false, <15 x i1> %m, i32 %evl)
1493 declare <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64>, i1 immarg, <16 x i1>, i32)
1495 define <16 x i64> @vp_cttz_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1496 ; RV32-LABEL: vp_cttz_v16i64:
1498 ; RV32-NEXT: addi sp, sp, -32
1499 ; RV32-NEXT: .cfi_def_cfa_offset 32
1500 ; RV32-NEXT: lui a1, 349525
1501 ; RV32-NEXT: addi a1, a1, 1365
1502 ; RV32-NEXT: sw a1, 28(sp)
1503 ; RV32-NEXT: sw a1, 24(sp)
1504 ; RV32-NEXT: lui a1, 209715
1505 ; RV32-NEXT: addi a1, a1, 819
1506 ; RV32-NEXT: sw a1, 20(sp)
1507 ; RV32-NEXT: sw a1, 16(sp)
1508 ; RV32-NEXT: lui a1, 61681
1509 ; RV32-NEXT: addi a1, a1, -241
1510 ; RV32-NEXT: sw a1, 12(sp)
1511 ; RV32-NEXT: sw a1, 8(sp)
1512 ; RV32-NEXT: lui a1, 4112
1513 ; RV32-NEXT: addi a1, a1, 257
1514 ; RV32-NEXT: sw a1, 4(sp)
1515 ; RV32-NEXT: sw a1, 0(sp)
1516 ; RV32-NEXT: li a1, 1
1517 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1518 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
1519 ; RV32-NEXT: vnot.v v8, v8, v0.t
1520 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1521 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
1522 ; RV32-NEXT: addi a1, sp, 24
1523 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1524 ; RV32-NEXT: vlse64.v v24, (a1), zero
1525 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1526 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
1527 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
1528 ; RV32-NEXT: addi a1, sp, 16
1529 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1530 ; RV32-NEXT: vlse64.v v16, (a1), zero
1531 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1532 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
1533 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1534 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1535 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
1536 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1537 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1538 ; RV32-NEXT: addi a1, sp, 8
1539 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1540 ; RV32-NEXT: vlse64.v v16, (a1), zero
1541 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1542 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1543 ; RV32-NEXT: mv a1, sp
1544 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1545 ; RV32-NEXT: vlse64.v v16, (a1), zero
1546 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1547 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
1548 ; RV32-NEXT: li a0, 56
1549 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1550 ; RV32-NEXT: addi sp, sp, 32
1553 ; RV64-LABEL: vp_cttz_v16i64:
1555 ; RV64-NEXT: li a1, 1
1556 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1557 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
1558 ; RV64-NEXT: vnot.v v8, v8, v0.t
1559 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
1560 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1561 ; RV64-NEXT: lui a0, 349525
1562 ; RV64-NEXT: addiw a0, a0, 1365
1563 ; RV64-NEXT: slli a1, a0, 32
1564 ; RV64-NEXT: add a0, a0, a1
1565 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1566 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
1567 ; RV64-NEXT: lui a0, 209715
1568 ; RV64-NEXT: addiw a0, a0, 819
1569 ; RV64-NEXT: slli a1, a0, 32
1570 ; RV64-NEXT: add a0, a0, a1
1571 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
1572 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1573 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1574 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
1575 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1576 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
1577 ; RV64-NEXT: lui a0, 61681
1578 ; RV64-NEXT: addiw a0, a0, -241
1579 ; RV64-NEXT: slli a1, a0, 32
1580 ; RV64-NEXT: add a0, a0, a1
1581 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1582 ; RV64-NEXT: lui a0, 4112
1583 ; RV64-NEXT: addiw a0, a0, 257
1584 ; RV64-NEXT: slli a1, a0, 32
1585 ; RV64-NEXT: add a0, a0, a1
1586 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1587 ; RV64-NEXT: li a0, 56
1588 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1590 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 false, <16 x i1> %m, i32 %evl)
1594 define <16 x i64> @vp_cttz_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1595 ; RV32-LABEL: vp_cttz_v16i64_unmasked:
1597 ; RV32-NEXT: addi sp, sp, -32
1598 ; RV32-NEXT: .cfi_def_cfa_offset 32
1599 ; RV32-NEXT: lui a1, 349525
1600 ; RV32-NEXT: addi a1, a1, 1365
1601 ; RV32-NEXT: sw a1, 28(sp)
1602 ; RV32-NEXT: sw a1, 24(sp)
1603 ; RV32-NEXT: lui a1, 209715
1604 ; RV32-NEXT: addi a1, a1, 819
1605 ; RV32-NEXT: sw a1, 20(sp)
1606 ; RV32-NEXT: sw a1, 16(sp)
1607 ; RV32-NEXT: lui a1, 61681
1608 ; RV32-NEXT: addi a1, a1, -241
1609 ; RV32-NEXT: sw a1, 12(sp)
1610 ; RV32-NEXT: sw a1, 8(sp)
1611 ; RV32-NEXT: lui a1, 4112
1612 ; RV32-NEXT: addi a1, a1, 257
1613 ; RV32-NEXT: sw a1, 4(sp)
1614 ; RV32-NEXT: sw a1, 0(sp)
1615 ; RV32-NEXT: li a1, 1
1616 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1617 ; RV32-NEXT: vsub.vx v16, v8, a1
1618 ; RV32-NEXT: vnot.v v8, v8
1619 ; RV32-NEXT: vand.vv v8, v8, v16
1620 ; RV32-NEXT: vsrl.vi v16, v8, 1
1621 ; RV32-NEXT: addi a1, sp, 24
1622 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1623 ; RV32-NEXT: vlse64.v v24, (a1), zero
1624 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1625 ; RV32-NEXT: vand.vv v16, v16, v24
1626 ; RV32-NEXT: vsub.vv v8, v8, v16
1627 ; RV32-NEXT: addi a1, sp, 16
1628 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1629 ; RV32-NEXT: vlse64.v v16, (a1), zero
1630 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1631 ; RV32-NEXT: vand.vv v24, v8, v16
1632 ; RV32-NEXT: vsrl.vi v8, v8, 2
1633 ; RV32-NEXT: vand.vv v8, v8, v16
1634 ; RV32-NEXT: vadd.vv v8, v24, v8
1635 ; RV32-NEXT: vsrl.vi v16, v8, 4
1636 ; RV32-NEXT: vadd.vv v8, v8, v16
1637 ; RV32-NEXT: addi a1, sp, 8
1638 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1639 ; RV32-NEXT: vlse64.v v16, (a1), zero
1640 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1641 ; RV32-NEXT: vand.vv v8, v8, v16
1642 ; RV32-NEXT: mv a1, sp
1643 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1644 ; RV32-NEXT: vlse64.v v16, (a1), zero
1645 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1646 ; RV32-NEXT: vmul.vv v8, v8, v16
1647 ; RV32-NEXT: li a0, 56
1648 ; RV32-NEXT: vsrl.vx v8, v8, a0
1649 ; RV32-NEXT: addi sp, sp, 32
1652 ; RV64-LABEL: vp_cttz_v16i64_unmasked:
1654 ; RV64-NEXT: li a1, 1
1655 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1656 ; RV64-NEXT: vsub.vx v16, v8, a1
1657 ; RV64-NEXT: vnot.v v8, v8
1658 ; RV64-NEXT: vand.vv v8, v8, v16
1659 ; RV64-NEXT: vsrl.vi v16, v8, 1
1660 ; RV64-NEXT: lui a0, 349525
1661 ; RV64-NEXT: addiw a0, a0, 1365
1662 ; RV64-NEXT: slli a1, a0, 32
1663 ; RV64-NEXT: add a0, a0, a1
1664 ; RV64-NEXT: vand.vx v16, v16, a0
1665 ; RV64-NEXT: vsub.vv v8, v8, v16
1666 ; RV64-NEXT: lui a0, 209715
1667 ; RV64-NEXT: addiw a0, a0, 819
1668 ; RV64-NEXT: slli a1, a0, 32
1669 ; RV64-NEXT: add a0, a0, a1
1670 ; RV64-NEXT: vand.vx v16, v8, a0
1671 ; RV64-NEXT: vsrl.vi v8, v8, 2
1672 ; RV64-NEXT: vand.vx v8, v8, a0
1673 ; RV64-NEXT: vadd.vv v8, v16, v8
1674 ; RV64-NEXT: vsrl.vi v16, v8, 4
1675 ; RV64-NEXT: vadd.vv v8, v8, v16
1676 ; RV64-NEXT: lui a0, 61681
1677 ; RV64-NEXT: addiw a0, a0, -241
1678 ; RV64-NEXT: slli a1, a0, 32
1679 ; RV64-NEXT: add a0, a0, a1
1680 ; RV64-NEXT: vand.vx v8, v8, a0
1681 ; RV64-NEXT: lui a0, 4112
1682 ; RV64-NEXT: addiw a0, a0, 257
1683 ; RV64-NEXT: slli a1, a0, 32
1684 ; RV64-NEXT: add a0, a0, a1
1685 ; RV64-NEXT: vmul.vx v8, v8, a0
1686 ; RV64-NEXT: li a0, 56
1687 ; RV64-NEXT: vsrl.vx v8, v8, a0
1689 %head = insertelement <16 x i1> poison, i1 true, i32 0
1690 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1691 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 false, <16 x i1> %m, i32 %evl)
1695 declare <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64>, i1 immarg, <32 x i1>, i32)
1697 define <32 x i64> @vp_cttz_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
1698 ; RV32-LABEL: vp_cttz_v32i64:
1700 ; RV32-NEXT: addi sp, sp, -48
1701 ; RV32-NEXT: .cfi_def_cfa_offset 48
1702 ; RV32-NEXT: csrr a1, vlenb
1703 ; RV32-NEXT: li a2, 56
1704 ; RV32-NEXT: mul a1, a1, a2
1705 ; RV32-NEXT: sub sp, sp, a1
1706 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x38, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 56 * vlenb
1707 ; RV32-NEXT: csrr a1, vlenb
1708 ; RV32-NEXT: slli a1, a1, 5
1709 ; RV32-NEXT: add a1, sp, a1
1710 ; RV32-NEXT: addi a1, a1, 48
1711 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
1712 ; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
1713 ; RV32-NEXT: vslidedown.vi v24, v0, 2
1714 ; RV32-NEXT: lui a1, 349525
1715 ; RV32-NEXT: addi a1, a1, 1365
1716 ; RV32-NEXT: sw a1, 44(sp)
1717 ; RV32-NEXT: sw a1, 40(sp)
1718 ; RV32-NEXT: lui a1, 209715
1719 ; RV32-NEXT: addi a1, a1, 819
1720 ; RV32-NEXT: sw a1, 36(sp)
1721 ; RV32-NEXT: sw a1, 32(sp)
1722 ; RV32-NEXT: lui a1, 61681
1723 ; RV32-NEXT: addi a1, a1, -241
1724 ; RV32-NEXT: sw a1, 28(sp)
1725 ; RV32-NEXT: sw a1, 24(sp)
1726 ; RV32-NEXT: lui a1, 4112
1727 ; RV32-NEXT: addi a1, a1, 257
1728 ; RV32-NEXT: sw a1, 20(sp)
1729 ; RV32-NEXT: li a3, 16
1730 ; RV32-NEXT: sw a1, 16(sp)
1731 ; RV32-NEXT: mv a2, a0
1732 ; RV32-NEXT: bltu a0, a3, .LBB34_2
1733 ; RV32-NEXT: # %bb.1:
1734 ; RV32-NEXT: li a2, 16
1735 ; RV32-NEXT: .LBB34_2:
1736 ; RV32-NEXT: li a1, 1
1737 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1738 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
1739 ; RV32-NEXT: vnot.v v8, v8, v0.t
1740 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1741 ; RV32-NEXT: csrr a3, vlenb
1742 ; RV32-NEXT: li a4, 40
1743 ; RV32-NEXT: mul a3, a3, a4
1744 ; RV32-NEXT: add a3, sp, a3
1745 ; RV32-NEXT: addi a3, a3, 48
1746 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
1747 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
1748 ; RV32-NEXT: csrr a3, vlenb
1749 ; RV32-NEXT: li a4, 48
1750 ; RV32-NEXT: mul a3, a3, a4
1751 ; RV32-NEXT: add a3, sp, a3
1752 ; RV32-NEXT: addi a3, a3, 48
1753 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
1754 ; RV32-NEXT: addi a3, sp, 40
1755 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1756 ; RV32-NEXT: vlse64.v v8, (a3), zero
1757 ; RV32-NEXT: csrr a3, vlenb
1758 ; RV32-NEXT: li a4, 24
1759 ; RV32-NEXT: mul a3, a3, a4
1760 ; RV32-NEXT: add a3, sp, a3
1761 ; RV32-NEXT: addi a3, a3, 48
1762 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
1763 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1764 ; RV32-NEXT: csrr a3, vlenb
1765 ; RV32-NEXT: li a4, 48
1766 ; RV32-NEXT: mul a3, a3, a4
1767 ; RV32-NEXT: add a3, sp, a3
1768 ; RV32-NEXT: addi a3, a3, 48
1769 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
1770 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
1771 ; RV32-NEXT: csrr a3, vlenb
1772 ; RV32-NEXT: li a4, 40
1773 ; RV32-NEXT: mul a3, a3, a4
1774 ; RV32-NEXT: add a3, sp, a3
1775 ; RV32-NEXT: addi a3, a3, 48
1776 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
1777 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
1778 ; RV32-NEXT: csrr a3, vlenb
1779 ; RV32-NEXT: li a4, 40
1780 ; RV32-NEXT: mul a3, a3, a4
1781 ; RV32-NEXT: add a3, sp, a3
1782 ; RV32-NEXT: addi a3, a3, 48
1783 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
1784 ; RV32-NEXT: addi a3, sp, 32
1785 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1786 ; RV32-NEXT: vlse64.v v8, (a3), zero
1787 ; RV32-NEXT: csrr a3, vlenb
1788 ; RV32-NEXT: li a4, 48
1789 ; RV32-NEXT: mul a3, a3, a4
1790 ; RV32-NEXT: add a3, sp, a3
1791 ; RV32-NEXT: addi a3, a3, 48
1792 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
1793 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1794 ; RV32-NEXT: csrr a3, vlenb
1795 ; RV32-NEXT: li a4, 40
1796 ; RV32-NEXT: mul a3, a3, a4
1797 ; RV32-NEXT: add a3, sp, a3
1798 ; RV32-NEXT: addi a3, a3, 48
1799 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
1800 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
1801 ; RV32-NEXT: csrr a3, vlenb
1802 ; RV32-NEXT: slli a3, a3, 4
1803 ; RV32-NEXT: add a3, sp, a3
1804 ; RV32-NEXT: addi a3, a3, 48
1805 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
1806 ; RV32-NEXT: csrr a3, vlenb
1807 ; RV32-NEXT: li a4, 40
1808 ; RV32-NEXT: mul a3, a3, a4
1809 ; RV32-NEXT: add a3, sp, a3
1810 ; RV32-NEXT: addi a3, a3, 48
1811 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
1812 ; RV32-NEXT: vsrl.vi v16, v16, 2, v0.t
1813 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
1814 ; RV32-NEXT: csrr a3, vlenb
1815 ; RV32-NEXT: slli a3, a3, 4
1816 ; RV32-NEXT: add a3, sp, a3
1817 ; RV32-NEXT: addi a3, a3, 48
1818 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
1819 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1820 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1821 ; RV32-NEXT: vadd.vv v16, v8, v16, v0.t
1822 ; RV32-NEXT: addi a3, sp, 24
1823 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1824 ; RV32-NEXT: vlse64.v v8, (a3), zero
1825 ; RV32-NEXT: csrr a3, vlenb
1826 ; RV32-NEXT: li a4, 40
1827 ; RV32-NEXT: mul a3, a3, a4
1828 ; RV32-NEXT: add a3, sp, a3
1829 ; RV32-NEXT: addi a3, a3, 48
1830 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
1831 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1832 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
1833 ; RV32-NEXT: addi a3, sp, 16
1834 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1835 ; RV32-NEXT: vlse64.v v16, (a3), zero
1836 ; RV32-NEXT: csrr a3, vlenb
1837 ; RV32-NEXT: slli a3, a3, 3
1838 ; RV32-NEXT: add a3, sp, a3
1839 ; RV32-NEXT: addi a3, a3, 48
1840 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
1841 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1842 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
1843 ; RV32-NEXT: li a2, 56
1844 ; RV32-NEXT: vsrl.vx v8, v8, a2, v0.t
1845 ; RV32-NEXT: csrr a3, vlenb
1846 ; RV32-NEXT: slli a3, a3, 4
1847 ; RV32-NEXT: add a3, sp, a3
1848 ; RV32-NEXT: addi a3, a3, 48
1849 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
1850 ; RV32-NEXT: addi a3, a0, -16
1851 ; RV32-NEXT: sltu a0, a0, a3
1852 ; RV32-NEXT: addi a0, a0, -1
1853 ; RV32-NEXT: and a0, a0, a3
1854 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1855 ; RV32-NEXT: vmv1r.v v0, v24
1856 ; RV32-NEXT: csrr a0, vlenb
1857 ; RV32-NEXT: slli a0, a0, 5
1858 ; RV32-NEXT: add a0, sp, a0
1859 ; RV32-NEXT: addi a0, a0, 48
1860 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1861 ; RV32-NEXT: vsub.vx v8, v16, a1, v0.t
1862 ; RV32-NEXT: vnot.v v16, v16, v0.t
1863 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
1864 ; RV32-NEXT: addi a0, sp, 48
1865 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
1866 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
1867 ; RV32-NEXT: csrr a0, vlenb
1868 ; RV32-NEXT: slli a0, a0, 5
1869 ; RV32-NEXT: add a0, sp, a0
1870 ; RV32-NEXT: addi a0, a0, 48
1871 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
1872 ; RV32-NEXT: csrr a0, vlenb
1873 ; RV32-NEXT: li a1, 24
1874 ; RV32-NEXT: mul a0, a0, a1
1875 ; RV32-NEXT: add a0, sp, a0
1876 ; RV32-NEXT: addi a0, a0, 48
1877 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1878 ; RV32-NEXT: csrr a0, vlenb
1879 ; RV32-NEXT: slli a0, a0, 5
1880 ; RV32-NEXT: add a0, sp, a0
1881 ; RV32-NEXT: addi a0, a0, 48
1882 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
1883 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
1884 ; RV32-NEXT: addi a0, sp, 48
1885 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
1886 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
1887 ; RV32-NEXT: csrr a0, vlenb
1888 ; RV32-NEXT: li a1, 48
1889 ; RV32-NEXT: mul a0, a0, a1
1890 ; RV32-NEXT: add a0, sp, a0
1891 ; RV32-NEXT: addi a0, a0, 48
1892 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1893 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
1894 ; RV32-NEXT: csrr a0, vlenb
1895 ; RV32-NEXT: slli a0, a0, 5
1896 ; RV32-NEXT: add a0, sp, a0
1897 ; RV32-NEXT: addi a0, a0, 48
1898 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
1899 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1900 ; RV32-NEXT: csrr a0, vlenb
1901 ; RV32-NEXT: li a1, 48
1902 ; RV32-NEXT: mul a0, a0, a1
1903 ; RV32-NEXT: add a0, sp, a0
1904 ; RV32-NEXT: addi a0, a0, 48
1905 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1906 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1907 ; RV32-NEXT: csrr a0, vlenb
1908 ; RV32-NEXT: slli a0, a0, 5
1909 ; RV32-NEXT: add a0, sp, a0
1910 ; RV32-NEXT: addi a0, a0, 48
1911 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1912 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
1913 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1914 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1915 ; RV32-NEXT: csrr a0, vlenb
1916 ; RV32-NEXT: li a1, 40
1917 ; RV32-NEXT: mul a0, a0, a1
1918 ; RV32-NEXT: add a0, sp, a0
1919 ; RV32-NEXT: addi a0, a0, 48
1920 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1921 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1922 ; RV32-NEXT: csrr a0, vlenb
1923 ; RV32-NEXT: slli a0, a0, 3
1924 ; RV32-NEXT: add a0, sp, a0
1925 ; RV32-NEXT: addi a0, a0, 48
1926 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1927 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
1928 ; RV32-NEXT: vsrl.vx v16, v8, a2, v0.t
1929 ; RV32-NEXT: csrr a0, vlenb
1930 ; RV32-NEXT: slli a0, a0, 4
1931 ; RV32-NEXT: add a0, sp, a0
1932 ; RV32-NEXT: addi a0, a0, 48
1933 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
1934 ; RV32-NEXT: csrr a0, vlenb
1935 ; RV32-NEXT: li a1, 56
1936 ; RV32-NEXT: mul a0, a0, a1
1937 ; RV32-NEXT: add sp, sp, a0
1938 ; RV32-NEXT: addi sp, sp, 48
1941 ; RV64-LABEL: vp_cttz_v32i64:
1943 ; RV64-NEXT: addi sp, sp, -16
1944 ; RV64-NEXT: .cfi_def_cfa_offset 16
1945 ; RV64-NEXT: csrr a1, vlenb
1946 ; RV64-NEXT: slli a1, a1, 4
1947 ; RV64-NEXT: sub sp, sp, a1
1948 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
1949 ; RV64-NEXT: csrr a1, vlenb
1950 ; RV64-NEXT: slli a1, a1, 3
1951 ; RV64-NEXT: add a1, sp, a1
1952 ; RV64-NEXT: addi a1, a1, 16
1953 ; RV64-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
1954 ; RV64-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
1955 ; RV64-NEXT: li a1, 16
1956 ; RV64-NEXT: vslidedown.vi v24, v0, 2
1957 ; RV64-NEXT: mv a2, a0
1958 ; RV64-NEXT: bltu a0, a1, .LBB34_2
1959 ; RV64-NEXT: # %bb.1:
1960 ; RV64-NEXT: li a2, 16
1961 ; RV64-NEXT: .LBB34_2:
1962 ; RV64-NEXT: li a1, 1
1963 ; RV64-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1964 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
1965 ; RV64-NEXT: vnot.v v8, v8, v0.t
1966 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
1967 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1968 ; RV64-NEXT: lui a2, 349525
1969 ; RV64-NEXT: addiw a2, a2, 1365
1970 ; RV64-NEXT: slli a3, a2, 32
1971 ; RV64-NEXT: add a2, a2, a3
1972 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
1973 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
1974 ; RV64-NEXT: lui a3, 209715
1975 ; RV64-NEXT: addiw a3, a3, 819
1976 ; RV64-NEXT: slli a4, a3, 32
1977 ; RV64-NEXT: add a3, a3, a4
1978 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
1979 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1980 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
1981 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
1982 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1983 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
1984 ; RV64-NEXT: lui a4, 61681
1985 ; RV64-NEXT: addiw a4, a4, -241
1986 ; RV64-NEXT: slli a5, a4, 32
1987 ; RV64-NEXT: add a4, a4, a5
1988 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
1989 ; RV64-NEXT: lui a5, 4112
1990 ; RV64-NEXT: addiw a5, a5, 257
1991 ; RV64-NEXT: slli a6, a5, 32
1992 ; RV64-NEXT: add a5, a5, a6
1993 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
1994 ; RV64-NEXT: li a6, 56
1995 ; RV64-NEXT: vsrl.vx v8, v8, a6, v0.t
1996 ; RV64-NEXT: addi a7, sp, 16
1997 ; RV64-NEXT: vs8r.v v8, (a7) # Unknown-size Folded Spill
1998 ; RV64-NEXT: addi a7, a0, -16
1999 ; RV64-NEXT: sltu a0, a0, a7
2000 ; RV64-NEXT: addi a0, a0, -1
2001 ; RV64-NEXT: and a0, a0, a7
2002 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2003 ; RV64-NEXT: vmv1r.v v0, v24
2004 ; RV64-NEXT: csrr a0, vlenb
2005 ; RV64-NEXT: slli a0, a0, 3
2006 ; RV64-NEXT: add a0, sp, a0
2007 ; RV64-NEXT: addi a0, a0, 16
2008 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2009 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
2010 ; RV64-NEXT: vnot.v v8, v8, v0.t
2011 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
2012 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2013 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
2014 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
2015 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
2016 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
2017 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
2018 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
2019 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2020 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
2021 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
2022 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
2023 ; RV64-NEXT: vsrl.vx v16, v8, a6, v0.t
2024 ; RV64-NEXT: addi a0, sp, 16
2025 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2026 ; RV64-NEXT: csrr a0, vlenb
2027 ; RV64-NEXT: slli a0, a0, 4
2028 ; RV64-NEXT: add sp, sp, a0
2029 ; RV64-NEXT: addi sp, sp, 16
2031 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 false, <32 x i1> %m, i32 %evl)
2035 define <32 x i64> @vp_cttz_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
2036 ; RV32-LABEL: vp_cttz_v32i64_unmasked:
2038 ; RV32-NEXT: addi sp, sp, -48
2039 ; RV32-NEXT: .cfi_def_cfa_offset 48
2040 ; RV32-NEXT: csrr a1, vlenb
2041 ; RV32-NEXT: slli a1, a1, 5
2042 ; RV32-NEXT: sub sp, sp, a1
2043 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 32 * vlenb
2044 ; RV32-NEXT: vmv8r.v v24, v16
2045 ; RV32-NEXT: lui a1, 349525
2046 ; RV32-NEXT: addi a1, a1, 1365
2047 ; RV32-NEXT: sw a1, 44(sp)
2048 ; RV32-NEXT: sw a1, 40(sp)
2049 ; RV32-NEXT: lui a1, 209715
2050 ; RV32-NEXT: addi a1, a1, 819
2051 ; RV32-NEXT: sw a1, 36(sp)
2052 ; RV32-NEXT: sw a1, 32(sp)
2053 ; RV32-NEXT: lui a1, 61681
2054 ; RV32-NEXT: addi a1, a1, -241
2055 ; RV32-NEXT: sw a1, 28(sp)
2056 ; RV32-NEXT: sw a1, 24(sp)
2057 ; RV32-NEXT: lui a1, 4112
2058 ; RV32-NEXT: addi a1, a1, 257
2059 ; RV32-NEXT: sw a1, 20(sp)
2060 ; RV32-NEXT: li a2, 16
2061 ; RV32-NEXT: sw a1, 16(sp)
2062 ; RV32-NEXT: mv a1, a0
2063 ; RV32-NEXT: bltu a0, a2, .LBB35_2
2064 ; RV32-NEXT: # %bb.1:
2065 ; RV32-NEXT: li a1, 16
2066 ; RV32-NEXT: .LBB35_2:
2067 ; RV32-NEXT: li a2, 1
2068 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2069 ; RV32-NEXT: vsub.vx v16, v8, a2
2070 ; RV32-NEXT: vnot.v v8, v8
2071 ; RV32-NEXT: vand.vv v8, v8, v16
2072 ; RV32-NEXT: vsrl.vi v16, v8, 1
2073 ; RV32-NEXT: addi a3, sp, 40
2074 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2075 ; RV32-NEXT: vlse64.v v0, (a3), zero
2076 ; RV32-NEXT: csrr a3, vlenb
2077 ; RV32-NEXT: li a4, 24
2078 ; RV32-NEXT: mul a3, a3, a4
2079 ; RV32-NEXT: add a3, sp, a3
2080 ; RV32-NEXT: addi a3, a3, 48
2081 ; RV32-NEXT: vs8r.v v0, (a3) # Unknown-size Folded Spill
2082 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2083 ; RV32-NEXT: vand.vv v16, v16, v0
2084 ; RV32-NEXT: vsub.vv v8, v8, v16
2085 ; RV32-NEXT: addi a3, sp, 32
2086 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2087 ; RV32-NEXT: vlse64.v v0, (a3), zero
2088 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2089 ; RV32-NEXT: vand.vv v16, v8, v0
2090 ; RV32-NEXT: vsrl.vi v8, v8, 2
2091 ; RV32-NEXT: vand.vv v8, v8, v0
2092 ; RV32-NEXT: vadd.vv v8, v16, v8
2093 ; RV32-NEXT: vsrl.vi v16, v8, 4
2094 ; RV32-NEXT: vadd.vv v8, v8, v16
2095 ; RV32-NEXT: addi a3, sp, 24
2096 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2097 ; RV32-NEXT: vlse64.v v16, (a3), zero
2098 ; RV32-NEXT: csrr a3, vlenb
2099 ; RV32-NEXT: slli a3, a3, 4
2100 ; RV32-NEXT: add a3, sp, a3
2101 ; RV32-NEXT: addi a3, a3, 48
2102 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2103 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2104 ; RV32-NEXT: vand.vv v8, v8, v16
2105 ; RV32-NEXT: addi a3, sp, 16
2106 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2107 ; RV32-NEXT: vlse64.v v16, (a3), zero
2108 ; RV32-NEXT: addi a3, sp, 48
2109 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2110 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2111 ; RV32-NEXT: vmul.vv v8, v8, v16
2112 ; RV32-NEXT: li a1, 56
2113 ; RV32-NEXT: vsrl.vx v8, v8, a1
2114 ; RV32-NEXT: csrr a3, vlenb
2115 ; RV32-NEXT: slli a3, a3, 3
2116 ; RV32-NEXT: add a3, sp, a3
2117 ; RV32-NEXT: addi a3, a3, 48
2118 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2119 ; RV32-NEXT: addi a3, a0, -16
2120 ; RV32-NEXT: sltu a0, a0, a3
2121 ; RV32-NEXT: addi a0, a0, -1
2122 ; RV32-NEXT: and a0, a0, a3
2123 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2124 ; RV32-NEXT: vsub.vx v8, v24, a2
2125 ; RV32-NEXT: vnot.v v24, v24
2126 ; RV32-NEXT: vand.vv v8, v24, v8
2127 ; RV32-NEXT: vsrl.vi v24, v8, 1
2128 ; RV32-NEXT: csrr a0, vlenb
2129 ; RV32-NEXT: li a2, 24
2130 ; RV32-NEXT: mul a0, a0, a2
2131 ; RV32-NEXT: add a0, sp, a0
2132 ; RV32-NEXT: addi a0, a0, 48
2133 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2134 ; RV32-NEXT: vand.vv v24, v24, v16
2135 ; RV32-NEXT: vsub.vv v8, v8, v24
2136 ; RV32-NEXT: vand.vv v24, v8, v0
2137 ; RV32-NEXT: vsrl.vi v8, v8, 2
2138 ; RV32-NEXT: vand.vv v8, v8, v0
2139 ; RV32-NEXT: vadd.vv v8, v24, v8
2140 ; RV32-NEXT: vsrl.vi v24, v8, 4
2141 ; RV32-NEXT: vadd.vv v8, v8, v24
2142 ; RV32-NEXT: csrr a0, vlenb
2143 ; RV32-NEXT: slli a0, a0, 4
2144 ; RV32-NEXT: add a0, sp, a0
2145 ; RV32-NEXT: addi a0, a0, 48
2146 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2147 ; RV32-NEXT: vand.vv v8, v8, v16
2148 ; RV32-NEXT: addi a0, sp, 48
2149 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2150 ; RV32-NEXT: vmul.vv v8, v8, v16
2151 ; RV32-NEXT: vsrl.vx v16, v8, a1
2152 ; RV32-NEXT: csrr a0, vlenb
2153 ; RV32-NEXT: slli a0, a0, 3
2154 ; RV32-NEXT: add a0, sp, a0
2155 ; RV32-NEXT: addi a0, a0, 48
2156 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2157 ; RV32-NEXT: csrr a0, vlenb
2158 ; RV32-NEXT: slli a0, a0, 5
2159 ; RV32-NEXT: add sp, sp, a0
2160 ; RV32-NEXT: addi sp, sp, 48
2163 ; RV64-LABEL: vp_cttz_v32i64_unmasked:
2165 ; RV64-NEXT: li a2, 16
2166 ; RV64-NEXT: mv a1, a0
2167 ; RV64-NEXT: bltu a0, a2, .LBB35_2
2168 ; RV64-NEXT: # %bb.1:
2169 ; RV64-NEXT: li a1, 16
2170 ; RV64-NEXT: .LBB35_2:
2171 ; RV64-NEXT: li a2, 1
2172 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2173 ; RV64-NEXT: vsub.vx v24, v8, a2
2174 ; RV64-NEXT: vnot.v v8, v8
2175 ; RV64-NEXT: vand.vv v8, v8, v24
2176 ; RV64-NEXT: vsrl.vi v24, v8, 1
2177 ; RV64-NEXT: lui a1, 349525
2178 ; RV64-NEXT: addiw a1, a1, 1365
2179 ; RV64-NEXT: slli a3, a1, 32
2180 ; RV64-NEXT: add a1, a1, a3
2181 ; RV64-NEXT: vand.vx v24, v24, a1
2182 ; RV64-NEXT: vsub.vv v8, v8, v24
2183 ; RV64-NEXT: lui a3, 209715
2184 ; RV64-NEXT: addiw a3, a3, 819
2185 ; RV64-NEXT: slli a4, a3, 32
2186 ; RV64-NEXT: add a3, a3, a4
2187 ; RV64-NEXT: vand.vx v24, v8, a3
2188 ; RV64-NEXT: vsrl.vi v8, v8, 2
2189 ; RV64-NEXT: vand.vx v8, v8, a3
2190 ; RV64-NEXT: vadd.vv v8, v24, v8
2191 ; RV64-NEXT: vsrl.vi v24, v8, 4
2192 ; RV64-NEXT: vadd.vv v8, v8, v24
2193 ; RV64-NEXT: lui a4, 61681
2194 ; RV64-NEXT: addiw a4, a4, -241
2195 ; RV64-NEXT: slli a5, a4, 32
2196 ; RV64-NEXT: add a4, a4, a5
2197 ; RV64-NEXT: vand.vx v8, v8, a4
2198 ; RV64-NEXT: lui a5, 4112
2199 ; RV64-NEXT: addiw a5, a5, 257
2200 ; RV64-NEXT: slli a6, a5, 32
2201 ; RV64-NEXT: add a5, a5, a6
2202 ; RV64-NEXT: vmul.vx v8, v8, a5
2203 ; RV64-NEXT: li a6, 56
2204 ; RV64-NEXT: vsrl.vx v8, v8, a6
2205 ; RV64-NEXT: addi a7, a0, -16
2206 ; RV64-NEXT: sltu a0, a0, a7
2207 ; RV64-NEXT: addi a0, a0, -1
2208 ; RV64-NEXT: and a0, a0, a7
2209 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2210 ; RV64-NEXT: vsub.vx v24, v16, a2
2211 ; RV64-NEXT: vnot.v v16, v16
2212 ; RV64-NEXT: vand.vv v16, v16, v24
2213 ; RV64-NEXT: vsrl.vi v24, v16, 1
2214 ; RV64-NEXT: vand.vx v24, v24, a1
2215 ; RV64-NEXT: vsub.vv v16, v16, v24
2216 ; RV64-NEXT: vand.vx v24, v16, a3
2217 ; RV64-NEXT: vsrl.vi v16, v16, 2
2218 ; RV64-NEXT: vand.vx v16, v16, a3
2219 ; RV64-NEXT: vadd.vv v16, v24, v16
2220 ; RV64-NEXT: vsrl.vi v24, v16, 4
2221 ; RV64-NEXT: vadd.vv v16, v16, v24
2222 ; RV64-NEXT: vand.vx v16, v16, a4
2223 ; RV64-NEXT: vmul.vx v16, v16, a5
2224 ; RV64-NEXT: vsrl.vx v16, v16, a6
2226 %head = insertelement <32 x i1> poison, i1 true, i32 0
2227 %m = shufflevector <32 x i1> %head, <32 x i1> poison, <32 x i32> zeroinitializer
2228 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 false, <32 x i1> %m, i32 %evl)
2232 define <2 x i8> @vp_cttz_zero_undef_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
2233 ; CHECK-LABEL: vp_cttz_zero_undef_v2i8:
2235 ; CHECK-NEXT: li a1, 1
2236 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
2237 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2238 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2239 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2240 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2241 ; CHECK-NEXT: li a0, 85
2242 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2243 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2244 ; CHECK-NEXT: li a0, 51
2245 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2246 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2247 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2248 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2249 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2250 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2251 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2253 %v = call <2 x i8> @llvm.vp.cttz.v2i8(<2 x i8> %va, i1 true, <2 x i1> %m, i32 %evl)
2257 define <2 x i8> @vp_cttz_zero_undef_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
2258 ; CHECK-LABEL: vp_cttz_zero_undef_v2i8_unmasked:
2260 ; CHECK-NEXT: li a1, 1
2261 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
2262 ; CHECK-NEXT: vsub.vx v9, v8, a1
2263 ; CHECK-NEXT: vnot.v v8, v8
2264 ; CHECK-NEXT: vand.vv v8, v8, v9
2265 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2266 ; CHECK-NEXT: li a0, 85
2267 ; CHECK-NEXT: vand.vx v9, v9, a0
2268 ; CHECK-NEXT: vsub.vv v8, v8, v9
2269 ; CHECK-NEXT: li a0, 51
2270 ; CHECK-NEXT: vand.vx v9, v8, a0
2271 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2272 ; CHECK-NEXT: vand.vx v8, v8, a0
2273 ; CHECK-NEXT: vadd.vv v8, v9, v8
2274 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2275 ; CHECK-NEXT: vadd.vv v8, v8, v9
2276 ; CHECK-NEXT: vand.vi v8, v8, 15
2278 %head = insertelement <2 x i1> poison, i1 true, i32 0
2279 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
2280 %v = call <2 x i8> @llvm.vp.cttz.v2i8(<2 x i8> %va, i1 true, <2 x i1> %m, i32 %evl)
2284 define <4 x i8> @vp_cttz_zero_undef_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
2285 ; CHECK-LABEL: vp_cttz_zero_undef_v4i8:
2287 ; CHECK-NEXT: li a1, 1
2288 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
2289 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2290 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2291 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2292 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2293 ; CHECK-NEXT: li a0, 85
2294 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2295 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2296 ; CHECK-NEXT: li a0, 51
2297 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2298 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2299 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2300 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2301 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2302 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2303 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2305 %v = call <4 x i8> @llvm.vp.cttz.v4i8(<4 x i8> %va, i1 true, <4 x i1> %m, i32 %evl)
2309 define <4 x i8> @vp_cttz_zero_undef_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
2310 ; CHECK-LABEL: vp_cttz_zero_undef_v4i8_unmasked:
2312 ; CHECK-NEXT: li a1, 1
2313 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
2314 ; CHECK-NEXT: vsub.vx v9, v8, a1
2315 ; CHECK-NEXT: vnot.v v8, v8
2316 ; CHECK-NEXT: vand.vv v8, v8, v9
2317 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2318 ; CHECK-NEXT: li a0, 85
2319 ; CHECK-NEXT: vand.vx v9, v9, a0
2320 ; CHECK-NEXT: vsub.vv v8, v8, v9
2321 ; CHECK-NEXT: li a0, 51
2322 ; CHECK-NEXT: vand.vx v9, v8, a0
2323 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2324 ; CHECK-NEXT: vand.vx v8, v8, a0
2325 ; CHECK-NEXT: vadd.vv v8, v9, v8
2326 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2327 ; CHECK-NEXT: vadd.vv v8, v8, v9
2328 ; CHECK-NEXT: vand.vi v8, v8, 15
2330 %head = insertelement <4 x i1> poison, i1 true, i32 0
2331 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
2332 %v = call <4 x i8> @llvm.vp.cttz.v4i8(<4 x i8> %va, i1 true, <4 x i1> %m, i32 %evl)
2336 define <8 x i8> @vp_cttz_zero_undef_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
2337 ; CHECK-LABEL: vp_cttz_zero_undef_v8i8:
2339 ; CHECK-NEXT: li a1, 1
2340 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
2341 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2342 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2343 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2344 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2345 ; CHECK-NEXT: li a0, 85
2346 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2347 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2348 ; CHECK-NEXT: li a0, 51
2349 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2350 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2351 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2352 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2353 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2354 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2355 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2357 %v = call <8 x i8> @llvm.vp.cttz.v8i8(<8 x i8> %va, i1 true, <8 x i1> %m, i32 %evl)
2361 define <8 x i8> @vp_cttz_zero_undef_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
2362 ; CHECK-LABEL: vp_cttz_zero_undef_v8i8_unmasked:
2364 ; CHECK-NEXT: li a1, 1
2365 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
2366 ; CHECK-NEXT: vsub.vx v9, v8, a1
2367 ; CHECK-NEXT: vnot.v v8, v8
2368 ; CHECK-NEXT: vand.vv v8, v8, v9
2369 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2370 ; CHECK-NEXT: li a0, 85
2371 ; CHECK-NEXT: vand.vx v9, v9, a0
2372 ; CHECK-NEXT: vsub.vv v8, v8, v9
2373 ; CHECK-NEXT: li a0, 51
2374 ; CHECK-NEXT: vand.vx v9, v8, a0
2375 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2376 ; CHECK-NEXT: vand.vx v8, v8, a0
2377 ; CHECK-NEXT: vadd.vv v8, v9, v8
2378 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2379 ; CHECK-NEXT: vadd.vv v8, v8, v9
2380 ; CHECK-NEXT: vand.vi v8, v8, 15
2382 %head = insertelement <8 x i1> poison, i1 true, i32 0
2383 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
2384 %v = call <8 x i8> @llvm.vp.cttz.v8i8(<8 x i8> %va, i1 true, <8 x i1> %m, i32 %evl)
2388 define <16 x i8> @vp_cttz_zero_undef_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
2389 ; CHECK-LABEL: vp_cttz_zero_undef_v16i8:
2391 ; CHECK-NEXT: li a1, 1
2392 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
2393 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2394 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2395 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2396 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2397 ; CHECK-NEXT: li a0, 85
2398 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2399 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2400 ; CHECK-NEXT: li a0, 51
2401 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2402 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2403 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2404 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2405 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2406 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2407 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2409 %v = call <16 x i8> @llvm.vp.cttz.v16i8(<16 x i8> %va, i1 true, <16 x i1> %m, i32 %evl)
2413 define <16 x i8> @vp_cttz_zero_undef_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
2414 ; CHECK-LABEL: vp_cttz_zero_undef_v16i8_unmasked:
2416 ; CHECK-NEXT: li a1, 1
2417 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
2418 ; CHECK-NEXT: vsub.vx v9, v8, a1
2419 ; CHECK-NEXT: vnot.v v8, v8
2420 ; CHECK-NEXT: vand.vv v8, v8, v9
2421 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2422 ; CHECK-NEXT: li a0, 85
2423 ; CHECK-NEXT: vand.vx v9, v9, a0
2424 ; CHECK-NEXT: vsub.vv v8, v8, v9
2425 ; CHECK-NEXT: li a0, 51
2426 ; CHECK-NEXT: vand.vx v9, v8, a0
2427 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2428 ; CHECK-NEXT: vand.vx v8, v8, a0
2429 ; CHECK-NEXT: vadd.vv v8, v9, v8
2430 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2431 ; CHECK-NEXT: vadd.vv v8, v8, v9
2432 ; CHECK-NEXT: vand.vi v8, v8, 15
2434 %head = insertelement <16 x i1> poison, i1 true, i32 0
2435 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
2436 %v = call <16 x i8> @llvm.vp.cttz.v16i8(<16 x i8> %va, i1 true, <16 x i1> %m, i32 %evl)
2440 define <2 x i16> @vp_cttz_zero_undef_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
2441 ; CHECK-LABEL: vp_cttz_zero_undef_v2i16:
2443 ; CHECK-NEXT: li a1, 1
2444 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2445 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2446 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2447 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2448 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2449 ; CHECK-NEXT: lui a0, 5
2450 ; CHECK-NEXT: addi a0, a0, 1365
2451 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2452 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2453 ; CHECK-NEXT: lui a0, 3
2454 ; CHECK-NEXT: addi a0, a0, 819
2455 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2456 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2457 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2458 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2459 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2460 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2461 ; CHECK-NEXT: lui a0, 1
2462 ; CHECK-NEXT: addi a0, a0, -241
2463 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2464 ; CHECK-NEXT: li a0, 257
2465 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2466 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
2468 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 true, <2 x i1> %m, i32 %evl)
2472 define <2 x i16> @vp_cttz_zero_undef_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
2473 ; CHECK-LABEL: vp_cttz_zero_undef_v2i16_unmasked:
2475 ; CHECK-NEXT: li a1, 1
2476 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2477 ; CHECK-NEXT: vsub.vx v9, v8, a1
2478 ; CHECK-NEXT: vnot.v v8, v8
2479 ; CHECK-NEXT: vand.vv v8, v8, v9
2480 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2481 ; CHECK-NEXT: lui a0, 5
2482 ; CHECK-NEXT: addi a0, a0, 1365
2483 ; CHECK-NEXT: vand.vx v9, v9, a0
2484 ; CHECK-NEXT: vsub.vv v8, v8, v9
2485 ; CHECK-NEXT: lui a0, 3
2486 ; CHECK-NEXT: addi a0, a0, 819
2487 ; CHECK-NEXT: vand.vx v9, v8, a0
2488 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2489 ; CHECK-NEXT: vand.vx v8, v8, a0
2490 ; CHECK-NEXT: vadd.vv v8, v9, v8
2491 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2492 ; CHECK-NEXT: vadd.vv v8, v8, v9
2493 ; CHECK-NEXT: lui a0, 1
2494 ; CHECK-NEXT: addi a0, a0, -241
2495 ; CHECK-NEXT: vand.vx v8, v8, a0
2496 ; CHECK-NEXT: li a0, 257
2497 ; CHECK-NEXT: vmul.vx v8, v8, a0
2498 ; CHECK-NEXT: vsrl.vi v8, v8, 8
2500 %head = insertelement <2 x i1> poison, i1 true, i32 0
2501 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
2502 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 true, <2 x i1> %m, i32 %evl)
2506 define <4 x i16> @vp_cttz_zero_undef_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
2507 ; CHECK-LABEL: vp_cttz_zero_undef_v4i16:
2509 ; CHECK-NEXT: li a1, 1
2510 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2511 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2512 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2513 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2514 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2515 ; CHECK-NEXT: lui a0, 5
2516 ; CHECK-NEXT: addi a0, a0, 1365
2517 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2518 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2519 ; CHECK-NEXT: lui a0, 3
2520 ; CHECK-NEXT: addi a0, a0, 819
2521 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2522 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2523 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2524 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2525 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2526 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2527 ; CHECK-NEXT: lui a0, 1
2528 ; CHECK-NEXT: addi a0, a0, -241
2529 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2530 ; CHECK-NEXT: li a0, 257
2531 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2532 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
2534 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 true, <4 x i1> %m, i32 %evl)
2538 define <4 x i16> @vp_cttz_zero_undef_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
2539 ; CHECK-LABEL: vp_cttz_zero_undef_v4i16_unmasked:
2541 ; CHECK-NEXT: li a1, 1
2542 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2543 ; CHECK-NEXT: vsub.vx v9, v8, a1
2544 ; CHECK-NEXT: vnot.v v8, v8
2545 ; CHECK-NEXT: vand.vv v8, v8, v9
2546 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2547 ; CHECK-NEXT: lui a0, 5
2548 ; CHECK-NEXT: addi a0, a0, 1365
2549 ; CHECK-NEXT: vand.vx v9, v9, a0
2550 ; CHECK-NEXT: vsub.vv v8, v8, v9
2551 ; CHECK-NEXT: lui a0, 3
2552 ; CHECK-NEXT: addi a0, a0, 819
2553 ; CHECK-NEXT: vand.vx v9, v8, a0
2554 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2555 ; CHECK-NEXT: vand.vx v8, v8, a0
2556 ; CHECK-NEXT: vadd.vv v8, v9, v8
2557 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2558 ; CHECK-NEXT: vadd.vv v8, v8, v9
2559 ; CHECK-NEXT: lui a0, 1
2560 ; CHECK-NEXT: addi a0, a0, -241
2561 ; CHECK-NEXT: vand.vx v8, v8, a0
2562 ; CHECK-NEXT: li a0, 257
2563 ; CHECK-NEXT: vmul.vx v8, v8, a0
2564 ; CHECK-NEXT: vsrl.vi v8, v8, 8
2566 %head = insertelement <4 x i1> poison, i1 true, i32 0
2567 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
2568 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 true, <4 x i1> %m, i32 %evl)
2572 define <8 x i16> @vp_cttz_zero_undef_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
2573 ; CHECK-LABEL: vp_cttz_zero_undef_v8i16:
2575 ; CHECK-NEXT: li a1, 1
2576 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2577 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2578 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2579 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2580 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2581 ; CHECK-NEXT: lui a0, 5
2582 ; CHECK-NEXT: addi a0, a0, 1365
2583 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2584 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2585 ; CHECK-NEXT: lui a0, 3
2586 ; CHECK-NEXT: addi a0, a0, 819
2587 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2588 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2589 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2590 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2591 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2592 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2593 ; CHECK-NEXT: lui a0, 1
2594 ; CHECK-NEXT: addi a0, a0, -241
2595 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2596 ; CHECK-NEXT: li a0, 257
2597 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2598 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
2600 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 true, <8 x i1> %m, i32 %evl)
2604 define <8 x i16> @vp_cttz_zero_undef_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
2605 ; CHECK-LABEL: vp_cttz_zero_undef_v8i16_unmasked:
2607 ; CHECK-NEXT: li a1, 1
2608 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
2609 ; CHECK-NEXT: vsub.vx v9, v8, a1
2610 ; CHECK-NEXT: vnot.v v8, v8
2611 ; CHECK-NEXT: vand.vv v8, v8, v9
2612 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2613 ; CHECK-NEXT: lui a0, 5
2614 ; CHECK-NEXT: addi a0, a0, 1365
2615 ; CHECK-NEXT: vand.vx v9, v9, a0
2616 ; CHECK-NEXT: vsub.vv v8, v8, v9
2617 ; CHECK-NEXT: lui a0, 3
2618 ; CHECK-NEXT: addi a0, a0, 819
2619 ; CHECK-NEXT: vand.vx v9, v8, a0
2620 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2621 ; CHECK-NEXT: vand.vx v8, v8, a0
2622 ; CHECK-NEXT: vadd.vv v8, v9, v8
2623 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2624 ; CHECK-NEXT: vadd.vv v8, v8, v9
2625 ; CHECK-NEXT: lui a0, 1
2626 ; CHECK-NEXT: addi a0, a0, -241
2627 ; CHECK-NEXT: vand.vx v8, v8, a0
2628 ; CHECK-NEXT: li a0, 257
2629 ; CHECK-NEXT: vmul.vx v8, v8, a0
2630 ; CHECK-NEXT: vsrl.vi v8, v8, 8
2632 %head = insertelement <8 x i1> poison, i1 true, i32 0
2633 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
2634 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 true, <8 x i1> %m, i32 %evl)
2638 define <16 x i16> @vp_cttz_zero_undef_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
2639 ; CHECK-LABEL: vp_cttz_zero_undef_v16i16:
2641 ; CHECK-NEXT: li a1, 1
2642 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2643 ; CHECK-NEXT: vsub.vx v10, v8, a1, v0.t
2644 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2645 ; CHECK-NEXT: vand.vv v8, v8, v10, v0.t
2646 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
2647 ; CHECK-NEXT: lui a0, 5
2648 ; CHECK-NEXT: addi a0, a0, 1365
2649 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
2650 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
2651 ; CHECK-NEXT: lui a0, 3
2652 ; CHECK-NEXT: addi a0, a0, 819
2653 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
2654 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2655 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2656 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
2657 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
2658 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
2659 ; CHECK-NEXT: lui a0, 1
2660 ; CHECK-NEXT: addi a0, a0, -241
2661 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2662 ; CHECK-NEXT: li a0, 257
2663 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2664 ; CHECK-NEXT: vsrl.vi v8, v8, 8, v0.t
2666 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 true, <16 x i1> %m, i32 %evl)
2670 define <16 x i16> @vp_cttz_zero_undef_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
2671 ; CHECK-LABEL: vp_cttz_zero_undef_v16i16_unmasked:
2673 ; CHECK-NEXT: li a1, 1
2674 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
2675 ; CHECK-NEXT: vsub.vx v10, v8, a1
2676 ; CHECK-NEXT: vnot.v v8, v8
2677 ; CHECK-NEXT: vand.vv v8, v8, v10
2678 ; CHECK-NEXT: vsrl.vi v10, v8, 1
2679 ; CHECK-NEXT: lui a0, 5
2680 ; CHECK-NEXT: addi a0, a0, 1365
2681 ; CHECK-NEXT: vand.vx v10, v10, a0
2682 ; CHECK-NEXT: vsub.vv v8, v8, v10
2683 ; CHECK-NEXT: lui a0, 3
2684 ; CHECK-NEXT: addi a0, a0, 819
2685 ; CHECK-NEXT: vand.vx v10, v8, a0
2686 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2687 ; CHECK-NEXT: vand.vx v8, v8, a0
2688 ; CHECK-NEXT: vadd.vv v8, v10, v8
2689 ; CHECK-NEXT: vsrl.vi v10, v8, 4
2690 ; CHECK-NEXT: vadd.vv v8, v8, v10
2691 ; CHECK-NEXT: lui a0, 1
2692 ; CHECK-NEXT: addi a0, a0, -241
2693 ; CHECK-NEXT: vand.vx v8, v8, a0
2694 ; CHECK-NEXT: li a0, 257
2695 ; CHECK-NEXT: vmul.vx v8, v8, a0
2696 ; CHECK-NEXT: vsrl.vi v8, v8, 8
2698 %head = insertelement <16 x i1> poison, i1 true, i32 0
2699 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
2700 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 true, <16 x i1> %m, i32 %evl)
2704 define <2 x i32> @vp_cttz_zero_undef_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
2705 ; CHECK-LABEL: vp_cttz_zero_undef_v2i32:
2707 ; CHECK-NEXT: li a1, 1
2708 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
2709 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2710 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2711 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2712 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2713 ; CHECK-NEXT: lui a0, 349525
2714 ; CHECK-NEXT: addi a0, a0, 1365
2715 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2716 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2717 ; CHECK-NEXT: lui a0, 209715
2718 ; CHECK-NEXT: addi a0, a0, 819
2719 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2720 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2721 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2722 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2723 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2724 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2725 ; CHECK-NEXT: lui a0, 61681
2726 ; CHECK-NEXT: addi a0, a0, -241
2727 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2728 ; CHECK-NEXT: lui a0, 4112
2729 ; CHECK-NEXT: addi a0, a0, 257
2730 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2731 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
2733 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 true, <2 x i1> %m, i32 %evl)
2737 define <2 x i32> @vp_cttz_zero_undef_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
2738 ; CHECK-LABEL: vp_cttz_zero_undef_v2i32_unmasked:
2740 ; CHECK-NEXT: li a1, 1
2741 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
2742 ; CHECK-NEXT: vsub.vx v9, v8, a1
2743 ; CHECK-NEXT: vnot.v v8, v8
2744 ; CHECK-NEXT: vand.vv v8, v8, v9
2745 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2746 ; CHECK-NEXT: lui a0, 349525
2747 ; CHECK-NEXT: addi a0, a0, 1365
2748 ; CHECK-NEXT: vand.vx v9, v9, a0
2749 ; CHECK-NEXT: vsub.vv v8, v8, v9
2750 ; CHECK-NEXT: lui a0, 209715
2751 ; CHECK-NEXT: addi a0, a0, 819
2752 ; CHECK-NEXT: vand.vx v9, v8, a0
2753 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2754 ; CHECK-NEXT: vand.vx v8, v8, a0
2755 ; CHECK-NEXT: vadd.vv v8, v9, v8
2756 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2757 ; CHECK-NEXT: vadd.vv v8, v8, v9
2758 ; CHECK-NEXT: lui a0, 61681
2759 ; CHECK-NEXT: addi a0, a0, -241
2760 ; CHECK-NEXT: vand.vx v8, v8, a0
2761 ; CHECK-NEXT: lui a0, 4112
2762 ; CHECK-NEXT: addi a0, a0, 257
2763 ; CHECK-NEXT: vmul.vx v8, v8, a0
2764 ; CHECK-NEXT: vsrl.vi v8, v8, 24
2766 %head = insertelement <2 x i1> poison, i1 true, i32 0
2767 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
2768 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 true, <2 x i1> %m, i32 %evl)
2772 define <4 x i32> @vp_cttz_zero_undef_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
2773 ; CHECK-LABEL: vp_cttz_zero_undef_v4i32:
2775 ; CHECK-NEXT: li a1, 1
2776 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
2777 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2778 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2779 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2780 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2781 ; CHECK-NEXT: lui a0, 349525
2782 ; CHECK-NEXT: addi a0, a0, 1365
2783 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2784 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2785 ; CHECK-NEXT: lui a0, 209715
2786 ; CHECK-NEXT: addi a0, a0, 819
2787 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2788 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2789 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2790 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2791 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2792 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2793 ; CHECK-NEXT: lui a0, 61681
2794 ; CHECK-NEXT: addi a0, a0, -241
2795 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2796 ; CHECK-NEXT: lui a0, 4112
2797 ; CHECK-NEXT: addi a0, a0, 257
2798 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2799 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
2801 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 true, <4 x i1> %m, i32 %evl)
2805 define <4 x i32> @vp_cttz_zero_undef_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
2806 ; CHECK-LABEL: vp_cttz_zero_undef_v4i32_unmasked:
2808 ; CHECK-NEXT: li a1, 1
2809 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
2810 ; CHECK-NEXT: vsub.vx v9, v8, a1
2811 ; CHECK-NEXT: vnot.v v8, v8
2812 ; CHECK-NEXT: vand.vv v8, v8, v9
2813 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2814 ; CHECK-NEXT: lui a0, 349525
2815 ; CHECK-NEXT: addi a0, a0, 1365
2816 ; CHECK-NEXT: vand.vx v9, v9, a0
2817 ; CHECK-NEXT: vsub.vv v8, v8, v9
2818 ; CHECK-NEXT: lui a0, 209715
2819 ; CHECK-NEXT: addi a0, a0, 819
2820 ; CHECK-NEXT: vand.vx v9, v8, a0
2821 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2822 ; CHECK-NEXT: vand.vx v8, v8, a0
2823 ; CHECK-NEXT: vadd.vv v8, v9, v8
2824 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2825 ; CHECK-NEXT: vadd.vv v8, v8, v9
2826 ; CHECK-NEXT: lui a0, 61681
2827 ; CHECK-NEXT: addi a0, a0, -241
2828 ; CHECK-NEXT: vand.vx v8, v8, a0
2829 ; CHECK-NEXT: lui a0, 4112
2830 ; CHECK-NEXT: addi a0, a0, 257
2831 ; CHECK-NEXT: vmul.vx v8, v8, a0
2832 ; CHECK-NEXT: vsrl.vi v8, v8, 24
2834 %head = insertelement <4 x i1> poison, i1 true, i32 0
2835 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
2836 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 true, <4 x i1> %m, i32 %evl)
2840 define <8 x i32> @vp_cttz_zero_undef_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
2841 ; CHECK-LABEL: vp_cttz_zero_undef_v8i32:
2843 ; CHECK-NEXT: li a1, 1
2844 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2845 ; CHECK-NEXT: vsub.vx v10, v8, a1, v0.t
2846 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2847 ; CHECK-NEXT: vand.vv v8, v8, v10, v0.t
2848 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
2849 ; CHECK-NEXT: lui a0, 349525
2850 ; CHECK-NEXT: addi a0, a0, 1365
2851 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
2852 ; CHECK-NEXT: vsub.vv v8, v8, v10, v0.t
2853 ; CHECK-NEXT: lui a0, 209715
2854 ; CHECK-NEXT: addi a0, a0, 819
2855 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
2856 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2857 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2858 ; CHECK-NEXT: vadd.vv v8, v10, v8, v0.t
2859 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
2860 ; CHECK-NEXT: vadd.vv v8, v8, v10, v0.t
2861 ; CHECK-NEXT: lui a0, 61681
2862 ; CHECK-NEXT: addi a0, a0, -241
2863 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2864 ; CHECK-NEXT: lui a0, 4112
2865 ; CHECK-NEXT: addi a0, a0, 257
2866 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2867 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
2869 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 true, <8 x i1> %m, i32 %evl)
2873 define <8 x i32> @vp_cttz_zero_undef_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
2874 ; CHECK-LABEL: vp_cttz_zero_undef_v8i32_unmasked:
2876 ; CHECK-NEXT: li a1, 1
2877 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2878 ; CHECK-NEXT: vsub.vx v10, v8, a1
2879 ; CHECK-NEXT: vnot.v v8, v8
2880 ; CHECK-NEXT: vand.vv v8, v8, v10
2881 ; CHECK-NEXT: vsrl.vi v10, v8, 1
2882 ; CHECK-NEXT: lui a0, 349525
2883 ; CHECK-NEXT: addi a0, a0, 1365
2884 ; CHECK-NEXT: vand.vx v10, v10, a0
2885 ; CHECK-NEXT: vsub.vv v8, v8, v10
2886 ; CHECK-NEXT: lui a0, 209715
2887 ; CHECK-NEXT: addi a0, a0, 819
2888 ; CHECK-NEXT: vand.vx v10, v8, a0
2889 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2890 ; CHECK-NEXT: vand.vx v8, v8, a0
2891 ; CHECK-NEXT: vadd.vv v8, v10, v8
2892 ; CHECK-NEXT: vsrl.vi v10, v8, 4
2893 ; CHECK-NEXT: vadd.vv v8, v8, v10
2894 ; CHECK-NEXT: lui a0, 61681
2895 ; CHECK-NEXT: addi a0, a0, -241
2896 ; CHECK-NEXT: vand.vx v8, v8, a0
2897 ; CHECK-NEXT: lui a0, 4112
2898 ; CHECK-NEXT: addi a0, a0, 257
2899 ; CHECK-NEXT: vmul.vx v8, v8, a0
2900 ; CHECK-NEXT: vsrl.vi v8, v8, 24
2902 %head = insertelement <8 x i1> poison, i1 true, i32 0
2903 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
2904 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 true, <8 x i1> %m, i32 %evl)
2908 define <16 x i32> @vp_cttz_zero_undef_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
2909 ; CHECK-LABEL: vp_cttz_zero_undef_v16i32:
2911 ; CHECK-NEXT: li a1, 1
2912 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
2913 ; CHECK-NEXT: vsub.vx v12, v8, a1, v0.t
2914 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2915 ; CHECK-NEXT: vand.vv v8, v8, v12, v0.t
2916 ; CHECK-NEXT: vsrl.vi v12, v8, 1, v0.t
2917 ; CHECK-NEXT: lui a0, 349525
2918 ; CHECK-NEXT: addi a0, a0, 1365
2919 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
2920 ; CHECK-NEXT: vsub.vv v8, v8, v12, v0.t
2921 ; CHECK-NEXT: lui a0, 209715
2922 ; CHECK-NEXT: addi a0, a0, 819
2923 ; CHECK-NEXT: vand.vx v12, v8, a0, v0.t
2924 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2925 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2926 ; CHECK-NEXT: vadd.vv v8, v12, v8, v0.t
2927 ; CHECK-NEXT: vsrl.vi v12, v8, 4, v0.t
2928 ; CHECK-NEXT: vadd.vv v8, v8, v12, v0.t
2929 ; CHECK-NEXT: lui a0, 61681
2930 ; CHECK-NEXT: addi a0, a0, -241
2931 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2932 ; CHECK-NEXT: lui a0, 4112
2933 ; CHECK-NEXT: addi a0, a0, 257
2934 ; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t
2935 ; CHECK-NEXT: vsrl.vi v8, v8, 24, v0.t
2937 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 true, <16 x i1> %m, i32 %evl)
2941 define <16 x i32> @vp_cttz_zero_undef_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
2942 ; CHECK-LABEL: vp_cttz_zero_undef_v16i32_unmasked:
2944 ; CHECK-NEXT: li a1, 1
2945 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
2946 ; CHECK-NEXT: vsub.vx v12, v8, a1
2947 ; CHECK-NEXT: vnot.v v8, v8
2948 ; CHECK-NEXT: vand.vv v8, v8, v12
2949 ; CHECK-NEXT: vsrl.vi v12, v8, 1
2950 ; CHECK-NEXT: lui a0, 349525
2951 ; CHECK-NEXT: addi a0, a0, 1365
2952 ; CHECK-NEXT: vand.vx v12, v12, a0
2953 ; CHECK-NEXT: vsub.vv v8, v8, v12
2954 ; CHECK-NEXT: lui a0, 209715
2955 ; CHECK-NEXT: addi a0, a0, 819
2956 ; CHECK-NEXT: vand.vx v12, v8, a0
2957 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2958 ; CHECK-NEXT: vand.vx v8, v8, a0
2959 ; CHECK-NEXT: vadd.vv v8, v12, v8
2960 ; CHECK-NEXT: vsrl.vi v12, v8, 4
2961 ; CHECK-NEXT: vadd.vv v8, v8, v12
2962 ; CHECK-NEXT: lui a0, 61681
2963 ; CHECK-NEXT: addi a0, a0, -241
2964 ; CHECK-NEXT: vand.vx v8, v8, a0
2965 ; CHECK-NEXT: lui a0, 4112
2966 ; CHECK-NEXT: addi a0, a0, 257
2967 ; CHECK-NEXT: vmul.vx v8, v8, a0
2968 ; CHECK-NEXT: vsrl.vi v8, v8, 24
2970 %head = insertelement <16 x i1> poison, i1 true, i32 0
2971 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
2972 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 true, <16 x i1> %m, i32 %evl)
2976 define <2 x i64> @vp_cttz_zero_undef_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
2977 ; RV32-LABEL: vp_cttz_zero_undef_v2i64:
2979 ; RV32-NEXT: li a1, 1
2980 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
2981 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
2982 ; RV32-NEXT: vnot.v v8, v8, v0.t
2983 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
2984 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
2985 ; RV32-NEXT: lui a1, 349525
2986 ; RV32-NEXT: addi a1, a1, 1365
2987 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
2988 ; RV32-NEXT: vmv.v.x v10, a1
2989 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
2990 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
2991 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
2992 ; RV32-NEXT: lui a1, 209715
2993 ; RV32-NEXT: addi a1, a1, 819
2994 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
2995 ; RV32-NEXT: vmv.v.x v9, a1
2996 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
2997 ; RV32-NEXT: vand.vv v10, v8, v9, v0.t
2998 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
2999 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3000 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
3001 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
3002 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
3003 ; RV32-NEXT: lui a1, 61681
3004 ; RV32-NEXT: addi a1, a1, -241
3005 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
3006 ; RV32-NEXT: vmv.v.x v9, a1
3007 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3008 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3009 ; RV32-NEXT: lui a1, 4112
3010 ; RV32-NEXT: addi a1, a1, 257
3011 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
3012 ; RV32-NEXT: vmv.v.x v9, a1
3013 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3014 ; RV32-NEXT: vmul.vv v8, v8, v9, v0.t
3015 ; RV32-NEXT: li a0, 56
3016 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3019 ; RV64-LABEL: vp_cttz_zero_undef_v2i64:
3021 ; RV64-NEXT: li a1, 1
3022 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3023 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
3024 ; RV64-NEXT: vnot.v v8, v8, v0.t
3025 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
3026 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
3027 ; RV64-NEXT: lui a0, 349525
3028 ; RV64-NEXT: addiw a0, a0, 1365
3029 ; RV64-NEXT: slli a1, a0, 32
3030 ; RV64-NEXT: add a0, a0, a1
3031 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
3032 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
3033 ; RV64-NEXT: lui a0, 209715
3034 ; RV64-NEXT: addiw a0, a0, 819
3035 ; RV64-NEXT: slli a1, a0, 32
3036 ; RV64-NEXT: add a0, a0, a1
3037 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
3038 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3039 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3040 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
3041 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
3042 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
3043 ; RV64-NEXT: lui a0, 61681
3044 ; RV64-NEXT: addiw a0, a0, -241
3045 ; RV64-NEXT: slli a1, a0, 32
3046 ; RV64-NEXT: add a0, a0, a1
3047 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3048 ; RV64-NEXT: lui a0, 4112
3049 ; RV64-NEXT: addiw a0, a0, 257
3050 ; RV64-NEXT: slli a1, a0, 32
3051 ; RV64-NEXT: add a0, a0, a1
3052 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3053 ; RV64-NEXT: li a0, 56
3054 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3056 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 true, <2 x i1> %m, i32 %evl)
3060 define <2 x i64> @vp_cttz_zero_undef_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
3061 ; RV32-LABEL: vp_cttz_zero_undef_v2i64_unmasked:
3063 ; RV32-NEXT: li a1, 1
3064 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3065 ; RV32-NEXT: vsub.vx v9, v8, a1
3066 ; RV32-NEXT: vnot.v v8, v8
3067 ; RV32-NEXT: vand.vv v8, v8, v9
3068 ; RV32-NEXT: vsrl.vi v9, v8, 1
3069 ; RV32-NEXT: lui a1, 349525
3070 ; RV32-NEXT: addi a1, a1, 1365
3071 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
3072 ; RV32-NEXT: vmv.v.x v10, a1
3073 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3074 ; RV32-NEXT: vand.vv v9, v9, v10
3075 ; RV32-NEXT: vsub.vv v8, v8, v9
3076 ; RV32-NEXT: lui a1, 209715
3077 ; RV32-NEXT: addi a1, a1, 819
3078 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
3079 ; RV32-NEXT: vmv.v.x v9, a1
3080 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3081 ; RV32-NEXT: vand.vv v10, v8, v9
3082 ; RV32-NEXT: vsrl.vi v8, v8, 2
3083 ; RV32-NEXT: vand.vv v8, v8, v9
3084 ; RV32-NEXT: vadd.vv v8, v10, v8
3085 ; RV32-NEXT: vsrl.vi v9, v8, 4
3086 ; RV32-NEXT: vadd.vv v8, v8, v9
3087 ; RV32-NEXT: lui a1, 61681
3088 ; RV32-NEXT: addi a1, a1, -241
3089 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
3090 ; RV32-NEXT: vmv.v.x v9, a1
3091 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3092 ; RV32-NEXT: vand.vv v8, v8, v9
3093 ; RV32-NEXT: lui a1, 4112
3094 ; RV32-NEXT: addi a1, a1, 257
3095 ; RV32-NEXT: vsetvli a2, zero, e32, m1, ta, ma
3096 ; RV32-NEXT: vmv.v.x v9, a1
3097 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3098 ; RV32-NEXT: vmul.vv v8, v8, v9
3099 ; RV32-NEXT: li a0, 56
3100 ; RV32-NEXT: vsrl.vx v8, v8, a0
3103 ; RV64-LABEL: vp_cttz_zero_undef_v2i64_unmasked:
3105 ; RV64-NEXT: li a1, 1
3106 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3107 ; RV64-NEXT: vsub.vx v9, v8, a1
3108 ; RV64-NEXT: vnot.v v8, v8
3109 ; RV64-NEXT: vand.vv v8, v8, v9
3110 ; RV64-NEXT: vsrl.vi v9, v8, 1
3111 ; RV64-NEXT: lui a0, 349525
3112 ; RV64-NEXT: addiw a0, a0, 1365
3113 ; RV64-NEXT: slli a1, a0, 32
3114 ; RV64-NEXT: add a0, a0, a1
3115 ; RV64-NEXT: vand.vx v9, v9, a0
3116 ; RV64-NEXT: vsub.vv v8, v8, v9
3117 ; RV64-NEXT: lui a0, 209715
3118 ; RV64-NEXT: addiw a0, a0, 819
3119 ; RV64-NEXT: slli a1, a0, 32
3120 ; RV64-NEXT: add a0, a0, a1
3121 ; RV64-NEXT: vand.vx v9, v8, a0
3122 ; RV64-NEXT: vsrl.vi v8, v8, 2
3123 ; RV64-NEXT: vand.vx v8, v8, a0
3124 ; RV64-NEXT: vadd.vv v8, v9, v8
3125 ; RV64-NEXT: vsrl.vi v9, v8, 4
3126 ; RV64-NEXT: vadd.vv v8, v8, v9
3127 ; RV64-NEXT: lui a0, 61681
3128 ; RV64-NEXT: addiw a0, a0, -241
3129 ; RV64-NEXT: slli a1, a0, 32
3130 ; RV64-NEXT: add a0, a0, a1
3131 ; RV64-NEXT: vand.vx v8, v8, a0
3132 ; RV64-NEXT: lui a0, 4112
3133 ; RV64-NEXT: addiw a0, a0, 257
3134 ; RV64-NEXT: slli a1, a0, 32
3135 ; RV64-NEXT: add a0, a0, a1
3136 ; RV64-NEXT: vmul.vx v8, v8, a0
3137 ; RV64-NEXT: li a0, 56
3138 ; RV64-NEXT: vsrl.vx v8, v8, a0
3140 %head = insertelement <2 x i1> poison, i1 true, i32 0
3141 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
3142 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 true, <2 x i1> %m, i32 %evl)
3146 define <4 x i64> @vp_cttz_zero_undef_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
3147 ; RV32-LABEL: vp_cttz_zero_undef_v4i64:
3149 ; RV32-NEXT: li a1, 1
3150 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3151 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
3152 ; RV32-NEXT: vnot.v v8, v8, v0.t
3153 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3154 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
3155 ; RV32-NEXT: lui a1, 349525
3156 ; RV32-NEXT: addi a1, a1, 1365
3157 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3158 ; RV32-NEXT: vmv.v.x v12, a1
3159 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3160 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
3161 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
3162 ; RV32-NEXT: lui a1, 209715
3163 ; RV32-NEXT: addi a1, a1, 819
3164 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3165 ; RV32-NEXT: vmv.v.x v10, a1
3166 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3167 ; RV32-NEXT: vand.vv v12, v8, v10, v0.t
3168 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3169 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3170 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
3171 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
3172 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
3173 ; RV32-NEXT: lui a1, 61681
3174 ; RV32-NEXT: addi a1, a1, -241
3175 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3176 ; RV32-NEXT: vmv.v.x v10, a1
3177 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3178 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3179 ; RV32-NEXT: lui a1, 4112
3180 ; RV32-NEXT: addi a1, a1, 257
3181 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3182 ; RV32-NEXT: vmv.v.x v10, a1
3183 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3184 ; RV32-NEXT: vmul.vv v8, v8, v10, v0.t
3185 ; RV32-NEXT: li a0, 56
3186 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3189 ; RV64-LABEL: vp_cttz_zero_undef_v4i64:
3191 ; RV64-NEXT: li a1, 1
3192 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3193 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
3194 ; RV64-NEXT: vnot.v v8, v8, v0.t
3195 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
3196 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
3197 ; RV64-NEXT: lui a0, 349525
3198 ; RV64-NEXT: addiw a0, a0, 1365
3199 ; RV64-NEXT: slli a1, a0, 32
3200 ; RV64-NEXT: add a0, a0, a1
3201 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
3202 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
3203 ; RV64-NEXT: lui a0, 209715
3204 ; RV64-NEXT: addiw a0, a0, 819
3205 ; RV64-NEXT: slli a1, a0, 32
3206 ; RV64-NEXT: add a0, a0, a1
3207 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
3208 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3209 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3210 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
3211 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
3212 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
3213 ; RV64-NEXT: lui a0, 61681
3214 ; RV64-NEXT: addiw a0, a0, -241
3215 ; RV64-NEXT: slli a1, a0, 32
3216 ; RV64-NEXT: add a0, a0, a1
3217 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3218 ; RV64-NEXT: lui a0, 4112
3219 ; RV64-NEXT: addiw a0, a0, 257
3220 ; RV64-NEXT: slli a1, a0, 32
3221 ; RV64-NEXT: add a0, a0, a1
3222 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3223 ; RV64-NEXT: li a0, 56
3224 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3226 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 true, <4 x i1> %m, i32 %evl)
3230 define <4 x i64> @vp_cttz_zero_undef_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
3231 ; RV32-LABEL: vp_cttz_zero_undef_v4i64_unmasked:
3233 ; RV32-NEXT: li a1, 1
3234 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3235 ; RV32-NEXT: vsub.vx v10, v8, a1
3236 ; RV32-NEXT: vnot.v v8, v8
3237 ; RV32-NEXT: vand.vv v8, v8, v10
3238 ; RV32-NEXT: vsrl.vi v10, v8, 1
3239 ; RV32-NEXT: lui a1, 349525
3240 ; RV32-NEXT: addi a1, a1, 1365
3241 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3242 ; RV32-NEXT: vmv.v.x v12, a1
3243 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3244 ; RV32-NEXT: vand.vv v10, v10, v12
3245 ; RV32-NEXT: vsub.vv v8, v8, v10
3246 ; RV32-NEXT: lui a1, 209715
3247 ; RV32-NEXT: addi a1, a1, 819
3248 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3249 ; RV32-NEXT: vmv.v.x v10, a1
3250 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3251 ; RV32-NEXT: vand.vv v12, v8, v10
3252 ; RV32-NEXT: vsrl.vi v8, v8, 2
3253 ; RV32-NEXT: vand.vv v8, v8, v10
3254 ; RV32-NEXT: vadd.vv v8, v12, v8
3255 ; RV32-NEXT: vsrl.vi v10, v8, 4
3256 ; RV32-NEXT: vadd.vv v8, v8, v10
3257 ; RV32-NEXT: lui a1, 61681
3258 ; RV32-NEXT: addi a1, a1, -241
3259 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3260 ; RV32-NEXT: vmv.v.x v10, a1
3261 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3262 ; RV32-NEXT: vand.vv v8, v8, v10
3263 ; RV32-NEXT: lui a1, 4112
3264 ; RV32-NEXT: addi a1, a1, 257
3265 ; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3266 ; RV32-NEXT: vmv.v.x v10, a1
3267 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3268 ; RV32-NEXT: vmul.vv v8, v8, v10
3269 ; RV32-NEXT: li a0, 56
3270 ; RV32-NEXT: vsrl.vx v8, v8, a0
3273 ; RV64-LABEL: vp_cttz_zero_undef_v4i64_unmasked:
3275 ; RV64-NEXT: li a1, 1
3276 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3277 ; RV64-NEXT: vsub.vx v10, v8, a1
3278 ; RV64-NEXT: vnot.v v8, v8
3279 ; RV64-NEXT: vand.vv v8, v8, v10
3280 ; RV64-NEXT: vsrl.vi v10, v8, 1
3281 ; RV64-NEXT: lui a0, 349525
3282 ; RV64-NEXT: addiw a0, a0, 1365
3283 ; RV64-NEXT: slli a1, a0, 32
3284 ; RV64-NEXT: add a0, a0, a1
3285 ; RV64-NEXT: vand.vx v10, v10, a0
3286 ; RV64-NEXT: vsub.vv v8, v8, v10
3287 ; RV64-NEXT: lui a0, 209715
3288 ; RV64-NEXT: addiw a0, a0, 819
3289 ; RV64-NEXT: slli a1, a0, 32
3290 ; RV64-NEXT: add a0, a0, a1
3291 ; RV64-NEXT: vand.vx v10, v8, a0
3292 ; RV64-NEXT: vsrl.vi v8, v8, 2
3293 ; RV64-NEXT: vand.vx v8, v8, a0
3294 ; RV64-NEXT: vadd.vv v8, v10, v8
3295 ; RV64-NEXT: vsrl.vi v10, v8, 4
3296 ; RV64-NEXT: vadd.vv v8, v8, v10
3297 ; RV64-NEXT: lui a0, 61681
3298 ; RV64-NEXT: addiw a0, a0, -241
3299 ; RV64-NEXT: slli a1, a0, 32
3300 ; RV64-NEXT: add a0, a0, a1
3301 ; RV64-NEXT: vand.vx v8, v8, a0
3302 ; RV64-NEXT: lui a0, 4112
3303 ; RV64-NEXT: addiw a0, a0, 257
3304 ; RV64-NEXT: slli a1, a0, 32
3305 ; RV64-NEXT: add a0, a0, a1
3306 ; RV64-NEXT: vmul.vx v8, v8, a0
3307 ; RV64-NEXT: li a0, 56
3308 ; RV64-NEXT: vsrl.vx v8, v8, a0
3310 %head = insertelement <4 x i1> poison, i1 true, i32 0
3311 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
3312 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 true, <4 x i1> %m, i32 %evl)
3316 define <8 x i64> @vp_cttz_zero_undef_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
3317 ; RV32-LABEL: vp_cttz_zero_undef_v8i64:
3319 ; RV32-NEXT: li a1, 1
3320 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3321 ; RV32-NEXT: vsub.vx v12, v8, a1, v0.t
3322 ; RV32-NEXT: vnot.v v8, v8, v0.t
3323 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
3324 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
3325 ; RV32-NEXT: lui a1, 349525
3326 ; RV32-NEXT: addi a1, a1, 1365
3327 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3328 ; RV32-NEXT: vmv.v.x v16, a1
3329 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3330 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
3331 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
3332 ; RV32-NEXT: lui a1, 209715
3333 ; RV32-NEXT: addi a1, a1, 819
3334 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3335 ; RV32-NEXT: vmv.v.x v12, a1
3336 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3337 ; RV32-NEXT: vand.vv v16, v8, v12, v0.t
3338 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3339 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
3340 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
3341 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
3342 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
3343 ; RV32-NEXT: lui a1, 61681
3344 ; RV32-NEXT: addi a1, a1, -241
3345 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3346 ; RV32-NEXT: vmv.v.x v12, a1
3347 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3348 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
3349 ; RV32-NEXT: lui a1, 4112
3350 ; RV32-NEXT: addi a1, a1, 257
3351 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3352 ; RV32-NEXT: vmv.v.x v12, a1
3353 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3354 ; RV32-NEXT: vmul.vv v8, v8, v12, v0.t
3355 ; RV32-NEXT: li a0, 56
3356 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3359 ; RV64-LABEL: vp_cttz_zero_undef_v8i64:
3361 ; RV64-NEXT: li a1, 1
3362 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3363 ; RV64-NEXT: vsub.vx v12, v8, a1, v0.t
3364 ; RV64-NEXT: vnot.v v8, v8, v0.t
3365 ; RV64-NEXT: vand.vv v8, v8, v12, v0.t
3366 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
3367 ; RV64-NEXT: lui a0, 349525
3368 ; RV64-NEXT: addiw a0, a0, 1365
3369 ; RV64-NEXT: slli a1, a0, 32
3370 ; RV64-NEXT: add a0, a0, a1
3371 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
3372 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
3373 ; RV64-NEXT: lui a0, 209715
3374 ; RV64-NEXT: addiw a0, a0, 819
3375 ; RV64-NEXT: slli a1, a0, 32
3376 ; RV64-NEXT: add a0, a0, a1
3377 ; RV64-NEXT: vand.vx v12, v8, a0, v0.t
3378 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3379 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3380 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
3381 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
3382 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
3383 ; RV64-NEXT: lui a0, 61681
3384 ; RV64-NEXT: addiw a0, a0, -241
3385 ; RV64-NEXT: slli a1, a0, 32
3386 ; RV64-NEXT: add a0, a0, a1
3387 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3388 ; RV64-NEXT: lui a0, 4112
3389 ; RV64-NEXT: addiw a0, a0, 257
3390 ; RV64-NEXT: slli a1, a0, 32
3391 ; RV64-NEXT: add a0, a0, a1
3392 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3393 ; RV64-NEXT: li a0, 56
3394 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3396 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 true, <8 x i1> %m, i32 %evl)
3400 define <8 x i64> @vp_cttz_zero_undef_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
3401 ; RV32-LABEL: vp_cttz_zero_undef_v8i64_unmasked:
3403 ; RV32-NEXT: li a1, 1
3404 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3405 ; RV32-NEXT: vsub.vx v12, v8, a1
3406 ; RV32-NEXT: vnot.v v8, v8
3407 ; RV32-NEXT: vand.vv v8, v8, v12
3408 ; RV32-NEXT: vsrl.vi v12, v8, 1
3409 ; RV32-NEXT: lui a1, 349525
3410 ; RV32-NEXT: addi a1, a1, 1365
3411 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3412 ; RV32-NEXT: vmv.v.x v16, a1
3413 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3414 ; RV32-NEXT: vand.vv v12, v12, v16
3415 ; RV32-NEXT: vsub.vv v8, v8, v12
3416 ; RV32-NEXT: lui a1, 209715
3417 ; RV32-NEXT: addi a1, a1, 819
3418 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3419 ; RV32-NEXT: vmv.v.x v12, a1
3420 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3421 ; RV32-NEXT: vand.vv v16, v8, v12
3422 ; RV32-NEXT: vsrl.vi v8, v8, 2
3423 ; RV32-NEXT: vand.vv v8, v8, v12
3424 ; RV32-NEXT: vadd.vv v8, v16, v8
3425 ; RV32-NEXT: vsrl.vi v12, v8, 4
3426 ; RV32-NEXT: vadd.vv v8, v8, v12
3427 ; RV32-NEXT: lui a1, 61681
3428 ; RV32-NEXT: addi a1, a1, -241
3429 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3430 ; RV32-NEXT: vmv.v.x v12, a1
3431 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3432 ; RV32-NEXT: vand.vv v8, v8, v12
3433 ; RV32-NEXT: lui a1, 4112
3434 ; RV32-NEXT: addi a1, a1, 257
3435 ; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, ma
3436 ; RV32-NEXT: vmv.v.x v12, a1
3437 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3438 ; RV32-NEXT: vmul.vv v8, v8, v12
3439 ; RV32-NEXT: li a0, 56
3440 ; RV32-NEXT: vsrl.vx v8, v8, a0
3443 ; RV64-LABEL: vp_cttz_zero_undef_v8i64_unmasked:
3445 ; RV64-NEXT: li a1, 1
3446 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
3447 ; RV64-NEXT: vsub.vx v12, v8, a1
3448 ; RV64-NEXT: vnot.v v8, v8
3449 ; RV64-NEXT: vand.vv v8, v8, v12
3450 ; RV64-NEXT: vsrl.vi v12, v8, 1
3451 ; RV64-NEXT: lui a0, 349525
3452 ; RV64-NEXT: addiw a0, a0, 1365
3453 ; RV64-NEXT: slli a1, a0, 32
3454 ; RV64-NEXT: add a0, a0, a1
3455 ; RV64-NEXT: vand.vx v12, v12, a0
3456 ; RV64-NEXT: vsub.vv v8, v8, v12
3457 ; RV64-NEXT: lui a0, 209715
3458 ; RV64-NEXT: addiw a0, a0, 819
3459 ; RV64-NEXT: slli a1, a0, 32
3460 ; RV64-NEXT: add a0, a0, a1
3461 ; RV64-NEXT: vand.vx v12, v8, a0
3462 ; RV64-NEXT: vsrl.vi v8, v8, 2
3463 ; RV64-NEXT: vand.vx v8, v8, a0
3464 ; RV64-NEXT: vadd.vv v8, v12, v8
3465 ; RV64-NEXT: vsrl.vi v12, v8, 4
3466 ; RV64-NEXT: vadd.vv v8, v8, v12
3467 ; RV64-NEXT: lui a0, 61681
3468 ; RV64-NEXT: addiw a0, a0, -241
3469 ; RV64-NEXT: slli a1, a0, 32
3470 ; RV64-NEXT: add a0, a0, a1
3471 ; RV64-NEXT: vand.vx v8, v8, a0
3472 ; RV64-NEXT: lui a0, 4112
3473 ; RV64-NEXT: addiw a0, a0, 257
3474 ; RV64-NEXT: slli a1, a0, 32
3475 ; RV64-NEXT: add a0, a0, a1
3476 ; RV64-NEXT: vmul.vx v8, v8, a0
3477 ; RV64-NEXT: li a0, 56
3478 ; RV64-NEXT: vsrl.vx v8, v8, a0
3480 %head = insertelement <8 x i1> poison, i1 true, i32 0
3481 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
3482 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 true, <8 x i1> %m, i32 %evl)
3486 define <15 x i64> @vp_cttz_zero_undef_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
3487 ; RV32-LABEL: vp_cttz_zero_undef_v15i64:
3489 ; RV32-NEXT: addi sp, sp, -32
3490 ; RV32-NEXT: .cfi_def_cfa_offset 32
3491 ; RV32-NEXT: lui a1, 349525
3492 ; RV32-NEXT: addi a1, a1, 1365
3493 ; RV32-NEXT: sw a1, 28(sp)
3494 ; RV32-NEXT: sw a1, 24(sp)
3495 ; RV32-NEXT: lui a1, 209715
3496 ; RV32-NEXT: addi a1, a1, 819
3497 ; RV32-NEXT: sw a1, 20(sp)
3498 ; RV32-NEXT: sw a1, 16(sp)
3499 ; RV32-NEXT: lui a1, 61681
3500 ; RV32-NEXT: addi a1, a1, -241
3501 ; RV32-NEXT: sw a1, 12(sp)
3502 ; RV32-NEXT: sw a1, 8(sp)
3503 ; RV32-NEXT: lui a1, 4112
3504 ; RV32-NEXT: addi a1, a1, 257
3505 ; RV32-NEXT: sw a1, 4(sp)
3506 ; RV32-NEXT: sw a1, 0(sp)
3507 ; RV32-NEXT: li a1, 1
3508 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3509 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
3510 ; RV32-NEXT: vnot.v v8, v8, v0.t
3511 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
3512 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
3513 ; RV32-NEXT: addi a1, sp, 24
3514 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3515 ; RV32-NEXT: vlse64.v v24, (a1), zero
3516 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3517 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
3518 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
3519 ; RV32-NEXT: addi a1, sp, 16
3520 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3521 ; RV32-NEXT: vlse64.v v16, (a1), zero
3522 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3523 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
3524 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3525 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
3526 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
3527 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
3528 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
3529 ; RV32-NEXT: addi a1, sp, 8
3530 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3531 ; RV32-NEXT: vlse64.v v16, (a1), zero
3532 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3533 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
3534 ; RV32-NEXT: mv a1, sp
3535 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3536 ; RV32-NEXT: vlse64.v v16, (a1), zero
3537 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3538 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
3539 ; RV32-NEXT: li a0, 56
3540 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3541 ; RV32-NEXT: addi sp, sp, 32
3544 ; RV64-LABEL: vp_cttz_zero_undef_v15i64:
3546 ; RV64-NEXT: li a1, 1
3547 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3548 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
3549 ; RV64-NEXT: vnot.v v8, v8, v0.t
3550 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
3551 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
3552 ; RV64-NEXT: lui a0, 349525
3553 ; RV64-NEXT: addiw a0, a0, 1365
3554 ; RV64-NEXT: slli a1, a0, 32
3555 ; RV64-NEXT: add a0, a0, a1
3556 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
3557 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
3558 ; RV64-NEXT: lui a0, 209715
3559 ; RV64-NEXT: addiw a0, a0, 819
3560 ; RV64-NEXT: slli a1, a0, 32
3561 ; RV64-NEXT: add a0, a0, a1
3562 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
3563 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3564 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3565 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
3566 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
3567 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
3568 ; RV64-NEXT: lui a0, 61681
3569 ; RV64-NEXT: addiw a0, a0, -241
3570 ; RV64-NEXT: slli a1, a0, 32
3571 ; RV64-NEXT: add a0, a0, a1
3572 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3573 ; RV64-NEXT: lui a0, 4112
3574 ; RV64-NEXT: addiw a0, a0, 257
3575 ; RV64-NEXT: slli a1, a0, 32
3576 ; RV64-NEXT: add a0, a0, a1
3577 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3578 ; RV64-NEXT: li a0, 56
3579 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3581 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 true, <15 x i1> %m, i32 %evl)
3585 define <15 x i64> @vp_cttz_zero_undef_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
3586 ; RV32-LABEL: vp_cttz_zero_undef_v15i64_unmasked:
3588 ; RV32-NEXT: addi sp, sp, -32
3589 ; RV32-NEXT: .cfi_def_cfa_offset 32
3590 ; RV32-NEXT: lui a1, 349525
3591 ; RV32-NEXT: addi a1, a1, 1365
3592 ; RV32-NEXT: sw a1, 28(sp)
3593 ; RV32-NEXT: sw a1, 24(sp)
3594 ; RV32-NEXT: lui a1, 209715
3595 ; RV32-NEXT: addi a1, a1, 819
3596 ; RV32-NEXT: sw a1, 20(sp)
3597 ; RV32-NEXT: sw a1, 16(sp)
3598 ; RV32-NEXT: lui a1, 61681
3599 ; RV32-NEXT: addi a1, a1, -241
3600 ; RV32-NEXT: sw a1, 12(sp)
3601 ; RV32-NEXT: sw a1, 8(sp)
3602 ; RV32-NEXT: lui a1, 4112
3603 ; RV32-NEXT: addi a1, a1, 257
3604 ; RV32-NEXT: sw a1, 4(sp)
3605 ; RV32-NEXT: sw a1, 0(sp)
3606 ; RV32-NEXT: li a1, 1
3607 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3608 ; RV32-NEXT: vsub.vx v16, v8, a1
3609 ; RV32-NEXT: vnot.v v8, v8
3610 ; RV32-NEXT: vand.vv v8, v8, v16
3611 ; RV32-NEXT: vsrl.vi v16, v8, 1
3612 ; RV32-NEXT: addi a1, sp, 24
3613 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3614 ; RV32-NEXT: vlse64.v v24, (a1), zero
3615 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3616 ; RV32-NEXT: vand.vv v16, v16, v24
3617 ; RV32-NEXT: vsub.vv v8, v8, v16
3618 ; RV32-NEXT: addi a1, sp, 16
3619 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3620 ; RV32-NEXT: vlse64.v v16, (a1), zero
3621 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3622 ; RV32-NEXT: vand.vv v24, v8, v16
3623 ; RV32-NEXT: vsrl.vi v8, v8, 2
3624 ; RV32-NEXT: vand.vv v8, v8, v16
3625 ; RV32-NEXT: vadd.vv v8, v24, v8
3626 ; RV32-NEXT: vsrl.vi v16, v8, 4
3627 ; RV32-NEXT: vadd.vv v8, v8, v16
3628 ; RV32-NEXT: addi a1, sp, 8
3629 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3630 ; RV32-NEXT: vlse64.v v16, (a1), zero
3631 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3632 ; RV32-NEXT: vand.vv v8, v8, v16
3633 ; RV32-NEXT: mv a1, sp
3634 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3635 ; RV32-NEXT: vlse64.v v16, (a1), zero
3636 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3637 ; RV32-NEXT: vmul.vv v8, v8, v16
3638 ; RV32-NEXT: li a0, 56
3639 ; RV32-NEXT: vsrl.vx v8, v8, a0
3640 ; RV32-NEXT: addi sp, sp, 32
3643 ; RV64-LABEL: vp_cttz_zero_undef_v15i64_unmasked:
3645 ; RV64-NEXT: li a1, 1
3646 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3647 ; RV64-NEXT: vsub.vx v16, v8, a1
3648 ; RV64-NEXT: vnot.v v8, v8
3649 ; RV64-NEXT: vand.vv v8, v8, v16
3650 ; RV64-NEXT: vsrl.vi v16, v8, 1
3651 ; RV64-NEXT: lui a0, 349525
3652 ; RV64-NEXT: addiw a0, a0, 1365
3653 ; RV64-NEXT: slli a1, a0, 32
3654 ; RV64-NEXT: add a0, a0, a1
3655 ; RV64-NEXT: vand.vx v16, v16, a0
3656 ; RV64-NEXT: vsub.vv v8, v8, v16
3657 ; RV64-NEXT: lui a0, 209715
3658 ; RV64-NEXT: addiw a0, a0, 819
3659 ; RV64-NEXT: slli a1, a0, 32
3660 ; RV64-NEXT: add a0, a0, a1
3661 ; RV64-NEXT: vand.vx v16, v8, a0
3662 ; RV64-NEXT: vsrl.vi v8, v8, 2
3663 ; RV64-NEXT: vand.vx v8, v8, a0
3664 ; RV64-NEXT: vadd.vv v8, v16, v8
3665 ; RV64-NEXT: vsrl.vi v16, v8, 4
3666 ; RV64-NEXT: vadd.vv v8, v8, v16
3667 ; RV64-NEXT: lui a0, 61681
3668 ; RV64-NEXT: addiw a0, a0, -241
3669 ; RV64-NEXT: slli a1, a0, 32
3670 ; RV64-NEXT: add a0, a0, a1
3671 ; RV64-NEXT: vand.vx v8, v8, a0
3672 ; RV64-NEXT: lui a0, 4112
3673 ; RV64-NEXT: addiw a0, a0, 257
3674 ; RV64-NEXT: slli a1, a0, 32
3675 ; RV64-NEXT: add a0, a0, a1
3676 ; RV64-NEXT: vmul.vx v8, v8, a0
3677 ; RV64-NEXT: li a0, 56
3678 ; RV64-NEXT: vsrl.vx v8, v8, a0
3680 %head = insertelement <15 x i1> poison, i1 true, i32 0
3681 %m = shufflevector <15 x i1> %head, <15 x i1> poison, <15 x i32> zeroinitializer
3682 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 true, <15 x i1> %m, i32 %evl)
3686 define <16 x i64> @vp_cttz_zero_undef_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
3687 ; RV32-LABEL: vp_cttz_zero_undef_v16i64:
3689 ; RV32-NEXT: addi sp, sp, -32
3690 ; RV32-NEXT: .cfi_def_cfa_offset 32
3691 ; RV32-NEXT: lui a1, 349525
3692 ; RV32-NEXT: addi a1, a1, 1365
3693 ; RV32-NEXT: sw a1, 28(sp)
3694 ; RV32-NEXT: sw a1, 24(sp)
3695 ; RV32-NEXT: lui a1, 209715
3696 ; RV32-NEXT: addi a1, a1, 819
3697 ; RV32-NEXT: sw a1, 20(sp)
3698 ; RV32-NEXT: sw a1, 16(sp)
3699 ; RV32-NEXT: lui a1, 61681
3700 ; RV32-NEXT: addi a1, a1, -241
3701 ; RV32-NEXT: sw a1, 12(sp)
3702 ; RV32-NEXT: sw a1, 8(sp)
3703 ; RV32-NEXT: lui a1, 4112
3704 ; RV32-NEXT: addi a1, a1, 257
3705 ; RV32-NEXT: sw a1, 4(sp)
3706 ; RV32-NEXT: sw a1, 0(sp)
3707 ; RV32-NEXT: li a1, 1
3708 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3709 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
3710 ; RV32-NEXT: vnot.v v8, v8, v0.t
3711 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
3712 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
3713 ; RV32-NEXT: addi a1, sp, 24
3714 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3715 ; RV32-NEXT: vlse64.v v24, (a1), zero
3716 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3717 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
3718 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
3719 ; RV32-NEXT: addi a1, sp, 16
3720 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3721 ; RV32-NEXT: vlse64.v v16, (a1), zero
3722 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3723 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
3724 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3725 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
3726 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
3727 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
3728 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
3729 ; RV32-NEXT: addi a1, sp, 8
3730 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3731 ; RV32-NEXT: vlse64.v v16, (a1), zero
3732 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3733 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
3734 ; RV32-NEXT: mv a1, sp
3735 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3736 ; RV32-NEXT: vlse64.v v16, (a1), zero
3737 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3738 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
3739 ; RV32-NEXT: li a0, 56
3740 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3741 ; RV32-NEXT: addi sp, sp, 32
3744 ; RV64-LABEL: vp_cttz_zero_undef_v16i64:
3746 ; RV64-NEXT: li a1, 1
3747 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3748 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
3749 ; RV64-NEXT: vnot.v v8, v8, v0.t
3750 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
3751 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
3752 ; RV64-NEXT: lui a0, 349525
3753 ; RV64-NEXT: addiw a0, a0, 1365
3754 ; RV64-NEXT: slli a1, a0, 32
3755 ; RV64-NEXT: add a0, a0, a1
3756 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
3757 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
3758 ; RV64-NEXT: lui a0, 209715
3759 ; RV64-NEXT: addiw a0, a0, 819
3760 ; RV64-NEXT: slli a1, a0, 32
3761 ; RV64-NEXT: add a0, a0, a1
3762 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
3763 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3764 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3765 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
3766 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
3767 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
3768 ; RV64-NEXT: lui a0, 61681
3769 ; RV64-NEXT: addiw a0, a0, -241
3770 ; RV64-NEXT: slli a1, a0, 32
3771 ; RV64-NEXT: add a0, a0, a1
3772 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3773 ; RV64-NEXT: lui a0, 4112
3774 ; RV64-NEXT: addiw a0, a0, 257
3775 ; RV64-NEXT: slli a1, a0, 32
3776 ; RV64-NEXT: add a0, a0, a1
3777 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3778 ; RV64-NEXT: li a0, 56
3779 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3781 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 true, <16 x i1> %m, i32 %evl)
3785 define <16 x i64> @vp_cttz_zero_undef_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
3786 ; RV32-LABEL: vp_cttz_zero_undef_v16i64_unmasked:
3788 ; RV32-NEXT: addi sp, sp, -32
3789 ; RV32-NEXT: .cfi_def_cfa_offset 32
3790 ; RV32-NEXT: lui a1, 349525
3791 ; RV32-NEXT: addi a1, a1, 1365
3792 ; RV32-NEXT: sw a1, 28(sp)
3793 ; RV32-NEXT: sw a1, 24(sp)
3794 ; RV32-NEXT: lui a1, 209715
3795 ; RV32-NEXT: addi a1, a1, 819
3796 ; RV32-NEXT: sw a1, 20(sp)
3797 ; RV32-NEXT: sw a1, 16(sp)
3798 ; RV32-NEXT: lui a1, 61681
3799 ; RV32-NEXT: addi a1, a1, -241
3800 ; RV32-NEXT: sw a1, 12(sp)
3801 ; RV32-NEXT: sw a1, 8(sp)
3802 ; RV32-NEXT: lui a1, 4112
3803 ; RV32-NEXT: addi a1, a1, 257
3804 ; RV32-NEXT: sw a1, 4(sp)
3805 ; RV32-NEXT: sw a1, 0(sp)
3806 ; RV32-NEXT: li a1, 1
3807 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3808 ; RV32-NEXT: vsub.vx v16, v8, a1
3809 ; RV32-NEXT: vnot.v v8, v8
3810 ; RV32-NEXT: vand.vv v8, v8, v16
3811 ; RV32-NEXT: vsrl.vi v16, v8, 1
3812 ; RV32-NEXT: addi a1, sp, 24
3813 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3814 ; RV32-NEXT: vlse64.v v24, (a1), zero
3815 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3816 ; RV32-NEXT: vand.vv v16, v16, v24
3817 ; RV32-NEXT: vsub.vv v8, v8, v16
3818 ; RV32-NEXT: addi a1, sp, 16
3819 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3820 ; RV32-NEXT: vlse64.v v16, (a1), zero
3821 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3822 ; RV32-NEXT: vand.vv v24, v8, v16
3823 ; RV32-NEXT: vsrl.vi v8, v8, 2
3824 ; RV32-NEXT: vand.vv v8, v8, v16
3825 ; RV32-NEXT: vadd.vv v8, v24, v8
3826 ; RV32-NEXT: vsrl.vi v16, v8, 4
3827 ; RV32-NEXT: vadd.vv v8, v8, v16
3828 ; RV32-NEXT: addi a1, sp, 8
3829 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3830 ; RV32-NEXT: vlse64.v v16, (a1), zero
3831 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3832 ; RV32-NEXT: vand.vv v8, v8, v16
3833 ; RV32-NEXT: mv a1, sp
3834 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3835 ; RV32-NEXT: vlse64.v v16, (a1), zero
3836 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3837 ; RV32-NEXT: vmul.vv v8, v8, v16
3838 ; RV32-NEXT: li a0, 56
3839 ; RV32-NEXT: vsrl.vx v8, v8, a0
3840 ; RV32-NEXT: addi sp, sp, 32
3843 ; RV64-LABEL: vp_cttz_zero_undef_v16i64_unmasked:
3845 ; RV64-NEXT: li a1, 1
3846 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
3847 ; RV64-NEXT: vsub.vx v16, v8, a1
3848 ; RV64-NEXT: vnot.v v8, v8
3849 ; RV64-NEXT: vand.vv v8, v8, v16
3850 ; RV64-NEXT: vsrl.vi v16, v8, 1
3851 ; RV64-NEXT: lui a0, 349525
3852 ; RV64-NEXT: addiw a0, a0, 1365
3853 ; RV64-NEXT: slli a1, a0, 32
3854 ; RV64-NEXT: add a0, a0, a1
3855 ; RV64-NEXT: vand.vx v16, v16, a0
3856 ; RV64-NEXT: vsub.vv v8, v8, v16
3857 ; RV64-NEXT: lui a0, 209715
3858 ; RV64-NEXT: addiw a0, a0, 819
3859 ; RV64-NEXT: slli a1, a0, 32
3860 ; RV64-NEXT: add a0, a0, a1
3861 ; RV64-NEXT: vand.vx v16, v8, a0
3862 ; RV64-NEXT: vsrl.vi v8, v8, 2
3863 ; RV64-NEXT: vand.vx v8, v8, a0
3864 ; RV64-NEXT: vadd.vv v8, v16, v8
3865 ; RV64-NEXT: vsrl.vi v16, v8, 4
3866 ; RV64-NEXT: vadd.vv v8, v8, v16
3867 ; RV64-NEXT: lui a0, 61681
3868 ; RV64-NEXT: addiw a0, a0, -241
3869 ; RV64-NEXT: slli a1, a0, 32
3870 ; RV64-NEXT: add a0, a0, a1
3871 ; RV64-NEXT: vand.vx v8, v8, a0
3872 ; RV64-NEXT: lui a0, 4112
3873 ; RV64-NEXT: addiw a0, a0, 257
3874 ; RV64-NEXT: slli a1, a0, 32
3875 ; RV64-NEXT: add a0, a0, a1
3876 ; RV64-NEXT: vmul.vx v8, v8, a0
3877 ; RV64-NEXT: li a0, 56
3878 ; RV64-NEXT: vsrl.vx v8, v8, a0
3880 %head = insertelement <16 x i1> poison, i1 true, i32 0
3881 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
3882 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 true, <16 x i1> %m, i32 %evl)
3886 define <32 x i64> @vp_cttz_zero_undef_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
3887 ; RV32-LABEL: vp_cttz_zero_undef_v32i64:
3889 ; RV32-NEXT: addi sp, sp, -48
3890 ; RV32-NEXT: .cfi_def_cfa_offset 48
3891 ; RV32-NEXT: csrr a1, vlenb
3892 ; RV32-NEXT: li a2, 56
3893 ; RV32-NEXT: mul a1, a1, a2
3894 ; RV32-NEXT: sub sp, sp, a1
3895 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x38, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 56 * vlenb
3896 ; RV32-NEXT: csrr a1, vlenb
3897 ; RV32-NEXT: slli a1, a1, 5
3898 ; RV32-NEXT: add a1, sp, a1
3899 ; RV32-NEXT: addi a1, a1, 48
3900 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
3901 ; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
3902 ; RV32-NEXT: vslidedown.vi v24, v0, 2
3903 ; RV32-NEXT: lui a1, 349525
3904 ; RV32-NEXT: addi a1, a1, 1365
3905 ; RV32-NEXT: sw a1, 44(sp)
3906 ; RV32-NEXT: sw a1, 40(sp)
3907 ; RV32-NEXT: lui a1, 209715
3908 ; RV32-NEXT: addi a1, a1, 819
3909 ; RV32-NEXT: sw a1, 36(sp)
3910 ; RV32-NEXT: sw a1, 32(sp)
3911 ; RV32-NEXT: lui a1, 61681
3912 ; RV32-NEXT: addi a1, a1, -241
3913 ; RV32-NEXT: sw a1, 28(sp)
3914 ; RV32-NEXT: sw a1, 24(sp)
3915 ; RV32-NEXT: lui a1, 4112
3916 ; RV32-NEXT: addi a1, a1, 257
3917 ; RV32-NEXT: sw a1, 20(sp)
3918 ; RV32-NEXT: li a3, 16
3919 ; RV32-NEXT: sw a1, 16(sp)
3920 ; RV32-NEXT: mv a2, a0
3921 ; RV32-NEXT: bltu a0, a3, .LBB70_2
3922 ; RV32-NEXT: # %bb.1:
3923 ; RV32-NEXT: li a2, 16
3924 ; RV32-NEXT: .LBB70_2:
3925 ; RV32-NEXT: li a1, 1
3926 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
3927 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
3928 ; RV32-NEXT: vnot.v v8, v8, v0.t
3929 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
3930 ; RV32-NEXT: csrr a3, vlenb
3931 ; RV32-NEXT: li a4, 40
3932 ; RV32-NEXT: mul a3, a3, a4
3933 ; RV32-NEXT: add a3, sp, a3
3934 ; RV32-NEXT: addi a3, a3, 48
3935 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
3936 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
3937 ; RV32-NEXT: csrr a3, vlenb
3938 ; RV32-NEXT: li a4, 48
3939 ; RV32-NEXT: mul a3, a3, a4
3940 ; RV32-NEXT: add a3, sp, a3
3941 ; RV32-NEXT: addi a3, a3, 48
3942 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
3943 ; RV32-NEXT: addi a3, sp, 40
3944 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3945 ; RV32-NEXT: vlse64.v v8, (a3), zero
3946 ; RV32-NEXT: csrr a3, vlenb
3947 ; RV32-NEXT: li a4, 24
3948 ; RV32-NEXT: mul a3, a3, a4
3949 ; RV32-NEXT: add a3, sp, a3
3950 ; RV32-NEXT: addi a3, a3, 48
3951 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
3952 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
3953 ; RV32-NEXT: csrr a3, vlenb
3954 ; RV32-NEXT: li a4, 48
3955 ; RV32-NEXT: mul a3, a3, a4
3956 ; RV32-NEXT: add a3, sp, a3
3957 ; RV32-NEXT: addi a3, a3, 48
3958 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
3959 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
3960 ; RV32-NEXT: csrr a3, vlenb
3961 ; RV32-NEXT: li a4, 40
3962 ; RV32-NEXT: mul a3, a3, a4
3963 ; RV32-NEXT: add a3, sp, a3
3964 ; RV32-NEXT: addi a3, a3, 48
3965 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
3966 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
3967 ; RV32-NEXT: csrr a3, vlenb
3968 ; RV32-NEXT: li a4, 40
3969 ; RV32-NEXT: mul a3, a3, a4
3970 ; RV32-NEXT: add a3, sp, a3
3971 ; RV32-NEXT: addi a3, a3, 48
3972 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
3973 ; RV32-NEXT: addi a3, sp, 32
3974 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
3975 ; RV32-NEXT: vlse64.v v8, (a3), zero
3976 ; RV32-NEXT: csrr a3, vlenb
3977 ; RV32-NEXT: li a4, 48
3978 ; RV32-NEXT: mul a3, a3, a4
3979 ; RV32-NEXT: add a3, sp, a3
3980 ; RV32-NEXT: addi a3, a3, 48
3981 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
3982 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
3983 ; RV32-NEXT: csrr a3, vlenb
3984 ; RV32-NEXT: li a4, 40
3985 ; RV32-NEXT: mul a3, a3, a4
3986 ; RV32-NEXT: add a3, sp, a3
3987 ; RV32-NEXT: addi a3, a3, 48
3988 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
3989 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
3990 ; RV32-NEXT: csrr a3, vlenb
3991 ; RV32-NEXT: slli a3, a3, 4
3992 ; RV32-NEXT: add a3, sp, a3
3993 ; RV32-NEXT: addi a3, a3, 48
3994 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
3995 ; RV32-NEXT: csrr a3, vlenb
3996 ; RV32-NEXT: li a4, 40
3997 ; RV32-NEXT: mul a3, a3, a4
3998 ; RV32-NEXT: add a3, sp, a3
3999 ; RV32-NEXT: addi a3, a3, 48
4000 ; RV32-NEXT: vl8r.v v16, (a3) # Unknown-size Folded Reload
4001 ; RV32-NEXT: vsrl.vi v16, v16, 2, v0.t
4002 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4003 ; RV32-NEXT: csrr a3, vlenb
4004 ; RV32-NEXT: slli a3, a3, 4
4005 ; RV32-NEXT: add a3, sp, a3
4006 ; RV32-NEXT: addi a3, a3, 48
4007 ; RV32-NEXT: vl8r.v v8, (a3) # Unknown-size Folded Reload
4008 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4009 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4010 ; RV32-NEXT: vadd.vv v16, v8, v16, v0.t
4011 ; RV32-NEXT: addi a3, sp, 24
4012 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4013 ; RV32-NEXT: vlse64.v v8, (a3), zero
4014 ; RV32-NEXT: csrr a3, vlenb
4015 ; RV32-NEXT: li a4, 40
4016 ; RV32-NEXT: mul a3, a3, a4
4017 ; RV32-NEXT: add a3, sp, a3
4018 ; RV32-NEXT: addi a3, a3, 48
4019 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4020 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4021 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
4022 ; RV32-NEXT: addi a3, sp, 16
4023 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4024 ; RV32-NEXT: vlse64.v v16, (a3), zero
4025 ; RV32-NEXT: csrr a3, vlenb
4026 ; RV32-NEXT: slli a3, a3, 3
4027 ; RV32-NEXT: add a3, sp, a3
4028 ; RV32-NEXT: addi a3, a3, 48
4029 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
4030 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4031 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
4032 ; RV32-NEXT: li a2, 56
4033 ; RV32-NEXT: vsrl.vx v8, v8, a2, v0.t
4034 ; RV32-NEXT: csrr a3, vlenb
4035 ; RV32-NEXT: slli a3, a3, 4
4036 ; RV32-NEXT: add a3, sp, a3
4037 ; RV32-NEXT: addi a3, a3, 48
4038 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4039 ; RV32-NEXT: addi a3, a0, -16
4040 ; RV32-NEXT: sltu a0, a0, a3
4041 ; RV32-NEXT: addi a0, a0, -1
4042 ; RV32-NEXT: and a0, a0, a3
4043 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4044 ; RV32-NEXT: vmv1r.v v0, v24
4045 ; RV32-NEXT: csrr a0, vlenb
4046 ; RV32-NEXT: slli a0, a0, 5
4047 ; RV32-NEXT: add a0, sp, a0
4048 ; RV32-NEXT: addi a0, a0, 48
4049 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4050 ; RV32-NEXT: vsub.vx v8, v16, a1, v0.t
4051 ; RV32-NEXT: vnot.v v16, v16, v0.t
4052 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
4053 ; RV32-NEXT: addi a0, sp, 48
4054 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
4055 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
4056 ; RV32-NEXT: csrr a0, vlenb
4057 ; RV32-NEXT: slli a0, a0, 5
4058 ; RV32-NEXT: add a0, sp, a0
4059 ; RV32-NEXT: addi a0, a0, 48
4060 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
4061 ; RV32-NEXT: csrr a0, vlenb
4062 ; RV32-NEXT: li a1, 24
4063 ; RV32-NEXT: mul a0, a0, a1
4064 ; RV32-NEXT: add a0, sp, a0
4065 ; RV32-NEXT: addi a0, a0, 48
4066 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4067 ; RV32-NEXT: csrr a0, vlenb
4068 ; RV32-NEXT: slli a0, a0, 5
4069 ; RV32-NEXT: add a0, sp, a0
4070 ; RV32-NEXT: addi a0, a0, 48
4071 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4072 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
4073 ; RV32-NEXT: addi a0, sp, 48
4074 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4075 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
4076 ; RV32-NEXT: csrr a0, vlenb
4077 ; RV32-NEXT: li a1, 48
4078 ; RV32-NEXT: mul a0, a0, a1
4079 ; RV32-NEXT: add a0, sp, a0
4080 ; RV32-NEXT: addi a0, a0, 48
4081 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4082 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
4083 ; RV32-NEXT: csrr a0, vlenb
4084 ; RV32-NEXT: slli a0, a0, 5
4085 ; RV32-NEXT: add a0, sp, a0
4086 ; RV32-NEXT: addi a0, a0, 48
4087 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
4088 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4089 ; RV32-NEXT: csrr a0, vlenb
4090 ; RV32-NEXT: li a1, 48
4091 ; RV32-NEXT: mul a0, a0, a1
4092 ; RV32-NEXT: add a0, sp, a0
4093 ; RV32-NEXT: addi a0, a0, 48
4094 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4095 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4096 ; RV32-NEXT: csrr a0, vlenb
4097 ; RV32-NEXT: slli a0, a0, 5
4098 ; RV32-NEXT: add a0, sp, a0
4099 ; RV32-NEXT: addi a0, a0, 48
4100 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4101 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
4102 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4103 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4104 ; RV32-NEXT: csrr a0, vlenb
4105 ; RV32-NEXT: li a1, 40
4106 ; RV32-NEXT: mul a0, a0, a1
4107 ; RV32-NEXT: add a0, sp, a0
4108 ; RV32-NEXT: addi a0, a0, 48
4109 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4110 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4111 ; RV32-NEXT: csrr a0, vlenb
4112 ; RV32-NEXT: slli a0, a0, 3
4113 ; RV32-NEXT: add a0, sp, a0
4114 ; RV32-NEXT: addi a0, a0, 48
4115 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4116 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
4117 ; RV32-NEXT: vsrl.vx v16, v8, a2, v0.t
4118 ; RV32-NEXT: csrr a0, vlenb
4119 ; RV32-NEXT: slli a0, a0, 4
4120 ; RV32-NEXT: add a0, sp, a0
4121 ; RV32-NEXT: addi a0, a0, 48
4122 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4123 ; RV32-NEXT: csrr a0, vlenb
4124 ; RV32-NEXT: li a1, 56
4125 ; RV32-NEXT: mul a0, a0, a1
4126 ; RV32-NEXT: add sp, sp, a0
4127 ; RV32-NEXT: addi sp, sp, 48
4130 ; RV64-LABEL: vp_cttz_zero_undef_v32i64:
4132 ; RV64-NEXT: addi sp, sp, -16
4133 ; RV64-NEXT: .cfi_def_cfa_offset 16
4134 ; RV64-NEXT: csrr a1, vlenb
4135 ; RV64-NEXT: slli a1, a1, 4
4136 ; RV64-NEXT: sub sp, sp, a1
4137 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
4138 ; RV64-NEXT: csrr a1, vlenb
4139 ; RV64-NEXT: slli a1, a1, 3
4140 ; RV64-NEXT: add a1, sp, a1
4141 ; RV64-NEXT: addi a1, a1, 16
4142 ; RV64-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
4143 ; RV64-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
4144 ; RV64-NEXT: li a1, 16
4145 ; RV64-NEXT: vslidedown.vi v24, v0, 2
4146 ; RV64-NEXT: mv a2, a0
4147 ; RV64-NEXT: bltu a0, a1, .LBB70_2
4148 ; RV64-NEXT: # %bb.1:
4149 ; RV64-NEXT: li a2, 16
4150 ; RV64-NEXT: .LBB70_2:
4151 ; RV64-NEXT: li a1, 1
4152 ; RV64-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4153 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
4154 ; RV64-NEXT: vnot.v v8, v8, v0.t
4155 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
4156 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4157 ; RV64-NEXT: lui a2, 349525
4158 ; RV64-NEXT: addiw a2, a2, 1365
4159 ; RV64-NEXT: slli a3, a2, 32
4160 ; RV64-NEXT: add a2, a2, a3
4161 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
4162 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4163 ; RV64-NEXT: lui a3, 209715
4164 ; RV64-NEXT: addiw a3, a3, 819
4165 ; RV64-NEXT: slli a4, a3, 32
4166 ; RV64-NEXT: add a3, a3, a4
4167 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
4168 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4169 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
4170 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4171 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4172 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4173 ; RV64-NEXT: lui a4, 61681
4174 ; RV64-NEXT: addiw a4, a4, -241
4175 ; RV64-NEXT: slli a5, a4, 32
4176 ; RV64-NEXT: add a4, a4, a5
4177 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
4178 ; RV64-NEXT: lui a5, 4112
4179 ; RV64-NEXT: addiw a5, a5, 257
4180 ; RV64-NEXT: slli a6, a5, 32
4181 ; RV64-NEXT: add a5, a5, a6
4182 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
4183 ; RV64-NEXT: li a6, 56
4184 ; RV64-NEXT: vsrl.vx v8, v8, a6, v0.t
4185 ; RV64-NEXT: addi a7, sp, 16
4186 ; RV64-NEXT: vs8r.v v8, (a7) # Unknown-size Folded Spill
4187 ; RV64-NEXT: addi a7, a0, -16
4188 ; RV64-NEXT: sltu a0, a0, a7
4189 ; RV64-NEXT: addi a0, a0, -1
4190 ; RV64-NEXT: and a0, a0, a7
4191 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4192 ; RV64-NEXT: vmv1r.v v0, v24
4193 ; RV64-NEXT: csrr a0, vlenb
4194 ; RV64-NEXT: slli a0, a0, 3
4195 ; RV64-NEXT: add a0, sp, a0
4196 ; RV64-NEXT: addi a0, a0, 16
4197 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4198 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
4199 ; RV64-NEXT: vnot.v v8, v8, v0.t
4200 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
4201 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4202 ; RV64-NEXT: vand.vx v16, v16, a2, v0.t
4203 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4204 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
4205 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4206 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
4207 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4208 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4209 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4210 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
4211 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
4212 ; RV64-NEXT: vsrl.vx v16, v8, a6, v0.t
4213 ; RV64-NEXT: addi a0, sp, 16
4214 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4215 ; RV64-NEXT: csrr a0, vlenb
4216 ; RV64-NEXT: slli a0, a0, 4
4217 ; RV64-NEXT: add sp, sp, a0
4218 ; RV64-NEXT: addi sp, sp, 16
4220 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 true, <32 x i1> %m, i32 %evl)
4224 define <32 x i64> @vp_cttz_zero_undef_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
4225 ; RV32-LABEL: vp_cttz_zero_undef_v32i64_unmasked:
4227 ; RV32-NEXT: addi sp, sp, -48
4228 ; RV32-NEXT: .cfi_def_cfa_offset 48
4229 ; RV32-NEXT: csrr a1, vlenb
4230 ; RV32-NEXT: slli a1, a1, 5
4231 ; RV32-NEXT: sub sp, sp, a1
4232 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x20, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 32 * vlenb
4233 ; RV32-NEXT: vmv8r.v v24, v16
4234 ; RV32-NEXT: lui a1, 349525
4235 ; RV32-NEXT: addi a1, a1, 1365
4236 ; RV32-NEXT: sw a1, 44(sp)
4237 ; RV32-NEXT: sw a1, 40(sp)
4238 ; RV32-NEXT: lui a1, 209715
4239 ; RV32-NEXT: addi a1, a1, 819
4240 ; RV32-NEXT: sw a1, 36(sp)
4241 ; RV32-NEXT: sw a1, 32(sp)
4242 ; RV32-NEXT: lui a1, 61681
4243 ; RV32-NEXT: addi a1, a1, -241
4244 ; RV32-NEXT: sw a1, 28(sp)
4245 ; RV32-NEXT: sw a1, 24(sp)
4246 ; RV32-NEXT: lui a1, 4112
4247 ; RV32-NEXT: addi a1, a1, 257
4248 ; RV32-NEXT: sw a1, 20(sp)
4249 ; RV32-NEXT: li a2, 16
4250 ; RV32-NEXT: sw a1, 16(sp)
4251 ; RV32-NEXT: mv a1, a0
4252 ; RV32-NEXT: bltu a0, a2, .LBB71_2
4253 ; RV32-NEXT: # %bb.1:
4254 ; RV32-NEXT: li a1, 16
4255 ; RV32-NEXT: .LBB71_2:
4256 ; RV32-NEXT: li a2, 1
4257 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4258 ; RV32-NEXT: vsub.vx v16, v8, a2
4259 ; RV32-NEXT: vnot.v v8, v8
4260 ; RV32-NEXT: vand.vv v8, v8, v16
4261 ; RV32-NEXT: vsrl.vi v16, v8, 1
4262 ; RV32-NEXT: addi a3, sp, 40
4263 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4264 ; RV32-NEXT: vlse64.v v0, (a3), zero
4265 ; RV32-NEXT: csrr a3, vlenb
4266 ; RV32-NEXT: li a4, 24
4267 ; RV32-NEXT: mul a3, a3, a4
4268 ; RV32-NEXT: add a3, sp, a3
4269 ; RV32-NEXT: addi a3, a3, 48
4270 ; RV32-NEXT: vs8r.v v0, (a3) # Unknown-size Folded Spill
4271 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4272 ; RV32-NEXT: vand.vv v16, v16, v0
4273 ; RV32-NEXT: vsub.vv v8, v8, v16
4274 ; RV32-NEXT: addi a3, sp, 32
4275 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4276 ; RV32-NEXT: vlse64.v v0, (a3), zero
4277 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4278 ; RV32-NEXT: vand.vv v16, v8, v0
4279 ; RV32-NEXT: vsrl.vi v8, v8, 2
4280 ; RV32-NEXT: vand.vv v8, v8, v0
4281 ; RV32-NEXT: vadd.vv v8, v16, v8
4282 ; RV32-NEXT: vsrl.vi v16, v8, 4
4283 ; RV32-NEXT: vadd.vv v8, v8, v16
4284 ; RV32-NEXT: addi a3, sp, 24
4285 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4286 ; RV32-NEXT: vlse64.v v16, (a3), zero
4287 ; RV32-NEXT: csrr a3, vlenb
4288 ; RV32-NEXT: slli a3, a3, 4
4289 ; RV32-NEXT: add a3, sp, a3
4290 ; RV32-NEXT: addi a3, a3, 48
4291 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
4292 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4293 ; RV32-NEXT: vand.vv v8, v8, v16
4294 ; RV32-NEXT: addi a3, sp, 16
4295 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
4296 ; RV32-NEXT: vlse64.v v16, (a3), zero
4297 ; RV32-NEXT: addi a3, sp, 48
4298 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
4299 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4300 ; RV32-NEXT: vmul.vv v8, v8, v16
4301 ; RV32-NEXT: li a1, 56
4302 ; RV32-NEXT: vsrl.vx v8, v8, a1
4303 ; RV32-NEXT: csrr a3, vlenb
4304 ; RV32-NEXT: slli a3, a3, 3
4305 ; RV32-NEXT: add a3, sp, a3
4306 ; RV32-NEXT: addi a3, a3, 48
4307 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4308 ; RV32-NEXT: addi a3, a0, -16
4309 ; RV32-NEXT: sltu a0, a0, a3
4310 ; RV32-NEXT: addi a0, a0, -1
4311 ; RV32-NEXT: and a0, a0, a3
4312 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4313 ; RV32-NEXT: vsub.vx v8, v24, a2
4314 ; RV32-NEXT: vnot.v v24, v24
4315 ; RV32-NEXT: vand.vv v8, v24, v8
4316 ; RV32-NEXT: vsrl.vi v24, v8, 1
4317 ; RV32-NEXT: csrr a0, vlenb
4318 ; RV32-NEXT: li a2, 24
4319 ; RV32-NEXT: mul a0, a0, a2
4320 ; RV32-NEXT: add a0, sp, a0
4321 ; RV32-NEXT: addi a0, a0, 48
4322 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4323 ; RV32-NEXT: vand.vv v24, v24, v16
4324 ; RV32-NEXT: vsub.vv v8, v8, v24
4325 ; RV32-NEXT: vand.vv v24, v8, v0
4326 ; RV32-NEXT: vsrl.vi v8, v8, 2
4327 ; RV32-NEXT: vand.vv v8, v8, v0
4328 ; RV32-NEXT: vadd.vv v8, v24, v8
4329 ; RV32-NEXT: vsrl.vi v24, v8, 4
4330 ; RV32-NEXT: vadd.vv v8, v8, v24
4331 ; RV32-NEXT: csrr a0, vlenb
4332 ; RV32-NEXT: slli a0, a0, 4
4333 ; RV32-NEXT: add a0, sp, a0
4334 ; RV32-NEXT: addi a0, a0, 48
4335 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4336 ; RV32-NEXT: vand.vv v8, v8, v16
4337 ; RV32-NEXT: addi a0, sp, 48
4338 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4339 ; RV32-NEXT: vmul.vv v8, v8, v16
4340 ; RV32-NEXT: vsrl.vx v16, v8, a1
4341 ; RV32-NEXT: csrr a0, vlenb
4342 ; RV32-NEXT: slli a0, a0, 3
4343 ; RV32-NEXT: add a0, sp, a0
4344 ; RV32-NEXT: addi a0, a0, 48
4345 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4346 ; RV32-NEXT: csrr a0, vlenb
4347 ; RV32-NEXT: slli a0, a0, 5
4348 ; RV32-NEXT: add sp, sp, a0
4349 ; RV32-NEXT: addi sp, sp, 48
4352 ; RV64-LABEL: vp_cttz_zero_undef_v32i64_unmasked:
4354 ; RV64-NEXT: li a2, 16
4355 ; RV64-NEXT: mv a1, a0
4356 ; RV64-NEXT: bltu a0, a2, .LBB71_2
4357 ; RV64-NEXT: # %bb.1:
4358 ; RV64-NEXT: li a1, 16
4359 ; RV64-NEXT: .LBB71_2:
4360 ; RV64-NEXT: li a2, 1
4361 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4362 ; RV64-NEXT: vsub.vx v24, v8, a2
4363 ; RV64-NEXT: vnot.v v8, v8
4364 ; RV64-NEXT: vand.vv v8, v8, v24
4365 ; RV64-NEXT: vsrl.vi v24, v8, 1
4366 ; RV64-NEXT: lui a1, 349525
4367 ; RV64-NEXT: addiw a1, a1, 1365
4368 ; RV64-NEXT: slli a3, a1, 32
4369 ; RV64-NEXT: add a1, a1, a3
4370 ; RV64-NEXT: vand.vx v24, v24, a1
4371 ; RV64-NEXT: vsub.vv v8, v8, v24
4372 ; RV64-NEXT: lui a3, 209715
4373 ; RV64-NEXT: addiw a3, a3, 819
4374 ; RV64-NEXT: slli a4, a3, 32
4375 ; RV64-NEXT: add a3, a3, a4
4376 ; RV64-NEXT: vand.vx v24, v8, a3
4377 ; RV64-NEXT: vsrl.vi v8, v8, 2
4378 ; RV64-NEXT: vand.vx v8, v8, a3
4379 ; RV64-NEXT: vadd.vv v8, v24, v8
4380 ; RV64-NEXT: vsrl.vi v24, v8, 4
4381 ; RV64-NEXT: vadd.vv v8, v8, v24
4382 ; RV64-NEXT: lui a4, 61681
4383 ; RV64-NEXT: addiw a4, a4, -241
4384 ; RV64-NEXT: slli a5, a4, 32
4385 ; RV64-NEXT: add a4, a4, a5
4386 ; RV64-NEXT: vand.vx v8, v8, a4
4387 ; RV64-NEXT: lui a5, 4112
4388 ; RV64-NEXT: addiw a5, a5, 257
4389 ; RV64-NEXT: slli a6, a5, 32
4390 ; RV64-NEXT: add a5, a5, a6
4391 ; RV64-NEXT: vmul.vx v8, v8, a5
4392 ; RV64-NEXT: li a6, 56
4393 ; RV64-NEXT: vsrl.vx v8, v8, a6
4394 ; RV64-NEXT: addi a7, a0, -16
4395 ; RV64-NEXT: sltu a0, a0, a7
4396 ; RV64-NEXT: addi a0, a0, -1
4397 ; RV64-NEXT: and a0, a0, a7
4398 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4399 ; RV64-NEXT: vsub.vx v24, v16, a2
4400 ; RV64-NEXT: vnot.v v16, v16
4401 ; RV64-NEXT: vand.vv v16, v16, v24
4402 ; RV64-NEXT: vsrl.vi v24, v16, 1
4403 ; RV64-NEXT: vand.vx v24, v24, a1
4404 ; RV64-NEXT: vsub.vv v16, v16, v24
4405 ; RV64-NEXT: vand.vx v24, v16, a3
4406 ; RV64-NEXT: vsrl.vi v16, v16, 2
4407 ; RV64-NEXT: vand.vx v16, v16, a3
4408 ; RV64-NEXT: vadd.vv v16, v24, v16
4409 ; RV64-NEXT: vsrl.vi v24, v16, 4
4410 ; RV64-NEXT: vadd.vv v16, v16, v24
4411 ; RV64-NEXT: vand.vx v16, v16, a4
4412 ; RV64-NEXT: vmul.vx v16, v16, a5
4413 ; RV64-NEXT: vsrl.vx v16, v16, a6
4415 %head = insertelement <32 x i1> poison, i1 true, i32 0
4416 %m = shufflevector <32 x i1> %head, <32 x i1> poison, <32 x i32> zeroinitializer
4417 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 true, <32 x i1> %m, i32 %evl)