@@ -109,20 +109,19 @@ define i64 @ctz_nxv8i1_no_range(<vscale x 8 x i16> %a) {
109109;
110110; RV64-LABEL: ctz_nxv8i1_no_range:
111111; RV64: # %bb.0:
112- ; RV64-NEXT: csrr a0, vlenb
113- ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
112+ ; RV64-NEXT: vsetvli a0, zero, e64, m8, ta, ma
114113; RV64-NEXT: vid.v v16
115- ; RV64-NEXT: li a1, -1
114+ ; RV64-NEXT: li a0, -1
115+ ; RV64-NEXT: csrr a1, vlenb
116116; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, ma
117117; RV64-NEXT: vmsne.vi v0, v8, 0
118- ; RV64-NEXT: vsetvli zero, zero, e64, m8, ta, ma
119- ; RV64-NEXT: vmv.v.x v8, a0
120- ; RV64-NEXT: vmadd.vx v16, a1, v8
121- ; RV64-NEXT: vmv.v.i v8, 0
122- ; RV64-NEXT: vmerge.vvm v8, v8, v16, v0
123- ; RV64-NEXT: vredmaxu.vs v8, v8, v8
124- ; RV64-NEXT: vmv.x.s a1, v8
125- ; RV64-NEXT: sub a0, a0, a1
118+ ; RV64-NEXT: vsetvli zero, zero, e64, m8, ta, mu
119+ ; RV64-NEXT: vmul.vx v8, v16, a0
120+ ; RV64-NEXT: vmv.v.i v16, 0
121+ ; RV64-NEXT: vadd.vx v16, v8, a1, v0.t
122+ ; RV64-NEXT: vredmaxu.vs v8, v16, v16
123+ ; RV64-NEXT: vmv.x.s a0, v8
124+ ; RV64-NEXT: sub a0, a1, a0
126125; RV64-NEXT: ret
127126 %res = call i64 @llvm.experimental.cttz.elts.i64.nxv8i16 (<vscale x 8 x i16 > %a , i1 0 )
128127 ret i64 %res
0 commit comments