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