1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+experimental-zvfh,+v,+m -target-abi=ilp32d -riscv-v-vector-bits-min=128 \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+experimental-zvfh,+v,+m -target-abi=lp64d -riscv-v-vector-bits-min=128 \
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 ; RV32-LABEL: vp_cttz_v2i16:
228 ; RV32-NEXT: li a1, 1
229 ; RV32-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
230 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
231 ; RV32-NEXT: vnot.v v8, v8, v0.t
232 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
233 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
234 ; RV32-NEXT: lui a0, 5
235 ; RV32-NEXT: addi a0, a0, 1365
236 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
237 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
238 ; RV32-NEXT: lui a0, 3
239 ; RV32-NEXT: addi a0, a0, 819
240 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
241 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
242 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
243 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
244 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
245 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
246 ; RV32-NEXT: lui a0, 1
247 ; RV32-NEXT: addi a0, a0, -241
248 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
249 ; RV32-NEXT: li a0, 257
250 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
251 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
254 ; RV64-LABEL: vp_cttz_v2i16:
256 ; RV64-NEXT: li a1, 1
257 ; RV64-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
258 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
259 ; RV64-NEXT: vnot.v v8, v8, v0.t
260 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
261 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
262 ; RV64-NEXT: lui a0, 5
263 ; RV64-NEXT: addiw a0, a0, 1365
264 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
265 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
266 ; RV64-NEXT: lui a0, 3
267 ; RV64-NEXT: addiw a0, a0, 819
268 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
269 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
270 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
271 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
272 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
273 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
274 ; RV64-NEXT: lui a0, 1
275 ; RV64-NEXT: addiw a0, a0, -241
276 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
277 ; RV64-NEXT: li a0, 257
278 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
279 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
281 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 false, <2 x i1> %m, i32 %evl)
285 define <2 x i16> @vp_cttz_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
286 ; RV32-LABEL: vp_cttz_v2i16_unmasked:
288 ; RV32-NEXT: li a1, 1
289 ; RV32-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
290 ; RV32-NEXT: vsub.vx v9, v8, a1
291 ; RV32-NEXT: vnot.v v8, v8
292 ; RV32-NEXT: vand.vv v8, v8, v9
293 ; RV32-NEXT: vsrl.vi v9, v8, 1
294 ; RV32-NEXT: lui a0, 5
295 ; RV32-NEXT: addi a0, a0, 1365
296 ; RV32-NEXT: vand.vx v9, v9, a0
297 ; RV32-NEXT: vsub.vv v8, v8, v9
298 ; RV32-NEXT: lui a0, 3
299 ; RV32-NEXT: addi a0, a0, 819
300 ; RV32-NEXT: vand.vx v9, v8, a0
301 ; RV32-NEXT: vsrl.vi v8, v8, 2
302 ; RV32-NEXT: vand.vx v8, v8, a0
303 ; RV32-NEXT: vadd.vv v8, v9, v8
304 ; RV32-NEXT: vsrl.vi v9, v8, 4
305 ; RV32-NEXT: vadd.vv v8, v8, v9
306 ; RV32-NEXT: lui a0, 1
307 ; RV32-NEXT: addi a0, a0, -241
308 ; RV32-NEXT: vand.vx v8, v8, a0
309 ; RV32-NEXT: li a0, 257
310 ; RV32-NEXT: vmul.vx v8, v8, a0
311 ; RV32-NEXT: vsrl.vi v8, v8, 8
314 ; RV64-LABEL: vp_cttz_v2i16_unmasked:
316 ; RV64-NEXT: li a1, 1
317 ; RV64-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
318 ; RV64-NEXT: vsub.vx v9, v8, a1
319 ; RV64-NEXT: vnot.v v8, v8
320 ; RV64-NEXT: vand.vv v8, v8, v9
321 ; RV64-NEXT: vsrl.vi v9, v8, 1
322 ; RV64-NEXT: lui a0, 5
323 ; RV64-NEXT: addiw a0, a0, 1365
324 ; RV64-NEXT: vand.vx v9, v9, a0
325 ; RV64-NEXT: vsub.vv v8, v8, v9
326 ; RV64-NEXT: lui a0, 3
327 ; RV64-NEXT: addiw a0, a0, 819
328 ; RV64-NEXT: vand.vx v9, v8, a0
329 ; RV64-NEXT: vsrl.vi v8, v8, 2
330 ; RV64-NEXT: vand.vx v8, v8, a0
331 ; RV64-NEXT: vadd.vv v8, v9, v8
332 ; RV64-NEXT: vsrl.vi v9, v8, 4
333 ; RV64-NEXT: vadd.vv v8, v8, v9
334 ; RV64-NEXT: lui a0, 1
335 ; RV64-NEXT: addiw a0, a0, -241
336 ; RV64-NEXT: vand.vx v8, v8, a0
337 ; RV64-NEXT: li a0, 257
338 ; RV64-NEXT: vmul.vx v8, v8, a0
339 ; RV64-NEXT: vsrl.vi v8, v8, 8
341 %head = insertelement <2 x i1> poison, i1 true, i32 0
342 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
343 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 false, <2 x i1> %m, i32 %evl)
347 declare <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16>, i1 immarg, <4 x i1>, i32)
349 define <4 x i16> @vp_cttz_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
350 ; RV32-LABEL: vp_cttz_v4i16:
352 ; RV32-NEXT: li a1, 1
353 ; RV32-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
354 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
355 ; RV32-NEXT: vnot.v v8, v8, v0.t
356 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
357 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
358 ; RV32-NEXT: lui a0, 5
359 ; RV32-NEXT: addi a0, a0, 1365
360 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
361 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
362 ; RV32-NEXT: lui a0, 3
363 ; RV32-NEXT: addi a0, a0, 819
364 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
365 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
366 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
367 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
368 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
369 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
370 ; RV32-NEXT: lui a0, 1
371 ; RV32-NEXT: addi a0, a0, -241
372 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
373 ; RV32-NEXT: li a0, 257
374 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
375 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
378 ; RV64-LABEL: vp_cttz_v4i16:
380 ; RV64-NEXT: li a1, 1
381 ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
382 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
383 ; RV64-NEXT: vnot.v v8, v8, v0.t
384 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
385 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
386 ; RV64-NEXT: lui a0, 5
387 ; RV64-NEXT: addiw a0, a0, 1365
388 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
389 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
390 ; RV64-NEXT: lui a0, 3
391 ; RV64-NEXT: addiw a0, a0, 819
392 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
393 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
394 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
395 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
396 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
397 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
398 ; RV64-NEXT: lui a0, 1
399 ; RV64-NEXT: addiw a0, a0, -241
400 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
401 ; RV64-NEXT: li a0, 257
402 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
403 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
405 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 false, <4 x i1> %m, i32 %evl)
409 define <4 x i16> @vp_cttz_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
410 ; RV32-LABEL: vp_cttz_v4i16_unmasked:
412 ; RV32-NEXT: li a1, 1
413 ; RV32-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
414 ; RV32-NEXT: vsub.vx v9, v8, a1
415 ; RV32-NEXT: vnot.v v8, v8
416 ; RV32-NEXT: vand.vv v8, v8, v9
417 ; RV32-NEXT: vsrl.vi v9, v8, 1
418 ; RV32-NEXT: lui a0, 5
419 ; RV32-NEXT: addi a0, a0, 1365
420 ; RV32-NEXT: vand.vx v9, v9, a0
421 ; RV32-NEXT: vsub.vv v8, v8, v9
422 ; RV32-NEXT: lui a0, 3
423 ; RV32-NEXT: addi a0, a0, 819
424 ; RV32-NEXT: vand.vx v9, v8, a0
425 ; RV32-NEXT: vsrl.vi v8, v8, 2
426 ; RV32-NEXT: vand.vx v8, v8, a0
427 ; RV32-NEXT: vadd.vv v8, v9, v8
428 ; RV32-NEXT: vsrl.vi v9, v8, 4
429 ; RV32-NEXT: vadd.vv v8, v8, v9
430 ; RV32-NEXT: lui a0, 1
431 ; RV32-NEXT: addi a0, a0, -241
432 ; RV32-NEXT: vand.vx v8, v8, a0
433 ; RV32-NEXT: li a0, 257
434 ; RV32-NEXT: vmul.vx v8, v8, a0
435 ; RV32-NEXT: vsrl.vi v8, v8, 8
438 ; RV64-LABEL: vp_cttz_v4i16_unmasked:
440 ; RV64-NEXT: li a1, 1
441 ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
442 ; RV64-NEXT: vsub.vx v9, v8, a1
443 ; RV64-NEXT: vnot.v v8, v8
444 ; RV64-NEXT: vand.vv v8, v8, v9
445 ; RV64-NEXT: vsrl.vi v9, v8, 1
446 ; RV64-NEXT: lui a0, 5
447 ; RV64-NEXT: addiw a0, a0, 1365
448 ; RV64-NEXT: vand.vx v9, v9, a0
449 ; RV64-NEXT: vsub.vv v8, v8, v9
450 ; RV64-NEXT: lui a0, 3
451 ; RV64-NEXT: addiw a0, a0, 819
452 ; RV64-NEXT: vand.vx v9, v8, a0
453 ; RV64-NEXT: vsrl.vi v8, v8, 2
454 ; RV64-NEXT: vand.vx v8, v8, a0
455 ; RV64-NEXT: vadd.vv v8, v9, v8
456 ; RV64-NEXT: vsrl.vi v9, v8, 4
457 ; RV64-NEXT: vadd.vv v8, v8, v9
458 ; RV64-NEXT: lui a0, 1
459 ; RV64-NEXT: addiw a0, a0, -241
460 ; RV64-NEXT: vand.vx v8, v8, a0
461 ; RV64-NEXT: li a0, 257
462 ; RV64-NEXT: vmul.vx v8, v8, a0
463 ; RV64-NEXT: vsrl.vi v8, v8, 8
465 %head = insertelement <4 x i1> poison, i1 true, i32 0
466 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
467 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 false, <4 x i1> %m, i32 %evl)
471 declare <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16>, i1 immarg, <8 x i1>, i32)
473 define <8 x i16> @vp_cttz_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
474 ; RV32-LABEL: vp_cttz_v8i16:
476 ; RV32-NEXT: li a1, 1
477 ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma
478 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
479 ; RV32-NEXT: vnot.v v8, v8, v0.t
480 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
481 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
482 ; RV32-NEXT: lui a0, 5
483 ; RV32-NEXT: addi a0, a0, 1365
484 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
485 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
486 ; RV32-NEXT: lui a0, 3
487 ; RV32-NEXT: addi a0, a0, 819
488 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
489 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
490 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
491 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
492 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
493 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
494 ; RV32-NEXT: lui a0, 1
495 ; RV32-NEXT: addi a0, a0, -241
496 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
497 ; RV32-NEXT: li a0, 257
498 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
499 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
502 ; RV64-LABEL: vp_cttz_v8i16:
504 ; RV64-NEXT: li a1, 1
505 ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma
506 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
507 ; RV64-NEXT: vnot.v v8, v8, v0.t
508 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
509 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
510 ; RV64-NEXT: lui a0, 5
511 ; RV64-NEXT: addiw a0, a0, 1365
512 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
513 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
514 ; RV64-NEXT: lui a0, 3
515 ; RV64-NEXT: addiw a0, a0, 819
516 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
517 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
518 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
519 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
520 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
521 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
522 ; RV64-NEXT: lui a0, 1
523 ; RV64-NEXT: addiw a0, a0, -241
524 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
525 ; RV64-NEXT: li a0, 257
526 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
527 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
529 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 false, <8 x i1> %m, i32 %evl)
533 define <8 x i16> @vp_cttz_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
534 ; RV32-LABEL: vp_cttz_v8i16_unmasked:
536 ; RV32-NEXT: li a1, 1
537 ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma
538 ; RV32-NEXT: vsub.vx v9, v8, a1
539 ; RV32-NEXT: vnot.v v8, v8
540 ; RV32-NEXT: vand.vv v8, v8, v9
541 ; RV32-NEXT: vsrl.vi v9, v8, 1
542 ; RV32-NEXT: lui a0, 5
543 ; RV32-NEXT: addi a0, a0, 1365
544 ; RV32-NEXT: vand.vx v9, v9, a0
545 ; RV32-NEXT: vsub.vv v8, v8, v9
546 ; RV32-NEXT: lui a0, 3
547 ; RV32-NEXT: addi a0, a0, 819
548 ; RV32-NEXT: vand.vx v9, v8, a0
549 ; RV32-NEXT: vsrl.vi v8, v8, 2
550 ; RV32-NEXT: vand.vx v8, v8, a0
551 ; RV32-NEXT: vadd.vv v8, v9, v8
552 ; RV32-NEXT: vsrl.vi v9, v8, 4
553 ; RV32-NEXT: vadd.vv v8, v8, v9
554 ; RV32-NEXT: lui a0, 1
555 ; RV32-NEXT: addi a0, a0, -241
556 ; RV32-NEXT: vand.vx v8, v8, a0
557 ; RV32-NEXT: li a0, 257
558 ; RV32-NEXT: vmul.vx v8, v8, a0
559 ; RV32-NEXT: vsrl.vi v8, v8, 8
562 ; RV64-LABEL: vp_cttz_v8i16_unmasked:
564 ; RV64-NEXT: li a1, 1
565 ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma
566 ; RV64-NEXT: vsub.vx v9, v8, a1
567 ; RV64-NEXT: vnot.v v8, v8
568 ; RV64-NEXT: vand.vv v8, v8, v9
569 ; RV64-NEXT: vsrl.vi v9, v8, 1
570 ; RV64-NEXT: lui a0, 5
571 ; RV64-NEXT: addiw a0, a0, 1365
572 ; RV64-NEXT: vand.vx v9, v9, a0
573 ; RV64-NEXT: vsub.vv v8, v8, v9
574 ; RV64-NEXT: lui a0, 3
575 ; RV64-NEXT: addiw a0, a0, 819
576 ; RV64-NEXT: vand.vx v9, v8, a0
577 ; RV64-NEXT: vsrl.vi v8, v8, 2
578 ; RV64-NEXT: vand.vx v8, v8, a0
579 ; RV64-NEXT: vadd.vv v8, v9, v8
580 ; RV64-NEXT: vsrl.vi v9, v8, 4
581 ; RV64-NEXT: vadd.vv v8, v8, v9
582 ; RV64-NEXT: lui a0, 1
583 ; RV64-NEXT: addiw a0, a0, -241
584 ; RV64-NEXT: vand.vx v8, v8, a0
585 ; RV64-NEXT: li a0, 257
586 ; RV64-NEXT: vmul.vx v8, v8, a0
587 ; RV64-NEXT: vsrl.vi v8, v8, 8
589 %head = insertelement <8 x i1> poison, i1 true, i32 0
590 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
591 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 false, <8 x i1> %m, i32 %evl)
595 declare <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16>, i1 immarg, <16 x i1>, i32)
597 define <16 x i16> @vp_cttz_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
598 ; RV32-LABEL: vp_cttz_v16i16:
600 ; RV32-NEXT: li a1, 1
601 ; RV32-NEXT: vsetvli zero, a0, e16, m2, ta, ma
602 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
603 ; RV32-NEXT: vnot.v v8, v8, v0.t
604 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
605 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
606 ; RV32-NEXT: lui a0, 5
607 ; RV32-NEXT: addi a0, a0, 1365
608 ; RV32-NEXT: vand.vx v10, v10, a0, v0.t
609 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
610 ; RV32-NEXT: lui a0, 3
611 ; RV32-NEXT: addi a0, a0, 819
612 ; RV32-NEXT: vand.vx v10, v8, a0, v0.t
613 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
614 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
615 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
616 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
617 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
618 ; RV32-NEXT: lui a0, 1
619 ; RV32-NEXT: addi a0, a0, -241
620 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
621 ; RV32-NEXT: li a0, 257
622 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
623 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
626 ; RV64-LABEL: vp_cttz_v16i16:
628 ; RV64-NEXT: li a1, 1
629 ; RV64-NEXT: vsetvli zero, a0, e16, m2, ta, ma
630 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
631 ; RV64-NEXT: vnot.v v8, v8, v0.t
632 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
633 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
634 ; RV64-NEXT: lui a0, 5
635 ; RV64-NEXT: addiw a0, a0, 1365
636 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
637 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
638 ; RV64-NEXT: lui a0, 3
639 ; RV64-NEXT: addiw a0, a0, 819
640 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
641 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
642 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
643 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
644 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
645 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
646 ; RV64-NEXT: lui a0, 1
647 ; RV64-NEXT: addiw a0, a0, -241
648 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
649 ; RV64-NEXT: li a0, 257
650 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
651 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
653 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 false, <16 x i1> %m, i32 %evl)
657 define <16 x i16> @vp_cttz_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
658 ; RV32-LABEL: vp_cttz_v16i16_unmasked:
660 ; RV32-NEXT: li a1, 1
661 ; RV32-NEXT: vsetvli zero, a0, e16, m2, ta, ma
662 ; RV32-NEXT: vsub.vx v10, v8, a1
663 ; RV32-NEXT: vnot.v v8, v8
664 ; RV32-NEXT: vand.vv v8, v8, v10
665 ; RV32-NEXT: vsrl.vi v10, v8, 1
666 ; RV32-NEXT: lui a0, 5
667 ; RV32-NEXT: addi a0, a0, 1365
668 ; RV32-NEXT: vand.vx v10, v10, a0
669 ; RV32-NEXT: vsub.vv v8, v8, v10
670 ; RV32-NEXT: lui a0, 3
671 ; RV32-NEXT: addi a0, a0, 819
672 ; RV32-NEXT: vand.vx v10, v8, a0
673 ; RV32-NEXT: vsrl.vi v8, v8, 2
674 ; RV32-NEXT: vand.vx v8, v8, a0
675 ; RV32-NEXT: vadd.vv v8, v10, v8
676 ; RV32-NEXT: vsrl.vi v10, v8, 4
677 ; RV32-NEXT: vadd.vv v8, v8, v10
678 ; RV32-NEXT: lui a0, 1
679 ; RV32-NEXT: addi a0, a0, -241
680 ; RV32-NEXT: vand.vx v8, v8, a0
681 ; RV32-NEXT: li a0, 257
682 ; RV32-NEXT: vmul.vx v8, v8, a0
683 ; RV32-NEXT: vsrl.vi v8, v8, 8
686 ; RV64-LABEL: vp_cttz_v16i16_unmasked:
688 ; RV64-NEXT: li a1, 1
689 ; RV64-NEXT: vsetvli zero, a0, e16, m2, ta, ma
690 ; RV64-NEXT: vsub.vx v10, v8, a1
691 ; RV64-NEXT: vnot.v v8, v8
692 ; RV64-NEXT: vand.vv v8, v8, v10
693 ; RV64-NEXT: vsrl.vi v10, v8, 1
694 ; RV64-NEXT: lui a0, 5
695 ; RV64-NEXT: addiw a0, a0, 1365
696 ; RV64-NEXT: vand.vx v10, v10, a0
697 ; RV64-NEXT: vsub.vv v8, v8, v10
698 ; RV64-NEXT: lui a0, 3
699 ; RV64-NEXT: addiw a0, a0, 819
700 ; RV64-NEXT: vand.vx v10, v8, a0
701 ; RV64-NEXT: vsrl.vi v8, v8, 2
702 ; RV64-NEXT: vand.vx v8, v8, a0
703 ; RV64-NEXT: vadd.vv v8, v10, v8
704 ; RV64-NEXT: vsrl.vi v10, v8, 4
705 ; RV64-NEXT: vadd.vv v8, v8, v10
706 ; RV64-NEXT: lui a0, 1
707 ; RV64-NEXT: addiw a0, a0, -241
708 ; RV64-NEXT: vand.vx v8, v8, a0
709 ; RV64-NEXT: li a0, 257
710 ; RV64-NEXT: vmul.vx v8, v8, a0
711 ; RV64-NEXT: vsrl.vi v8, v8, 8
713 %head = insertelement <16 x i1> poison, i1 true, i32 0
714 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
715 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 false, <16 x i1> %m, i32 %evl)
719 declare <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32>, i1 immarg, <2 x i1>, i32)
721 define <2 x i32> @vp_cttz_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
722 ; RV32-LABEL: vp_cttz_v2i32:
724 ; RV32-NEXT: li a1, 1
725 ; RV32-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
726 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
727 ; RV32-NEXT: vnot.v v8, v8, v0.t
728 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
729 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
730 ; RV32-NEXT: lui a0, 349525
731 ; RV32-NEXT: addi a0, a0, 1365
732 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
733 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
734 ; RV32-NEXT: lui a0, 209715
735 ; RV32-NEXT: addi a0, a0, 819
736 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
737 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
738 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
739 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
740 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
741 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
742 ; RV32-NEXT: lui a0, 61681
743 ; RV32-NEXT: addi a0, a0, -241
744 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
745 ; RV32-NEXT: lui a0, 4112
746 ; RV32-NEXT: addi a0, a0, 257
747 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
748 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
751 ; RV64-LABEL: vp_cttz_v2i32:
753 ; RV64-NEXT: li a1, 1
754 ; RV64-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
755 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
756 ; RV64-NEXT: vnot.v v8, v8, v0.t
757 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
758 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
759 ; RV64-NEXT: lui a0, 349525
760 ; RV64-NEXT: addiw a0, a0, 1365
761 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
762 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
763 ; RV64-NEXT: lui a0, 209715
764 ; RV64-NEXT: addiw a0, a0, 819
765 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
766 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
767 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
768 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
769 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
770 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
771 ; RV64-NEXT: lui a0, 61681
772 ; RV64-NEXT: addiw a0, a0, -241
773 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
774 ; RV64-NEXT: lui a0, 4112
775 ; RV64-NEXT: addiw a0, a0, 257
776 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
777 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
779 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 false, <2 x i1> %m, i32 %evl)
783 define <2 x i32> @vp_cttz_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
784 ; RV32-LABEL: vp_cttz_v2i32_unmasked:
786 ; RV32-NEXT: li a1, 1
787 ; RV32-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
788 ; RV32-NEXT: vsub.vx v9, v8, a1
789 ; RV32-NEXT: vnot.v v8, v8
790 ; RV32-NEXT: vand.vv v8, v8, v9
791 ; RV32-NEXT: vsrl.vi v9, v8, 1
792 ; RV32-NEXT: lui a0, 349525
793 ; RV32-NEXT: addi a0, a0, 1365
794 ; RV32-NEXT: vand.vx v9, v9, a0
795 ; RV32-NEXT: vsub.vv v8, v8, v9
796 ; RV32-NEXT: lui a0, 209715
797 ; RV32-NEXT: addi a0, a0, 819
798 ; RV32-NEXT: vand.vx v9, v8, a0
799 ; RV32-NEXT: vsrl.vi v8, v8, 2
800 ; RV32-NEXT: vand.vx v8, v8, a0
801 ; RV32-NEXT: vadd.vv v8, v9, v8
802 ; RV32-NEXT: vsrl.vi v9, v8, 4
803 ; RV32-NEXT: vadd.vv v8, v8, v9
804 ; RV32-NEXT: lui a0, 61681
805 ; RV32-NEXT: addi a0, a0, -241
806 ; RV32-NEXT: vand.vx v8, v8, a0
807 ; RV32-NEXT: lui a0, 4112
808 ; RV32-NEXT: addi a0, a0, 257
809 ; RV32-NEXT: vmul.vx v8, v8, a0
810 ; RV32-NEXT: vsrl.vi v8, v8, 24
813 ; RV64-LABEL: vp_cttz_v2i32_unmasked:
815 ; RV64-NEXT: li a1, 1
816 ; RV64-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
817 ; RV64-NEXT: vsub.vx v9, v8, a1
818 ; RV64-NEXT: vnot.v v8, v8
819 ; RV64-NEXT: vand.vv v8, v8, v9
820 ; RV64-NEXT: vsrl.vi v9, v8, 1
821 ; RV64-NEXT: lui a0, 349525
822 ; RV64-NEXT: addiw a0, a0, 1365
823 ; RV64-NEXT: vand.vx v9, v9, a0
824 ; RV64-NEXT: vsub.vv v8, v8, v9
825 ; RV64-NEXT: lui a0, 209715
826 ; RV64-NEXT: addiw a0, a0, 819
827 ; RV64-NEXT: vand.vx v9, v8, a0
828 ; RV64-NEXT: vsrl.vi v8, v8, 2
829 ; RV64-NEXT: vand.vx v8, v8, a0
830 ; RV64-NEXT: vadd.vv v8, v9, v8
831 ; RV64-NEXT: vsrl.vi v9, v8, 4
832 ; RV64-NEXT: vadd.vv v8, v8, v9
833 ; RV64-NEXT: lui a0, 61681
834 ; RV64-NEXT: addiw a0, a0, -241
835 ; RV64-NEXT: vand.vx v8, v8, a0
836 ; RV64-NEXT: lui a0, 4112
837 ; RV64-NEXT: addiw a0, a0, 257
838 ; RV64-NEXT: vmul.vx v8, v8, a0
839 ; RV64-NEXT: vsrl.vi v8, v8, 24
841 %head = insertelement <2 x i1> poison, i1 true, i32 0
842 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
843 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 false, <2 x i1> %m, i32 %evl)
847 declare <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32>, i1 immarg, <4 x i1>, i32)
849 define <4 x i32> @vp_cttz_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
850 ; RV32-LABEL: vp_cttz_v4i32:
852 ; RV32-NEXT: li a1, 1
853 ; RV32-NEXT: vsetvli zero, a0, e32, m1, ta, ma
854 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
855 ; RV32-NEXT: vnot.v v8, v8, v0.t
856 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
857 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
858 ; RV32-NEXT: lui a0, 349525
859 ; RV32-NEXT: addi a0, a0, 1365
860 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
861 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
862 ; RV32-NEXT: lui a0, 209715
863 ; RV32-NEXT: addi a0, a0, 819
864 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
865 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
866 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
867 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
868 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
869 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
870 ; RV32-NEXT: lui a0, 61681
871 ; RV32-NEXT: addi a0, a0, -241
872 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
873 ; RV32-NEXT: lui a0, 4112
874 ; RV32-NEXT: addi a0, a0, 257
875 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
876 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
879 ; RV64-LABEL: vp_cttz_v4i32:
881 ; RV64-NEXT: li a1, 1
882 ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma
883 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
884 ; RV64-NEXT: vnot.v v8, v8, v0.t
885 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
886 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
887 ; RV64-NEXT: lui a0, 349525
888 ; RV64-NEXT: addiw a0, a0, 1365
889 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
890 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
891 ; RV64-NEXT: lui a0, 209715
892 ; RV64-NEXT: addiw a0, a0, 819
893 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
894 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
895 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
896 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
897 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
898 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
899 ; RV64-NEXT: lui a0, 61681
900 ; RV64-NEXT: addiw a0, a0, -241
901 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
902 ; RV64-NEXT: lui a0, 4112
903 ; RV64-NEXT: addiw a0, a0, 257
904 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
905 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
907 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 false, <4 x i1> %m, i32 %evl)
911 define <4 x i32> @vp_cttz_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
912 ; RV32-LABEL: vp_cttz_v4i32_unmasked:
914 ; RV32-NEXT: li a1, 1
915 ; RV32-NEXT: vsetvli zero, a0, e32, m1, ta, ma
916 ; RV32-NEXT: vsub.vx v9, v8, a1
917 ; RV32-NEXT: vnot.v v8, v8
918 ; RV32-NEXT: vand.vv v8, v8, v9
919 ; RV32-NEXT: vsrl.vi v9, v8, 1
920 ; RV32-NEXT: lui a0, 349525
921 ; RV32-NEXT: addi a0, a0, 1365
922 ; RV32-NEXT: vand.vx v9, v9, a0
923 ; RV32-NEXT: vsub.vv v8, v8, v9
924 ; RV32-NEXT: lui a0, 209715
925 ; RV32-NEXT: addi a0, a0, 819
926 ; RV32-NEXT: vand.vx v9, v8, a0
927 ; RV32-NEXT: vsrl.vi v8, v8, 2
928 ; RV32-NEXT: vand.vx v8, v8, a0
929 ; RV32-NEXT: vadd.vv v8, v9, v8
930 ; RV32-NEXT: vsrl.vi v9, v8, 4
931 ; RV32-NEXT: vadd.vv v8, v8, v9
932 ; RV32-NEXT: lui a0, 61681
933 ; RV32-NEXT: addi a0, a0, -241
934 ; RV32-NEXT: vand.vx v8, v8, a0
935 ; RV32-NEXT: lui a0, 4112
936 ; RV32-NEXT: addi a0, a0, 257
937 ; RV32-NEXT: vmul.vx v8, v8, a0
938 ; RV32-NEXT: vsrl.vi v8, v8, 24
941 ; RV64-LABEL: vp_cttz_v4i32_unmasked:
943 ; RV64-NEXT: li a1, 1
944 ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma
945 ; RV64-NEXT: vsub.vx v9, v8, a1
946 ; RV64-NEXT: vnot.v v8, v8
947 ; RV64-NEXT: vand.vv v8, v8, v9
948 ; RV64-NEXT: vsrl.vi v9, v8, 1
949 ; RV64-NEXT: lui a0, 349525
950 ; RV64-NEXT: addiw a0, a0, 1365
951 ; RV64-NEXT: vand.vx v9, v9, a0
952 ; RV64-NEXT: vsub.vv v8, v8, v9
953 ; RV64-NEXT: lui a0, 209715
954 ; RV64-NEXT: addiw a0, a0, 819
955 ; RV64-NEXT: vand.vx v9, v8, a0
956 ; RV64-NEXT: vsrl.vi v8, v8, 2
957 ; RV64-NEXT: vand.vx v8, v8, a0
958 ; RV64-NEXT: vadd.vv v8, v9, v8
959 ; RV64-NEXT: vsrl.vi v9, v8, 4
960 ; RV64-NEXT: vadd.vv v8, v8, v9
961 ; RV64-NEXT: lui a0, 61681
962 ; RV64-NEXT: addiw a0, a0, -241
963 ; RV64-NEXT: vand.vx v8, v8, a0
964 ; RV64-NEXT: lui a0, 4112
965 ; RV64-NEXT: addiw a0, a0, 257
966 ; RV64-NEXT: vmul.vx v8, v8, a0
967 ; RV64-NEXT: vsrl.vi v8, v8, 24
969 %head = insertelement <4 x i1> poison, i1 true, i32 0
970 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
971 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 false, <4 x i1> %m, i32 %evl)
975 declare <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32>, i1 immarg, <8 x i1>, i32)
977 define <8 x i32> @vp_cttz_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
978 ; RV32-LABEL: vp_cttz_v8i32:
980 ; RV32-NEXT: li a1, 1
981 ; RV32-NEXT: vsetvli zero, a0, e32, m2, ta, ma
982 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
983 ; RV32-NEXT: vnot.v v8, v8, v0.t
984 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
985 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
986 ; RV32-NEXT: lui a0, 349525
987 ; RV32-NEXT: addi a0, a0, 1365
988 ; RV32-NEXT: vand.vx v10, v10, a0, v0.t
989 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
990 ; RV32-NEXT: lui a0, 209715
991 ; RV32-NEXT: addi a0, a0, 819
992 ; RV32-NEXT: vand.vx v10, v8, a0, v0.t
993 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
994 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
995 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
996 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
997 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
998 ; RV32-NEXT: lui a0, 61681
999 ; RV32-NEXT: addi a0, a0, -241
1000 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
1001 ; RV32-NEXT: lui a0, 4112
1002 ; RV32-NEXT: addi a0, a0, 257
1003 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
1004 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
1007 ; RV64-LABEL: vp_cttz_v8i32:
1009 ; RV64-NEXT: li a1, 1
1010 ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1011 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
1012 ; RV64-NEXT: vnot.v v8, v8, v0.t
1013 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
1014 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
1015 ; RV64-NEXT: lui a0, 349525
1016 ; RV64-NEXT: addiw a0, a0, 1365
1017 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
1018 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
1019 ; RV64-NEXT: lui a0, 209715
1020 ; RV64-NEXT: addiw a0, a0, 819
1021 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
1022 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1023 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1024 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
1025 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
1026 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
1027 ; RV64-NEXT: lui a0, 61681
1028 ; RV64-NEXT: addiw a0, a0, -241
1029 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1030 ; RV64-NEXT: lui a0, 4112
1031 ; RV64-NEXT: addiw a0, a0, 257
1032 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1033 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
1035 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 false, <8 x i1> %m, i32 %evl)
1039 define <8 x i32> @vp_cttz_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
1040 ; RV32-LABEL: vp_cttz_v8i32_unmasked:
1042 ; RV32-NEXT: li a1, 1
1043 ; RV32-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1044 ; RV32-NEXT: vsub.vx v10, v8, a1
1045 ; RV32-NEXT: vnot.v v8, v8
1046 ; RV32-NEXT: vand.vv v8, v8, v10
1047 ; RV32-NEXT: vsrl.vi v10, v8, 1
1048 ; RV32-NEXT: lui a0, 349525
1049 ; RV32-NEXT: addi a0, a0, 1365
1050 ; RV32-NEXT: vand.vx v10, v10, a0
1051 ; RV32-NEXT: vsub.vv v8, v8, v10
1052 ; RV32-NEXT: lui a0, 209715
1053 ; RV32-NEXT: addi a0, a0, 819
1054 ; RV32-NEXT: vand.vx v10, v8, a0
1055 ; RV32-NEXT: vsrl.vi v8, v8, 2
1056 ; RV32-NEXT: vand.vx v8, v8, a0
1057 ; RV32-NEXT: vadd.vv v8, v10, v8
1058 ; RV32-NEXT: vsrl.vi v10, v8, 4
1059 ; RV32-NEXT: vadd.vv v8, v8, v10
1060 ; RV32-NEXT: lui a0, 61681
1061 ; RV32-NEXT: addi a0, a0, -241
1062 ; RV32-NEXT: vand.vx v8, v8, a0
1063 ; RV32-NEXT: lui a0, 4112
1064 ; RV32-NEXT: addi a0, a0, 257
1065 ; RV32-NEXT: vmul.vx v8, v8, a0
1066 ; RV32-NEXT: vsrl.vi v8, v8, 24
1069 ; RV64-LABEL: vp_cttz_v8i32_unmasked:
1071 ; RV64-NEXT: li a1, 1
1072 ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1073 ; RV64-NEXT: vsub.vx v10, v8, a1
1074 ; RV64-NEXT: vnot.v v8, v8
1075 ; RV64-NEXT: vand.vv v8, v8, v10
1076 ; RV64-NEXT: vsrl.vi v10, v8, 1
1077 ; RV64-NEXT: lui a0, 349525
1078 ; RV64-NEXT: addiw a0, a0, 1365
1079 ; RV64-NEXT: vand.vx v10, v10, a0
1080 ; RV64-NEXT: vsub.vv v8, v8, v10
1081 ; RV64-NEXT: lui a0, 209715
1082 ; RV64-NEXT: addiw a0, a0, 819
1083 ; RV64-NEXT: vand.vx v10, v8, a0
1084 ; RV64-NEXT: vsrl.vi v8, v8, 2
1085 ; RV64-NEXT: vand.vx v8, v8, a0
1086 ; RV64-NEXT: vadd.vv v8, v10, v8
1087 ; RV64-NEXT: vsrl.vi v10, v8, 4
1088 ; RV64-NEXT: vadd.vv v8, v8, v10
1089 ; RV64-NEXT: lui a0, 61681
1090 ; RV64-NEXT: addiw a0, a0, -241
1091 ; RV64-NEXT: vand.vx v8, v8, a0
1092 ; RV64-NEXT: lui a0, 4112
1093 ; RV64-NEXT: addiw a0, a0, 257
1094 ; RV64-NEXT: vmul.vx v8, v8, a0
1095 ; RV64-NEXT: vsrl.vi v8, v8, 24
1097 %head = insertelement <8 x i1> poison, i1 true, i32 0
1098 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1099 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 false, <8 x i1> %m, i32 %evl)
1103 declare <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32>, i1 immarg, <16 x i1>, i32)
1105 define <16 x i32> @vp_cttz_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
1106 ; RV32-LABEL: vp_cttz_v16i32:
1108 ; RV32-NEXT: li a1, 1
1109 ; RV32-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1110 ; RV32-NEXT: vsub.vx v12, v8, a1, v0.t
1111 ; RV32-NEXT: vnot.v v8, v8, v0.t
1112 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1113 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
1114 ; RV32-NEXT: lui a0, 349525
1115 ; RV32-NEXT: addi a0, a0, 1365
1116 ; RV32-NEXT: vand.vx v12, v12, a0, v0.t
1117 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
1118 ; RV32-NEXT: lui a0, 209715
1119 ; RV32-NEXT: addi a0, a0, 819
1120 ; RV32-NEXT: vand.vx v12, v8, a0, v0.t
1121 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1122 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
1123 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
1124 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
1125 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
1126 ; RV32-NEXT: lui a0, 61681
1127 ; RV32-NEXT: addi a0, a0, -241
1128 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
1129 ; RV32-NEXT: lui a0, 4112
1130 ; RV32-NEXT: addi a0, a0, 257
1131 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
1132 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
1135 ; RV64-LABEL: vp_cttz_v16i32:
1137 ; RV64-NEXT: li a1, 1
1138 ; RV64-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1139 ; RV64-NEXT: vsub.vx v12, v8, a1, v0.t
1140 ; RV64-NEXT: vnot.v v8, v8, v0.t
1141 ; RV64-NEXT: vand.vv v8, v8, v12, v0.t
1142 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
1143 ; RV64-NEXT: lui a0, 349525
1144 ; RV64-NEXT: addiw a0, a0, 1365
1145 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
1146 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
1147 ; RV64-NEXT: lui a0, 209715
1148 ; RV64-NEXT: addiw a0, a0, 819
1149 ; RV64-NEXT: vand.vx v12, v8, a0, v0.t
1150 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1151 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1152 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
1153 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
1154 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
1155 ; RV64-NEXT: lui a0, 61681
1156 ; RV64-NEXT: addiw a0, a0, -241
1157 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1158 ; RV64-NEXT: lui a0, 4112
1159 ; RV64-NEXT: addiw a0, a0, 257
1160 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
1161 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
1163 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 false, <16 x i1> %m, i32 %evl)
1167 define <16 x i32> @vp_cttz_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
1168 ; RV32-LABEL: vp_cttz_v16i32_unmasked:
1170 ; RV32-NEXT: li a1, 1
1171 ; RV32-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1172 ; RV32-NEXT: vsub.vx v12, v8, a1
1173 ; RV32-NEXT: vnot.v v8, v8
1174 ; RV32-NEXT: vand.vv v8, v8, v12
1175 ; RV32-NEXT: vsrl.vi v12, v8, 1
1176 ; RV32-NEXT: lui a0, 349525
1177 ; RV32-NEXT: addi a0, a0, 1365
1178 ; RV32-NEXT: vand.vx v12, v12, a0
1179 ; RV32-NEXT: vsub.vv v8, v8, v12
1180 ; RV32-NEXT: lui a0, 209715
1181 ; RV32-NEXT: addi a0, a0, 819
1182 ; RV32-NEXT: vand.vx v12, v8, a0
1183 ; RV32-NEXT: vsrl.vi v8, v8, 2
1184 ; RV32-NEXT: vand.vx v8, v8, a0
1185 ; RV32-NEXT: vadd.vv v8, v12, v8
1186 ; RV32-NEXT: vsrl.vi v12, v8, 4
1187 ; RV32-NEXT: vadd.vv v8, v8, v12
1188 ; RV32-NEXT: lui a0, 61681
1189 ; RV32-NEXT: addi a0, a0, -241
1190 ; RV32-NEXT: vand.vx v8, v8, a0
1191 ; RV32-NEXT: lui a0, 4112
1192 ; RV32-NEXT: addi a0, a0, 257
1193 ; RV32-NEXT: vmul.vx v8, v8, a0
1194 ; RV32-NEXT: vsrl.vi v8, v8, 24
1197 ; RV64-LABEL: vp_cttz_v16i32_unmasked:
1199 ; RV64-NEXT: li a1, 1
1200 ; RV64-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1201 ; RV64-NEXT: vsub.vx v12, v8, a1
1202 ; RV64-NEXT: vnot.v v8, v8
1203 ; RV64-NEXT: vand.vv v8, v8, v12
1204 ; RV64-NEXT: vsrl.vi v12, v8, 1
1205 ; RV64-NEXT: lui a0, 349525
1206 ; RV64-NEXT: addiw a0, a0, 1365
1207 ; RV64-NEXT: vand.vx v12, v12, a0
1208 ; RV64-NEXT: vsub.vv v8, v8, v12
1209 ; RV64-NEXT: lui a0, 209715
1210 ; RV64-NEXT: addiw a0, a0, 819
1211 ; RV64-NEXT: vand.vx v12, v8, a0
1212 ; RV64-NEXT: vsrl.vi v8, v8, 2
1213 ; RV64-NEXT: vand.vx v8, v8, a0
1214 ; RV64-NEXT: vadd.vv v8, v12, v8
1215 ; RV64-NEXT: vsrl.vi v12, v8, 4
1216 ; RV64-NEXT: vadd.vv v8, v8, v12
1217 ; RV64-NEXT: lui a0, 61681
1218 ; RV64-NEXT: addiw a0, a0, -241
1219 ; RV64-NEXT: vand.vx v8, v8, a0
1220 ; RV64-NEXT: lui a0, 4112
1221 ; RV64-NEXT: addiw a0, a0, 257
1222 ; RV64-NEXT: vmul.vx v8, v8, a0
1223 ; RV64-NEXT: vsrl.vi v8, v8, 24
1225 %head = insertelement <16 x i1> poison, i1 true, i32 0
1226 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1227 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 false, <16 x i1> %m, i32 %evl)
1231 declare <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64>, i1 immarg, <2 x i1>, i32)
1233 define <2 x i64> @vp_cttz_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
1234 ; RV32-LABEL: vp_cttz_v2i64:
1236 ; RV32-NEXT: li a1, 1
1237 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1238 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
1239 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1240 ; RV32-NEXT: vmv.v.i v10, -1
1241 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1242 ; RV32-NEXT: vxor.vv v8, v8, v10, v0.t
1243 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
1244 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
1245 ; RV32-NEXT: lui a1, 349525
1246 ; RV32-NEXT: addi a1, a1, 1365
1247 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1248 ; RV32-NEXT: vmv.v.x v10, a1
1249 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1250 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
1251 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
1252 ; RV32-NEXT: lui a1, 209715
1253 ; RV32-NEXT: addi a1, a1, 819
1254 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1255 ; RV32-NEXT: vmv.v.x v9, a1
1256 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1257 ; RV32-NEXT: vand.vv v10, v8, v9, v0.t
1258 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1259 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
1260 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
1261 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
1262 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
1263 ; RV32-NEXT: lui a1, 61681
1264 ; RV32-NEXT: addi a1, a1, -241
1265 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1266 ; RV32-NEXT: vmv.v.x v9, a1
1267 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1268 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
1269 ; RV32-NEXT: lui a1, 4112
1270 ; RV32-NEXT: addi a1, a1, 257
1271 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1272 ; RV32-NEXT: vmv.v.x v9, a1
1273 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1274 ; RV32-NEXT: vmul.vv v8, v8, v9, v0.t
1275 ; RV32-NEXT: li a0, 56
1276 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1279 ; RV64-LABEL: vp_cttz_v2i64:
1281 ; RV64-NEXT: li a1, 1
1282 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1283 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
1284 ; RV64-NEXT: vnot.v v8, v8, v0.t
1285 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
1286 ; RV64-NEXT: lui a0, %hi(.LCPI24_0)
1287 ; RV64-NEXT: ld a0, %lo(.LCPI24_0)(a0)
1288 ; RV64-NEXT: lui a1, %hi(.LCPI24_1)
1289 ; RV64-NEXT: ld a1, %lo(.LCPI24_1)(a1)
1290 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
1291 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
1292 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
1293 ; RV64-NEXT: vand.vx v9, v8, a1, v0.t
1294 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1295 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
1296 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
1297 ; RV64-NEXT: lui a0, %hi(.LCPI24_2)
1298 ; RV64-NEXT: ld a0, %lo(.LCPI24_2)(a0)
1299 ; RV64-NEXT: lui a1, %hi(.LCPI24_3)
1300 ; RV64-NEXT: ld a1, %lo(.LCPI24_3)(a1)
1301 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
1302 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
1303 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1304 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
1305 ; RV64-NEXT: li a0, 56
1306 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1308 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 false, <2 x i1> %m, i32 %evl)
1312 define <2 x i64> @vp_cttz_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1313 ; RV32-LABEL: vp_cttz_v2i64_unmasked:
1315 ; RV32-NEXT: li a1, 1
1316 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1317 ; RV32-NEXT: vsub.vx v9, v8, a1
1318 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1319 ; RV32-NEXT: vmv.v.i v10, -1
1320 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1321 ; RV32-NEXT: vxor.vv v8, v8, v10
1322 ; RV32-NEXT: vand.vv v8, v8, v9
1323 ; RV32-NEXT: vsrl.vi v9, v8, 1
1324 ; RV32-NEXT: lui a1, 349525
1325 ; RV32-NEXT: addi a1, a1, 1365
1326 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1327 ; RV32-NEXT: vmv.v.x v10, a1
1328 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1329 ; RV32-NEXT: vand.vv v9, v9, v10
1330 ; RV32-NEXT: vsub.vv v8, v8, v9
1331 ; RV32-NEXT: lui a1, 209715
1332 ; RV32-NEXT: addi a1, a1, 819
1333 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1334 ; RV32-NEXT: vmv.v.x v9, a1
1335 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1336 ; RV32-NEXT: vand.vv v10, v8, v9
1337 ; RV32-NEXT: vsrl.vi v8, v8, 2
1338 ; RV32-NEXT: vand.vv v8, v8, v9
1339 ; RV32-NEXT: vadd.vv v8, v10, v8
1340 ; RV32-NEXT: vsrl.vi v9, v8, 4
1341 ; RV32-NEXT: vadd.vv v8, v8, v9
1342 ; RV32-NEXT: lui a1, 61681
1343 ; RV32-NEXT: addi a1, a1, -241
1344 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1345 ; RV32-NEXT: vmv.v.x v9, a1
1346 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1347 ; RV32-NEXT: vand.vv v8, v8, v9
1348 ; RV32-NEXT: lui a1, 4112
1349 ; RV32-NEXT: addi a1, a1, 257
1350 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1351 ; RV32-NEXT: vmv.v.x v9, a1
1352 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1353 ; RV32-NEXT: vmul.vv v8, v8, v9
1354 ; RV32-NEXT: li a0, 56
1355 ; RV32-NEXT: vsrl.vx v8, v8, a0
1358 ; RV64-LABEL: vp_cttz_v2i64_unmasked:
1360 ; RV64-NEXT: li a1, 1
1361 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1362 ; RV64-NEXT: vsub.vx v9, v8, a1
1363 ; RV64-NEXT: vnot.v v8, v8
1364 ; RV64-NEXT: vand.vv v8, v8, v9
1365 ; RV64-NEXT: lui a0, %hi(.LCPI25_0)
1366 ; RV64-NEXT: ld a0, %lo(.LCPI25_0)(a0)
1367 ; RV64-NEXT: lui a1, %hi(.LCPI25_1)
1368 ; RV64-NEXT: ld a1, %lo(.LCPI25_1)(a1)
1369 ; RV64-NEXT: vsrl.vi v9, v8, 1
1370 ; RV64-NEXT: vand.vx v9, v9, a0
1371 ; RV64-NEXT: vsub.vv v8, v8, v9
1372 ; RV64-NEXT: vand.vx v9, v8, a1
1373 ; RV64-NEXT: vsrl.vi v8, v8, 2
1374 ; RV64-NEXT: vand.vx v8, v8, a1
1375 ; RV64-NEXT: vadd.vv v8, v9, v8
1376 ; RV64-NEXT: lui a0, %hi(.LCPI25_2)
1377 ; RV64-NEXT: ld a0, %lo(.LCPI25_2)(a0)
1378 ; RV64-NEXT: lui a1, %hi(.LCPI25_3)
1379 ; RV64-NEXT: ld a1, %lo(.LCPI25_3)(a1)
1380 ; RV64-NEXT: vsrl.vi v9, v8, 4
1381 ; RV64-NEXT: vadd.vv v8, v8, v9
1382 ; RV64-NEXT: vand.vx v8, v8, a0
1383 ; RV64-NEXT: vmul.vx v8, v8, a1
1384 ; RV64-NEXT: li a0, 56
1385 ; RV64-NEXT: vsrl.vx v8, v8, a0
1387 %head = insertelement <2 x i1> poison, i1 true, i32 0
1388 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
1389 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 false, <2 x i1> %m, i32 %evl)
1393 declare <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64>, i1 immarg, <4 x i1>, i32)
1395 define <4 x i64> @vp_cttz_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1396 ; RV32-LABEL: vp_cttz_v4i64:
1398 ; RV32-NEXT: li a1, 1
1399 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1400 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
1401 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1402 ; RV32-NEXT: vmv.v.i v12, -1
1403 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1404 ; RV32-NEXT: vxor.vv v8, v8, v12, v0.t
1405 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
1406 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
1407 ; RV32-NEXT: lui a1, 349525
1408 ; RV32-NEXT: addi a1, a1, 1365
1409 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1410 ; RV32-NEXT: vmv.v.x v12, a1
1411 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1412 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
1413 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
1414 ; RV32-NEXT: lui a1, 209715
1415 ; RV32-NEXT: addi a1, a1, 819
1416 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1417 ; RV32-NEXT: vmv.v.x v10, a1
1418 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1419 ; RV32-NEXT: vand.vv v12, v8, v10, v0.t
1420 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1421 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
1422 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
1423 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
1424 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
1425 ; RV32-NEXT: lui a1, 61681
1426 ; RV32-NEXT: addi a1, a1, -241
1427 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1428 ; RV32-NEXT: vmv.v.x v10, a1
1429 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1430 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
1431 ; RV32-NEXT: lui a1, 4112
1432 ; RV32-NEXT: addi a1, a1, 257
1433 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1434 ; RV32-NEXT: vmv.v.x v10, a1
1435 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1436 ; RV32-NEXT: vmul.vv v8, v8, v10, v0.t
1437 ; RV32-NEXT: li a0, 56
1438 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1441 ; RV64-LABEL: vp_cttz_v4i64:
1443 ; RV64-NEXT: li a1, 1
1444 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1445 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
1446 ; RV64-NEXT: vnot.v v8, v8, v0.t
1447 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
1448 ; RV64-NEXT: lui a0, %hi(.LCPI26_0)
1449 ; RV64-NEXT: ld a0, %lo(.LCPI26_0)(a0)
1450 ; RV64-NEXT: lui a1, %hi(.LCPI26_1)
1451 ; RV64-NEXT: ld a1, %lo(.LCPI26_1)(a1)
1452 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
1453 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
1454 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
1455 ; RV64-NEXT: vand.vx v10, v8, a1, v0.t
1456 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1457 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
1458 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
1459 ; RV64-NEXT: lui a0, %hi(.LCPI26_2)
1460 ; RV64-NEXT: ld a0, %lo(.LCPI26_2)(a0)
1461 ; RV64-NEXT: lui a1, %hi(.LCPI26_3)
1462 ; RV64-NEXT: ld a1, %lo(.LCPI26_3)(a1)
1463 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
1464 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
1465 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1466 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
1467 ; RV64-NEXT: li a0, 56
1468 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1470 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 false, <4 x i1> %m, i32 %evl)
1474 define <4 x i64> @vp_cttz_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1475 ; RV32-LABEL: vp_cttz_v4i64_unmasked:
1477 ; RV32-NEXT: li a1, 1
1478 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1479 ; RV32-NEXT: vsub.vx v10, v8, a1
1480 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1481 ; RV32-NEXT: vmv.v.i v12, -1
1482 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1483 ; RV32-NEXT: vxor.vv v8, v8, v12
1484 ; RV32-NEXT: vand.vv v8, v8, v10
1485 ; RV32-NEXT: vsrl.vi v10, v8, 1
1486 ; RV32-NEXT: lui a1, 349525
1487 ; RV32-NEXT: addi a1, a1, 1365
1488 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1489 ; RV32-NEXT: vmv.v.x v12, a1
1490 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1491 ; RV32-NEXT: vand.vv v10, v10, v12
1492 ; RV32-NEXT: vsub.vv v8, v8, v10
1493 ; RV32-NEXT: lui a1, 209715
1494 ; RV32-NEXT: addi a1, a1, 819
1495 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1496 ; RV32-NEXT: vmv.v.x v10, a1
1497 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1498 ; RV32-NEXT: vand.vv v12, v8, v10
1499 ; RV32-NEXT: vsrl.vi v8, v8, 2
1500 ; RV32-NEXT: vand.vv v8, v8, v10
1501 ; RV32-NEXT: vadd.vv v8, v12, v8
1502 ; RV32-NEXT: vsrl.vi v10, v8, 4
1503 ; RV32-NEXT: vadd.vv v8, v8, v10
1504 ; RV32-NEXT: lui a1, 61681
1505 ; RV32-NEXT: addi a1, a1, -241
1506 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1507 ; RV32-NEXT: vmv.v.x v10, a1
1508 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1509 ; RV32-NEXT: vand.vv v8, v8, v10
1510 ; RV32-NEXT: lui a1, 4112
1511 ; RV32-NEXT: addi a1, a1, 257
1512 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1513 ; RV32-NEXT: vmv.v.x v10, a1
1514 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1515 ; RV32-NEXT: vmul.vv v8, v8, v10
1516 ; RV32-NEXT: li a0, 56
1517 ; RV32-NEXT: vsrl.vx v8, v8, a0
1520 ; RV64-LABEL: vp_cttz_v4i64_unmasked:
1522 ; RV64-NEXT: li a1, 1
1523 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1524 ; RV64-NEXT: vsub.vx v10, v8, a1
1525 ; RV64-NEXT: vnot.v v8, v8
1526 ; RV64-NEXT: vand.vv v8, v8, v10
1527 ; RV64-NEXT: lui a0, %hi(.LCPI27_0)
1528 ; RV64-NEXT: ld a0, %lo(.LCPI27_0)(a0)
1529 ; RV64-NEXT: lui a1, %hi(.LCPI27_1)
1530 ; RV64-NEXT: ld a1, %lo(.LCPI27_1)(a1)
1531 ; RV64-NEXT: vsrl.vi v10, v8, 1
1532 ; RV64-NEXT: vand.vx v10, v10, a0
1533 ; RV64-NEXT: vsub.vv v8, v8, v10
1534 ; RV64-NEXT: vand.vx v10, v8, a1
1535 ; RV64-NEXT: vsrl.vi v8, v8, 2
1536 ; RV64-NEXT: vand.vx v8, v8, a1
1537 ; RV64-NEXT: vadd.vv v8, v10, v8
1538 ; RV64-NEXT: lui a0, %hi(.LCPI27_2)
1539 ; RV64-NEXT: ld a0, %lo(.LCPI27_2)(a0)
1540 ; RV64-NEXT: lui a1, %hi(.LCPI27_3)
1541 ; RV64-NEXT: ld a1, %lo(.LCPI27_3)(a1)
1542 ; RV64-NEXT: vsrl.vi v10, v8, 4
1543 ; RV64-NEXT: vadd.vv v8, v8, v10
1544 ; RV64-NEXT: vand.vx v8, v8, a0
1545 ; RV64-NEXT: vmul.vx v8, v8, a1
1546 ; RV64-NEXT: li a0, 56
1547 ; RV64-NEXT: vsrl.vx v8, v8, a0
1549 %head = insertelement <4 x i1> poison, i1 true, i32 0
1550 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1551 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 false, <4 x i1> %m, i32 %evl)
1555 declare <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64>, i1 immarg, <8 x i1>, i32)
1557 define <8 x i64> @vp_cttz_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1558 ; RV32-LABEL: vp_cttz_v8i64:
1560 ; RV32-NEXT: li a1, 1
1561 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1562 ; RV32-NEXT: vsub.vx v12, v8, a1, v0.t
1563 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1564 ; RV32-NEXT: vmv.v.i v16, -1
1565 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1566 ; RV32-NEXT: vxor.vv v8, v8, v16, v0.t
1567 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1568 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
1569 ; RV32-NEXT: lui a1, 349525
1570 ; RV32-NEXT: addi a1, a1, 1365
1571 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1572 ; RV32-NEXT: vmv.v.x v16, a1
1573 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1574 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
1575 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
1576 ; RV32-NEXT: lui a1, 209715
1577 ; RV32-NEXT: addi a1, a1, 819
1578 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1579 ; RV32-NEXT: vmv.v.x v12, a1
1580 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1581 ; RV32-NEXT: vand.vv v16, v8, v12, v0.t
1582 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1583 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1584 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
1585 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
1586 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
1587 ; RV32-NEXT: lui a1, 61681
1588 ; RV32-NEXT: addi a1, a1, -241
1589 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1590 ; RV32-NEXT: vmv.v.x v12, a1
1591 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1592 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1593 ; RV32-NEXT: lui a1, 4112
1594 ; RV32-NEXT: addi a1, a1, 257
1595 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1596 ; RV32-NEXT: vmv.v.x v12, a1
1597 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1598 ; RV32-NEXT: vmul.vv v8, v8, v12, v0.t
1599 ; RV32-NEXT: li a0, 56
1600 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1603 ; RV64-LABEL: vp_cttz_v8i64:
1605 ; RV64-NEXT: li a1, 1
1606 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1607 ; RV64-NEXT: vsub.vx v12, v8, a1, v0.t
1608 ; RV64-NEXT: vnot.v v8, v8, v0.t
1609 ; RV64-NEXT: vand.vv v8, v8, v12, v0.t
1610 ; RV64-NEXT: lui a0, %hi(.LCPI28_0)
1611 ; RV64-NEXT: ld a0, %lo(.LCPI28_0)(a0)
1612 ; RV64-NEXT: lui a1, %hi(.LCPI28_1)
1613 ; RV64-NEXT: ld a1, %lo(.LCPI28_1)(a1)
1614 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
1615 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
1616 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
1617 ; RV64-NEXT: vand.vx v12, v8, a1, v0.t
1618 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1619 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
1620 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
1621 ; RV64-NEXT: lui a0, %hi(.LCPI28_2)
1622 ; RV64-NEXT: ld a0, %lo(.LCPI28_2)(a0)
1623 ; RV64-NEXT: lui a1, %hi(.LCPI28_3)
1624 ; RV64-NEXT: ld a1, %lo(.LCPI28_3)(a1)
1625 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
1626 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
1627 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1628 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
1629 ; RV64-NEXT: li a0, 56
1630 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1632 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 false, <8 x i1> %m, i32 %evl)
1636 define <8 x i64> @vp_cttz_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1637 ; RV32-LABEL: vp_cttz_v8i64_unmasked:
1639 ; RV32-NEXT: li a1, 1
1640 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1641 ; RV32-NEXT: vsub.vx v12, v8, a1
1642 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1643 ; RV32-NEXT: vmv.v.i v16, -1
1644 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1645 ; RV32-NEXT: vxor.vv v8, v8, v16
1646 ; RV32-NEXT: vand.vv v8, v8, v12
1647 ; RV32-NEXT: vsrl.vi v12, v8, 1
1648 ; RV32-NEXT: lui a1, 349525
1649 ; RV32-NEXT: addi a1, a1, 1365
1650 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1651 ; RV32-NEXT: vmv.v.x v16, a1
1652 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1653 ; RV32-NEXT: vand.vv v12, v12, v16
1654 ; RV32-NEXT: vsub.vv v8, v8, v12
1655 ; RV32-NEXT: lui a1, 209715
1656 ; RV32-NEXT: addi a1, a1, 819
1657 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1658 ; RV32-NEXT: vmv.v.x v12, a1
1659 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1660 ; RV32-NEXT: vand.vv v16, v8, v12
1661 ; RV32-NEXT: vsrl.vi v8, v8, 2
1662 ; RV32-NEXT: vand.vv v8, v8, v12
1663 ; RV32-NEXT: vadd.vv v8, v16, v8
1664 ; RV32-NEXT: vsrl.vi v12, v8, 4
1665 ; RV32-NEXT: vadd.vv v8, v8, v12
1666 ; RV32-NEXT: lui a1, 61681
1667 ; RV32-NEXT: addi a1, a1, -241
1668 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1669 ; RV32-NEXT: vmv.v.x v12, a1
1670 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1671 ; RV32-NEXT: vand.vv v8, v8, v12
1672 ; RV32-NEXT: lui a1, 4112
1673 ; RV32-NEXT: addi a1, a1, 257
1674 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1675 ; RV32-NEXT: vmv.v.x v12, a1
1676 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1677 ; RV32-NEXT: vmul.vv v8, v8, v12
1678 ; RV32-NEXT: li a0, 56
1679 ; RV32-NEXT: vsrl.vx v8, v8, a0
1682 ; RV64-LABEL: vp_cttz_v8i64_unmasked:
1684 ; RV64-NEXT: li a1, 1
1685 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1686 ; RV64-NEXT: vsub.vx v12, v8, a1
1687 ; RV64-NEXT: vnot.v v8, v8
1688 ; RV64-NEXT: vand.vv v8, v8, v12
1689 ; RV64-NEXT: lui a0, %hi(.LCPI29_0)
1690 ; RV64-NEXT: ld a0, %lo(.LCPI29_0)(a0)
1691 ; RV64-NEXT: lui a1, %hi(.LCPI29_1)
1692 ; RV64-NEXT: ld a1, %lo(.LCPI29_1)(a1)
1693 ; RV64-NEXT: vsrl.vi v12, v8, 1
1694 ; RV64-NEXT: vand.vx v12, v12, a0
1695 ; RV64-NEXT: vsub.vv v8, v8, v12
1696 ; RV64-NEXT: vand.vx v12, v8, a1
1697 ; RV64-NEXT: vsrl.vi v8, v8, 2
1698 ; RV64-NEXT: vand.vx v8, v8, a1
1699 ; RV64-NEXT: vadd.vv v8, v12, v8
1700 ; RV64-NEXT: lui a0, %hi(.LCPI29_2)
1701 ; RV64-NEXT: ld a0, %lo(.LCPI29_2)(a0)
1702 ; RV64-NEXT: lui a1, %hi(.LCPI29_3)
1703 ; RV64-NEXT: ld a1, %lo(.LCPI29_3)(a1)
1704 ; RV64-NEXT: vsrl.vi v12, v8, 4
1705 ; RV64-NEXT: vadd.vv v8, v8, v12
1706 ; RV64-NEXT: vand.vx v8, v8, a0
1707 ; RV64-NEXT: vmul.vx v8, v8, a1
1708 ; RV64-NEXT: li a0, 56
1709 ; RV64-NEXT: vsrl.vx v8, v8, a0
1711 %head = insertelement <8 x i1> poison, i1 true, i32 0
1712 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1713 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 false, <8 x i1> %m, i32 %evl)
1717 declare <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64>, i1 immarg, <15 x i1>, i32)
1719 define <15 x i64> @vp_cttz_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
1720 ; RV32-LABEL: vp_cttz_v15i64:
1722 ; RV32-NEXT: li a1, 1
1723 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1724 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
1725 ; RV32-NEXT: li a1, 32
1726 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1727 ; RV32-NEXT: vmv.v.i v24, -1
1728 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1729 ; RV32-NEXT: vxor.vv v8, v8, v24, v0.t
1730 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1731 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
1732 ; RV32-NEXT: lui a2, 349525
1733 ; RV32-NEXT: addi a2, a2, 1365
1734 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1735 ; RV32-NEXT: vmv.v.x v24, a2
1736 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1737 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
1738 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
1739 ; RV32-NEXT: lui a2, 209715
1740 ; RV32-NEXT: addi a2, a2, 819
1741 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1742 ; RV32-NEXT: vmv.v.x v16, a2
1743 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1744 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
1745 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1746 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1747 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
1748 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1749 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1750 ; RV32-NEXT: lui a2, 61681
1751 ; RV32-NEXT: addi a2, a2, -241
1752 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1753 ; RV32-NEXT: vmv.v.x v16, a2
1754 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1755 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1756 ; RV32-NEXT: lui a2, 4112
1757 ; RV32-NEXT: addi a2, a2, 257
1758 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1759 ; RV32-NEXT: vmv.v.x v16, a2
1760 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1761 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
1762 ; RV32-NEXT: li a0, 56
1763 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1766 ; RV64-LABEL: vp_cttz_v15i64:
1768 ; RV64-NEXT: li a1, 1
1769 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1770 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
1771 ; RV64-NEXT: vnot.v v8, v8, v0.t
1772 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
1773 ; RV64-NEXT: lui a0, %hi(.LCPI30_0)
1774 ; RV64-NEXT: ld a0, %lo(.LCPI30_0)(a0)
1775 ; RV64-NEXT: lui a1, %hi(.LCPI30_1)
1776 ; RV64-NEXT: ld a1, %lo(.LCPI30_1)(a1)
1777 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1778 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1779 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
1780 ; RV64-NEXT: vand.vx v16, v8, a1, v0.t
1781 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1782 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
1783 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
1784 ; RV64-NEXT: lui a0, %hi(.LCPI30_2)
1785 ; RV64-NEXT: ld a0, %lo(.LCPI30_2)(a0)
1786 ; RV64-NEXT: lui a1, %hi(.LCPI30_3)
1787 ; RV64-NEXT: ld a1, %lo(.LCPI30_3)(a1)
1788 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1789 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
1790 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1791 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
1792 ; RV64-NEXT: li a0, 56
1793 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1795 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 false, <15 x i1> %m, i32 %evl)
1799 define <15 x i64> @vp_cttz_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
1800 ; RV32-LABEL: vp_cttz_v15i64_unmasked:
1802 ; RV32-NEXT: li a1, 1
1803 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1804 ; RV32-NEXT: vsub.vx v16, v8, a1
1805 ; RV32-NEXT: li a1, 32
1806 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1807 ; RV32-NEXT: vmv.v.i v24, -1
1808 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1809 ; RV32-NEXT: vxor.vv v8, v8, v24
1810 ; RV32-NEXT: vand.vv v8, v8, v16
1811 ; RV32-NEXT: vsrl.vi v16, v8, 1
1812 ; RV32-NEXT: lui a2, 349525
1813 ; RV32-NEXT: addi a2, a2, 1365
1814 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1815 ; RV32-NEXT: vmv.v.x v24, a2
1816 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1817 ; RV32-NEXT: vand.vv v16, v16, v24
1818 ; RV32-NEXT: vsub.vv v8, v8, v16
1819 ; RV32-NEXT: lui a2, 209715
1820 ; RV32-NEXT: addi a2, a2, 819
1821 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1822 ; RV32-NEXT: vmv.v.x v16, a2
1823 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1824 ; RV32-NEXT: vand.vv v24, v8, v16
1825 ; RV32-NEXT: vsrl.vi v8, v8, 2
1826 ; RV32-NEXT: vand.vv v8, v8, v16
1827 ; RV32-NEXT: vadd.vv v8, v24, v8
1828 ; RV32-NEXT: vsrl.vi v16, v8, 4
1829 ; RV32-NEXT: vadd.vv v8, v8, v16
1830 ; RV32-NEXT: lui a2, 61681
1831 ; RV32-NEXT: addi a2, a2, -241
1832 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1833 ; RV32-NEXT: vmv.v.x v16, a2
1834 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1835 ; RV32-NEXT: vand.vv v8, v8, v16
1836 ; RV32-NEXT: lui a2, 4112
1837 ; RV32-NEXT: addi a2, a2, 257
1838 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1839 ; RV32-NEXT: vmv.v.x v16, a2
1840 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1841 ; RV32-NEXT: vmul.vv v8, v8, v16
1842 ; RV32-NEXT: li a0, 56
1843 ; RV32-NEXT: vsrl.vx v8, v8, a0
1846 ; RV64-LABEL: vp_cttz_v15i64_unmasked:
1848 ; RV64-NEXT: li a1, 1
1849 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1850 ; RV64-NEXT: vsub.vx v16, v8, a1
1851 ; RV64-NEXT: vnot.v v8, v8
1852 ; RV64-NEXT: vand.vv v8, v8, v16
1853 ; RV64-NEXT: lui a0, %hi(.LCPI31_0)
1854 ; RV64-NEXT: ld a0, %lo(.LCPI31_0)(a0)
1855 ; RV64-NEXT: lui a1, %hi(.LCPI31_1)
1856 ; RV64-NEXT: ld a1, %lo(.LCPI31_1)(a1)
1857 ; RV64-NEXT: vsrl.vi v16, v8, 1
1858 ; RV64-NEXT: vand.vx v16, v16, a0
1859 ; RV64-NEXT: vsub.vv v8, v8, v16
1860 ; RV64-NEXT: vand.vx v16, v8, a1
1861 ; RV64-NEXT: vsrl.vi v8, v8, 2
1862 ; RV64-NEXT: vand.vx v8, v8, a1
1863 ; RV64-NEXT: vadd.vv v8, v16, v8
1864 ; RV64-NEXT: lui a0, %hi(.LCPI31_2)
1865 ; RV64-NEXT: ld a0, %lo(.LCPI31_2)(a0)
1866 ; RV64-NEXT: lui a1, %hi(.LCPI31_3)
1867 ; RV64-NEXT: ld a1, %lo(.LCPI31_3)(a1)
1868 ; RV64-NEXT: vsrl.vi v16, v8, 4
1869 ; RV64-NEXT: vadd.vv v8, v8, v16
1870 ; RV64-NEXT: vand.vx v8, v8, a0
1871 ; RV64-NEXT: vmul.vx v8, v8, a1
1872 ; RV64-NEXT: li a0, 56
1873 ; RV64-NEXT: vsrl.vx v8, v8, a0
1875 %head = insertelement <15 x i1> poison, i1 true, i32 0
1876 %m = shufflevector <15 x i1> %head, <15 x i1> poison, <15 x i32> zeroinitializer
1877 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 false, <15 x i1> %m, i32 %evl)
1881 declare <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64>, i1 immarg, <16 x i1>, i32)
1883 define <16 x i64> @vp_cttz_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1884 ; RV32-LABEL: vp_cttz_v16i64:
1886 ; RV32-NEXT: li a1, 1
1887 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1888 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
1889 ; RV32-NEXT: li a1, 32
1890 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1891 ; RV32-NEXT: vmv.v.i v24, -1
1892 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1893 ; RV32-NEXT: vxor.vv v8, v8, v24, v0.t
1894 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1895 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
1896 ; RV32-NEXT: lui a2, 349525
1897 ; RV32-NEXT: addi a2, a2, 1365
1898 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1899 ; RV32-NEXT: vmv.v.x v24, a2
1900 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1901 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
1902 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
1903 ; RV32-NEXT: lui a2, 209715
1904 ; RV32-NEXT: addi a2, a2, 819
1905 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1906 ; RV32-NEXT: vmv.v.x v16, a2
1907 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1908 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
1909 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
1910 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1911 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
1912 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
1913 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
1914 ; RV32-NEXT: lui a2, 61681
1915 ; RV32-NEXT: addi a2, a2, -241
1916 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1917 ; RV32-NEXT: vmv.v.x v16, a2
1918 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1919 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1920 ; RV32-NEXT: lui a2, 4112
1921 ; RV32-NEXT: addi a2, a2, 257
1922 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1923 ; RV32-NEXT: vmv.v.x v16, a2
1924 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1925 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
1926 ; RV32-NEXT: li a0, 56
1927 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1930 ; RV64-LABEL: vp_cttz_v16i64:
1932 ; RV64-NEXT: li a1, 1
1933 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1934 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
1935 ; RV64-NEXT: vnot.v v8, v8, v0.t
1936 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
1937 ; RV64-NEXT: lui a0, %hi(.LCPI32_0)
1938 ; RV64-NEXT: ld a0, %lo(.LCPI32_0)(a0)
1939 ; RV64-NEXT: lui a1, %hi(.LCPI32_1)
1940 ; RV64-NEXT: ld a1, %lo(.LCPI32_1)(a1)
1941 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1942 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1943 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
1944 ; RV64-NEXT: vand.vx v16, v8, a1, v0.t
1945 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
1946 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
1947 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
1948 ; RV64-NEXT: lui a0, %hi(.LCPI32_2)
1949 ; RV64-NEXT: ld a0, %lo(.LCPI32_2)(a0)
1950 ; RV64-NEXT: lui a1, %hi(.LCPI32_3)
1951 ; RV64-NEXT: ld a1, %lo(.LCPI32_3)(a1)
1952 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1953 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
1954 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1955 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
1956 ; RV64-NEXT: li a0, 56
1957 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1959 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 false, <16 x i1> %m, i32 %evl)
1963 define <16 x i64> @vp_cttz_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1964 ; RV32-LABEL: vp_cttz_v16i64_unmasked:
1966 ; RV32-NEXT: li a1, 1
1967 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1968 ; RV32-NEXT: vsub.vx v16, v8, a1
1969 ; RV32-NEXT: li a1, 32
1970 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1971 ; RV32-NEXT: vmv.v.i v24, -1
1972 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1973 ; RV32-NEXT: vxor.vv v8, v8, v24
1974 ; RV32-NEXT: vand.vv v8, v8, v16
1975 ; RV32-NEXT: vsrl.vi v16, v8, 1
1976 ; RV32-NEXT: lui a2, 349525
1977 ; RV32-NEXT: addi a2, a2, 1365
1978 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1979 ; RV32-NEXT: vmv.v.x v24, a2
1980 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1981 ; RV32-NEXT: vand.vv v16, v16, v24
1982 ; RV32-NEXT: vsub.vv v8, v8, v16
1983 ; RV32-NEXT: lui a2, 209715
1984 ; RV32-NEXT: addi a2, a2, 819
1985 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1986 ; RV32-NEXT: vmv.v.x v16, a2
1987 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1988 ; RV32-NEXT: vand.vv v24, v8, v16
1989 ; RV32-NEXT: vsrl.vi v8, v8, 2
1990 ; RV32-NEXT: vand.vv v8, v8, v16
1991 ; RV32-NEXT: vadd.vv v8, v24, v8
1992 ; RV32-NEXT: vsrl.vi v16, v8, 4
1993 ; RV32-NEXT: vadd.vv v8, v8, v16
1994 ; RV32-NEXT: lui a2, 61681
1995 ; RV32-NEXT: addi a2, a2, -241
1996 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1997 ; RV32-NEXT: vmv.v.x v16, a2
1998 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1999 ; RV32-NEXT: vand.vv v8, v8, v16
2000 ; RV32-NEXT: lui a2, 4112
2001 ; RV32-NEXT: addi a2, a2, 257
2002 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
2003 ; RV32-NEXT: vmv.v.x v16, a2
2004 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2005 ; RV32-NEXT: vmul.vv v8, v8, v16
2006 ; RV32-NEXT: li a0, 56
2007 ; RV32-NEXT: vsrl.vx v8, v8, a0
2010 ; RV64-LABEL: vp_cttz_v16i64_unmasked:
2012 ; RV64-NEXT: li a1, 1
2013 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2014 ; RV64-NEXT: vsub.vx v16, v8, a1
2015 ; RV64-NEXT: vnot.v v8, v8
2016 ; RV64-NEXT: vand.vv v8, v8, v16
2017 ; RV64-NEXT: lui a0, %hi(.LCPI33_0)
2018 ; RV64-NEXT: ld a0, %lo(.LCPI33_0)(a0)
2019 ; RV64-NEXT: lui a1, %hi(.LCPI33_1)
2020 ; RV64-NEXT: ld a1, %lo(.LCPI33_1)(a1)
2021 ; RV64-NEXT: vsrl.vi v16, v8, 1
2022 ; RV64-NEXT: vand.vx v16, v16, a0
2023 ; RV64-NEXT: vsub.vv v8, v8, v16
2024 ; RV64-NEXT: vand.vx v16, v8, a1
2025 ; RV64-NEXT: vsrl.vi v8, v8, 2
2026 ; RV64-NEXT: vand.vx v8, v8, a1
2027 ; RV64-NEXT: vadd.vv v8, v16, v8
2028 ; RV64-NEXT: lui a0, %hi(.LCPI33_2)
2029 ; RV64-NEXT: ld a0, %lo(.LCPI33_2)(a0)
2030 ; RV64-NEXT: lui a1, %hi(.LCPI33_3)
2031 ; RV64-NEXT: ld a1, %lo(.LCPI33_3)(a1)
2032 ; RV64-NEXT: vsrl.vi v16, v8, 4
2033 ; RV64-NEXT: vadd.vv v8, v8, v16
2034 ; RV64-NEXT: vand.vx v8, v8, a0
2035 ; RV64-NEXT: vmul.vx v8, v8, a1
2036 ; RV64-NEXT: li a0, 56
2037 ; RV64-NEXT: vsrl.vx v8, v8, a0
2039 %head = insertelement <16 x i1> poison, i1 true, i32 0
2040 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
2041 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 false, <16 x i1> %m, i32 %evl)
2045 declare <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64>, i1 immarg, <32 x i1>, i32)
2047 define <32 x i64> @vp_cttz_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
2048 ; RV32-LABEL: vp_cttz_v32i64:
2050 ; RV32-NEXT: addi sp, sp, -16
2051 ; RV32-NEXT: .cfi_def_cfa_offset 16
2052 ; RV32-NEXT: csrr a1, vlenb
2053 ; RV32-NEXT: slli a1, a1, 6
2054 ; RV32-NEXT: sub sp, sp, a1
2055 ; RV32-NEXT: .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0xc0, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 64 * vlenb
2056 ; RV32-NEXT: csrr a1, vlenb
2057 ; RV32-NEXT: li a2, 40
2058 ; RV32-NEXT: mul a1, a1, a2
2059 ; RV32-NEXT: add a1, sp, a1
2060 ; RV32-NEXT: addi a1, a1, 16
2061 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2062 ; RV32-NEXT: vmv8r.v v16, v8
2063 ; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
2064 ; RV32-NEXT: li a1, 16
2065 ; RV32-NEXT: vslidedown.vi v24, v0, 2
2066 ; RV32-NEXT: mv a2, a0
2067 ; RV32-NEXT: bltu a0, a1, .LBB34_2
2068 ; RV32-NEXT: # %bb.1:
2069 ; RV32-NEXT: li a2, 16
2070 ; RV32-NEXT: .LBB34_2:
2071 ; RV32-NEXT: li a1, 1
2072 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2073 ; RV32-NEXT: vsub.vx v8, v16, a1, v0.t
2074 ; RV32-NEXT: csrr a3, vlenb
2075 ; RV32-NEXT: li a4, 56
2076 ; RV32-NEXT: mul a3, a3, a4
2077 ; RV32-NEXT: add a3, sp, a3
2078 ; RV32-NEXT: addi a3, a3, 16
2079 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2080 ; RV32-NEXT: li a3, 32
2081 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2082 ; RV32-NEXT: vmv.v.i v8, -1
2083 ; RV32-NEXT: csrr a4, vlenb
2084 ; RV32-NEXT: slli a4, a4, 5
2085 ; RV32-NEXT: add a4, sp, a4
2086 ; RV32-NEXT: addi a4, a4, 16
2087 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
2088 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2089 ; RV32-NEXT: vxor.vv v16, v16, v8, v0.t
2090 ; RV32-NEXT: csrr a4, vlenb
2091 ; RV32-NEXT: li a5, 56
2092 ; RV32-NEXT: mul a4, a4, a5
2093 ; RV32-NEXT: add a4, sp, a4
2094 ; RV32-NEXT: addi a4, a4, 16
2095 ; RV32-NEXT: vl8r.v v8, (a4) # Unknown-size Folded Reload
2096 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
2097 ; RV32-NEXT: csrr a4, vlenb
2098 ; RV32-NEXT: li a5, 48
2099 ; RV32-NEXT: mul a4, a4, a5
2100 ; RV32-NEXT: add a4, sp, a4
2101 ; RV32-NEXT: addi a4, a4, 16
2102 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
2103 ; RV32-NEXT: lui a4, 349525
2104 ; RV32-NEXT: addi a4, a4, 1365
2105 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
2106 ; RV32-NEXT: csrr a5, vlenb
2107 ; RV32-NEXT: li a6, 56
2108 ; RV32-NEXT: mul a5, a5, a6
2109 ; RV32-NEXT: add a5, sp, a5
2110 ; RV32-NEXT: addi a5, a5, 16
2111 ; RV32-NEXT: vs8r.v v8, (a5) # Unknown-size Folded Spill
2112 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2113 ; RV32-NEXT: vmv.v.x v8, a4
2114 ; RV32-NEXT: csrr a4, vlenb
2115 ; RV32-NEXT: li a5, 24
2116 ; RV32-NEXT: mul a4, a4, a5
2117 ; RV32-NEXT: add a4, sp, a4
2118 ; RV32-NEXT: addi a4, a4, 16
2119 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
2120 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2121 ; RV32-NEXT: csrr a4, vlenb
2122 ; RV32-NEXT: li a5, 56
2123 ; RV32-NEXT: mul a4, a4, a5
2124 ; RV32-NEXT: add a4, sp, a4
2125 ; RV32-NEXT: addi a4, a4, 16
2126 ; RV32-NEXT: vl8r.v v16, (a4) # Unknown-size Folded Reload
2127 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2128 ; RV32-NEXT: csrr a4, vlenb
2129 ; RV32-NEXT: li a5, 48
2130 ; RV32-NEXT: mul a4, a4, a5
2131 ; RV32-NEXT: add a4, sp, a4
2132 ; RV32-NEXT: addi a4, a4, 16
2133 ; RV32-NEXT: vl8r.v v8, (a4) # Unknown-size Folded Reload
2134 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
2135 ; RV32-NEXT: csrr a4, vlenb
2136 ; RV32-NEXT: li a5, 48
2137 ; RV32-NEXT: mul a4, a4, a5
2138 ; RV32-NEXT: add a4, sp, a4
2139 ; RV32-NEXT: addi a4, a4, 16
2140 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
2141 ; RV32-NEXT: lui a4, 209715
2142 ; RV32-NEXT: addi a4, a4, 819
2143 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2144 ; RV32-NEXT: vmv.v.x v8, a4
2145 ; RV32-NEXT: csrr a4, vlenb
2146 ; RV32-NEXT: li a5, 56
2147 ; RV32-NEXT: mul a4, a4, a5
2148 ; RV32-NEXT: add a4, sp, a4
2149 ; RV32-NEXT: addi a4, a4, 16
2150 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
2151 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2152 ; RV32-NEXT: csrr a4, vlenb
2153 ; RV32-NEXT: li a5, 48
2154 ; RV32-NEXT: mul a4, a4, a5
2155 ; RV32-NEXT: add a4, sp, a4
2156 ; RV32-NEXT: addi a4, a4, 16
2157 ; RV32-NEXT: vl8r.v v16, (a4) # Unknown-size Folded Reload
2158 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2159 ; RV32-NEXT: csrr a4, vlenb
2160 ; RV32-NEXT: slli a4, a4, 4
2161 ; RV32-NEXT: add a4, sp, a4
2162 ; RV32-NEXT: addi a4, a4, 16
2163 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
2164 ; RV32-NEXT: csrr a4, vlenb
2165 ; RV32-NEXT: li a5, 48
2166 ; RV32-NEXT: mul a4, a4, a5
2167 ; RV32-NEXT: add a4, sp, a4
2168 ; RV32-NEXT: addi a4, a4, 16
2169 ; RV32-NEXT: vl8r.v v16, (a4) # Unknown-size Folded Reload
2170 ; RV32-NEXT: vsrl.vi v16, v16, 2, v0.t
2171 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
2172 ; RV32-NEXT: csrr a4, vlenb
2173 ; RV32-NEXT: slli a4, a4, 4
2174 ; RV32-NEXT: add a4, sp, a4
2175 ; RV32-NEXT: addi a4, a4, 16
2176 ; RV32-NEXT: vl8r.v v8, (a4) # Unknown-size Folded Reload
2177 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
2178 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2179 ; RV32-NEXT: vadd.vv v16, v8, v16, v0.t
2180 ; RV32-NEXT: lui a4, 61681
2181 ; RV32-NEXT: addi a4, a4, -241
2182 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2183 ; RV32-NEXT: vmv.v.x v8, a4
2184 ; RV32-NEXT: csrr a4, vlenb
2185 ; RV32-NEXT: li a5, 48
2186 ; RV32-NEXT: mul a4, a4, a5
2187 ; RV32-NEXT: add a4, sp, a4
2188 ; RV32-NEXT: addi a4, a4, 16
2189 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
2190 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2191 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
2192 ; RV32-NEXT: lui a4, 4112
2193 ; RV32-NEXT: addi a4, a4, 257
2194 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2195 ; RV32-NEXT: vmv.v.x v16, a4
2196 ; RV32-NEXT: csrr a3, vlenb
2197 ; RV32-NEXT: slli a3, a3, 3
2198 ; RV32-NEXT: add a3, sp, a3
2199 ; RV32-NEXT: addi a3, a3, 16
2200 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
2201 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
2202 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
2203 ; RV32-NEXT: li a2, 56
2204 ; RV32-NEXT: vsrl.vx v8, v8, a2, v0.t
2205 ; RV32-NEXT: csrr a3, vlenb
2206 ; RV32-NEXT: slli a3, a3, 4
2207 ; RV32-NEXT: add a3, sp, a3
2208 ; RV32-NEXT: addi a3, a3, 16
2209 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2210 ; RV32-NEXT: addi a3, a0, -16
2211 ; RV32-NEXT: sltu a0, a0, a3
2212 ; RV32-NEXT: addi a0, a0, -1
2213 ; RV32-NEXT: and a0, a0, a3
2214 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2215 ; RV32-NEXT: vmv1r.v v0, v24
2216 ; RV32-NEXT: csrr a0, vlenb
2217 ; RV32-NEXT: li a3, 40
2218 ; RV32-NEXT: mul a0, a0, a3
2219 ; RV32-NEXT: add a0, sp, a0
2220 ; RV32-NEXT: addi a0, a0, 16
2221 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2222 ; RV32-NEXT: vsub.vx v8, v16, a1, v0.t
2223 ; RV32-NEXT: addi a0, sp, 16
2224 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2225 ; RV32-NEXT: csrr a0, vlenb
2226 ; RV32-NEXT: slli a0, a0, 5
2227 ; RV32-NEXT: add a0, sp, a0
2228 ; RV32-NEXT: addi a0, a0, 16
2229 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2230 ; RV32-NEXT: vxor.vv v16, v16, v8, v0.t
2231 ; RV32-NEXT: addi a0, sp, 16
2232 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2233 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
2234 ; RV32-NEXT: csrr a0, vlenb
2235 ; RV32-NEXT: slli a0, a0, 5
2236 ; RV32-NEXT: add a0, sp, a0
2237 ; RV32-NEXT: addi a0, a0, 16
2238 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
2239 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
2240 ; RV32-NEXT: csrr a0, vlenb
2241 ; RV32-NEXT: li a1, 40
2242 ; RV32-NEXT: mul a0, a0, a1
2243 ; RV32-NEXT: add a0, sp, a0
2244 ; RV32-NEXT: addi a0, a0, 16
2245 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
2246 ; RV32-NEXT: csrr a0, vlenb
2247 ; RV32-NEXT: li a1, 24
2248 ; RV32-NEXT: mul a0, a0, a1
2249 ; RV32-NEXT: add a0, sp, a0
2250 ; RV32-NEXT: addi a0, a0, 16
2251 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2252 ; RV32-NEXT: csrr a0, vlenb
2253 ; RV32-NEXT: li a1, 40
2254 ; RV32-NEXT: mul a0, a0, a1
2255 ; RV32-NEXT: add a0, sp, a0
2256 ; RV32-NEXT: addi a0, a0, 16
2257 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2258 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
2259 ; RV32-NEXT: csrr a0, vlenb
2260 ; RV32-NEXT: slli a0, a0, 5
2261 ; RV32-NEXT: add a0, sp, a0
2262 ; RV32-NEXT: addi a0, a0, 16
2263 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2264 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
2265 ; RV32-NEXT: csrr a0, vlenb
2266 ; RV32-NEXT: li a1, 56
2267 ; RV32-NEXT: mul a0, a0, a1
2268 ; RV32-NEXT: add a0, sp, a0
2269 ; RV32-NEXT: addi a0, a0, 16
2270 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2271 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
2272 ; RV32-NEXT: csrr a0, vlenb
2273 ; RV32-NEXT: li a1, 40
2274 ; RV32-NEXT: mul a0, a0, a1
2275 ; RV32-NEXT: add a0, sp, a0
2276 ; RV32-NEXT: addi a0, a0, 16
2277 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
2278 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
2279 ; RV32-NEXT: csrr a0, vlenb
2280 ; RV32-NEXT: li a1, 56
2281 ; RV32-NEXT: mul a0, a0, a1
2282 ; RV32-NEXT: add a0, sp, a0
2283 ; RV32-NEXT: addi a0, a0, 16
2284 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2285 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2286 ; RV32-NEXT: csrr a0, vlenb
2287 ; RV32-NEXT: li a1, 40
2288 ; RV32-NEXT: mul a0, a0, a1
2289 ; RV32-NEXT: add a0, sp, a0
2290 ; RV32-NEXT: addi a0, a0, 16
2291 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2292 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
2293 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
2294 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
2295 ; RV32-NEXT: csrr a0, vlenb
2296 ; RV32-NEXT: li a1, 48
2297 ; RV32-NEXT: mul a0, a0, a1
2298 ; RV32-NEXT: add a0, sp, a0
2299 ; RV32-NEXT: addi a0, a0, 16
2300 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2301 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2302 ; RV32-NEXT: csrr a0, vlenb
2303 ; RV32-NEXT: slli a0, a0, 3
2304 ; RV32-NEXT: add a0, sp, a0
2305 ; RV32-NEXT: addi a0, a0, 16
2306 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2307 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
2308 ; RV32-NEXT: vsrl.vx v16, v8, a2, v0.t
2309 ; RV32-NEXT: csrr a0, vlenb
2310 ; RV32-NEXT: slli a0, a0, 4
2311 ; RV32-NEXT: add a0, sp, a0
2312 ; RV32-NEXT: addi a0, a0, 16
2313 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2314 ; RV32-NEXT: csrr a0, vlenb
2315 ; RV32-NEXT: slli a0, a0, 6
2316 ; RV32-NEXT: add sp, sp, a0
2317 ; RV32-NEXT: addi sp, sp, 16
2320 ; RV64-LABEL: vp_cttz_v32i64:
2322 ; RV64-NEXT: addi sp, sp, -16
2323 ; RV64-NEXT: .cfi_def_cfa_offset 16
2324 ; RV64-NEXT: csrr a1, vlenb
2325 ; RV64-NEXT: slli a1, a1, 4
2326 ; RV64-NEXT: sub sp, sp, a1
2327 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
2328 ; RV64-NEXT: csrr a1, vlenb
2329 ; RV64-NEXT: slli a1, a1, 3
2330 ; RV64-NEXT: add a1, sp, a1
2331 ; RV64-NEXT: addi a1, a1, 16
2332 ; RV64-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2333 ; RV64-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
2334 ; RV64-NEXT: li a2, 16
2335 ; RV64-NEXT: vslidedown.vi v24, v0, 2
2336 ; RV64-NEXT: mv a1, a0
2337 ; RV64-NEXT: bltu a0, a2, .LBB34_2
2338 ; RV64-NEXT: # %bb.1:
2339 ; RV64-NEXT: li a1, 16
2340 ; RV64-NEXT: .LBB34_2:
2341 ; RV64-NEXT: li a2, 1
2342 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2343 ; RV64-NEXT: vsub.vx v16, v8, a2, v0.t
2344 ; RV64-NEXT: vnot.v v8, v8, v0.t
2345 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
2346 ; RV64-NEXT: lui a1, %hi(.LCPI34_0)
2347 ; RV64-NEXT: ld a1, %lo(.LCPI34_0)(a1)
2348 ; RV64-NEXT: lui a3, %hi(.LCPI34_1)
2349 ; RV64-NEXT: ld a3, %lo(.LCPI34_1)(a3)
2350 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2351 ; RV64-NEXT: vand.vx v16, v16, a1, v0.t
2352 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
2353 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
2354 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
2355 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
2356 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
2357 ; RV64-NEXT: lui a4, %hi(.LCPI34_2)
2358 ; RV64-NEXT: ld a4, %lo(.LCPI34_2)(a4)
2359 ; RV64-NEXT: lui a5, %hi(.LCPI34_3)
2360 ; RV64-NEXT: ld a5, %lo(.LCPI34_3)(a5)
2361 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2362 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
2363 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
2364 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
2365 ; RV64-NEXT: li a6, 56
2366 ; RV64-NEXT: vsrl.vx v8, v8, a6, v0.t
2367 ; RV64-NEXT: addi a7, sp, 16
2368 ; RV64-NEXT: vs8r.v v8, (a7) # Unknown-size Folded Spill
2369 ; RV64-NEXT: addi a7, a0, -16
2370 ; RV64-NEXT: sltu a0, a0, a7
2371 ; RV64-NEXT: addi a0, a0, -1
2372 ; RV64-NEXT: and a0, a0, a7
2373 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2374 ; RV64-NEXT: vmv1r.v v0, v24
2375 ; RV64-NEXT: csrr a0, vlenb
2376 ; RV64-NEXT: slli a0, a0, 3
2377 ; RV64-NEXT: add a0, sp, a0
2378 ; RV64-NEXT: addi a0, a0, 16
2379 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2380 ; RV64-NEXT: vsub.vx v16, v8, a2, v0.t
2381 ; RV64-NEXT: vnot.v v8, v8, v0.t
2382 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
2383 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2384 ; RV64-NEXT: vand.vx v16, v16, a1, v0.t
2385 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
2386 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
2387 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
2388 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
2389 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
2390 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2391 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
2392 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
2393 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
2394 ; RV64-NEXT: vsrl.vx v16, v8, a6, v0.t
2395 ; RV64-NEXT: addi a0, sp, 16
2396 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2397 ; RV64-NEXT: csrr a0, vlenb
2398 ; RV64-NEXT: slli a0, a0, 4
2399 ; RV64-NEXT: add sp, sp, a0
2400 ; RV64-NEXT: addi sp, sp, 16
2402 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 false, <32 x i1> %m, i32 %evl)
2406 define <32 x i64> @vp_cttz_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
2407 ; RV32-LABEL: vp_cttz_v32i64_unmasked:
2409 ; RV32-NEXT: li a2, 16
2410 ; RV32-NEXT: vmv8r.v v0, v16
2411 ; RV32-NEXT: mv a1, a0
2412 ; RV32-NEXT: bltu a0, a2, .LBB35_2
2413 ; RV32-NEXT: # %bb.1:
2414 ; RV32-NEXT: li a1, 16
2415 ; RV32-NEXT: .LBB35_2:
2416 ; RV32-NEXT: addi sp, sp, -16
2417 ; RV32-NEXT: .cfi_def_cfa_offset 16
2418 ; RV32-NEXT: csrr a2, vlenb
2419 ; RV32-NEXT: li a3, 40
2420 ; RV32-NEXT: mul a2, a2, a3
2421 ; RV32-NEXT: sub sp, sp, a2
2422 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
2423 ; RV32-NEXT: li a2, 1
2424 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2425 ; RV32-NEXT: vsub.vx v16, v8, a2
2426 ; RV32-NEXT: li a3, 32
2427 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2428 ; RV32-NEXT: vmv.v.i v24, -1
2429 ; RV32-NEXT: csrr a4, vlenb
2430 ; RV32-NEXT: slli a4, a4, 5
2431 ; RV32-NEXT: add a4, sp, a4
2432 ; RV32-NEXT: addi a4, a4, 16
2433 ; RV32-NEXT: vs8r.v v24, (a4) # Unknown-size Folded Spill
2434 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2435 ; RV32-NEXT: vxor.vv v8, v8, v24
2436 ; RV32-NEXT: vand.vv v8, v8, v16
2437 ; RV32-NEXT: vsrl.vi v16, v8, 1
2438 ; RV32-NEXT: lui a4, 349525
2439 ; RV32-NEXT: addi a4, a4, 1365
2440 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2441 ; RV32-NEXT: vmv.v.x v24, a4
2442 ; RV32-NEXT: csrr a4, vlenb
2443 ; RV32-NEXT: li a5, 24
2444 ; RV32-NEXT: mul a4, a4, a5
2445 ; RV32-NEXT: add a4, sp, a4
2446 ; RV32-NEXT: addi a4, a4, 16
2447 ; RV32-NEXT: vs8r.v v24, (a4) # Unknown-size Folded Spill
2448 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2449 ; RV32-NEXT: vand.vv v16, v16, v24
2450 ; RV32-NEXT: vsub.vv v8, v8, v16
2451 ; RV32-NEXT: lui a4, 209715
2452 ; RV32-NEXT: addi a4, a4, 819
2453 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2454 ; RV32-NEXT: vmv.v.x v16, a4
2455 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2456 ; RV32-NEXT: vand.vv v24, v8, v16
2457 ; RV32-NEXT: vsrl.vi v8, v8, 2
2458 ; RV32-NEXT: vand.vv v8, v8, v16
2459 ; RV32-NEXT: vadd.vv v8, v24, v8
2460 ; RV32-NEXT: vsrl.vi v24, v8, 4
2461 ; RV32-NEXT: vadd.vv v8, v8, v24
2462 ; RV32-NEXT: lui a4, 61681
2463 ; RV32-NEXT: addi a4, a4, -241
2464 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2465 ; RV32-NEXT: vmv.v.x v24, a4
2466 ; RV32-NEXT: csrr a4, vlenb
2467 ; RV32-NEXT: slli a4, a4, 4
2468 ; RV32-NEXT: add a4, sp, a4
2469 ; RV32-NEXT: addi a4, a4, 16
2470 ; RV32-NEXT: vs8r.v v24, (a4) # Unknown-size Folded Spill
2471 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2472 ; RV32-NEXT: vand.vv v8, v8, v24
2473 ; RV32-NEXT: lui a4, 4112
2474 ; RV32-NEXT: addi a4, a4, 257
2475 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
2476 ; RV32-NEXT: vmv.v.x v24, a4
2477 ; RV32-NEXT: addi a3, sp, 16
2478 ; RV32-NEXT: vs8r.v v24, (a3) # Unknown-size Folded Spill
2479 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2480 ; RV32-NEXT: vmul.vv v8, v8, v24
2481 ; RV32-NEXT: li a1, 56
2482 ; RV32-NEXT: vsrl.vx v8, v8, a1
2483 ; RV32-NEXT: csrr a3, vlenb
2484 ; RV32-NEXT: slli a3, a3, 3
2485 ; RV32-NEXT: add a3, sp, a3
2486 ; RV32-NEXT: addi a3, a3, 16
2487 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
2488 ; RV32-NEXT: addi a3, a0, -16
2489 ; RV32-NEXT: sltu a0, a0, a3
2490 ; RV32-NEXT: addi a0, a0, -1
2491 ; RV32-NEXT: and a0, a0, a3
2492 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2493 ; RV32-NEXT: csrr a0, vlenb
2494 ; RV32-NEXT: slli a0, a0, 5
2495 ; RV32-NEXT: add a0, sp, a0
2496 ; RV32-NEXT: addi a0, a0, 16
2497 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2498 ; RV32-NEXT: vxor.vv v8, v0, v8
2499 ; RV32-NEXT: vsub.vx v0, v0, a2
2500 ; RV32-NEXT: vand.vv v8, v8, v0
2501 ; RV32-NEXT: vsrl.vi v0, v8, 1
2502 ; RV32-NEXT: csrr a0, vlenb
2503 ; RV32-NEXT: li a2, 24
2504 ; RV32-NEXT: mul a0, a0, a2
2505 ; RV32-NEXT: add a0, sp, a0
2506 ; RV32-NEXT: addi a0, a0, 16
2507 ; RV32-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload
2508 ; RV32-NEXT: vand.vv v0, v0, v24
2509 ; RV32-NEXT: vsub.vv v8, v8, v0
2510 ; RV32-NEXT: vand.vv v0, v8, v16
2511 ; RV32-NEXT: vsrl.vi v8, v8, 2
2512 ; RV32-NEXT: vand.vv v8, v8, v16
2513 ; RV32-NEXT: vadd.vv v8, v0, v8
2514 ; RV32-NEXT: vsrl.vi v16, v8, 4
2515 ; RV32-NEXT: vadd.vv v8, v8, v16
2516 ; RV32-NEXT: csrr a0, vlenb
2517 ; RV32-NEXT: slli a0, a0, 4
2518 ; RV32-NEXT: add a0, sp, a0
2519 ; RV32-NEXT: addi a0, a0, 16
2520 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2521 ; RV32-NEXT: vand.vv v8, v8, v16
2522 ; RV32-NEXT: addi a0, sp, 16
2523 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2524 ; RV32-NEXT: vmul.vv v8, v8, v16
2525 ; RV32-NEXT: vsrl.vx v16, v8, a1
2526 ; RV32-NEXT: csrr a0, vlenb
2527 ; RV32-NEXT: slli a0, a0, 3
2528 ; RV32-NEXT: add a0, sp, a0
2529 ; RV32-NEXT: addi a0, a0, 16
2530 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2531 ; RV32-NEXT: csrr a0, vlenb
2532 ; RV32-NEXT: li a1, 40
2533 ; RV32-NEXT: mul a0, a0, a1
2534 ; RV32-NEXT: add sp, sp, a0
2535 ; RV32-NEXT: addi sp, sp, 16
2538 ; RV64-LABEL: vp_cttz_v32i64_unmasked:
2540 ; RV64-NEXT: li a2, 16
2541 ; RV64-NEXT: mv a1, a0
2542 ; RV64-NEXT: bltu a0, a2, .LBB35_2
2543 ; RV64-NEXT: # %bb.1:
2544 ; RV64-NEXT: li a1, 16
2545 ; RV64-NEXT: .LBB35_2:
2546 ; RV64-NEXT: li a2, 1
2547 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
2548 ; RV64-NEXT: vsub.vx v24, v8, a2
2549 ; RV64-NEXT: vnot.v v8, v8
2550 ; RV64-NEXT: vand.vv v8, v8, v24
2551 ; RV64-NEXT: lui a1, %hi(.LCPI35_0)
2552 ; RV64-NEXT: ld a1, %lo(.LCPI35_0)(a1)
2553 ; RV64-NEXT: lui a3, %hi(.LCPI35_1)
2554 ; RV64-NEXT: ld a3, %lo(.LCPI35_1)(a3)
2555 ; RV64-NEXT: vsrl.vi v24, v8, 1
2556 ; RV64-NEXT: vand.vx v24, v24, a1
2557 ; RV64-NEXT: vsub.vv v8, v8, v24
2558 ; RV64-NEXT: vand.vx v24, v8, a3
2559 ; RV64-NEXT: vsrl.vi v8, v8, 2
2560 ; RV64-NEXT: vand.vx v8, v8, a3
2561 ; RV64-NEXT: vadd.vv v8, v24, v8
2562 ; RV64-NEXT: lui a4, %hi(.LCPI35_2)
2563 ; RV64-NEXT: ld a4, %lo(.LCPI35_2)(a4)
2564 ; RV64-NEXT: lui a5, %hi(.LCPI35_3)
2565 ; RV64-NEXT: ld a5, %lo(.LCPI35_3)(a5)
2566 ; RV64-NEXT: vsrl.vi v24, v8, 4
2567 ; RV64-NEXT: vadd.vv v8, v8, v24
2568 ; RV64-NEXT: vand.vx v8, v8, a4
2569 ; RV64-NEXT: vmul.vx v8, v8, a5
2570 ; RV64-NEXT: li a6, 56
2571 ; RV64-NEXT: vsrl.vx v8, v8, a6
2572 ; RV64-NEXT: addi a7, a0, -16
2573 ; RV64-NEXT: sltu a0, a0, a7
2574 ; RV64-NEXT: addi a0, a0, -1
2575 ; RV64-NEXT: and a0, a0, a7
2576 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2577 ; RV64-NEXT: vsub.vx v24, v16, a2
2578 ; RV64-NEXT: vnot.v v16, v16
2579 ; RV64-NEXT: vand.vv v16, v16, v24
2580 ; RV64-NEXT: vsrl.vi v24, v16, 1
2581 ; RV64-NEXT: vand.vx v24, v24, a1
2582 ; RV64-NEXT: vsub.vv v16, v16, v24
2583 ; RV64-NEXT: vand.vx v24, v16, a3
2584 ; RV64-NEXT: vsrl.vi v16, v16, 2
2585 ; RV64-NEXT: vand.vx v16, v16, a3
2586 ; RV64-NEXT: vadd.vv v16, v24, v16
2587 ; RV64-NEXT: vsrl.vi v24, v16, 4
2588 ; RV64-NEXT: vadd.vv v16, v16, v24
2589 ; RV64-NEXT: vand.vx v16, v16, a4
2590 ; RV64-NEXT: vmul.vx v16, v16, a5
2591 ; RV64-NEXT: vsrl.vx v16, v16, a6
2593 %head = insertelement <32 x i1> poison, i1 true, i32 0
2594 %m = shufflevector <32 x i1> %head, <32 x i1> poison, <32 x i32> zeroinitializer
2595 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 false, <32 x i1> %m, i32 %evl)
2599 define <2 x i8> @vp_cttz_zero_undef_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
2600 ; CHECK-LABEL: vp_cttz_zero_undef_v2i8:
2602 ; CHECK-NEXT: li a1, 1
2603 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
2604 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2605 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2606 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2607 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2608 ; CHECK-NEXT: li a0, 85
2609 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2610 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2611 ; CHECK-NEXT: li a0, 51
2612 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2613 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2614 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2615 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2616 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2617 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2618 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2620 %v = call <2 x i8> @llvm.vp.cttz.v2i8(<2 x i8> %va, i1 true, <2 x i1> %m, i32 %evl)
2624 define <2 x i8> @vp_cttz_zero_undef_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
2625 ; CHECK-LABEL: vp_cttz_zero_undef_v2i8_unmasked:
2627 ; CHECK-NEXT: li a1, 1
2628 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
2629 ; CHECK-NEXT: vsub.vx v9, v8, a1
2630 ; CHECK-NEXT: vnot.v v8, v8
2631 ; CHECK-NEXT: vand.vv v8, v8, v9
2632 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2633 ; CHECK-NEXT: li a0, 85
2634 ; CHECK-NEXT: vand.vx v9, v9, a0
2635 ; CHECK-NEXT: vsub.vv v8, v8, v9
2636 ; CHECK-NEXT: li a0, 51
2637 ; CHECK-NEXT: vand.vx v9, v8, a0
2638 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2639 ; CHECK-NEXT: vand.vx v8, v8, a0
2640 ; CHECK-NEXT: vadd.vv v8, v9, v8
2641 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2642 ; CHECK-NEXT: vadd.vv v8, v8, v9
2643 ; CHECK-NEXT: vand.vi v8, v8, 15
2645 %head = insertelement <2 x i1> poison, i1 true, i32 0
2646 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
2647 %v = call <2 x i8> @llvm.vp.cttz.v2i8(<2 x i8> %va, i1 true, <2 x i1> %m, i32 %evl)
2651 define <4 x i8> @vp_cttz_zero_undef_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
2652 ; CHECK-LABEL: vp_cttz_zero_undef_v4i8:
2654 ; CHECK-NEXT: li a1, 1
2655 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
2656 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2657 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2658 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2659 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2660 ; CHECK-NEXT: li a0, 85
2661 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2662 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2663 ; CHECK-NEXT: li a0, 51
2664 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2665 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2666 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2667 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2668 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2669 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2670 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2672 %v = call <4 x i8> @llvm.vp.cttz.v4i8(<4 x i8> %va, i1 true, <4 x i1> %m, i32 %evl)
2676 define <4 x i8> @vp_cttz_zero_undef_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
2677 ; CHECK-LABEL: vp_cttz_zero_undef_v4i8_unmasked:
2679 ; CHECK-NEXT: li a1, 1
2680 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
2681 ; CHECK-NEXT: vsub.vx v9, v8, a1
2682 ; CHECK-NEXT: vnot.v v8, v8
2683 ; CHECK-NEXT: vand.vv v8, v8, v9
2684 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2685 ; CHECK-NEXT: li a0, 85
2686 ; CHECK-NEXT: vand.vx v9, v9, a0
2687 ; CHECK-NEXT: vsub.vv v8, v8, v9
2688 ; CHECK-NEXT: li a0, 51
2689 ; CHECK-NEXT: vand.vx v9, v8, a0
2690 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2691 ; CHECK-NEXT: vand.vx v8, v8, a0
2692 ; CHECK-NEXT: vadd.vv v8, v9, v8
2693 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2694 ; CHECK-NEXT: vadd.vv v8, v8, v9
2695 ; CHECK-NEXT: vand.vi v8, v8, 15
2697 %head = insertelement <4 x i1> poison, i1 true, i32 0
2698 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
2699 %v = call <4 x i8> @llvm.vp.cttz.v4i8(<4 x i8> %va, i1 true, <4 x i1> %m, i32 %evl)
2703 define <8 x i8> @vp_cttz_zero_undef_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
2704 ; CHECK-LABEL: vp_cttz_zero_undef_v8i8:
2706 ; CHECK-NEXT: li a1, 1
2707 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
2708 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2709 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2710 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2711 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2712 ; CHECK-NEXT: li a0, 85
2713 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2714 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2715 ; CHECK-NEXT: li a0, 51
2716 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2717 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2718 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2719 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2720 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2721 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2722 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2724 %v = call <8 x i8> @llvm.vp.cttz.v8i8(<8 x i8> %va, i1 true, <8 x i1> %m, i32 %evl)
2728 define <8 x i8> @vp_cttz_zero_undef_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
2729 ; CHECK-LABEL: vp_cttz_zero_undef_v8i8_unmasked:
2731 ; CHECK-NEXT: li a1, 1
2732 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
2733 ; CHECK-NEXT: vsub.vx v9, v8, a1
2734 ; CHECK-NEXT: vnot.v v8, v8
2735 ; CHECK-NEXT: vand.vv v8, v8, v9
2736 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2737 ; CHECK-NEXT: li a0, 85
2738 ; CHECK-NEXT: vand.vx v9, v9, a0
2739 ; CHECK-NEXT: vsub.vv v8, v8, v9
2740 ; CHECK-NEXT: li a0, 51
2741 ; CHECK-NEXT: vand.vx v9, v8, a0
2742 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2743 ; CHECK-NEXT: vand.vx v8, v8, a0
2744 ; CHECK-NEXT: vadd.vv v8, v9, v8
2745 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2746 ; CHECK-NEXT: vadd.vv v8, v8, v9
2747 ; CHECK-NEXT: vand.vi v8, v8, 15
2749 %head = insertelement <8 x i1> poison, i1 true, i32 0
2750 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
2751 %v = call <8 x i8> @llvm.vp.cttz.v8i8(<8 x i8> %va, i1 true, <8 x i1> %m, i32 %evl)
2755 define <16 x i8> @vp_cttz_zero_undef_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
2756 ; CHECK-LABEL: vp_cttz_zero_undef_v16i8:
2758 ; CHECK-NEXT: li a1, 1
2759 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
2760 ; CHECK-NEXT: vsub.vx v9, v8, a1, v0.t
2761 ; CHECK-NEXT: vnot.v v8, v8, v0.t
2762 ; CHECK-NEXT: vand.vv v8, v8, v9, v0.t
2763 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
2764 ; CHECK-NEXT: li a0, 85
2765 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
2766 ; CHECK-NEXT: vsub.vv v8, v8, v9, v0.t
2767 ; CHECK-NEXT: li a0, 51
2768 ; CHECK-NEXT: vand.vx v9, v8, a0, v0.t
2769 ; CHECK-NEXT: vsrl.vi v8, v8, 2, v0.t
2770 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
2771 ; CHECK-NEXT: vadd.vv v8, v9, v8, v0.t
2772 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
2773 ; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t
2774 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
2776 %v = call <16 x i8> @llvm.vp.cttz.v16i8(<16 x i8> %va, i1 true, <16 x i1> %m, i32 %evl)
2780 define <16 x i8> @vp_cttz_zero_undef_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
2781 ; CHECK-LABEL: vp_cttz_zero_undef_v16i8_unmasked:
2783 ; CHECK-NEXT: li a1, 1
2784 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
2785 ; CHECK-NEXT: vsub.vx v9, v8, a1
2786 ; CHECK-NEXT: vnot.v v8, v8
2787 ; CHECK-NEXT: vand.vv v8, v8, v9
2788 ; CHECK-NEXT: vsrl.vi v9, v8, 1
2789 ; CHECK-NEXT: li a0, 85
2790 ; CHECK-NEXT: vand.vx v9, v9, a0
2791 ; CHECK-NEXT: vsub.vv v8, v8, v9
2792 ; CHECK-NEXT: li a0, 51
2793 ; CHECK-NEXT: vand.vx v9, v8, a0
2794 ; CHECK-NEXT: vsrl.vi v8, v8, 2
2795 ; CHECK-NEXT: vand.vx v8, v8, a0
2796 ; CHECK-NEXT: vadd.vv v8, v9, v8
2797 ; CHECK-NEXT: vsrl.vi v9, v8, 4
2798 ; CHECK-NEXT: vadd.vv v8, v8, v9
2799 ; CHECK-NEXT: vand.vi v8, v8, 15
2801 %head = insertelement <16 x i1> poison, i1 true, i32 0
2802 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
2803 %v = call <16 x i8> @llvm.vp.cttz.v16i8(<16 x i8> %va, i1 true, <16 x i1> %m, i32 %evl)
2807 define <2 x i16> @vp_cttz_zero_undef_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
2808 ; RV32-LABEL: vp_cttz_zero_undef_v2i16:
2810 ; RV32-NEXT: li a1, 1
2811 ; RV32-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2812 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
2813 ; RV32-NEXT: vnot.v v8, v8, v0.t
2814 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
2815 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
2816 ; RV32-NEXT: lui a0, 5
2817 ; RV32-NEXT: addi a0, a0, 1365
2818 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
2819 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
2820 ; RV32-NEXT: lui a0, 3
2821 ; RV32-NEXT: addi a0, a0, 819
2822 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
2823 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
2824 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
2825 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
2826 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
2827 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
2828 ; RV32-NEXT: lui a0, 1
2829 ; RV32-NEXT: addi a0, a0, -241
2830 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
2831 ; RV32-NEXT: li a0, 257
2832 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
2833 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
2836 ; RV64-LABEL: vp_cttz_zero_undef_v2i16:
2838 ; RV64-NEXT: li a1, 1
2839 ; RV64-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2840 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
2841 ; RV64-NEXT: vnot.v v8, v8, v0.t
2842 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
2843 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
2844 ; RV64-NEXT: lui a0, 5
2845 ; RV64-NEXT: addiw a0, a0, 1365
2846 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
2847 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
2848 ; RV64-NEXT: lui a0, 3
2849 ; RV64-NEXT: addiw a0, a0, 819
2850 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
2851 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
2852 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2853 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
2854 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
2855 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
2856 ; RV64-NEXT: lui a0, 1
2857 ; RV64-NEXT: addiw a0, a0, -241
2858 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2859 ; RV64-NEXT: li a0, 257
2860 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
2861 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
2863 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 true, <2 x i1> %m, i32 %evl)
2867 define <2 x i16> @vp_cttz_zero_undef_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
2868 ; RV32-LABEL: vp_cttz_zero_undef_v2i16_unmasked:
2870 ; RV32-NEXT: li a1, 1
2871 ; RV32-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2872 ; RV32-NEXT: vsub.vx v9, v8, a1
2873 ; RV32-NEXT: vnot.v v8, v8
2874 ; RV32-NEXT: vand.vv v8, v8, v9
2875 ; RV32-NEXT: vsrl.vi v9, v8, 1
2876 ; RV32-NEXT: lui a0, 5
2877 ; RV32-NEXT: addi a0, a0, 1365
2878 ; RV32-NEXT: vand.vx v9, v9, a0
2879 ; RV32-NEXT: vsub.vv v8, v8, v9
2880 ; RV32-NEXT: lui a0, 3
2881 ; RV32-NEXT: addi a0, a0, 819
2882 ; RV32-NEXT: vand.vx v9, v8, a0
2883 ; RV32-NEXT: vsrl.vi v8, v8, 2
2884 ; RV32-NEXT: vand.vx v8, v8, a0
2885 ; RV32-NEXT: vadd.vv v8, v9, v8
2886 ; RV32-NEXT: vsrl.vi v9, v8, 4
2887 ; RV32-NEXT: vadd.vv v8, v8, v9
2888 ; RV32-NEXT: lui a0, 1
2889 ; RV32-NEXT: addi a0, a0, -241
2890 ; RV32-NEXT: vand.vx v8, v8, a0
2891 ; RV32-NEXT: li a0, 257
2892 ; RV32-NEXT: vmul.vx v8, v8, a0
2893 ; RV32-NEXT: vsrl.vi v8, v8, 8
2896 ; RV64-LABEL: vp_cttz_zero_undef_v2i16_unmasked:
2898 ; RV64-NEXT: li a1, 1
2899 ; RV64-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
2900 ; RV64-NEXT: vsub.vx v9, v8, a1
2901 ; RV64-NEXT: vnot.v v8, v8
2902 ; RV64-NEXT: vand.vv v8, v8, v9
2903 ; RV64-NEXT: vsrl.vi v9, v8, 1
2904 ; RV64-NEXT: lui a0, 5
2905 ; RV64-NEXT: addiw a0, a0, 1365
2906 ; RV64-NEXT: vand.vx v9, v9, a0
2907 ; RV64-NEXT: vsub.vv v8, v8, v9
2908 ; RV64-NEXT: lui a0, 3
2909 ; RV64-NEXT: addiw a0, a0, 819
2910 ; RV64-NEXT: vand.vx v9, v8, a0
2911 ; RV64-NEXT: vsrl.vi v8, v8, 2
2912 ; RV64-NEXT: vand.vx v8, v8, a0
2913 ; RV64-NEXT: vadd.vv v8, v9, v8
2914 ; RV64-NEXT: vsrl.vi v9, v8, 4
2915 ; RV64-NEXT: vadd.vv v8, v8, v9
2916 ; RV64-NEXT: lui a0, 1
2917 ; RV64-NEXT: addiw a0, a0, -241
2918 ; RV64-NEXT: vand.vx v8, v8, a0
2919 ; RV64-NEXT: li a0, 257
2920 ; RV64-NEXT: vmul.vx v8, v8, a0
2921 ; RV64-NEXT: vsrl.vi v8, v8, 8
2923 %head = insertelement <2 x i1> poison, i1 true, i32 0
2924 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
2925 %v = call <2 x i16> @llvm.vp.cttz.v2i16(<2 x i16> %va, i1 true, <2 x i1> %m, i32 %evl)
2929 define <4 x i16> @vp_cttz_zero_undef_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
2930 ; RV32-LABEL: vp_cttz_zero_undef_v4i16:
2932 ; RV32-NEXT: li a1, 1
2933 ; RV32-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2934 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
2935 ; RV32-NEXT: vnot.v v8, v8, v0.t
2936 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
2937 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
2938 ; RV32-NEXT: lui a0, 5
2939 ; RV32-NEXT: addi a0, a0, 1365
2940 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
2941 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
2942 ; RV32-NEXT: lui a0, 3
2943 ; RV32-NEXT: addi a0, a0, 819
2944 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
2945 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
2946 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
2947 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
2948 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
2949 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
2950 ; RV32-NEXT: lui a0, 1
2951 ; RV32-NEXT: addi a0, a0, -241
2952 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
2953 ; RV32-NEXT: li a0, 257
2954 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
2955 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
2958 ; RV64-LABEL: vp_cttz_zero_undef_v4i16:
2960 ; RV64-NEXT: li a1, 1
2961 ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2962 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
2963 ; RV64-NEXT: vnot.v v8, v8, v0.t
2964 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
2965 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
2966 ; RV64-NEXT: lui a0, 5
2967 ; RV64-NEXT: addiw a0, a0, 1365
2968 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
2969 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
2970 ; RV64-NEXT: lui a0, 3
2971 ; RV64-NEXT: addiw a0, a0, 819
2972 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
2973 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
2974 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2975 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
2976 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
2977 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
2978 ; RV64-NEXT: lui a0, 1
2979 ; RV64-NEXT: addiw a0, a0, -241
2980 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2981 ; RV64-NEXT: li a0, 257
2982 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
2983 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
2985 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 true, <4 x i1> %m, i32 %evl)
2989 define <4 x i16> @vp_cttz_zero_undef_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
2990 ; RV32-LABEL: vp_cttz_zero_undef_v4i16_unmasked:
2992 ; RV32-NEXT: li a1, 1
2993 ; RV32-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
2994 ; RV32-NEXT: vsub.vx v9, v8, a1
2995 ; RV32-NEXT: vnot.v v8, v8
2996 ; RV32-NEXT: vand.vv v8, v8, v9
2997 ; RV32-NEXT: vsrl.vi v9, v8, 1
2998 ; RV32-NEXT: lui a0, 5
2999 ; RV32-NEXT: addi a0, a0, 1365
3000 ; RV32-NEXT: vand.vx v9, v9, a0
3001 ; RV32-NEXT: vsub.vv v8, v8, v9
3002 ; RV32-NEXT: lui a0, 3
3003 ; RV32-NEXT: addi a0, a0, 819
3004 ; RV32-NEXT: vand.vx v9, v8, a0
3005 ; RV32-NEXT: vsrl.vi v8, v8, 2
3006 ; RV32-NEXT: vand.vx v8, v8, a0
3007 ; RV32-NEXT: vadd.vv v8, v9, v8
3008 ; RV32-NEXT: vsrl.vi v9, v8, 4
3009 ; RV32-NEXT: vadd.vv v8, v8, v9
3010 ; RV32-NEXT: lui a0, 1
3011 ; RV32-NEXT: addi a0, a0, -241
3012 ; RV32-NEXT: vand.vx v8, v8, a0
3013 ; RV32-NEXT: li a0, 257
3014 ; RV32-NEXT: vmul.vx v8, v8, a0
3015 ; RV32-NEXT: vsrl.vi v8, v8, 8
3018 ; RV64-LABEL: vp_cttz_zero_undef_v4i16_unmasked:
3020 ; RV64-NEXT: li a1, 1
3021 ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
3022 ; RV64-NEXT: vsub.vx v9, v8, a1
3023 ; RV64-NEXT: vnot.v v8, v8
3024 ; RV64-NEXT: vand.vv v8, v8, v9
3025 ; RV64-NEXT: vsrl.vi v9, v8, 1
3026 ; RV64-NEXT: lui a0, 5
3027 ; RV64-NEXT: addiw a0, a0, 1365
3028 ; RV64-NEXT: vand.vx v9, v9, a0
3029 ; RV64-NEXT: vsub.vv v8, v8, v9
3030 ; RV64-NEXT: lui a0, 3
3031 ; RV64-NEXT: addiw a0, a0, 819
3032 ; RV64-NEXT: vand.vx v9, v8, a0
3033 ; RV64-NEXT: vsrl.vi v8, v8, 2
3034 ; RV64-NEXT: vand.vx v8, v8, a0
3035 ; RV64-NEXT: vadd.vv v8, v9, v8
3036 ; RV64-NEXT: vsrl.vi v9, v8, 4
3037 ; RV64-NEXT: vadd.vv v8, v8, v9
3038 ; RV64-NEXT: lui a0, 1
3039 ; RV64-NEXT: addiw a0, a0, -241
3040 ; RV64-NEXT: vand.vx v8, v8, a0
3041 ; RV64-NEXT: li a0, 257
3042 ; RV64-NEXT: vmul.vx v8, v8, a0
3043 ; RV64-NEXT: vsrl.vi v8, v8, 8
3045 %head = insertelement <4 x i1> poison, i1 true, i32 0
3046 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
3047 %v = call <4 x i16> @llvm.vp.cttz.v4i16(<4 x i16> %va, i1 true, <4 x i1> %m, i32 %evl)
3051 define <8 x i16> @vp_cttz_zero_undef_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
3052 ; RV32-LABEL: vp_cttz_zero_undef_v8i16:
3054 ; RV32-NEXT: li a1, 1
3055 ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma
3056 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
3057 ; RV32-NEXT: vnot.v v8, v8, v0.t
3058 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3059 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
3060 ; RV32-NEXT: lui a0, 5
3061 ; RV32-NEXT: addi a0, a0, 1365
3062 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
3063 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
3064 ; RV32-NEXT: lui a0, 3
3065 ; RV32-NEXT: addi a0, a0, 819
3066 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
3067 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3068 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3069 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
3070 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
3071 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
3072 ; RV32-NEXT: lui a0, 1
3073 ; RV32-NEXT: addi a0, a0, -241
3074 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3075 ; RV32-NEXT: li a0, 257
3076 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
3077 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
3080 ; RV64-LABEL: vp_cttz_zero_undef_v8i16:
3082 ; RV64-NEXT: li a1, 1
3083 ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma
3084 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
3085 ; RV64-NEXT: vnot.v v8, v8, v0.t
3086 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
3087 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
3088 ; RV64-NEXT: lui a0, 5
3089 ; RV64-NEXT: addiw a0, a0, 1365
3090 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
3091 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
3092 ; RV64-NEXT: lui a0, 3
3093 ; RV64-NEXT: addiw a0, a0, 819
3094 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
3095 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3096 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3097 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
3098 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
3099 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
3100 ; RV64-NEXT: lui a0, 1
3101 ; RV64-NEXT: addiw a0, a0, -241
3102 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3103 ; RV64-NEXT: li a0, 257
3104 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3105 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
3107 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 true, <8 x i1> %m, i32 %evl)
3111 define <8 x i16> @vp_cttz_zero_undef_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
3112 ; RV32-LABEL: vp_cttz_zero_undef_v8i16_unmasked:
3114 ; RV32-NEXT: li a1, 1
3115 ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma
3116 ; RV32-NEXT: vsub.vx v9, v8, a1
3117 ; RV32-NEXT: vnot.v v8, v8
3118 ; RV32-NEXT: vand.vv v8, v8, v9
3119 ; RV32-NEXT: vsrl.vi v9, v8, 1
3120 ; RV32-NEXT: lui a0, 5
3121 ; RV32-NEXT: addi a0, a0, 1365
3122 ; RV32-NEXT: vand.vx v9, v9, a0
3123 ; RV32-NEXT: vsub.vv v8, v8, v9
3124 ; RV32-NEXT: lui a0, 3
3125 ; RV32-NEXT: addi a0, a0, 819
3126 ; RV32-NEXT: vand.vx v9, v8, a0
3127 ; RV32-NEXT: vsrl.vi v8, v8, 2
3128 ; RV32-NEXT: vand.vx v8, v8, a0
3129 ; RV32-NEXT: vadd.vv v8, v9, v8
3130 ; RV32-NEXT: vsrl.vi v9, v8, 4
3131 ; RV32-NEXT: vadd.vv v8, v8, v9
3132 ; RV32-NEXT: lui a0, 1
3133 ; RV32-NEXT: addi a0, a0, -241
3134 ; RV32-NEXT: vand.vx v8, v8, a0
3135 ; RV32-NEXT: li a0, 257
3136 ; RV32-NEXT: vmul.vx v8, v8, a0
3137 ; RV32-NEXT: vsrl.vi v8, v8, 8
3140 ; RV64-LABEL: vp_cttz_zero_undef_v8i16_unmasked:
3142 ; RV64-NEXT: li a1, 1
3143 ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma
3144 ; RV64-NEXT: vsub.vx v9, v8, a1
3145 ; RV64-NEXT: vnot.v v8, v8
3146 ; RV64-NEXT: vand.vv v8, v8, v9
3147 ; RV64-NEXT: vsrl.vi v9, v8, 1
3148 ; RV64-NEXT: lui a0, 5
3149 ; RV64-NEXT: addiw a0, a0, 1365
3150 ; RV64-NEXT: vand.vx v9, v9, a0
3151 ; RV64-NEXT: vsub.vv v8, v8, v9
3152 ; RV64-NEXT: lui a0, 3
3153 ; RV64-NEXT: addiw a0, a0, 819
3154 ; RV64-NEXT: vand.vx v9, v8, a0
3155 ; RV64-NEXT: vsrl.vi v8, v8, 2
3156 ; RV64-NEXT: vand.vx v8, v8, a0
3157 ; RV64-NEXT: vadd.vv v8, v9, v8
3158 ; RV64-NEXT: vsrl.vi v9, v8, 4
3159 ; RV64-NEXT: vadd.vv v8, v8, v9
3160 ; RV64-NEXT: lui a0, 1
3161 ; RV64-NEXT: addiw a0, a0, -241
3162 ; RV64-NEXT: vand.vx v8, v8, a0
3163 ; RV64-NEXT: li a0, 257
3164 ; RV64-NEXT: vmul.vx v8, v8, a0
3165 ; RV64-NEXT: vsrl.vi v8, v8, 8
3167 %head = insertelement <8 x i1> poison, i1 true, i32 0
3168 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
3169 %v = call <8 x i16> @llvm.vp.cttz.v8i16(<8 x i16> %va, i1 true, <8 x i1> %m, i32 %evl)
3173 define <16 x i16> @vp_cttz_zero_undef_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
3174 ; RV32-LABEL: vp_cttz_zero_undef_v16i16:
3176 ; RV32-NEXT: li a1, 1
3177 ; RV32-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3178 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
3179 ; RV32-NEXT: vnot.v v8, v8, v0.t
3180 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3181 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
3182 ; RV32-NEXT: lui a0, 5
3183 ; RV32-NEXT: addi a0, a0, 1365
3184 ; RV32-NEXT: vand.vx v10, v10, a0, v0.t
3185 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
3186 ; RV32-NEXT: lui a0, 3
3187 ; RV32-NEXT: addi a0, a0, 819
3188 ; RV32-NEXT: vand.vx v10, v8, a0, v0.t
3189 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3190 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3191 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
3192 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
3193 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
3194 ; RV32-NEXT: lui a0, 1
3195 ; RV32-NEXT: addi a0, a0, -241
3196 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3197 ; RV32-NEXT: li a0, 257
3198 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
3199 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
3202 ; RV64-LABEL: vp_cttz_zero_undef_v16i16:
3204 ; RV64-NEXT: li a1, 1
3205 ; RV64-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3206 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
3207 ; RV64-NEXT: vnot.v v8, v8, v0.t
3208 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
3209 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
3210 ; RV64-NEXT: lui a0, 5
3211 ; RV64-NEXT: addiw a0, a0, 1365
3212 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
3213 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
3214 ; RV64-NEXT: lui a0, 3
3215 ; RV64-NEXT: addiw a0, a0, 819
3216 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
3217 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3218 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3219 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
3220 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
3221 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
3222 ; RV64-NEXT: lui a0, 1
3223 ; RV64-NEXT: addiw a0, a0, -241
3224 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3225 ; RV64-NEXT: li a0, 257
3226 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3227 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
3229 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 true, <16 x i1> %m, i32 %evl)
3233 define <16 x i16> @vp_cttz_zero_undef_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
3234 ; RV32-LABEL: vp_cttz_zero_undef_v16i16_unmasked:
3236 ; RV32-NEXT: li a1, 1
3237 ; RV32-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3238 ; RV32-NEXT: vsub.vx v10, v8, a1
3239 ; RV32-NEXT: vnot.v v8, v8
3240 ; RV32-NEXT: vand.vv v8, v8, v10
3241 ; RV32-NEXT: vsrl.vi v10, v8, 1
3242 ; RV32-NEXT: lui a0, 5
3243 ; RV32-NEXT: addi a0, a0, 1365
3244 ; RV32-NEXT: vand.vx v10, v10, a0
3245 ; RV32-NEXT: vsub.vv v8, v8, v10
3246 ; RV32-NEXT: lui a0, 3
3247 ; RV32-NEXT: addi a0, a0, 819
3248 ; RV32-NEXT: vand.vx v10, v8, a0
3249 ; RV32-NEXT: vsrl.vi v8, v8, 2
3250 ; RV32-NEXT: vand.vx v8, v8, a0
3251 ; RV32-NEXT: vadd.vv v8, v10, v8
3252 ; RV32-NEXT: vsrl.vi v10, v8, 4
3253 ; RV32-NEXT: vadd.vv v8, v8, v10
3254 ; RV32-NEXT: lui a0, 1
3255 ; RV32-NEXT: addi a0, a0, -241
3256 ; RV32-NEXT: vand.vx v8, v8, a0
3257 ; RV32-NEXT: li a0, 257
3258 ; RV32-NEXT: vmul.vx v8, v8, a0
3259 ; RV32-NEXT: vsrl.vi v8, v8, 8
3262 ; RV64-LABEL: vp_cttz_zero_undef_v16i16_unmasked:
3264 ; RV64-NEXT: li a1, 1
3265 ; RV64-NEXT: vsetvli zero, a0, e16, m2, ta, ma
3266 ; RV64-NEXT: vsub.vx v10, v8, a1
3267 ; RV64-NEXT: vnot.v v8, v8
3268 ; RV64-NEXT: vand.vv v8, v8, v10
3269 ; RV64-NEXT: vsrl.vi v10, v8, 1
3270 ; RV64-NEXT: lui a0, 5
3271 ; RV64-NEXT: addiw a0, a0, 1365
3272 ; RV64-NEXT: vand.vx v10, v10, a0
3273 ; RV64-NEXT: vsub.vv v8, v8, v10
3274 ; RV64-NEXT: lui a0, 3
3275 ; RV64-NEXT: addiw a0, a0, 819
3276 ; RV64-NEXT: vand.vx v10, v8, a0
3277 ; RV64-NEXT: vsrl.vi v8, v8, 2
3278 ; RV64-NEXT: vand.vx v8, v8, a0
3279 ; RV64-NEXT: vadd.vv v8, v10, v8
3280 ; RV64-NEXT: vsrl.vi v10, v8, 4
3281 ; RV64-NEXT: vadd.vv v8, v8, v10
3282 ; RV64-NEXT: lui a0, 1
3283 ; RV64-NEXT: addiw a0, a0, -241
3284 ; RV64-NEXT: vand.vx v8, v8, a0
3285 ; RV64-NEXT: li a0, 257
3286 ; RV64-NEXT: vmul.vx v8, v8, a0
3287 ; RV64-NEXT: vsrl.vi v8, v8, 8
3289 %head = insertelement <16 x i1> poison, i1 true, i32 0
3290 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
3291 %v = call <16 x i16> @llvm.vp.cttz.v16i16(<16 x i16> %va, i1 true, <16 x i1> %m, i32 %evl)
3295 define <2 x i32> @vp_cttz_zero_undef_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
3296 ; RV32-LABEL: vp_cttz_zero_undef_v2i32:
3298 ; RV32-NEXT: li a1, 1
3299 ; RV32-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3300 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
3301 ; RV32-NEXT: vnot.v v8, v8, v0.t
3302 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3303 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
3304 ; RV32-NEXT: lui a0, 349525
3305 ; RV32-NEXT: addi a0, a0, 1365
3306 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
3307 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
3308 ; RV32-NEXT: lui a0, 209715
3309 ; RV32-NEXT: addi a0, a0, 819
3310 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
3311 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3312 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3313 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
3314 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
3315 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
3316 ; RV32-NEXT: lui a0, 61681
3317 ; RV32-NEXT: addi a0, a0, -241
3318 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3319 ; RV32-NEXT: lui a0, 4112
3320 ; RV32-NEXT: addi a0, a0, 257
3321 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
3322 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
3325 ; RV64-LABEL: vp_cttz_zero_undef_v2i32:
3327 ; RV64-NEXT: li a1, 1
3328 ; RV64-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3329 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
3330 ; RV64-NEXT: vnot.v v8, v8, v0.t
3331 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
3332 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
3333 ; RV64-NEXT: lui a0, 349525
3334 ; RV64-NEXT: addiw a0, a0, 1365
3335 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
3336 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
3337 ; RV64-NEXT: lui a0, 209715
3338 ; RV64-NEXT: addiw a0, a0, 819
3339 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
3340 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3341 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3342 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
3343 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
3344 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
3345 ; RV64-NEXT: lui a0, 61681
3346 ; RV64-NEXT: addiw a0, a0, -241
3347 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3348 ; RV64-NEXT: lui a0, 4112
3349 ; RV64-NEXT: addiw a0, a0, 257
3350 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3351 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
3353 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 true, <2 x i1> %m, i32 %evl)
3357 define <2 x i32> @vp_cttz_zero_undef_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
3358 ; RV32-LABEL: vp_cttz_zero_undef_v2i32_unmasked:
3360 ; RV32-NEXT: li a1, 1
3361 ; RV32-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3362 ; RV32-NEXT: vsub.vx v9, v8, a1
3363 ; RV32-NEXT: vnot.v v8, v8
3364 ; RV32-NEXT: vand.vv v8, v8, v9
3365 ; RV32-NEXT: vsrl.vi v9, v8, 1
3366 ; RV32-NEXT: lui a0, 349525
3367 ; RV32-NEXT: addi a0, a0, 1365
3368 ; RV32-NEXT: vand.vx v9, v9, a0
3369 ; RV32-NEXT: vsub.vv v8, v8, v9
3370 ; RV32-NEXT: lui a0, 209715
3371 ; RV32-NEXT: addi a0, a0, 819
3372 ; RV32-NEXT: vand.vx v9, v8, a0
3373 ; RV32-NEXT: vsrl.vi v8, v8, 2
3374 ; RV32-NEXT: vand.vx v8, v8, a0
3375 ; RV32-NEXT: vadd.vv v8, v9, v8
3376 ; RV32-NEXT: vsrl.vi v9, v8, 4
3377 ; RV32-NEXT: vadd.vv v8, v8, v9
3378 ; RV32-NEXT: lui a0, 61681
3379 ; RV32-NEXT: addi a0, a0, -241
3380 ; RV32-NEXT: vand.vx v8, v8, a0
3381 ; RV32-NEXT: lui a0, 4112
3382 ; RV32-NEXT: addi a0, a0, 257
3383 ; RV32-NEXT: vmul.vx v8, v8, a0
3384 ; RV32-NEXT: vsrl.vi v8, v8, 24
3387 ; RV64-LABEL: vp_cttz_zero_undef_v2i32_unmasked:
3389 ; RV64-NEXT: li a1, 1
3390 ; RV64-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
3391 ; RV64-NEXT: vsub.vx v9, v8, a1
3392 ; RV64-NEXT: vnot.v v8, v8
3393 ; RV64-NEXT: vand.vv v8, v8, v9
3394 ; RV64-NEXT: vsrl.vi v9, v8, 1
3395 ; RV64-NEXT: lui a0, 349525
3396 ; RV64-NEXT: addiw a0, a0, 1365
3397 ; RV64-NEXT: vand.vx v9, v9, a0
3398 ; RV64-NEXT: vsub.vv v8, v8, v9
3399 ; RV64-NEXT: lui a0, 209715
3400 ; RV64-NEXT: addiw a0, a0, 819
3401 ; RV64-NEXT: vand.vx v9, v8, a0
3402 ; RV64-NEXT: vsrl.vi v8, v8, 2
3403 ; RV64-NEXT: vand.vx v8, v8, a0
3404 ; RV64-NEXT: vadd.vv v8, v9, v8
3405 ; RV64-NEXT: vsrl.vi v9, v8, 4
3406 ; RV64-NEXT: vadd.vv v8, v8, v9
3407 ; RV64-NEXT: lui a0, 61681
3408 ; RV64-NEXT: addiw a0, a0, -241
3409 ; RV64-NEXT: vand.vx v8, v8, a0
3410 ; RV64-NEXT: lui a0, 4112
3411 ; RV64-NEXT: addiw a0, a0, 257
3412 ; RV64-NEXT: vmul.vx v8, v8, a0
3413 ; RV64-NEXT: vsrl.vi v8, v8, 24
3415 %head = insertelement <2 x i1> poison, i1 true, i32 0
3416 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
3417 %v = call <2 x i32> @llvm.vp.cttz.v2i32(<2 x i32> %va, i1 true, <2 x i1> %m, i32 %evl)
3421 define <4 x i32> @vp_cttz_zero_undef_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
3422 ; RV32-LABEL: vp_cttz_zero_undef_v4i32:
3424 ; RV32-NEXT: li a1, 1
3425 ; RV32-NEXT: vsetvli zero, a0, e32, m1, ta, ma
3426 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
3427 ; RV32-NEXT: vnot.v v8, v8, v0.t
3428 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3429 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
3430 ; RV32-NEXT: lui a0, 349525
3431 ; RV32-NEXT: addi a0, a0, 1365
3432 ; RV32-NEXT: vand.vx v9, v9, a0, v0.t
3433 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
3434 ; RV32-NEXT: lui a0, 209715
3435 ; RV32-NEXT: addi a0, a0, 819
3436 ; RV32-NEXT: vand.vx v9, v8, a0, v0.t
3437 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3438 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3439 ; RV32-NEXT: vadd.vv v8, v9, v8, v0.t
3440 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
3441 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
3442 ; RV32-NEXT: lui a0, 61681
3443 ; RV32-NEXT: addi a0, a0, -241
3444 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3445 ; RV32-NEXT: lui a0, 4112
3446 ; RV32-NEXT: addi a0, a0, 257
3447 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
3448 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
3451 ; RV64-LABEL: vp_cttz_zero_undef_v4i32:
3453 ; RV64-NEXT: li a1, 1
3454 ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma
3455 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
3456 ; RV64-NEXT: vnot.v v8, v8, v0.t
3457 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
3458 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
3459 ; RV64-NEXT: lui a0, 349525
3460 ; RV64-NEXT: addiw a0, a0, 1365
3461 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
3462 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
3463 ; RV64-NEXT: lui a0, 209715
3464 ; RV64-NEXT: addiw a0, a0, 819
3465 ; RV64-NEXT: vand.vx v9, v8, a0, v0.t
3466 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3467 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3468 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
3469 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
3470 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
3471 ; RV64-NEXT: lui a0, 61681
3472 ; RV64-NEXT: addiw a0, a0, -241
3473 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3474 ; RV64-NEXT: lui a0, 4112
3475 ; RV64-NEXT: addiw a0, a0, 257
3476 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3477 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
3479 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 true, <4 x i1> %m, i32 %evl)
3483 define <4 x i32> @vp_cttz_zero_undef_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
3484 ; RV32-LABEL: vp_cttz_zero_undef_v4i32_unmasked:
3486 ; RV32-NEXT: li a1, 1
3487 ; RV32-NEXT: vsetvli zero, a0, e32, m1, ta, ma
3488 ; RV32-NEXT: vsub.vx v9, v8, a1
3489 ; RV32-NEXT: vnot.v v8, v8
3490 ; RV32-NEXT: vand.vv v8, v8, v9
3491 ; RV32-NEXT: vsrl.vi v9, v8, 1
3492 ; RV32-NEXT: lui a0, 349525
3493 ; RV32-NEXT: addi a0, a0, 1365
3494 ; RV32-NEXT: vand.vx v9, v9, a0
3495 ; RV32-NEXT: vsub.vv v8, v8, v9
3496 ; RV32-NEXT: lui a0, 209715
3497 ; RV32-NEXT: addi a0, a0, 819
3498 ; RV32-NEXT: vand.vx v9, v8, a0
3499 ; RV32-NEXT: vsrl.vi v8, v8, 2
3500 ; RV32-NEXT: vand.vx v8, v8, a0
3501 ; RV32-NEXT: vadd.vv v8, v9, v8
3502 ; RV32-NEXT: vsrl.vi v9, v8, 4
3503 ; RV32-NEXT: vadd.vv v8, v8, v9
3504 ; RV32-NEXT: lui a0, 61681
3505 ; RV32-NEXT: addi a0, a0, -241
3506 ; RV32-NEXT: vand.vx v8, v8, a0
3507 ; RV32-NEXT: lui a0, 4112
3508 ; RV32-NEXT: addi a0, a0, 257
3509 ; RV32-NEXT: vmul.vx v8, v8, a0
3510 ; RV32-NEXT: vsrl.vi v8, v8, 24
3513 ; RV64-LABEL: vp_cttz_zero_undef_v4i32_unmasked:
3515 ; RV64-NEXT: li a1, 1
3516 ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma
3517 ; RV64-NEXT: vsub.vx v9, v8, a1
3518 ; RV64-NEXT: vnot.v v8, v8
3519 ; RV64-NEXT: vand.vv v8, v8, v9
3520 ; RV64-NEXT: vsrl.vi v9, v8, 1
3521 ; RV64-NEXT: lui a0, 349525
3522 ; RV64-NEXT: addiw a0, a0, 1365
3523 ; RV64-NEXT: vand.vx v9, v9, a0
3524 ; RV64-NEXT: vsub.vv v8, v8, v9
3525 ; RV64-NEXT: lui a0, 209715
3526 ; RV64-NEXT: addiw a0, a0, 819
3527 ; RV64-NEXT: vand.vx v9, v8, a0
3528 ; RV64-NEXT: vsrl.vi v8, v8, 2
3529 ; RV64-NEXT: vand.vx v8, v8, a0
3530 ; RV64-NEXT: vadd.vv v8, v9, v8
3531 ; RV64-NEXT: vsrl.vi v9, v8, 4
3532 ; RV64-NEXT: vadd.vv v8, v8, v9
3533 ; RV64-NEXT: lui a0, 61681
3534 ; RV64-NEXT: addiw a0, a0, -241
3535 ; RV64-NEXT: vand.vx v8, v8, a0
3536 ; RV64-NEXT: lui a0, 4112
3537 ; RV64-NEXT: addiw a0, a0, 257
3538 ; RV64-NEXT: vmul.vx v8, v8, a0
3539 ; RV64-NEXT: vsrl.vi v8, v8, 24
3541 %head = insertelement <4 x i1> poison, i1 true, i32 0
3542 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
3543 %v = call <4 x i32> @llvm.vp.cttz.v4i32(<4 x i32> %va, i1 true, <4 x i1> %m, i32 %evl)
3547 define <8 x i32> @vp_cttz_zero_undef_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
3548 ; RV32-LABEL: vp_cttz_zero_undef_v8i32:
3550 ; RV32-NEXT: li a1, 1
3551 ; RV32-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3552 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
3553 ; RV32-NEXT: vnot.v v8, v8, v0.t
3554 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3555 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
3556 ; RV32-NEXT: lui a0, 349525
3557 ; RV32-NEXT: addi a0, a0, 1365
3558 ; RV32-NEXT: vand.vx v10, v10, a0, v0.t
3559 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
3560 ; RV32-NEXT: lui a0, 209715
3561 ; RV32-NEXT: addi a0, a0, 819
3562 ; RV32-NEXT: vand.vx v10, v8, a0, v0.t
3563 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3564 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3565 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
3566 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
3567 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
3568 ; RV32-NEXT: lui a0, 61681
3569 ; RV32-NEXT: addi a0, a0, -241
3570 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3571 ; RV32-NEXT: lui a0, 4112
3572 ; RV32-NEXT: addi a0, a0, 257
3573 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
3574 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
3577 ; RV64-LABEL: vp_cttz_zero_undef_v8i32:
3579 ; RV64-NEXT: li a1, 1
3580 ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3581 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
3582 ; RV64-NEXT: vnot.v v8, v8, v0.t
3583 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
3584 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
3585 ; RV64-NEXT: lui a0, 349525
3586 ; RV64-NEXT: addiw a0, a0, 1365
3587 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
3588 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
3589 ; RV64-NEXT: lui a0, 209715
3590 ; RV64-NEXT: addiw a0, a0, 819
3591 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
3592 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3593 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3594 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
3595 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
3596 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
3597 ; RV64-NEXT: lui a0, 61681
3598 ; RV64-NEXT: addiw a0, a0, -241
3599 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3600 ; RV64-NEXT: lui a0, 4112
3601 ; RV64-NEXT: addiw a0, a0, 257
3602 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3603 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
3605 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 true, <8 x i1> %m, i32 %evl)
3609 define <8 x i32> @vp_cttz_zero_undef_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
3610 ; RV32-LABEL: vp_cttz_zero_undef_v8i32_unmasked:
3612 ; RV32-NEXT: li a1, 1
3613 ; RV32-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3614 ; RV32-NEXT: vsub.vx v10, v8, a1
3615 ; RV32-NEXT: vnot.v v8, v8
3616 ; RV32-NEXT: vand.vv v8, v8, v10
3617 ; RV32-NEXT: vsrl.vi v10, v8, 1
3618 ; RV32-NEXT: lui a0, 349525
3619 ; RV32-NEXT: addi a0, a0, 1365
3620 ; RV32-NEXT: vand.vx v10, v10, a0
3621 ; RV32-NEXT: vsub.vv v8, v8, v10
3622 ; RV32-NEXT: lui a0, 209715
3623 ; RV32-NEXT: addi a0, a0, 819
3624 ; RV32-NEXT: vand.vx v10, v8, a0
3625 ; RV32-NEXT: vsrl.vi v8, v8, 2
3626 ; RV32-NEXT: vand.vx v8, v8, a0
3627 ; RV32-NEXT: vadd.vv v8, v10, v8
3628 ; RV32-NEXT: vsrl.vi v10, v8, 4
3629 ; RV32-NEXT: vadd.vv v8, v8, v10
3630 ; RV32-NEXT: lui a0, 61681
3631 ; RV32-NEXT: addi a0, a0, -241
3632 ; RV32-NEXT: vand.vx v8, v8, a0
3633 ; RV32-NEXT: lui a0, 4112
3634 ; RV32-NEXT: addi a0, a0, 257
3635 ; RV32-NEXT: vmul.vx v8, v8, a0
3636 ; RV32-NEXT: vsrl.vi v8, v8, 24
3639 ; RV64-LABEL: vp_cttz_zero_undef_v8i32_unmasked:
3641 ; RV64-NEXT: li a1, 1
3642 ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3643 ; RV64-NEXT: vsub.vx v10, v8, a1
3644 ; RV64-NEXT: vnot.v v8, v8
3645 ; RV64-NEXT: vand.vv v8, v8, v10
3646 ; RV64-NEXT: vsrl.vi v10, v8, 1
3647 ; RV64-NEXT: lui a0, 349525
3648 ; RV64-NEXT: addiw a0, a0, 1365
3649 ; RV64-NEXT: vand.vx v10, v10, a0
3650 ; RV64-NEXT: vsub.vv v8, v8, v10
3651 ; RV64-NEXT: lui a0, 209715
3652 ; RV64-NEXT: addiw a0, a0, 819
3653 ; RV64-NEXT: vand.vx v10, v8, a0
3654 ; RV64-NEXT: vsrl.vi v8, v8, 2
3655 ; RV64-NEXT: vand.vx v8, v8, a0
3656 ; RV64-NEXT: vadd.vv v8, v10, v8
3657 ; RV64-NEXT: vsrl.vi v10, v8, 4
3658 ; RV64-NEXT: vadd.vv v8, v8, v10
3659 ; RV64-NEXT: lui a0, 61681
3660 ; RV64-NEXT: addiw a0, a0, -241
3661 ; RV64-NEXT: vand.vx v8, v8, a0
3662 ; RV64-NEXT: lui a0, 4112
3663 ; RV64-NEXT: addiw a0, a0, 257
3664 ; RV64-NEXT: vmul.vx v8, v8, a0
3665 ; RV64-NEXT: vsrl.vi v8, v8, 24
3667 %head = insertelement <8 x i1> poison, i1 true, i32 0
3668 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
3669 %v = call <8 x i32> @llvm.vp.cttz.v8i32(<8 x i32> %va, i1 true, <8 x i1> %m, i32 %evl)
3673 define <16 x i32> @vp_cttz_zero_undef_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
3674 ; RV32-LABEL: vp_cttz_zero_undef_v16i32:
3676 ; RV32-NEXT: li a1, 1
3677 ; RV32-NEXT: vsetvli zero, a0, e32, m4, ta, ma
3678 ; RV32-NEXT: vsub.vx v12, v8, a1, v0.t
3679 ; RV32-NEXT: vnot.v v8, v8, v0.t
3680 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
3681 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
3682 ; RV32-NEXT: lui a0, 349525
3683 ; RV32-NEXT: addi a0, a0, 1365
3684 ; RV32-NEXT: vand.vx v12, v12, a0, v0.t
3685 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
3686 ; RV32-NEXT: lui a0, 209715
3687 ; RV32-NEXT: addi a0, a0, 819
3688 ; RV32-NEXT: vand.vx v12, v8, a0, v0.t
3689 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3690 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3691 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
3692 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
3693 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
3694 ; RV32-NEXT: lui a0, 61681
3695 ; RV32-NEXT: addi a0, a0, -241
3696 ; RV32-NEXT: vand.vx v8, v8, a0, v0.t
3697 ; RV32-NEXT: lui a0, 4112
3698 ; RV32-NEXT: addi a0, a0, 257
3699 ; RV32-NEXT: vmul.vx v8, v8, a0, v0.t
3700 ; RV32-NEXT: vsrl.vi v8, v8, 24, v0.t
3703 ; RV64-LABEL: vp_cttz_zero_undef_v16i32:
3705 ; RV64-NEXT: li a1, 1
3706 ; RV64-NEXT: vsetvli zero, a0, e32, m4, ta, ma
3707 ; RV64-NEXT: vsub.vx v12, v8, a1, v0.t
3708 ; RV64-NEXT: vnot.v v8, v8, v0.t
3709 ; RV64-NEXT: vand.vv v8, v8, v12, v0.t
3710 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
3711 ; RV64-NEXT: lui a0, 349525
3712 ; RV64-NEXT: addiw a0, a0, 1365
3713 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
3714 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
3715 ; RV64-NEXT: lui a0, 209715
3716 ; RV64-NEXT: addiw a0, a0, 819
3717 ; RV64-NEXT: vand.vx v12, v8, a0, v0.t
3718 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3719 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3720 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
3721 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
3722 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
3723 ; RV64-NEXT: lui a0, 61681
3724 ; RV64-NEXT: addiw a0, a0, -241
3725 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3726 ; RV64-NEXT: lui a0, 4112
3727 ; RV64-NEXT: addiw a0, a0, 257
3728 ; RV64-NEXT: vmul.vx v8, v8, a0, v0.t
3729 ; RV64-NEXT: vsrl.vi v8, v8, 24, v0.t
3731 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 true, <16 x i1> %m, i32 %evl)
3735 define <16 x i32> @vp_cttz_zero_undef_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
3736 ; RV32-LABEL: vp_cttz_zero_undef_v16i32_unmasked:
3738 ; RV32-NEXT: li a1, 1
3739 ; RV32-NEXT: vsetvli zero, a0, e32, m4, ta, ma
3740 ; RV32-NEXT: vsub.vx v12, v8, a1
3741 ; RV32-NEXT: vnot.v v8, v8
3742 ; RV32-NEXT: vand.vv v8, v8, v12
3743 ; RV32-NEXT: vsrl.vi v12, v8, 1
3744 ; RV32-NEXT: lui a0, 349525
3745 ; RV32-NEXT: addi a0, a0, 1365
3746 ; RV32-NEXT: vand.vx v12, v12, a0
3747 ; RV32-NEXT: vsub.vv v8, v8, v12
3748 ; RV32-NEXT: lui a0, 209715
3749 ; RV32-NEXT: addi a0, a0, 819
3750 ; RV32-NEXT: vand.vx v12, v8, a0
3751 ; RV32-NEXT: vsrl.vi v8, v8, 2
3752 ; RV32-NEXT: vand.vx v8, v8, a0
3753 ; RV32-NEXT: vadd.vv v8, v12, v8
3754 ; RV32-NEXT: vsrl.vi v12, v8, 4
3755 ; RV32-NEXT: vadd.vv v8, v8, v12
3756 ; RV32-NEXT: lui a0, 61681
3757 ; RV32-NEXT: addi a0, a0, -241
3758 ; RV32-NEXT: vand.vx v8, v8, a0
3759 ; RV32-NEXT: lui a0, 4112
3760 ; RV32-NEXT: addi a0, a0, 257
3761 ; RV32-NEXT: vmul.vx v8, v8, a0
3762 ; RV32-NEXT: vsrl.vi v8, v8, 24
3765 ; RV64-LABEL: vp_cttz_zero_undef_v16i32_unmasked:
3767 ; RV64-NEXT: li a1, 1
3768 ; RV64-NEXT: vsetvli zero, a0, e32, m4, ta, ma
3769 ; RV64-NEXT: vsub.vx v12, v8, a1
3770 ; RV64-NEXT: vnot.v v8, v8
3771 ; RV64-NEXT: vand.vv v8, v8, v12
3772 ; RV64-NEXT: vsrl.vi v12, v8, 1
3773 ; RV64-NEXT: lui a0, 349525
3774 ; RV64-NEXT: addiw a0, a0, 1365
3775 ; RV64-NEXT: vand.vx v12, v12, a0
3776 ; RV64-NEXT: vsub.vv v8, v8, v12
3777 ; RV64-NEXT: lui a0, 209715
3778 ; RV64-NEXT: addiw a0, a0, 819
3779 ; RV64-NEXT: vand.vx v12, v8, a0
3780 ; RV64-NEXT: vsrl.vi v8, v8, 2
3781 ; RV64-NEXT: vand.vx v8, v8, a0
3782 ; RV64-NEXT: vadd.vv v8, v12, v8
3783 ; RV64-NEXT: vsrl.vi v12, v8, 4
3784 ; RV64-NEXT: vadd.vv v8, v8, v12
3785 ; RV64-NEXT: lui a0, 61681
3786 ; RV64-NEXT: addiw a0, a0, -241
3787 ; RV64-NEXT: vand.vx v8, v8, a0
3788 ; RV64-NEXT: lui a0, 4112
3789 ; RV64-NEXT: addiw a0, a0, 257
3790 ; RV64-NEXT: vmul.vx v8, v8, a0
3791 ; RV64-NEXT: vsrl.vi v8, v8, 24
3793 %head = insertelement <16 x i1> poison, i1 true, i32 0
3794 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
3795 %v = call <16 x i32> @llvm.vp.cttz.v16i32(<16 x i32> %va, i1 true, <16 x i1> %m, i32 %evl)
3799 define <2 x i64> @vp_cttz_zero_undef_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
3800 ; RV32-LABEL: vp_cttz_zero_undef_v2i64:
3802 ; RV32-NEXT: li a1, 1
3803 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3804 ; RV32-NEXT: vsub.vx v9, v8, a1, v0.t
3805 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3806 ; RV32-NEXT: vmv.v.i v10, -1
3807 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3808 ; RV32-NEXT: vxor.vv v8, v8, v10, v0.t
3809 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3810 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
3811 ; RV32-NEXT: lui a1, 349525
3812 ; RV32-NEXT: addi a1, a1, 1365
3813 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3814 ; RV32-NEXT: vmv.v.x v10, a1
3815 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3816 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
3817 ; RV32-NEXT: vsub.vv v8, v8, v9, v0.t
3818 ; RV32-NEXT: lui a1, 209715
3819 ; RV32-NEXT: addi a1, a1, 819
3820 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3821 ; RV32-NEXT: vmv.v.x v9, a1
3822 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3823 ; RV32-NEXT: vand.vv v10, v8, v9, v0.t
3824 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3825 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3826 ; RV32-NEXT: vadd.vv v8, v10, v8, v0.t
3827 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
3828 ; RV32-NEXT: vadd.vv v8, v8, v9, v0.t
3829 ; RV32-NEXT: lui a1, 61681
3830 ; RV32-NEXT: addi a1, a1, -241
3831 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3832 ; RV32-NEXT: vmv.v.x v9, a1
3833 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3834 ; RV32-NEXT: vand.vv v8, v8, v9, v0.t
3835 ; RV32-NEXT: lui a1, 4112
3836 ; RV32-NEXT: addi a1, a1, 257
3837 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3838 ; RV32-NEXT: vmv.v.x v9, a1
3839 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3840 ; RV32-NEXT: vmul.vv v8, v8, v9, v0.t
3841 ; RV32-NEXT: li a0, 56
3842 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
3845 ; RV64-LABEL: vp_cttz_zero_undef_v2i64:
3847 ; RV64-NEXT: li a1, 1
3848 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3849 ; RV64-NEXT: vsub.vx v9, v8, a1, v0.t
3850 ; RV64-NEXT: vnot.v v8, v8, v0.t
3851 ; RV64-NEXT: vand.vv v8, v8, v9, v0.t
3852 ; RV64-NEXT: lui a0, %hi(.LCPI60_0)
3853 ; RV64-NEXT: ld a0, %lo(.LCPI60_0)(a0)
3854 ; RV64-NEXT: lui a1, %hi(.LCPI60_1)
3855 ; RV64-NEXT: ld a1, %lo(.LCPI60_1)(a1)
3856 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
3857 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
3858 ; RV64-NEXT: vsub.vv v8, v8, v9, v0.t
3859 ; RV64-NEXT: vand.vx v9, v8, a1, v0.t
3860 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
3861 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
3862 ; RV64-NEXT: vadd.vv v8, v9, v8, v0.t
3863 ; RV64-NEXT: lui a0, %hi(.LCPI60_2)
3864 ; RV64-NEXT: ld a0, %lo(.LCPI60_2)(a0)
3865 ; RV64-NEXT: lui a1, %hi(.LCPI60_3)
3866 ; RV64-NEXT: ld a1, %lo(.LCPI60_3)(a1)
3867 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
3868 ; RV64-NEXT: vadd.vv v8, v8, v9, v0.t
3869 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
3870 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
3871 ; RV64-NEXT: li a0, 56
3872 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
3874 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 true, <2 x i1> %m, i32 %evl)
3878 define <2 x i64> @vp_cttz_zero_undef_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
3879 ; RV32-LABEL: vp_cttz_zero_undef_v2i64_unmasked:
3881 ; RV32-NEXT: li a1, 1
3882 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3883 ; RV32-NEXT: vsub.vx v9, v8, a1
3884 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3885 ; RV32-NEXT: vmv.v.i v10, -1
3886 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3887 ; RV32-NEXT: vxor.vv v8, v8, v10
3888 ; RV32-NEXT: vand.vv v8, v8, v9
3889 ; RV32-NEXT: vsrl.vi v9, v8, 1
3890 ; RV32-NEXT: lui a1, 349525
3891 ; RV32-NEXT: addi a1, a1, 1365
3892 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3893 ; RV32-NEXT: vmv.v.x v10, a1
3894 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3895 ; RV32-NEXT: vand.vv v9, v9, v10
3896 ; RV32-NEXT: vsub.vv v8, v8, v9
3897 ; RV32-NEXT: lui a1, 209715
3898 ; RV32-NEXT: addi a1, a1, 819
3899 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3900 ; RV32-NEXT: vmv.v.x v9, a1
3901 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3902 ; RV32-NEXT: vand.vv v10, v8, v9
3903 ; RV32-NEXT: vsrl.vi v8, v8, 2
3904 ; RV32-NEXT: vand.vv v8, v8, v9
3905 ; RV32-NEXT: vadd.vv v8, v10, v8
3906 ; RV32-NEXT: vsrl.vi v9, v8, 4
3907 ; RV32-NEXT: vadd.vv v8, v8, v9
3908 ; RV32-NEXT: lui a1, 61681
3909 ; RV32-NEXT: addi a1, a1, -241
3910 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3911 ; RV32-NEXT: vmv.v.x v9, a1
3912 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3913 ; RV32-NEXT: vand.vv v8, v8, v9
3914 ; RV32-NEXT: lui a1, 4112
3915 ; RV32-NEXT: addi a1, a1, 257
3916 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
3917 ; RV32-NEXT: vmv.v.x v9, a1
3918 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3919 ; RV32-NEXT: vmul.vv v8, v8, v9
3920 ; RV32-NEXT: li a0, 56
3921 ; RV32-NEXT: vsrl.vx v8, v8, a0
3924 ; RV64-LABEL: vp_cttz_zero_undef_v2i64_unmasked:
3926 ; RV64-NEXT: li a1, 1
3927 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
3928 ; RV64-NEXT: vsub.vx v9, v8, a1
3929 ; RV64-NEXT: vnot.v v8, v8
3930 ; RV64-NEXT: vand.vv v8, v8, v9
3931 ; RV64-NEXT: lui a0, %hi(.LCPI61_0)
3932 ; RV64-NEXT: ld a0, %lo(.LCPI61_0)(a0)
3933 ; RV64-NEXT: lui a1, %hi(.LCPI61_1)
3934 ; RV64-NEXT: ld a1, %lo(.LCPI61_1)(a1)
3935 ; RV64-NEXT: vsrl.vi v9, v8, 1
3936 ; RV64-NEXT: vand.vx v9, v9, a0
3937 ; RV64-NEXT: vsub.vv v8, v8, v9
3938 ; RV64-NEXT: vand.vx v9, v8, a1
3939 ; RV64-NEXT: vsrl.vi v8, v8, 2
3940 ; RV64-NEXT: vand.vx v8, v8, a1
3941 ; RV64-NEXT: vadd.vv v8, v9, v8
3942 ; RV64-NEXT: lui a0, %hi(.LCPI61_2)
3943 ; RV64-NEXT: ld a0, %lo(.LCPI61_2)(a0)
3944 ; RV64-NEXT: lui a1, %hi(.LCPI61_3)
3945 ; RV64-NEXT: ld a1, %lo(.LCPI61_3)(a1)
3946 ; RV64-NEXT: vsrl.vi v9, v8, 4
3947 ; RV64-NEXT: vadd.vv v8, v8, v9
3948 ; RV64-NEXT: vand.vx v8, v8, a0
3949 ; RV64-NEXT: vmul.vx v8, v8, a1
3950 ; RV64-NEXT: li a0, 56
3951 ; RV64-NEXT: vsrl.vx v8, v8, a0
3953 %head = insertelement <2 x i1> poison, i1 true, i32 0
3954 %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
3955 %v = call <2 x i64> @llvm.vp.cttz.v2i64(<2 x i64> %va, i1 true, <2 x i1> %m, i32 %evl)
3959 define <4 x i64> @vp_cttz_zero_undef_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
3960 ; RV32-LABEL: vp_cttz_zero_undef_v4i64:
3962 ; RV32-NEXT: li a1, 1
3963 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3964 ; RV32-NEXT: vsub.vx v10, v8, a1, v0.t
3965 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3966 ; RV32-NEXT: vmv.v.i v12, -1
3967 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3968 ; RV32-NEXT: vxor.vv v8, v8, v12, v0.t
3969 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3970 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
3971 ; RV32-NEXT: lui a1, 349525
3972 ; RV32-NEXT: addi a1, a1, 1365
3973 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3974 ; RV32-NEXT: vmv.v.x v12, a1
3975 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3976 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
3977 ; RV32-NEXT: vsub.vv v8, v8, v10, v0.t
3978 ; RV32-NEXT: lui a1, 209715
3979 ; RV32-NEXT: addi a1, a1, 819
3980 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3981 ; RV32-NEXT: vmv.v.x v10, a1
3982 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3983 ; RV32-NEXT: vand.vv v12, v8, v10, v0.t
3984 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
3985 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3986 ; RV32-NEXT: vadd.vv v8, v12, v8, v0.t
3987 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
3988 ; RV32-NEXT: vadd.vv v8, v8, v10, v0.t
3989 ; RV32-NEXT: lui a1, 61681
3990 ; RV32-NEXT: addi a1, a1, -241
3991 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3992 ; RV32-NEXT: vmv.v.x v10, a1
3993 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
3994 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
3995 ; RV32-NEXT: lui a1, 4112
3996 ; RV32-NEXT: addi a1, a1, 257
3997 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
3998 ; RV32-NEXT: vmv.v.x v10, a1
3999 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4000 ; RV32-NEXT: vmul.vv v8, v8, v10, v0.t
4001 ; RV32-NEXT: li a0, 56
4002 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
4005 ; RV64-LABEL: vp_cttz_zero_undef_v4i64:
4007 ; RV64-NEXT: li a1, 1
4008 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4009 ; RV64-NEXT: vsub.vx v10, v8, a1, v0.t
4010 ; RV64-NEXT: vnot.v v8, v8, v0.t
4011 ; RV64-NEXT: vand.vv v8, v8, v10, v0.t
4012 ; RV64-NEXT: lui a0, %hi(.LCPI62_0)
4013 ; RV64-NEXT: ld a0, %lo(.LCPI62_0)(a0)
4014 ; RV64-NEXT: lui a1, %hi(.LCPI62_1)
4015 ; RV64-NEXT: ld a1, %lo(.LCPI62_1)(a1)
4016 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
4017 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
4018 ; RV64-NEXT: vsub.vv v8, v8, v10, v0.t
4019 ; RV64-NEXT: vand.vx v10, v8, a1, v0.t
4020 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4021 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
4022 ; RV64-NEXT: vadd.vv v8, v10, v8, v0.t
4023 ; RV64-NEXT: lui a0, %hi(.LCPI62_2)
4024 ; RV64-NEXT: ld a0, %lo(.LCPI62_2)(a0)
4025 ; RV64-NEXT: lui a1, %hi(.LCPI62_3)
4026 ; RV64-NEXT: ld a1, %lo(.LCPI62_3)(a1)
4027 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
4028 ; RV64-NEXT: vadd.vv v8, v8, v10, v0.t
4029 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4030 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
4031 ; RV64-NEXT: li a0, 56
4032 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
4034 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 true, <4 x i1> %m, i32 %evl)
4038 define <4 x i64> @vp_cttz_zero_undef_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
4039 ; RV32-LABEL: vp_cttz_zero_undef_v4i64_unmasked:
4041 ; RV32-NEXT: li a1, 1
4042 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4043 ; RV32-NEXT: vsub.vx v10, v8, a1
4044 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
4045 ; RV32-NEXT: vmv.v.i v12, -1
4046 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4047 ; RV32-NEXT: vxor.vv v8, v8, v12
4048 ; RV32-NEXT: vand.vv v8, v8, v10
4049 ; RV32-NEXT: vsrl.vi v10, v8, 1
4050 ; RV32-NEXT: lui a1, 349525
4051 ; RV32-NEXT: addi a1, a1, 1365
4052 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
4053 ; RV32-NEXT: vmv.v.x v12, a1
4054 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4055 ; RV32-NEXT: vand.vv v10, v10, v12
4056 ; RV32-NEXT: vsub.vv v8, v8, v10
4057 ; RV32-NEXT: lui a1, 209715
4058 ; RV32-NEXT: addi a1, a1, 819
4059 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
4060 ; RV32-NEXT: vmv.v.x v10, a1
4061 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4062 ; RV32-NEXT: vand.vv v12, v8, v10
4063 ; RV32-NEXT: vsrl.vi v8, v8, 2
4064 ; RV32-NEXT: vand.vv v8, v8, v10
4065 ; RV32-NEXT: vadd.vv v8, v12, v8
4066 ; RV32-NEXT: vsrl.vi v10, v8, 4
4067 ; RV32-NEXT: vadd.vv v8, v8, v10
4068 ; RV32-NEXT: lui a1, 61681
4069 ; RV32-NEXT: addi a1, a1, -241
4070 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
4071 ; RV32-NEXT: vmv.v.x v10, a1
4072 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4073 ; RV32-NEXT: vand.vv v8, v8, v10
4074 ; RV32-NEXT: lui a1, 4112
4075 ; RV32-NEXT: addi a1, a1, 257
4076 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
4077 ; RV32-NEXT: vmv.v.x v10, a1
4078 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4079 ; RV32-NEXT: vmul.vv v8, v8, v10
4080 ; RV32-NEXT: li a0, 56
4081 ; RV32-NEXT: vsrl.vx v8, v8, a0
4084 ; RV64-LABEL: vp_cttz_zero_undef_v4i64_unmasked:
4086 ; RV64-NEXT: li a1, 1
4087 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
4088 ; RV64-NEXT: vsub.vx v10, v8, a1
4089 ; RV64-NEXT: vnot.v v8, v8
4090 ; RV64-NEXT: vand.vv v8, v8, v10
4091 ; RV64-NEXT: lui a0, %hi(.LCPI63_0)
4092 ; RV64-NEXT: ld a0, %lo(.LCPI63_0)(a0)
4093 ; RV64-NEXT: lui a1, %hi(.LCPI63_1)
4094 ; RV64-NEXT: ld a1, %lo(.LCPI63_1)(a1)
4095 ; RV64-NEXT: vsrl.vi v10, v8, 1
4096 ; RV64-NEXT: vand.vx v10, v10, a0
4097 ; RV64-NEXT: vsub.vv v8, v8, v10
4098 ; RV64-NEXT: vand.vx v10, v8, a1
4099 ; RV64-NEXT: vsrl.vi v8, v8, 2
4100 ; RV64-NEXT: vand.vx v8, v8, a1
4101 ; RV64-NEXT: vadd.vv v8, v10, v8
4102 ; RV64-NEXT: lui a0, %hi(.LCPI63_2)
4103 ; RV64-NEXT: ld a0, %lo(.LCPI63_2)(a0)
4104 ; RV64-NEXT: lui a1, %hi(.LCPI63_3)
4105 ; RV64-NEXT: ld a1, %lo(.LCPI63_3)(a1)
4106 ; RV64-NEXT: vsrl.vi v10, v8, 4
4107 ; RV64-NEXT: vadd.vv v8, v8, v10
4108 ; RV64-NEXT: vand.vx v8, v8, a0
4109 ; RV64-NEXT: vmul.vx v8, v8, a1
4110 ; RV64-NEXT: li a0, 56
4111 ; RV64-NEXT: vsrl.vx v8, v8, a0
4113 %head = insertelement <4 x i1> poison, i1 true, i32 0
4114 %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
4115 %v = call <4 x i64> @llvm.vp.cttz.v4i64(<4 x i64> %va, i1 true, <4 x i1> %m, i32 %evl)
4119 define <8 x i64> @vp_cttz_zero_undef_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
4120 ; RV32-LABEL: vp_cttz_zero_undef_v8i64:
4122 ; RV32-NEXT: li a1, 1
4123 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4124 ; RV32-NEXT: vsub.vx v12, v8, a1, v0.t
4125 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4126 ; RV32-NEXT: vmv.v.i v16, -1
4127 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4128 ; RV32-NEXT: vxor.vv v8, v8, v16, v0.t
4129 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
4130 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
4131 ; RV32-NEXT: lui a1, 349525
4132 ; RV32-NEXT: addi a1, a1, 1365
4133 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4134 ; RV32-NEXT: vmv.v.x v16, a1
4135 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4136 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
4137 ; RV32-NEXT: vsub.vv v8, v8, v12, v0.t
4138 ; RV32-NEXT: lui a1, 209715
4139 ; RV32-NEXT: addi a1, a1, 819
4140 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4141 ; RV32-NEXT: vmv.v.x v12, a1
4142 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4143 ; RV32-NEXT: vand.vv v16, v8, v12, v0.t
4144 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4145 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
4146 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
4147 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
4148 ; RV32-NEXT: vadd.vv v8, v8, v12, v0.t
4149 ; RV32-NEXT: lui a1, 61681
4150 ; RV32-NEXT: addi a1, a1, -241
4151 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4152 ; RV32-NEXT: vmv.v.x v12, a1
4153 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4154 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
4155 ; RV32-NEXT: lui a1, 4112
4156 ; RV32-NEXT: addi a1, a1, 257
4157 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4158 ; RV32-NEXT: vmv.v.x v12, a1
4159 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4160 ; RV32-NEXT: vmul.vv v8, v8, v12, v0.t
4161 ; RV32-NEXT: li a0, 56
4162 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
4165 ; RV64-LABEL: vp_cttz_zero_undef_v8i64:
4167 ; RV64-NEXT: li a1, 1
4168 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4169 ; RV64-NEXT: vsub.vx v12, v8, a1, v0.t
4170 ; RV64-NEXT: vnot.v v8, v8, v0.t
4171 ; RV64-NEXT: vand.vv v8, v8, v12, v0.t
4172 ; RV64-NEXT: lui a0, %hi(.LCPI64_0)
4173 ; RV64-NEXT: ld a0, %lo(.LCPI64_0)(a0)
4174 ; RV64-NEXT: lui a1, %hi(.LCPI64_1)
4175 ; RV64-NEXT: ld a1, %lo(.LCPI64_1)(a1)
4176 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
4177 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
4178 ; RV64-NEXT: vsub.vv v8, v8, v12, v0.t
4179 ; RV64-NEXT: vand.vx v12, v8, a1, v0.t
4180 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4181 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
4182 ; RV64-NEXT: vadd.vv v8, v12, v8, v0.t
4183 ; RV64-NEXT: lui a0, %hi(.LCPI64_2)
4184 ; RV64-NEXT: ld a0, %lo(.LCPI64_2)(a0)
4185 ; RV64-NEXT: lui a1, %hi(.LCPI64_3)
4186 ; RV64-NEXT: ld a1, %lo(.LCPI64_3)(a1)
4187 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
4188 ; RV64-NEXT: vadd.vv v8, v8, v12, v0.t
4189 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4190 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
4191 ; RV64-NEXT: li a0, 56
4192 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
4194 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 true, <8 x i1> %m, i32 %evl)
4198 define <8 x i64> @vp_cttz_zero_undef_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
4199 ; RV32-LABEL: vp_cttz_zero_undef_v8i64_unmasked:
4201 ; RV32-NEXT: li a1, 1
4202 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4203 ; RV32-NEXT: vsub.vx v12, v8, a1
4204 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4205 ; RV32-NEXT: vmv.v.i v16, -1
4206 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4207 ; RV32-NEXT: vxor.vv v8, v8, v16
4208 ; RV32-NEXT: vand.vv v8, v8, v12
4209 ; RV32-NEXT: vsrl.vi v12, v8, 1
4210 ; RV32-NEXT: lui a1, 349525
4211 ; RV32-NEXT: addi a1, a1, 1365
4212 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4213 ; RV32-NEXT: vmv.v.x v16, a1
4214 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4215 ; RV32-NEXT: vand.vv v12, v12, v16
4216 ; RV32-NEXT: vsub.vv v8, v8, v12
4217 ; RV32-NEXT: lui a1, 209715
4218 ; RV32-NEXT: addi a1, a1, 819
4219 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4220 ; RV32-NEXT: vmv.v.x v12, a1
4221 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4222 ; RV32-NEXT: vand.vv v16, v8, v12
4223 ; RV32-NEXT: vsrl.vi v8, v8, 2
4224 ; RV32-NEXT: vand.vv v8, v8, v12
4225 ; RV32-NEXT: vadd.vv v8, v16, v8
4226 ; RV32-NEXT: vsrl.vi v12, v8, 4
4227 ; RV32-NEXT: vadd.vv v8, v8, v12
4228 ; RV32-NEXT: lui a1, 61681
4229 ; RV32-NEXT: addi a1, a1, -241
4230 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4231 ; RV32-NEXT: vmv.v.x v12, a1
4232 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4233 ; RV32-NEXT: vand.vv v8, v8, v12
4234 ; RV32-NEXT: lui a1, 4112
4235 ; RV32-NEXT: addi a1, a1, 257
4236 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
4237 ; RV32-NEXT: vmv.v.x v12, a1
4238 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4239 ; RV32-NEXT: vmul.vv v8, v8, v12
4240 ; RV32-NEXT: li a0, 56
4241 ; RV32-NEXT: vsrl.vx v8, v8, a0
4244 ; RV64-LABEL: vp_cttz_zero_undef_v8i64_unmasked:
4246 ; RV64-NEXT: li a1, 1
4247 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
4248 ; RV64-NEXT: vsub.vx v12, v8, a1
4249 ; RV64-NEXT: vnot.v v8, v8
4250 ; RV64-NEXT: vand.vv v8, v8, v12
4251 ; RV64-NEXT: lui a0, %hi(.LCPI65_0)
4252 ; RV64-NEXT: ld a0, %lo(.LCPI65_0)(a0)
4253 ; RV64-NEXT: lui a1, %hi(.LCPI65_1)
4254 ; RV64-NEXT: ld a1, %lo(.LCPI65_1)(a1)
4255 ; RV64-NEXT: vsrl.vi v12, v8, 1
4256 ; RV64-NEXT: vand.vx v12, v12, a0
4257 ; RV64-NEXT: vsub.vv v8, v8, v12
4258 ; RV64-NEXT: vand.vx v12, v8, a1
4259 ; RV64-NEXT: vsrl.vi v8, v8, 2
4260 ; RV64-NEXT: vand.vx v8, v8, a1
4261 ; RV64-NEXT: vadd.vv v8, v12, v8
4262 ; RV64-NEXT: lui a0, %hi(.LCPI65_2)
4263 ; RV64-NEXT: ld a0, %lo(.LCPI65_2)(a0)
4264 ; RV64-NEXT: lui a1, %hi(.LCPI65_3)
4265 ; RV64-NEXT: ld a1, %lo(.LCPI65_3)(a1)
4266 ; RV64-NEXT: vsrl.vi v12, v8, 4
4267 ; RV64-NEXT: vadd.vv v8, v8, v12
4268 ; RV64-NEXT: vand.vx v8, v8, a0
4269 ; RV64-NEXT: vmul.vx v8, v8, a1
4270 ; RV64-NEXT: li a0, 56
4271 ; RV64-NEXT: vsrl.vx v8, v8, a0
4273 %head = insertelement <8 x i1> poison, i1 true, i32 0
4274 %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
4275 %v = call <8 x i64> @llvm.vp.cttz.v8i64(<8 x i64> %va, i1 true, <8 x i1> %m, i32 %evl)
4279 define <15 x i64> @vp_cttz_zero_undef_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
4280 ; RV32-LABEL: vp_cttz_zero_undef_v15i64:
4282 ; RV32-NEXT: li a1, 1
4283 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4284 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
4285 ; RV32-NEXT: li a1, 32
4286 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4287 ; RV32-NEXT: vmv.v.i v24, -1
4288 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4289 ; RV32-NEXT: vxor.vv v8, v8, v24, v0.t
4290 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4291 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
4292 ; RV32-NEXT: lui a2, 349525
4293 ; RV32-NEXT: addi a2, a2, 1365
4294 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4295 ; RV32-NEXT: vmv.v.x v24, a2
4296 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4297 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
4298 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
4299 ; RV32-NEXT: lui a2, 209715
4300 ; RV32-NEXT: addi a2, a2, 819
4301 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4302 ; RV32-NEXT: vmv.v.x v16, a2
4303 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4304 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
4305 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4306 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4307 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
4308 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4309 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4310 ; RV32-NEXT: lui a2, 61681
4311 ; RV32-NEXT: addi a2, a2, -241
4312 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4313 ; RV32-NEXT: vmv.v.x v16, a2
4314 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4315 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4316 ; RV32-NEXT: lui a2, 4112
4317 ; RV32-NEXT: addi a2, a2, 257
4318 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4319 ; RV32-NEXT: vmv.v.x v16, a2
4320 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4321 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
4322 ; RV32-NEXT: li a0, 56
4323 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
4326 ; RV64-LABEL: vp_cttz_zero_undef_v15i64:
4328 ; RV64-NEXT: li a1, 1
4329 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4330 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
4331 ; RV64-NEXT: vnot.v v8, v8, v0.t
4332 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
4333 ; RV64-NEXT: lui a0, %hi(.LCPI66_0)
4334 ; RV64-NEXT: ld a0, %lo(.LCPI66_0)(a0)
4335 ; RV64-NEXT: lui a1, %hi(.LCPI66_1)
4336 ; RV64-NEXT: ld a1, %lo(.LCPI66_1)(a1)
4337 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4338 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
4339 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4340 ; RV64-NEXT: vand.vx v16, v8, a1, v0.t
4341 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4342 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
4343 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4344 ; RV64-NEXT: lui a0, %hi(.LCPI66_2)
4345 ; RV64-NEXT: ld a0, %lo(.LCPI66_2)(a0)
4346 ; RV64-NEXT: lui a1, %hi(.LCPI66_3)
4347 ; RV64-NEXT: ld a1, %lo(.LCPI66_3)(a1)
4348 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4349 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4350 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4351 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
4352 ; RV64-NEXT: li a0, 56
4353 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
4355 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 true, <15 x i1> %m, i32 %evl)
4359 define <15 x i64> @vp_cttz_zero_undef_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
4360 ; RV32-LABEL: vp_cttz_zero_undef_v15i64_unmasked:
4362 ; RV32-NEXT: li a1, 1
4363 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4364 ; RV32-NEXT: vsub.vx v16, v8, a1
4365 ; RV32-NEXT: li a1, 32
4366 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4367 ; RV32-NEXT: vmv.v.i v24, -1
4368 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4369 ; RV32-NEXT: vxor.vv v8, v8, v24
4370 ; RV32-NEXT: vand.vv v8, v8, v16
4371 ; RV32-NEXT: vsrl.vi v16, v8, 1
4372 ; RV32-NEXT: lui a2, 349525
4373 ; RV32-NEXT: addi a2, a2, 1365
4374 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4375 ; RV32-NEXT: vmv.v.x v24, a2
4376 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4377 ; RV32-NEXT: vand.vv v16, v16, v24
4378 ; RV32-NEXT: vsub.vv v8, v8, v16
4379 ; RV32-NEXT: lui a2, 209715
4380 ; RV32-NEXT: addi a2, a2, 819
4381 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4382 ; RV32-NEXT: vmv.v.x v16, a2
4383 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4384 ; RV32-NEXT: vand.vv v24, v8, v16
4385 ; RV32-NEXT: vsrl.vi v8, v8, 2
4386 ; RV32-NEXT: vand.vv v8, v8, v16
4387 ; RV32-NEXT: vadd.vv v8, v24, v8
4388 ; RV32-NEXT: vsrl.vi v16, v8, 4
4389 ; RV32-NEXT: vadd.vv v8, v8, v16
4390 ; RV32-NEXT: lui a2, 61681
4391 ; RV32-NEXT: addi a2, a2, -241
4392 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4393 ; RV32-NEXT: vmv.v.x v16, a2
4394 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4395 ; RV32-NEXT: vand.vv v8, v8, v16
4396 ; RV32-NEXT: lui a2, 4112
4397 ; RV32-NEXT: addi a2, a2, 257
4398 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4399 ; RV32-NEXT: vmv.v.x v16, a2
4400 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4401 ; RV32-NEXT: vmul.vv v8, v8, v16
4402 ; RV32-NEXT: li a0, 56
4403 ; RV32-NEXT: vsrl.vx v8, v8, a0
4406 ; RV64-LABEL: vp_cttz_zero_undef_v15i64_unmasked:
4408 ; RV64-NEXT: li a1, 1
4409 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4410 ; RV64-NEXT: vsub.vx v16, v8, a1
4411 ; RV64-NEXT: vnot.v v8, v8
4412 ; RV64-NEXT: vand.vv v8, v8, v16
4413 ; RV64-NEXT: lui a0, %hi(.LCPI67_0)
4414 ; RV64-NEXT: ld a0, %lo(.LCPI67_0)(a0)
4415 ; RV64-NEXT: lui a1, %hi(.LCPI67_1)
4416 ; RV64-NEXT: ld a1, %lo(.LCPI67_1)(a1)
4417 ; RV64-NEXT: vsrl.vi v16, v8, 1
4418 ; RV64-NEXT: vand.vx v16, v16, a0
4419 ; RV64-NEXT: vsub.vv v8, v8, v16
4420 ; RV64-NEXT: vand.vx v16, v8, a1
4421 ; RV64-NEXT: vsrl.vi v8, v8, 2
4422 ; RV64-NEXT: vand.vx v8, v8, a1
4423 ; RV64-NEXT: vadd.vv v8, v16, v8
4424 ; RV64-NEXT: lui a0, %hi(.LCPI67_2)
4425 ; RV64-NEXT: ld a0, %lo(.LCPI67_2)(a0)
4426 ; RV64-NEXT: lui a1, %hi(.LCPI67_3)
4427 ; RV64-NEXT: ld a1, %lo(.LCPI67_3)(a1)
4428 ; RV64-NEXT: vsrl.vi v16, v8, 4
4429 ; RV64-NEXT: vadd.vv v8, v8, v16
4430 ; RV64-NEXT: vand.vx v8, v8, a0
4431 ; RV64-NEXT: vmul.vx v8, v8, a1
4432 ; RV64-NEXT: li a0, 56
4433 ; RV64-NEXT: vsrl.vx v8, v8, a0
4435 %head = insertelement <15 x i1> poison, i1 true, i32 0
4436 %m = shufflevector <15 x i1> %head, <15 x i1> poison, <15 x i32> zeroinitializer
4437 %v = call <15 x i64> @llvm.vp.cttz.v15i64(<15 x i64> %va, i1 true, <15 x i1> %m, i32 %evl)
4441 define <16 x i64> @vp_cttz_zero_undef_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
4442 ; RV32-LABEL: vp_cttz_zero_undef_v16i64:
4444 ; RV32-NEXT: li a1, 1
4445 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4446 ; RV32-NEXT: vsub.vx v16, v8, a1, v0.t
4447 ; RV32-NEXT: li a1, 32
4448 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4449 ; RV32-NEXT: vmv.v.i v24, -1
4450 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4451 ; RV32-NEXT: vxor.vv v8, v8, v24, v0.t
4452 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4453 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
4454 ; RV32-NEXT: lui a2, 349525
4455 ; RV32-NEXT: addi a2, a2, 1365
4456 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4457 ; RV32-NEXT: vmv.v.x v24, a2
4458 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4459 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
4460 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
4461 ; RV32-NEXT: lui a2, 209715
4462 ; RV32-NEXT: addi a2, a2, 819
4463 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4464 ; RV32-NEXT: vmv.v.x v16, a2
4465 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4466 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
4467 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4468 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4469 ; RV32-NEXT: vadd.vv v8, v24, v8, v0.t
4470 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4471 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4472 ; RV32-NEXT: lui a2, 61681
4473 ; RV32-NEXT: addi a2, a2, -241
4474 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4475 ; RV32-NEXT: vmv.v.x v16, a2
4476 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4477 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4478 ; RV32-NEXT: lui a2, 4112
4479 ; RV32-NEXT: addi a2, a2, 257
4480 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4481 ; RV32-NEXT: vmv.v.x v16, a2
4482 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4483 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
4484 ; RV32-NEXT: li a0, 56
4485 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
4488 ; RV64-LABEL: vp_cttz_zero_undef_v16i64:
4490 ; RV64-NEXT: li a1, 1
4491 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4492 ; RV64-NEXT: vsub.vx v16, v8, a1, v0.t
4493 ; RV64-NEXT: vnot.v v8, v8, v0.t
4494 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
4495 ; RV64-NEXT: lui a0, %hi(.LCPI68_0)
4496 ; RV64-NEXT: ld a0, %lo(.LCPI68_0)(a0)
4497 ; RV64-NEXT: lui a1, %hi(.LCPI68_1)
4498 ; RV64-NEXT: ld a1, %lo(.LCPI68_1)(a1)
4499 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4500 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
4501 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4502 ; RV64-NEXT: vand.vx v16, v8, a1, v0.t
4503 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4504 ; RV64-NEXT: vand.vx v8, v8, a1, v0.t
4505 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4506 ; RV64-NEXT: lui a0, %hi(.LCPI68_2)
4507 ; RV64-NEXT: ld a0, %lo(.LCPI68_2)(a0)
4508 ; RV64-NEXT: lui a1, %hi(.LCPI68_3)
4509 ; RV64-NEXT: ld a1, %lo(.LCPI68_3)(a1)
4510 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4511 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4512 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
4513 ; RV64-NEXT: vmul.vx v8, v8, a1, v0.t
4514 ; RV64-NEXT: li a0, 56
4515 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
4517 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 true, <16 x i1> %m, i32 %evl)
4521 define <16 x i64> @vp_cttz_zero_undef_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
4522 ; RV32-LABEL: vp_cttz_zero_undef_v16i64_unmasked:
4524 ; RV32-NEXT: li a1, 1
4525 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4526 ; RV32-NEXT: vsub.vx v16, v8, a1
4527 ; RV32-NEXT: li a1, 32
4528 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4529 ; RV32-NEXT: vmv.v.i v24, -1
4530 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4531 ; RV32-NEXT: vxor.vv v8, v8, v24
4532 ; RV32-NEXT: vand.vv v8, v8, v16
4533 ; RV32-NEXT: vsrl.vi v16, v8, 1
4534 ; RV32-NEXT: lui a2, 349525
4535 ; RV32-NEXT: addi a2, a2, 1365
4536 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4537 ; RV32-NEXT: vmv.v.x v24, a2
4538 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4539 ; RV32-NEXT: vand.vv v16, v16, v24
4540 ; RV32-NEXT: vsub.vv v8, v8, v16
4541 ; RV32-NEXT: lui a2, 209715
4542 ; RV32-NEXT: addi a2, a2, 819
4543 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4544 ; RV32-NEXT: vmv.v.x v16, a2
4545 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4546 ; RV32-NEXT: vand.vv v24, v8, v16
4547 ; RV32-NEXT: vsrl.vi v8, v8, 2
4548 ; RV32-NEXT: vand.vv v8, v8, v16
4549 ; RV32-NEXT: vadd.vv v8, v24, v8
4550 ; RV32-NEXT: vsrl.vi v16, v8, 4
4551 ; RV32-NEXT: vadd.vv v8, v8, v16
4552 ; RV32-NEXT: lui a2, 61681
4553 ; RV32-NEXT: addi a2, a2, -241
4554 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4555 ; RV32-NEXT: vmv.v.x v16, a2
4556 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4557 ; RV32-NEXT: vand.vv v8, v8, v16
4558 ; RV32-NEXT: lui a2, 4112
4559 ; RV32-NEXT: addi a2, a2, 257
4560 ; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma
4561 ; RV32-NEXT: vmv.v.x v16, a2
4562 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4563 ; RV32-NEXT: vmul.vv v8, v8, v16
4564 ; RV32-NEXT: li a0, 56
4565 ; RV32-NEXT: vsrl.vx v8, v8, a0
4568 ; RV64-LABEL: vp_cttz_zero_undef_v16i64_unmasked:
4570 ; RV64-NEXT: li a1, 1
4571 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4572 ; RV64-NEXT: vsub.vx v16, v8, a1
4573 ; RV64-NEXT: vnot.v v8, v8
4574 ; RV64-NEXT: vand.vv v8, v8, v16
4575 ; RV64-NEXT: lui a0, %hi(.LCPI69_0)
4576 ; RV64-NEXT: ld a0, %lo(.LCPI69_0)(a0)
4577 ; RV64-NEXT: lui a1, %hi(.LCPI69_1)
4578 ; RV64-NEXT: ld a1, %lo(.LCPI69_1)(a1)
4579 ; RV64-NEXT: vsrl.vi v16, v8, 1
4580 ; RV64-NEXT: vand.vx v16, v16, a0
4581 ; RV64-NEXT: vsub.vv v8, v8, v16
4582 ; RV64-NEXT: vand.vx v16, v8, a1
4583 ; RV64-NEXT: vsrl.vi v8, v8, 2
4584 ; RV64-NEXT: vand.vx v8, v8, a1
4585 ; RV64-NEXT: vadd.vv v8, v16, v8
4586 ; RV64-NEXT: lui a0, %hi(.LCPI69_2)
4587 ; RV64-NEXT: ld a0, %lo(.LCPI69_2)(a0)
4588 ; RV64-NEXT: lui a1, %hi(.LCPI69_3)
4589 ; RV64-NEXT: ld a1, %lo(.LCPI69_3)(a1)
4590 ; RV64-NEXT: vsrl.vi v16, v8, 4
4591 ; RV64-NEXT: vadd.vv v8, v8, v16
4592 ; RV64-NEXT: vand.vx v8, v8, a0
4593 ; RV64-NEXT: vmul.vx v8, v8, a1
4594 ; RV64-NEXT: li a0, 56
4595 ; RV64-NEXT: vsrl.vx v8, v8, a0
4597 %head = insertelement <16 x i1> poison, i1 true, i32 0
4598 %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
4599 %v = call <16 x i64> @llvm.vp.cttz.v16i64(<16 x i64> %va, i1 true, <16 x i1> %m, i32 %evl)
4603 define <32 x i64> @vp_cttz_zero_undef_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) {
4604 ; RV32-LABEL: vp_cttz_zero_undef_v32i64:
4606 ; RV32-NEXT: addi sp, sp, -16
4607 ; RV32-NEXT: .cfi_def_cfa_offset 16
4608 ; RV32-NEXT: csrr a1, vlenb
4609 ; RV32-NEXT: slli a1, a1, 6
4610 ; RV32-NEXT: sub sp, sp, a1
4611 ; RV32-NEXT: .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0xc0, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 64 * vlenb
4612 ; RV32-NEXT: csrr a1, vlenb
4613 ; RV32-NEXT: li a2, 40
4614 ; RV32-NEXT: mul a1, a1, a2
4615 ; RV32-NEXT: add a1, sp, a1
4616 ; RV32-NEXT: addi a1, a1, 16
4617 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
4618 ; RV32-NEXT: vmv8r.v v16, v8
4619 ; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
4620 ; RV32-NEXT: li a1, 16
4621 ; RV32-NEXT: vslidedown.vi v24, v0, 2
4622 ; RV32-NEXT: mv a2, a0
4623 ; RV32-NEXT: bltu a0, a1, .LBB70_2
4624 ; RV32-NEXT: # %bb.1:
4625 ; RV32-NEXT: li a2, 16
4626 ; RV32-NEXT: .LBB70_2:
4627 ; RV32-NEXT: li a1, 1
4628 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4629 ; RV32-NEXT: vsub.vx v8, v16, a1, v0.t
4630 ; RV32-NEXT: csrr a3, vlenb
4631 ; RV32-NEXT: li a4, 56
4632 ; RV32-NEXT: mul a3, a3, a4
4633 ; RV32-NEXT: add a3, sp, a3
4634 ; RV32-NEXT: addi a3, a3, 16
4635 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4636 ; RV32-NEXT: li a3, 32
4637 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
4638 ; RV32-NEXT: vmv.v.i v8, -1
4639 ; RV32-NEXT: csrr a4, vlenb
4640 ; RV32-NEXT: slli a4, a4, 5
4641 ; RV32-NEXT: add a4, sp, a4
4642 ; RV32-NEXT: addi a4, a4, 16
4643 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
4644 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4645 ; RV32-NEXT: vxor.vv v16, v16, v8, v0.t
4646 ; RV32-NEXT: csrr a4, vlenb
4647 ; RV32-NEXT: li a5, 56
4648 ; RV32-NEXT: mul a4, a4, a5
4649 ; RV32-NEXT: add a4, sp, a4
4650 ; RV32-NEXT: addi a4, a4, 16
4651 ; RV32-NEXT: vl8r.v v8, (a4) # Unknown-size Folded Reload
4652 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
4653 ; RV32-NEXT: csrr a4, vlenb
4654 ; RV32-NEXT: li a5, 48
4655 ; RV32-NEXT: mul a4, a4, a5
4656 ; RV32-NEXT: add a4, sp, a4
4657 ; RV32-NEXT: addi a4, a4, 16
4658 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
4659 ; RV32-NEXT: lui a4, 349525
4660 ; RV32-NEXT: addi a4, a4, 1365
4661 ; RV32-NEXT: vsrl.vi v8, v8, 1, v0.t
4662 ; RV32-NEXT: csrr a5, vlenb
4663 ; RV32-NEXT: li a6, 56
4664 ; RV32-NEXT: mul a5, a5, a6
4665 ; RV32-NEXT: add a5, sp, a5
4666 ; RV32-NEXT: addi a5, a5, 16
4667 ; RV32-NEXT: vs8r.v v8, (a5) # Unknown-size Folded Spill
4668 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
4669 ; RV32-NEXT: vmv.v.x v8, a4
4670 ; RV32-NEXT: csrr a4, vlenb
4671 ; RV32-NEXT: li a5, 24
4672 ; RV32-NEXT: mul a4, a4, a5
4673 ; RV32-NEXT: add a4, sp, a4
4674 ; RV32-NEXT: addi a4, a4, 16
4675 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
4676 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4677 ; RV32-NEXT: csrr a4, vlenb
4678 ; RV32-NEXT: li a5, 56
4679 ; RV32-NEXT: mul a4, a4, a5
4680 ; RV32-NEXT: add a4, sp, a4
4681 ; RV32-NEXT: addi a4, a4, 16
4682 ; RV32-NEXT: vl8r.v v16, (a4) # Unknown-size Folded Reload
4683 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4684 ; RV32-NEXT: csrr a4, vlenb
4685 ; RV32-NEXT: li a5, 48
4686 ; RV32-NEXT: mul a4, a4, a5
4687 ; RV32-NEXT: add a4, sp, a4
4688 ; RV32-NEXT: addi a4, a4, 16
4689 ; RV32-NEXT: vl8r.v v8, (a4) # Unknown-size Folded Reload
4690 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
4691 ; RV32-NEXT: csrr a4, vlenb
4692 ; RV32-NEXT: li a5, 48
4693 ; RV32-NEXT: mul a4, a4, a5
4694 ; RV32-NEXT: add a4, sp, a4
4695 ; RV32-NEXT: addi a4, a4, 16
4696 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
4697 ; RV32-NEXT: lui a4, 209715
4698 ; RV32-NEXT: addi a4, a4, 819
4699 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
4700 ; RV32-NEXT: vmv.v.x v8, a4
4701 ; RV32-NEXT: csrr a4, vlenb
4702 ; RV32-NEXT: li a5, 56
4703 ; RV32-NEXT: mul a4, a4, a5
4704 ; RV32-NEXT: add a4, sp, a4
4705 ; RV32-NEXT: addi a4, a4, 16
4706 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
4707 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4708 ; RV32-NEXT: csrr a4, vlenb
4709 ; RV32-NEXT: li a5, 48
4710 ; RV32-NEXT: mul a4, a4, a5
4711 ; RV32-NEXT: add a4, sp, a4
4712 ; RV32-NEXT: addi a4, a4, 16
4713 ; RV32-NEXT: vl8r.v v16, (a4) # Unknown-size Folded Reload
4714 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4715 ; RV32-NEXT: csrr a4, vlenb
4716 ; RV32-NEXT: slli a4, a4, 4
4717 ; RV32-NEXT: add a4, sp, a4
4718 ; RV32-NEXT: addi a4, a4, 16
4719 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
4720 ; RV32-NEXT: csrr a4, vlenb
4721 ; RV32-NEXT: li a5, 48
4722 ; RV32-NEXT: mul a4, a4, a5
4723 ; RV32-NEXT: add a4, sp, a4
4724 ; RV32-NEXT: addi a4, a4, 16
4725 ; RV32-NEXT: vl8r.v v16, (a4) # Unknown-size Folded Reload
4726 ; RV32-NEXT: vsrl.vi v16, v16, 2, v0.t
4727 ; RV32-NEXT: vand.vv v16, v16, v8, v0.t
4728 ; RV32-NEXT: csrr a4, vlenb
4729 ; RV32-NEXT: slli a4, a4, 4
4730 ; RV32-NEXT: add a4, sp, a4
4731 ; RV32-NEXT: addi a4, a4, 16
4732 ; RV32-NEXT: vl8r.v v8, (a4) # Unknown-size Folded Reload
4733 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4734 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4735 ; RV32-NEXT: vadd.vv v16, v8, v16, v0.t
4736 ; RV32-NEXT: lui a4, 61681
4737 ; RV32-NEXT: addi a4, a4, -241
4738 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
4739 ; RV32-NEXT: vmv.v.x v8, a4
4740 ; RV32-NEXT: csrr a4, vlenb
4741 ; RV32-NEXT: li a5, 48
4742 ; RV32-NEXT: mul a4, a4, a5
4743 ; RV32-NEXT: add a4, sp, a4
4744 ; RV32-NEXT: addi a4, a4, 16
4745 ; RV32-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
4746 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4747 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
4748 ; RV32-NEXT: lui a4, 4112
4749 ; RV32-NEXT: addi a4, a4, 257
4750 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
4751 ; RV32-NEXT: vmv.v.x v16, a4
4752 ; RV32-NEXT: csrr a3, vlenb
4753 ; RV32-NEXT: slli a3, a3, 3
4754 ; RV32-NEXT: add a3, sp, a3
4755 ; RV32-NEXT: addi a3, a3, 16
4756 ; RV32-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill
4757 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
4758 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
4759 ; RV32-NEXT: li a2, 56
4760 ; RV32-NEXT: vsrl.vx v8, v8, a2, v0.t
4761 ; RV32-NEXT: csrr a3, vlenb
4762 ; RV32-NEXT: slli a3, a3, 4
4763 ; RV32-NEXT: add a3, sp, a3
4764 ; RV32-NEXT: addi a3, a3, 16
4765 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
4766 ; RV32-NEXT: addi a3, a0, -16
4767 ; RV32-NEXT: sltu a0, a0, a3
4768 ; RV32-NEXT: addi a0, a0, -1
4769 ; RV32-NEXT: and a0, a0, a3
4770 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4771 ; RV32-NEXT: vmv1r.v v0, v24
4772 ; RV32-NEXT: csrr a0, vlenb
4773 ; RV32-NEXT: li a3, 40
4774 ; RV32-NEXT: mul a0, a0, a3
4775 ; RV32-NEXT: add a0, sp, a0
4776 ; RV32-NEXT: addi a0, a0, 16
4777 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4778 ; RV32-NEXT: vsub.vx v8, v16, a1, v0.t
4779 ; RV32-NEXT: addi a0, sp, 16
4780 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
4781 ; RV32-NEXT: csrr a0, vlenb
4782 ; RV32-NEXT: slli a0, a0, 5
4783 ; RV32-NEXT: add a0, sp, a0
4784 ; RV32-NEXT: addi a0, a0, 16
4785 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4786 ; RV32-NEXT: vxor.vv v16, v16, v8, v0.t
4787 ; RV32-NEXT: addi a0, sp, 16
4788 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4789 ; RV32-NEXT: vand.vv v8, v16, v8, v0.t
4790 ; RV32-NEXT: csrr a0, vlenb
4791 ; RV32-NEXT: slli a0, a0, 5
4792 ; RV32-NEXT: add a0, sp, a0
4793 ; RV32-NEXT: addi a0, a0, 16
4794 ; RV32-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
4795 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
4796 ; RV32-NEXT: csrr a0, vlenb
4797 ; RV32-NEXT: li a1, 40
4798 ; RV32-NEXT: mul a0, a0, a1
4799 ; RV32-NEXT: add a0, sp, a0
4800 ; RV32-NEXT: addi a0, a0, 16
4801 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
4802 ; RV32-NEXT: csrr a0, vlenb
4803 ; RV32-NEXT: li a1, 24
4804 ; RV32-NEXT: mul a0, a0, a1
4805 ; RV32-NEXT: add a0, sp, a0
4806 ; RV32-NEXT: addi a0, a0, 16
4807 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4808 ; RV32-NEXT: csrr a0, vlenb
4809 ; RV32-NEXT: li a1, 40
4810 ; RV32-NEXT: mul a0, a0, a1
4811 ; RV32-NEXT: add a0, sp, a0
4812 ; RV32-NEXT: addi a0, a0, 16
4813 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4814 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
4815 ; RV32-NEXT: csrr a0, vlenb
4816 ; RV32-NEXT: slli a0, a0, 5
4817 ; RV32-NEXT: add a0, sp, a0
4818 ; RV32-NEXT: addi a0, a0, 16
4819 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4820 ; RV32-NEXT: vsub.vv v8, v8, v16, v0.t
4821 ; RV32-NEXT: csrr a0, vlenb
4822 ; RV32-NEXT: li a1, 56
4823 ; RV32-NEXT: mul a0, a0, a1
4824 ; RV32-NEXT: add a0, sp, a0
4825 ; RV32-NEXT: addi a0, a0, 16
4826 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4827 ; RV32-NEXT: vand.vv v16, v8, v16, v0.t
4828 ; RV32-NEXT: csrr a0, vlenb
4829 ; RV32-NEXT: li a1, 40
4830 ; RV32-NEXT: mul a0, a0, a1
4831 ; RV32-NEXT: add a0, sp, a0
4832 ; RV32-NEXT: addi a0, a0, 16
4833 ; RV32-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
4834 ; RV32-NEXT: vsrl.vi v8, v8, 2, v0.t
4835 ; RV32-NEXT: csrr a0, vlenb
4836 ; RV32-NEXT: li a1, 56
4837 ; RV32-NEXT: mul a0, a0, a1
4838 ; RV32-NEXT: add a0, sp, a0
4839 ; RV32-NEXT: addi a0, a0, 16
4840 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4841 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4842 ; RV32-NEXT: csrr a0, vlenb
4843 ; RV32-NEXT: li a1, 40
4844 ; RV32-NEXT: mul a0, a0, a1
4845 ; RV32-NEXT: add a0, sp, a0
4846 ; RV32-NEXT: addi a0, a0, 16
4847 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4848 ; RV32-NEXT: vadd.vv v8, v16, v8, v0.t
4849 ; RV32-NEXT: vsrl.vi v16, v8, 4, v0.t
4850 ; RV32-NEXT: vadd.vv v8, v8, v16, v0.t
4851 ; RV32-NEXT: csrr a0, vlenb
4852 ; RV32-NEXT: li a1, 48
4853 ; RV32-NEXT: mul a0, a0, a1
4854 ; RV32-NEXT: add a0, sp, a0
4855 ; RV32-NEXT: addi a0, a0, 16
4856 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4857 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
4858 ; RV32-NEXT: csrr a0, vlenb
4859 ; RV32-NEXT: slli a0, a0, 3
4860 ; RV32-NEXT: add a0, sp, a0
4861 ; RV32-NEXT: addi a0, a0, 16
4862 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
4863 ; RV32-NEXT: vmul.vv v8, v8, v16, v0.t
4864 ; RV32-NEXT: vsrl.vx v16, v8, a2, v0.t
4865 ; RV32-NEXT: csrr a0, vlenb
4866 ; RV32-NEXT: slli a0, a0, 4
4867 ; RV32-NEXT: add a0, sp, a0
4868 ; RV32-NEXT: addi a0, a0, 16
4869 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4870 ; RV32-NEXT: csrr a0, vlenb
4871 ; RV32-NEXT: slli a0, a0, 6
4872 ; RV32-NEXT: add sp, sp, a0
4873 ; RV32-NEXT: addi sp, sp, 16
4876 ; RV64-LABEL: vp_cttz_zero_undef_v32i64:
4878 ; RV64-NEXT: addi sp, sp, -16
4879 ; RV64-NEXT: .cfi_def_cfa_offset 16
4880 ; RV64-NEXT: csrr a1, vlenb
4881 ; RV64-NEXT: slli a1, a1, 4
4882 ; RV64-NEXT: sub sp, sp, a1
4883 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
4884 ; RV64-NEXT: csrr a1, vlenb
4885 ; RV64-NEXT: slli a1, a1, 3
4886 ; RV64-NEXT: add a1, sp, a1
4887 ; RV64-NEXT: addi a1, a1, 16
4888 ; RV64-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
4889 ; RV64-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
4890 ; RV64-NEXT: li a2, 16
4891 ; RV64-NEXT: vslidedown.vi v24, v0, 2
4892 ; RV64-NEXT: mv a1, a0
4893 ; RV64-NEXT: bltu a0, a2, .LBB70_2
4894 ; RV64-NEXT: # %bb.1:
4895 ; RV64-NEXT: li a1, 16
4896 ; RV64-NEXT: .LBB70_2:
4897 ; RV64-NEXT: li a2, 1
4898 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4899 ; RV64-NEXT: vsub.vx v16, v8, a2, v0.t
4900 ; RV64-NEXT: vnot.v v8, v8, v0.t
4901 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
4902 ; RV64-NEXT: lui a1, %hi(.LCPI70_0)
4903 ; RV64-NEXT: ld a1, %lo(.LCPI70_0)(a1)
4904 ; RV64-NEXT: lui a3, %hi(.LCPI70_1)
4905 ; RV64-NEXT: ld a3, %lo(.LCPI70_1)(a3)
4906 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4907 ; RV64-NEXT: vand.vx v16, v16, a1, v0.t
4908 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4909 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
4910 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4911 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
4912 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4913 ; RV64-NEXT: lui a4, %hi(.LCPI70_2)
4914 ; RV64-NEXT: ld a4, %lo(.LCPI70_2)(a4)
4915 ; RV64-NEXT: lui a5, %hi(.LCPI70_3)
4916 ; RV64-NEXT: ld a5, %lo(.LCPI70_3)(a5)
4917 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4918 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4919 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
4920 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
4921 ; RV64-NEXT: li a6, 56
4922 ; RV64-NEXT: vsrl.vx v8, v8, a6, v0.t
4923 ; RV64-NEXT: addi a7, sp, 16
4924 ; RV64-NEXT: vs8r.v v8, (a7) # Unknown-size Folded Spill
4925 ; RV64-NEXT: addi a7, a0, -16
4926 ; RV64-NEXT: sltu a0, a0, a7
4927 ; RV64-NEXT: addi a0, a0, -1
4928 ; RV64-NEXT: and a0, a0, a7
4929 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
4930 ; RV64-NEXT: vmv1r.v v0, v24
4931 ; RV64-NEXT: csrr a0, vlenb
4932 ; RV64-NEXT: slli a0, a0, 3
4933 ; RV64-NEXT: add a0, sp, a0
4934 ; RV64-NEXT: addi a0, a0, 16
4935 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4936 ; RV64-NEXT: vsub.vx v16, v8, a2, v0.t
4937 ; RV64-NEXT: vnot.v v8, v8, v0.t
4938 ; RV64-NEXT: vand.vv v8, v8, v16, v0.t
4939 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
4940 ; RV64-NEXT: vand.vx v16, v16, a1, v0.t
4941 ; RV64-NEXT: vsub.vv v8, v8, v16, v0.t
4942 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
4943 ; RV64-NEXT: vsrl.vi v8, v8, 2, v0.t
4944 ; RV64-NEXT: vand.vx v8, v8, a3, v0.t
4945 ; RV64-NEXT: vadd.vv v8, v16, v8, v0.t
4946 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
4947 ; RV64-NEXT: vadd.vv v8, v8, v16, v0.t
4948 ; RV64-NEXT: vand.vx v8, v8, a4, v0.t
4949 ; RV64-NEXT: vmul.vx v8, v8, a5, v0.t
4950 ; RV64-NEXT: vsrl.vx v16, v8, a6, v0.t
4951 ; RV64-NEXT: addi a0, sp, 16
4952 ; RV64-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
4953 ; RV64-NEXT: csrr a0, vlenb
4954 ; RV64-NEXT: slli a0, a0, 4
4955 ; RV64-NEXT: add sp, sp, a0
4956 ; RV64-NEXT: addi sp, sp, 16
4958 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 true, <32 x i1> %m, i32 %evl)
4962 define <32 x i64> @vp_cttz_zero_undef_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) {
4963 ; RV32-LABEL: vp_cttz_zero_undef_v32i64_unmasked:
4965 ; RV32-NEXT: li a2, 16
4966 ; RV32-NEXT: vmv8r.v v0, v16
4967 ; RV32-NEXT: mv a1, a0
4968 ; RV32-NEXT: bltu a0, a2, .LBB71_2
4969 ; RV32-NEXT: # %bb.1:
4970 ; RV32-NEXT: li a1, 16
4971 ; RV32-NEXT: .LBB71_2:
4972 ; RV32-NEXT: addi sp, sp, -16
4973 ; RV32-NEXT: .cfi_def_cfa_offset 16
4974 ; RV32-NEXT: csrr a2, vlenb
4975 ; RV32-NEXT: li a3, 40
4976 ; RV32-NEXT: mul a2, a2, a3
4977 ; RV32-NEXT: sub sp, sp, a2
4978 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x28, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 40 * vlenb
4979 ; RV32-NEXT: li a2, 1
4980 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4981 ; RV32-NEXT: vsub.vx v16, v8, a2
4982 ; RV32-NEXT: li a3, 32
4983 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
4984 ; RV32-NEXT: vmv.v.i v24, -1
4985 ; RV32-NEXT: csrr a4, vlenb
4986 ; RV32-NEXT: slli a4, a4, 5
4987 ; RV32-NEXT: add a4, sp, a4
4988 ; RV32-NEXT: addi a4, a4, 16
4989 ; RV32-NEXT: vs8r.v v24, (a4) # Unknown-size Folded Spill
4990 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
4991 ; RV32-NEXT: vxor.vv v8, v8, v24
4992 ; RV32-NEXT: vand.vv v8, v8, v16
4993 ; RV32-NEXT: vsrl.vi v16, v8, 1
4994 ; RV32-NEXT: lui a4, 349525
4995 ; RV32-NEXT: addi a4, a4, 1365
4996 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
4997 ; RV32-NEXT: vmv.v.x v24, a4
4998 ; RV32-NEXT: csrr a4, vlenb
4999 ; RV32-NEXT: li a5, 24
5000 ; RV32-NEXT: mul a4, a4, a5
5001 ; RV32-NEXT: add a4, sp, a4
5002 ; RV32-NEXT: addi a4, a4, 16
5003 ; RV32-NEXT: vs8r.v v24, (a4) # Unknown-size Folded Spill
5004 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5005 ; RV32-NEXT: vand.vv v16, v16, v24
5006 ; RV32-NEXT: vsub.vv v8, v8, v16
5007 ; RV32-NEXT: lui a4, 209715
5008 ; RV32-NEXT: addi a4, a4, 819
5009 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
5010 ; RV32-NEXT: vmv.v.x v16, a4
5011 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5012 ; RV32-NEXT: vand.vv v24, v8, v16
5013 ; RV32-NEXT: vsrl.vi v8, v8, 2
5014 ; RV32-NEXT: vand.vv v8, v8, v16
5015 ; RV32-NEXT: vadd.vv v8, v24, v8
5016 ; RV32-NEXT: vsrl.vi v24, v8, 4
5017 ; RV32-NEXT: vadd.vv v8, v8, v24
5018 ; RV32-NEXT: lui a4, 61681
5019 ; RV32-NEXT: addi a4, a4, -241
5020 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
5021 ; RV32-NEXT: vmv.v.x v24, a4
5022 ; RV32-NEXT: csrr a4, vlenb
5023 ; RV32-NEXT: slli a4, a4, 4
5024 ; RV32-NEXT: add a4, sp, a4
5025 ; RV32-NEXT: addi a4, a4, 16
5026 ; RV32-NEXT: vs8r.v v24, (a4) # Unknown-size Folded Spill
5027 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5028 ; RV32-NEXT: vand.vv v8, v8, v24
5029 ; RV32-NEXT: lui a4, 4112
5030 ; RV32-NEXT: addi a4, a4, 257
5031 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, ma
5032 ; RV32-NEXT: vmv.v.x v24, a4
5033 ; RV32-NEXT: addi a3, sp, 16
5034 ; RV32-NEXT: vs8r.v v24, (a3) # Unknown-size Folded Spill
5035 ; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5036 ; RV32-NEXT: vmul.vv v8, v8, v24
5037 ; RV32-NEXT: li a1, 56
5038 ; RV32-NEXT: vsrl.vx v8, v8, a1
5039 ; RV32-NEXT: csrr a3, vlenb
5040 ; RV32-NEXT: slli a3, a3, 3
5041 ; RV32-NEXT: add a3, sp, a3
5042 ; RV32-NEXT: addi a3, a3, 16
5043 ; RV32-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill
5044 ; RV32-NEXT: addi a3, a0, -16
5045 ; RV32-NEXT: sltu a0, a0, a3
5046 ; RV32-NEXT: addi a0, a0, -1
5047 ; RV32-NEXT: and a0, a0, a3
5048 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5049 ; RV32-NEXT: csrr a0, vlenb
5050 ; RV32-NEXT: slli a0, a0, 5
5051 ; RV32-NEXT: add a0, sp, a0
5052 ; RV32-NEXT: addi a0, a0, 16
5053 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
5054 ; RV32-NEXT: vxor.vv v8, v0, v8
5055 ; RV32-NEXT: vsub.vx v0, v0, a2
5056 ; RV32-NEXT: vand.vv v8, v8, v0
5057 ; RV32-NEXT: vsrl.vi v0, v8, 1
5058 ; RV32-NEXT: csrr a0, vlenb
5059 ; RV32-NEXT: li a2, 24
5060 ; RV32-NEXT: mul a0, a0, a2
5061 ; RV32-NEXT: add a0, sp, a0
5062 ; RV32-NEXT: addi a0, a0, 16
5063 ; RV32-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload
5064 ; RV32-NEXT: vand.vv v0, v0, v24
5065 ; RV32-NEXT: vsub.vv v8, v8, v0
5066 ; RV32-NEXT: vand.vv v0, v8, v16
5067 ; RV32-NEXT: vsrl.vi v8, v8, 2
5068 ; RV32-NEXT: vand.vv v8, v8, v16
5069 ; RV32-NEXT: vadd.vv v8, v0, v8
5070 ; RV32-NEXT: vsrl.vi v16, v8, 4
5071 ; RV32-NEXT: vadd.vv v8, v8, v16
5072 ; RV32-NEXT: csrr a0, vlenb
5073 ; RV32-NEXT: slli a0, a0, 4
5074 ; RV32-NEXT: add a0, sp, a0
5075 ; RV32-NEXT: addi a0, a0, 16
5076 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
5077 ; RV32-NEXT: vand.vv v8, v8, v16
5078 ; RV32-NEXT: addi a0, sp, 16
5079 ; RV32-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
5080 ; RV32-NEXT: vmul.vv v8, v8, v16
5081 ; RV32-NEXT: vsrl.vx v16, v8, a1
5082 ; RV32-NEXT: csrr a0, vlenb
5083 ; RV32-NEXT: slli a0, a0, 3
5084 ; RV32-NEXT: add a0, sp, a0
5085 ; RV32-NEXT: addi a0, a0, 16
5086 ; RV32-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
5087 ; RV32-NEXT: csrr a0, vlenb
5088 ; RV32-NEXT: li a1, 40
5089 ; RV32-NEXT: mul a0, a0, a1
5090 ; RV32-NEXT: add sp, sp, a0
5091 ; RV32-NEXT: addi sp, sp, 16
5094 ; RV64-LABEL: vp_cttz_zero_undef_v32i64_unmasked:
5096 ; RV64-NEXT: li a2, 16
5097 ; RV64-NEXT: mv a1, a0
5098 ; RV64-NEXT: bltu a0, a2, .LBB71_2
5099 ; RV64-NEXT: # %bb.1:
5100 ; RV64-NEXT: li a1, 16
5101 ; RV64-NEXT: .LBB71_2:
5102 ; RV64-NEXT: li a2, 1
5103 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
5104 ; RV64-NEXT: vsub.vx v24, v8, a2
5105 ; RV64-NEXT: vnot.v v8, v8
5106 ; RV64-NEXT: vand.vv v8, v8, v24
5107 ; RV64-NEXT: lui a1, %hi(.LCPI71_0)
5108 ; RV64-NEXT: ld a1, %lo(.LCPI71_0)(a1)
5109 ; RV64-NEXT: lui a3, %hi(.LCPI71_1)
5110 ; RV64-NEXT: ld a3, %lo(.LCPI71_1)(a3)
5111 ; RV64-NEXT: vsrl.vi v24, v8, 1
5112 ; RV64-NEXT: vand.vx v24, v24, a1
5113 ; RV64-NEXT: vsub.vv v8, v8, v24
5114 ; RV64-NEXT: vand.vx v24, v8, a3
5115 ; RV64-NEXT: vsrl.vi v8, v8, 2
5116 ; RV64-NEXT: vand.vx v8, v8, a3
5117 ; RV64-NEXT: vadd.vv v8, v24, v8
5118 ; RV64-NEXT: lui a4, %hi(.LCPI71_2)
5119 ; RV64-NEXT: ld a4, %lo(.LCPI71_2)(a4)
5120 ; RV64-NEXT: lui a5, %hi(.LCPI71_3)
5121 ; RV64-NEXT: ld a5, %lo(.LCPI71_3)(a5)
5122 ; RV64-NEXT: vsrl.vi v24, v8, 4
5123 ; RV64-NEXT: vadd.vv v8, v8, v24
5124 ; RV64-NEXT: vand.vx v8, v8, a4
5125 ; RV64-NEXT: vmul.vx v8, v8, a5
5126 ; RV64-NEXT: li a6, 56
5127 ; RV64-NEXT: vsrl.vx v8, v8, a6
5128 ; RV64-NEXT: addi a7, a0, -16
5129 ; RV64-NEXT: sltu a0, a0, a7
5130 ; RV64-NEXT: addi a0, a0, -1
5131 ; RV64-NEXT: and a0, a0, a7
5132 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
5133 ; RV64-NEXT: vsub.vx v24, v16, a2
5134 ; RV64-NEXT: vnot.v v16, v16
5135 ; RV64-NEXT: vand.vv v16, v16, v24
5136 ; RV64-NEXT: vsrl.vi v24, v16, 1
5137 ; RV64-NEXT: vand.vx v24, v24, a1
5138 ; RV64-NEXT: vsub.vv v16, v16, v24
5139 ; RV64-NEXT: vand.vx v24, v16, a3
5140 ; RV64-NEXT: vsrl.vi v16, v16, 2
5141 ; RV64-NEXT: vand.vx v16, v16, a3
5142 ; RV64-NEXT: vadd.vv v16, v24, v16
5143 ; RV64-NEXT: vsrl.vi v24, v16, 4
5144 ; RV64-NEXT: vadd.vv v16, v16, v24
5145 ; RV64-NEXT: vand.vx v16, v16, a4
5146 ; RV64-NEXT: vmul.vx v16, v16, a5
5147 ; RV64-NEXT: vsrl.vx v16, v16, a6
5149 %head = insertelement <32 x i1> poison, i1 true, i32 0
5150 %m = shufflevector <32 x i1> %head, <32 x i1> poison, <32 x i32> zeroinitializer
5151 %v = call <32 x i64> @llvm.vp.cttz.v32i64(<32 x i64> %va, i1 true, <32 x i1> %m, i32 %evl)