[llvm] 81b2f95 - [RISCV] Use zexti32/sexti32 in srliw/sraiw isel patterns to improve usage of those instructions.

Alex Bradbury via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 27 01:36:23 PDT 2021


Hi Craig,

Does this result in codegen improvements on larger programs? I'd have
thought generally that if there's no reason to prefer srliw/sraiw vs
srli/srai then the latter would be preferable, as they have compressed
forms while srliw/sraiw do not.

Best,

Alex


On Sat, 26 Jun 2021 at 19:58, Craig Topper via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
>
> Author: Craig Topper
> Date: 2021-06-26T11:57:26-07:00
> New Revision: 81b2f95971edd47a0057ac4a77b674d7ea620c01
>
> URL: https://github.com/llvm/llvm-project/commit/81b2f95971edd47a0057ac4a77b674d7ea620c01
> DIFF: https://github.com/llvm/llvm-project/commit/81b2f95971edd47a0057ac4a77b674d7ea620c01.diff
>
> LOG: [RISCV] Use zexti32/sexti32 in srliw/sraiw isel patterns to improve usage of those instructions.
>
> Added:
>
>
> Modified:
>     llvm/lib/Target/RISCV/RISCVInstrInfo.td
>     llvm/test/CodeGen/RISCV/alu8.ll
>     llvm/test/CodeGen/RISCV/bswap-ctlz-cttz-ctpop.ll
>     llvm/test/CodeGen/RISCV/copysign-casts.ll
>     llvm/test/CodeGen/RISCV/div.ll
>     llvm/test/CodeGen/RISCV/rv64i-exhaustive-w-insts.ll
>     llvm/test/CodeGen/RISCV/rv64zbb-zbp.ll
>     llvm/test/CodeGen/RISCV/rv64zbb.ll
>     llvm/test/CodeGen/RISCV/rv64zbp.ll
>     llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ctlz.ll
>     llvm/test/CodeGen/RISCV/urem-lkk.ll
>     llvm/test/CodeGen/RISCV/urem-seteq-illegal-types.ll
>     llvm/test/CodeGen/RISCV/urem-vector-lkk.ll
>     llvm/test/CodeGen/RISCV/vec3-setcc-crash.ll
>
> Removed:
>
>
>
> ################################################################################
> diff  --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.td b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
> index 1c12774263852..641ff455e266f 100644
> --- a/llvm/lib/Target/RISCV/RISCVInstrInfo.td
> +++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.td
> @@ -1262,11 +1262,11 @@ def : Pat<(sext_inreg (sub GPR:$rs1, GPR:$rs2), i32),
>            (SUBW GPR:$rs1, GPR:$rs2)>;
>  def : Pat<(sext_inreg (shl GPR:$rs1, uimm5:$shamt), i32),
>            (SLLIW GPR:$rs1, uimm5:$shamt)>;
> -def : Pat<(i64 (srl (and GPR:$rs1, 0xffffffff), uimm5:$shamt)),
> +def : Pat<(i64 (srl (zexti32 (i64 GPR:$rs1)), uimm5:$shamt)),
>            (SRLIW GPR:$rs1, uimm5:$shamt)>;
>  def : Pat<(i64 (srl (shl GPR:$rs1, (i64 32)), uimm6gt32:$shamt)),
>            (SRLIW GPR:$rs1, (ImmSub32 uimm6gt32:$shamt))>;
> -def : Pat<(sra (sext_inreg GPR:$rs1, i32), uimm5:$shamt),
> +def : Pat<(i64 (sra (sexti32 (i64 GPR:$rs1)), uimm5:$shamt)),
>            (SRAIW GPR:$rs1, uimm5:$shamt)>;
>  def : Pat<(i64 (sra (shl GPR:$rs1, (i64 32)), uimm6gt32:$shamt)),
>            (SRAIW GPR:$rs1, (ImmSub32 uimm6gt32:$shamt))>;
>
> diff  --git a/llvm/test/CodeGen/RISCV/alu8.ll b/llvm/test/CodeGen/RISCV/alu8.ll
> index ed09174745b88..a3d9d2673db3f 100644
> --- a/llvm/test/CodeGen/RISCV/alu8.ll
> +++ b/llvm/test/CodeGen/RISCV/alu8.ll
> @@ -124,7 +124,7 @@ define i8 @srli(i8 %a) nounwind {
>  ; RV64I-LABEL: srli:
>  ; RV64I:       # %bb.0:
>  ; RV64I-NEXT:    andi a0, a0, 192
> -; RV64I-NEXT:    srli a0, a0, 6
> +; RV64I-NEXT:    srliw a0, a0, 6
>  ; RV64I-NEXT:    ret
>    %1 = lshr i8 %a, 6
>    ret i8 %1
>
> diff  --git a/llvm/test/CodeGen/RISCV/bswap-ctlz-cttz-ctpop.ll b/llvm/test/CodeGen/RISCV/bswap-ctlz-cttz-ctpop.ll
> index 9896ca1d1020d..ef69945e34746 100644
> --- a/llvm/test/CodeGen/RISCV/bswap-ctlz-cttz-ctpop.ll
> +++ b/llvm/test/CodeGen/RISCV/bswap-ctlz-cttz-ctpop.ll
> @@ -499,9 +499,9 @@ define i32 @test_ctlz_i32(i32 %a) nounwind {
>  ; RV64I-NEXT:    slli a0, a0, 32
>  ; RV64I-NEXT:    srli a0, a0, 32
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 2
> +; RV64I-NEXT:    srliw a1, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 4
> +; RV64I-NEXT:    srliw a1, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    srli a1, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
>
> diff  --git a/llvm/test/CodeGen/RISCV/copysign-casts.ll b/llvm/test/CodeGen/RISCV/copysign-casts.ll
> index ab4580da25512..59f9507f86c2e 100644
> --- a/llvm/test/CodeGen/RISCV/copysign-casts.ll
> +++ b/llvm/test/CodeGen/RISCV/copysign-casts.ll
> @@ -357,7 +357,7 @@ define half @fold_demote_h_s(half %a, float %b) nounwind {
>  ; RV64I-NEXT:    addi a2, zero, 1
>  ; RV64I-NEXT:    slli a2, a2, 31
>  ; RV64I-NEXT:    and a1, a1, a2
> -; RV64I-NEXT:    srli a1, a1, 16
> +; RV64I-NEXT:    srliw a1, a1, 16
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    ret
>  ;
>
> diff  --git a/llvm/test/CodeGen/RISCV/div.ll b/llvm/test/CodeGen/RISCV/div.ll
> index a7db30213cc30..33cfa365c24b7 100644
> --- a/llvm/test/CodeGen/RISCV/div.ll
> +++ b/llvm/test/CodeGen/RISCV/div.ll
> @@ -276,7 +276,7 @@ define i8 @udiv8_constant(i8 %a) nounwind {
>  ; RV64IM-NEXT:    andi a0, a0, 255
>  ; RV64IM-NEXT:    addi a1, zero, 205
>  ; RV64IM-NEXT:    mul a0, a0, a1
> -; RV64IM-NEXT:    srli a0, a0, 10
> +; RV64IM-NEXT:    srliw a0, a0, 10
>  ; RV64IM-NEXT:    ret
>    %1 = udiv i8 %a, 5
>    ret i8 %1
> @@ -298,13 +298,13 @@ define i8 @udiv8_pow2(i8 %a) nounwind {
>  ; RV64I-LABEL: udiv8_pow2:
>  ; RV64I:       # %bb.0:
>  ; RV64I-NEXT:    andi a0, a0, 248
> -; RV64I-NEXT:    srli a0, a0, 3
> +; RV64I-NEXT:    srliw a0, a0, 3
>  ; RV64I-NEXT:    ret
>  ;
>  ; RV64IM-LABEL: udiv8_pow2:
>  ; RV64IM:       # %bb.0:
>  ; RV64IM-NEXT:    andi a0, a0, 248
> -; RV64IM-NEXT:    srli a0, a0, 3
> +; RV64IM-NEXT:    srliw a0, a0, 3
>  ; RV64IM-NEXT:    ret
>    %1 = udiv i8 %a, 8
>    ret i8 %1
> @@ -404,7 +404,7 @@ define i16 @udiv16_constant(i16 %a) nounwind {
>  ; RV64IM-NEXT:    lui a1, 13
>  ; RV64IM-NEXT:    addiw a1, a1, -819
>  ; RV64IM-NEXT:    mul a0, a0, a1
> -; RV64IM-NEXT:    srli a0, a0, 18
> +; RV64IM-NEXT:    srliw a0, a0, 18
>  ; RV64IM-NEXT:    ret
>    %1 = udiv i16 %a, 5
>    ret i16 %1
> @@ -786,7 +786,7 @@ define i8 @sdiv8_constant(i8 %a) nounwind {
>  ; RV64IM-NEXT:    srai a0, a0, 56
>  ; RV64IM-NEXT:    addi a1, zero, 103
>  ; RV64IM-NEXT:    mul a0, a0, a1
> -; RV64IM-NEXT:    srai a1, a0, 9
> +; RV64IM-NEXT:    sraiw a1, a0, 9
>  ; RV64IM-NEXT:    srli a0, a0, 15
>  ; RV64IM-NEXT:    andi a0, a0, 1
>  ; RV64IM-NEXT:    add a0, a1, a0
> @@ -935,7 +935,7 @@ define i16 @sdiv16_constant(i16 %a) nounwind {
>  ; RV64IM-NEXT:    lui a1, 6
>  ; RV64IM-NEXT:    addiw a1, a1, 1639
>  ; RV64IM-NEXT:    mul a0, a0, a1
> -; RV64IM-NEXT:    srai a1, a0, 17
> +; RV64IM-NEXT:    sraiw a1, a0, 17
>  ; RV64IM-NEXT:    srli a0, a0, 31
>  ; RV64IM-NEXT:    andi a0, a0, 1
>  ; RV64IM-NEXT:    add a0, a1, a0
>
> diff  --git a/llvm/test/CodeGen/RISCV/rv64i-exhaustive-w-insts.ll b/llvm/test/CodeGen/RISCV/rv64i-exhaustive-w-insts.ll
> index 8c6c5d79de81c..ecbe2fd1ce31d 100644
> --- a/llvm/test/CodeGen/RISCV/rv64i-exhaustive-w-insts.ll
> +++ b/llvm/test/CodeGen/RISCV/rv64i-exhaustive-w-insts.ll
> @@ -1529,7 +1529,7 @@ define i32 @aext_srliw_sext(i32 signext %a) nounwind {
>  define i32 @aext_srliw_zext(i32 zeroext %a) nounwind {
>  ; RV64I-LABEL: aext_srliw_zext:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srli a0, a0, 3
> +; RV64I-NEXT:    srliw a0, a0, 3
>  ; RV64I-NEXT:    ret
>    %1 = lshr i32 %a, 3
>    ret i32 %1
> @@ -1556,7 +1556,7 @@ define signext i32 @sext_srliw_sext(i32 signext %a) nounwind {
>  define signext i32 @sext_srliw_zext(i32 zeroext %a) nounwind {
>  ; RV64I-LABEL: sext_srliw_zext:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srli a0, a0, 6
> +; RV64I-NEXT:    srliw a0, a0, 6
>  ; RV64I-NEXT:    ret
>    %1 = lshr i32 %a, 6
>    ret i32 %1
> @@ -1583,7 +1583,7 @@ define zeroext i32 @zext_srliw_sext(i32 signext %a) nounwind {
>  define zeroext i32 @zext_srliw_zext(i32 zeroext %a) nounwind {
>  ; RV64I-LABEL: zext_srliw_zext:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srli a0, a0, 9
> +; RV64I-NEXT:    srliw a0, a0, 9
>  ; RV64I-NEXT:    ret
>    %1 = lshr i32 %a, 9
>    ret i32 %1
> @@ -1603,7 +1603,7 @@ define i32 @aext_sraiw_aext(i32 %a) nounwind {
>  define i32 @aext_sraiw_sext(i32 signext %a) nounwind {
>  ; RV64I-LABEL: aext_sraiw_sext:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srai a0, a0, 2
> +; RV64I-NEXT:    sraiw a0, a0, 2
>  ; RV64I-NEXT:    ret
>    %1 = ashr i32 %a, 2
>    ret i32 %1
> @@ -1630,7 +1630,7 @@ define signext i32 @sext_sraiw_aext(i32 %a) nounwind {
>  define signext i32 @sext_sraiw_sext(i32 signext %a) nounwind {
>  ; RV64I-LABEL: sext_sraiw_sext:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srai a0, a0, 5
> +; RV64I-NEXT:    sraiw a0, a0, 5
>  ; RV64I-NEXT:    ret
>    %1 = ashr i32 %a, 5
>    ret i32 %1
>
> diff  --git a/llvm/test/CodeGen/RISCV/rv64zbb-zbp.ll b/llvm/test/CodeGen/RISCV/rv64zbb-zbp.ll
> index 804c5465b14da..319b610e99b1b 100644
> --- a/llvm/test/CodeGen/RISCV/rv64zbb-zbp.ll
> +++ b/llvm/test/CodeGen/RISCV/rv64zbb-zbp.ll
> @@ -614,25 +614,25 @@ define i8 @srli_i8(i8 %a) nounwind {
>  ; RV64I-LABEL: srli_i8:
>  ; RV64I:       # %bb.0:
>  ; RV64I-NEXT:    andi a0, a0, 192
> -; RV64I-NEXT:    srli a0, a0, 6
> +; RV64I-NEXT:    srliw a0, a0, 6
>  ; RV64I-NEXT:    ret
>  ;
>  ; RV64IB-LABEL: srli_i8:
>  ; RV64IB:       # %bb.0:
>  ; RV64IB-NEXT:    andi a0, a0, 192
> -; RV64IB-NEXT:    srli a0, a0, 6
> +; RV64IB-NEXT:    srliw a0, a0, 6
>  ; RV64IB-NEXT:    ret
>  ;
>  ; RV64IBB-LABEL: srli_i8:
>  ; RV64IBB:       # %bb.0:
>  ; RV64IBB-NEXT:    andi a0, a0, 192
> -; RV64IBB-NEXT:    srli a0, a0, 6
> +; RV64IBB-NEXT:    srliw a0, a0, 6
>  ; RV64IBB-NEXT:    ret
>  ;
>  ; RV64IBP-LABEL: srli_i8:
>  ; RV64IBP:       # %bb.0:
>  ; RV64IBP-NEXT:    andi a0, a0, 192
> -; RV64IBP-NEXT:    srli a0, a0, 6
> +; RV64IBP-NEXT:    srliw a0, a0, 6
>  ; RV64IBP-NEXT:    ret
>    %1 = lshr i8 %a, 6
>    ret i8 %1
> @@ -648,13 +648,13 @@ define i8 @srai_i8(i8 %a) nounwind {
>  ; RV64IB-LABEL: srai_i8:
>  ; RV64IB:       # %bb.0:
>  ; RV64IB-NEXT:    sext.b a0, a0
> -; RV64IB-NEXT:    srai a0, a0, 5
> +; RV64IB-NEXT:    sraiw a0, a0, 5
>  ; RV64IB-NEXT:    ret
>  ;
>  ; RV64IBB-LABEL: srai_i8:
>  ; RV64IBB:       # %bb.0:
>  ; RV64IBB-NEXT:    sext.b a0, a0
> -; RV64IBB-NEXT:    srai a0, a0, 5
> +; RV64IBB-NEXT:    sraiw a0, a0, 5
>  ; RV64IBB-NEXT:    ret
>  ;
>  ; RV64IBP-LABEL: srai_i8:
> @@ -676,19 +676,19 @@ define i16 @srli_i16(i16 %a) nounwind {
>  ; RV64IB-LABEL: srli_i16:
>  ; RV64IB:       # %bb.0:
>  ; RV64IB-NEXT:    zext.h a0, a0
> -; RV64IB-NEXT:    srli a0, a0, 6
> +; RV64IB-NEXT:    srliw a0, a0, 6
>  ; RV64IB-NEXT:    ret
>  ;
>  ; RV64IBB-LABEL: srli_i16:
>  ; RV64IBB:       # %bb.0:
>  ; RV64IBB-NEXT:    zext.h a0, a0
> -; RV64IBB-NEXT:    srli a0, a0, 6
> +; RV64IBB-NEXT:    srliw a0, a0, 6
>  ; RV64IBB-NEXT:    ret
>  ;
>  ; RV64IBP-LABEL: srli_i16:
>  ; RV64IBP:       # %bb.0:
>  ; RV64IBP-NEXT:    zext.h a0, a0
> -; RV64IBP-NEXT:    srli a0, a0, 6
> +; RV64IBP-NEXT:    srliw a0, a0, 6
>  ; RV64IBP-NEXT:    ret
>    %1 = lshr i16 %a, 6
>    ret i16 %1
> @@ -704,13 +704,13 @@ define i16 @srai_i16(i16 %a) nounwind {
>  ; RV64IB-LABEL: srai_i16:
>  ; RV64IB:       # %bb.0:
>  ; RV64IB-NEXT:    sext.h a0, a0
> -; RV64IB-NEXT:    srai a0, a0, 9
> +; RV64IB-NEXT:    sraiw a0, a0, 9
>  ; RV64IB-NEXT:    ret
>  ;
>  ; RV64IBB-LABEL: srai_i16:
>  ; RV64IBB:       # %bb.0:
>  ; RV64IBB-NEXT:    sext.h a0, a0
> -; RV64IBB-NEXT:    srai a0, a0, 9
> +; RV64IBB-NEXT:    sraiw a0, a0, 9
>  ; RV64IBB-NEXT:    ret
>  ;
>  ; RV64IBP-LABEL: srai_i16:
>
> diff  --git a/llvm/test/CodeGen/RISCV/rv64zbb.ll b/llvm/test/CodeGen/RISCV/rv64zbb.ll
> index 7a20bf0f0320c..3a9e035118633 100644
> --- a/llvm/test/CodeGen/RISCV/rv64zbb.ll
> +++ b/llvm/test/CodeGen/RISCV/rv64zbb.ll
> @@ -19,9 +19,9 @@ define signext i32 @ctlz_i32(i32 signext %a) nounwind {
>  ; RV64I-NEXT:    slli a0, a0, 32
>  ; RV64I-NEXT:    srli a0, a0, 32
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 2
> +; RV64I-NEXT:    srliw a1, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 4
> +; RV64I-NEXT:    srliw a1, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    srli a1, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
> @@ -105,9 +105,9 @@ define signext i32 @log2_i32(i32 signext %a) nounwind {
>  ; RV64I-NEXT:    slli a0, a0, 32
>  ; RV64I-NEXT:    srli a0, a0, 32
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 2
> +; RV64I-NEXT:    srliw a1, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 4
> +; RV64I-NEXT:    srliw a1, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    srli a1, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
> @@ -202,9 +202,9 @@ define signext i32 @log2_ceil_i32(i32 signext %a) nounwind {
>  ; RV64I-NEXT:    slli a0, a0, 32
>  ; RV64I-NEXT:    srli a0, a0, 32
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 2
> +; RV64I-NEXT:    srliw a1, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 4
> +; RV64I-NEXT:    srliw a1, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    srli a1, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
> @@ -295,9 +295,9 @@ define signext i32 @findLastSet_i32(i32 signext %a) nounwind {
>  ; RV64I-NEXT:    srli a0, a0, 32
>  ; RV64I-NEXT:    srliw a1, s0, 1
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 2
> +; RV64I-NEXT:    srliw a1, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 4
> +; RV64I-NEXT:    srliw a1, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    srli a1, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
> @@ -395,11 +395,11 @@ define i32 @ctlz_lshr_i32(i32 signext %a) {
>  ; RV64I-NEXT:    srliw a0, a0, 1
>  ; RV64I-NEXT:    beqz a0, .LBB4_2
>  ; RV64I-NEXT:  # %bb.1: # %cond.false
> -; RV64I-NEXT:    srli a1, a0, 1
> +; RV64I-NEXT:    srliw a1, a0, 1
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 2
> +; RV64I-NEXT:    srliw a1, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
> -; RV64I-NEXT:    srli a1, a0, 4
> +; RV64I-NEXT:    srliw a1, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    srli a1, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
> @@ -1016,7 +1016,7 @@ define signext i32 @ctpop_i32_load(i32* %p) nounwind {
>  ; RV64I-NEXT:    addi sp, sp, -16
>  ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
>  ; RV64I-NEXT:    lwu a0, 0(a0)
> -; RV64I-NEXT:    srli a1, a0, 1
> +; RV64I-NEXT:    srliw a1, a0, 1
>  ; RV64I-NEXT:    lui a2, 349525
>  ; RV64I-NEXT:    addiw a2, a2, 1365
>  ; RV64I-NEXT:    and a1, a1, a2
>
> diff  --git a/llvm/test/CodeGen/RISCV/rv64zbp.ll b/llvm/test/CodeGen/RISCV/rv64zbp.ll
> index 00d3278a3283d..fee2b2dfb61c0 100644
> --- a/llvm/test/CodeGen/RISCV/rv64zbp.ll
> +++ b/llvm/test/CodeGen/RISCV/rv64zbp.ll
> @@ -2669,7 +2669,7 @@ declare i16 @llvm.bswap.i16(i16)
>  define zeroext i16 @bswap_i16(i16 zeroext %a) nounwind {
>  ; RV64I-LABEL: bswap_i16:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srli a1, a0, 8
> +; RV64I-NEXT:    srliw a1, a0, 8
>  ; RV64I-NEXT:    slli a0, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 16
> @@ -2812,19 +2812,19 @@ declare i8 @llvm.bitreverse.i8(i8)
>  define zeroext i8 @bitreverse_i8(i8 zeroext %a) nounwind {
>  ; RV64I-LABEL: bitreverse_i8:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srli a1, a0, 4
> +; RV64I-NEXT:    srliw a1, a0, 4
>  ; RV64I-NEXT:    andi a0, a0, 15
>  ; RV64I-NEXT:    slli a0, a0, 4
>  ; RV64I-NEXT:    or a0, a1, a0
>  ; RV64I-NEXT:    andi a1, a0, 51
>  ; RV64I-NEXT:    slli a1, a1, 2
>  ; RV64I-NEXT:    andi a0, a0, 204
> -; RV64I-NEXT:    srli a0, a0, 2
> +; RV64I-NEXT:    srliw a0, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    andi a1, a0, 85
>  ; RV64I-NEXT:    slli a1, a1, 1
>  ; RV64I-NEXT:    andi a0, a0, 170
> -; RV64I-NEXT:    srli a0, a0, 1
> +; RV64I-NEXT:    srliw a0, a0, 1
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    ret
>  ;
> @@ -2846,7 +2846,7 @@ declare i16 @llvm.bitreverse.i16(i16)
>  define zeroext i16 @bitreverse_i16(i16 zeroext %a) nounwind {
>  ; RV64I-LABEL: bitreverse_i16:
>  ; RV64I:       # %bb.0:
> -; RV64I-NEXT:    srli a1, a0, 8
> +; RV64I-NEXT:    srliw a1, a0, 8
>  ; RV64I-NEXT:    slli a0, a0, 8
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 1
> @@ -2856,7 +2856,7 @@ define zeroext i16 @bitreverse_i16(i16 zeroext %a) nounwind {
>  ; RV64I-NEXT:    lui a2, 15
>  ; RV64I-NEXT:    addiw a2, a2, 240
>  ; RV64I-NEXT:    and a0, a0, a2
> -; RV64I-NEXT:    srli a0, a0, 4
> +; RV64I-NEXT:    srliw a0, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 3
>  ; RV64I-NEXT:    addiw a1, a1, 819
> @@ -2865,7 +2865,7 @@ define zeroext i16 @bitreverse_i16(i16 zeroext %a) nounwind {
>  ; RV64I-NEXT:    lui a2, 13
>  ; RV64I-NEXT:    addiw a2, a2, -820
>  ; RV64I-NEXT:    and a0, a0, a2
> -; RV64I-NEXT:    srli a0, a0, 2
> +; RV64I-NEXT:    srliw a0, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 5
>  ; RV64I-NEXT:    addiw a1, a1, 1365
> @@ -2874,7 +2874,7 @@ define zeroext i16 @bitreverse_i16(i16 zeroext %a) nounwind {
>  ; RV64I-NEXT:    lui a2, 11
>  ; RV64I-NEXT:    addiw a2, a2, -1366
>  ; RV64I-NEXT:    and a0, a0, a2
> -; RV64I-NEXT:    srli a0, a0, 1
> +; RV64I-NEXT:    srliw a0, a0, 1
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    ret
>  ;
> @@ -2917,7 +2917,7 @@ define signext i32 @bitreverse_i32(i32 signext %a) nounwind {
>  ; RV64I-NEXT:    slli a2, a2, 12
>  ; RV64I-NEXT:    addi a2, a2, 240
>  ; RV64I-NEXT:    and a0, a0, a2
> -; RV64I-NEXT:    srli a0, a0, 4
> +; RV64I-NEXT:    srliw a0, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 209715
>  ; RV64I-NEXT:    addiw a1, a1, 819
> @@ -2926,7 +2926,7 @@ define signext i32 @bitreverse_i32(i32 signext %a) nounwind {
>  ; RV64I-NEXT:    lui a2, 838861
>  ; RV64I-NEXT:    addiw a2, a2, -820
>  ; RV64I-NEXT:    and a0, a0, a2
> -; RV64I-NEXT:    srli a0, a0, 2
> +; RV64I-NEXT:    srliw a0, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 349525
>  ; RV64I-NEXT:    addiw a1, a1, 1365
> @@ -2978,7 +2978,7 @@ define void @bitreverse_i32_nosext(i32 signext %a, i32* %x) nounwind {
>  ; RV64I-NEXT:    slli a3, a3, 12
>  ; RV64I-NEXT:    addi a3, a3, 240
>  ; RV64I-NEXT:    and a0, a0, a3
> -; RV64I-NEXT:    srli a0, a0, 4
> +; RV64I-NEXT:    srliw a0, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a2
>  ; RV64I-NEXT:    lui a2, 209715
>  ; RV64I-NEXT:    addiw a2, a2, 819
> @@ -2987,7 +2987,7 @@ define void @bitreverse_i32_nosext(i32 signext %a, i32* %x) nounwind {
>  ; RV64I-NEXT:    lui a3, 838861
>  ; RV64I-NEXT:    addiw a3, a3, -820
>  ; RV64I-NEXT:    and a0, a0, a3
> -; RV64I-NEXT:    srli a0, a0, 2
> +; RV64I-NEXT:    srliw a0, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a2
>  ; RV64I-NEXT:    lui a2, 349525
>  ; RV64I-NEXT:    addiw a2, a2, 1365
> @@ -3221,7 +3221,7 @@ define i32 @bitreverse_bswap_i32(i32 %a) {
>  ; RV64I-NEXT:    slli a3, a3, 12
>  ; RV64I-NEXT:    addi a3, a3, 240
>  ; RV64I-NEXT:    and a0, a0, a3
> -; RV64I-NEXT:    srli a0, a0, 4
> +; RV64I-NEXT:    srliw a0, a0, 4
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 209715
>  ; RV64I-NEXT:    addiw a1, a1, 819
> @@ -3230,7 +3230,7 @@ define i32 @bitreverse_bswap_i32(i32 %a) {
>  ; RV64I-NEXT:    lui a3, 838861
>  ; RV64I-NEXT:    addiw a3, a3, -820
>  ; RV64I-NEXT:    and a0, a0, a3
> -; RV64I-NEXT:    srli a0, a0, 2
> +; RV64I-NEXT:    srliw a0, a0, 2
>  ; RV64I-NEXT:    or a0, a0, a1
>  ; RV64I-NEXT:    lui a1, 349525
>  ; RV64I-NEXT:    addiw a1, a1, 1365
>
> diff  --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ctlz.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ctlz.ll
> index b5dbfb8212892..9b421de9a5c83 100644
> --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ctlz.ll
> +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ctlz.ll
> @@ -482,11 +482,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vle8.v v25, (a0)
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -543,11 +543,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 15
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a5, v26
>  ; LMULMAX2-RV64-NEXT:    andi a5, a5, 255
> -; LMULMAX2-RV64-NEXT:    srli a1, a5, 1
> +; LMULMAX2-RV64-NEXT:    srliw a1, a5, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a5, a1
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -573,11 +573,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 14
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -603,11 +603,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 13
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -633,11 +633,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 12
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -663,11 +663,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 11
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -693,11 +693,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 10
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -723,11 +723,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 9
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -753,11 +753,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 8
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -783,11 +783,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 7
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -813,11 +813,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 6
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -843,11 +843,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 5
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -873,11 +873,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 4
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -903,11 +903,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 3
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -933,11 +933,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 2
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -963,11 +963,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v25, v25, 1
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -1474,11 +1474,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vle8.v v25, (a0)
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -1535,11 +1535,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 15
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a5, v26
>  ; LMULMAX1-RV64-NEXT:    andi a5, a5, 255
> -; LMULMAX1-RV64-NEXT:    srli a1, a5, 1
> +; LMULMAX1-RV64-NEXT:    srliw a1, a5, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a5, a1
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1565,11 +1565,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 14
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1595,11 +1595,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 13
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1625,11 +1625,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 12
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1655,11 +1655,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 11
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1685,11 +1685,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 10
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1715,11 +1715,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 9
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1745,11 +1745,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 8
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1775,11 +1775,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1805,11 +1805,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1835,11 +1835,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1865,11 +1865,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1895,11 +1895,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1925,11 +1925,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -1955,11 +1955,11 @@ define void @ctlz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v25, v25, 1
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -2254,11 +2254,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    lui a1, 16
>  ; LMULMAX2-RV64-NEXT:    addiw a6, a1, -1
>  ; LMULMAX2-RV64-NEXT:    and a2, a2, a6
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX2-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> @@ -2315,11 +2315,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 7
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -2345,11 +2345,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 6
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -2375,11 +2375,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 5
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -2405,11 +2405,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 4
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -2435,11 +2435,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 3
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -2465,11 +2465,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 2
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -2495,11 +2495,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v25, v25, 1
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -2786,11 +2786,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    lui a1, 16
>  ; LMULMAX1-RV64-NEXT:    addiw a6, a1, -1
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a6
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -2847,11 +2847,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -2877,11 +2877,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -2907,11 +2907,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -2937,11 +2937,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -2967,11 +2967,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -2997,11 +2997,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -3027,11 +3027,11 @@ define void @ctlz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v25, v25, 1
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -3205,9 +3205,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -3267,9 +3267,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a5, a5, 32
>  ; LMULMAX2-RV64-NEXT:    srli a5, a5, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a5, a1
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -3298,9 +3298,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -3329,9 +3329,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -3497,9 +3497,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -3559,9 +3559,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a5, a5, 32
>  ; LMULMAX1-RV64-NEXT:    srli a5, a5, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a5, a1
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -3590,9 +3590,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -3621,9 +3621,9 @@ define void @ctlz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX1-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a5
> @@ -5083,11 +5083,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vle8.v v26, (a0)
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX2-RV64-NEXT:    andi a2, a2, 255
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX2-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> @@ -5144,11 +5144,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 31
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5174,11 +5174,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 30
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5204,11 +5204,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 29
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5234,11 +5234,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 28
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5264,11 +5264,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 27
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5294,11 +5294,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 26
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5324,11 +5324,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 25
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5354,11 +5354,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 24
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5384,11 +5384,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 23
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5414,11 +5414,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 22
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5444,11 +5444,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 21
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5474,11 +5474,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 20
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5504,11 +5504,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 19
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5534,11 +5534,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 18
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5564,11 +5564,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 17
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5594,11 +5594,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 16
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5624,11 +5624,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 15
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5654,11 +5654,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 14
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5684,11 +5684,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 13
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5714,11 +5714,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 12
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5744,11 +5744,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 11
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5774,11 +5774,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 10
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5804,11 +5804,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 9
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5834,11 +5834,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 8
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5864,11 +5864,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 7
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5894,11 +5894,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 6
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5924,11 +5924,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 5
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5954,11 +5954,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 4
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -5984,11 +5984,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 3
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -6014,11 +6014,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 2
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -6044,11 +6044,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v26, 1
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -7012,11 +7012,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vle8.v v25, (a0)
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    andi a2, a2, 255
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -7073,11 +7073,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 15
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7103,11 +7103,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 14
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7133,11 +7133,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 13
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7163,11 +7163,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 12
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7193,11 +7193,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 11
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7223,11 +7223,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 10
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7253,11 +7253,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 9
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7283,11 +7283,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 8
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7313,11 +7313,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 7
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7343,11 +7343,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 6
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7373,11 +7373,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 5
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7403,11 +7403,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 4
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7433,11 +7433,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 3
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7463,11 +7463,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 2
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7493,11 +7493,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v26, 1
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7522,11 +7522,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    sb a1, 33(sp)
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7552,11 +7552,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 15
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7582,11 +7582,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 14
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7612,11 +7612,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 13
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7642,11 +7642,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 12
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7672,11 +7672,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 11
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7702,11 +7702,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 10
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7732,11 +7732,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 9
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7762,11 +7762,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 8
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7792,11 +7792,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7822,11 +7822,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7852,11 +7852,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7882,11 +7882,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7912,11 +7912,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7942,11 +7942,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -7972,11 +7972,11 @@ define void @ctlz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v25, v25, 1
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
>  ; LMULMAX1-RV64-NEXT:    andi a1, a1, 255
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -8515,11 +8515,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    lui a1, 16
>  ; LMULMAX2-RV64-NEXT:    addiw a6, a1, -1
>  ; LMULMAX2-RV64-NEXT:    and a2, a2, a6
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX2-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX2-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX2-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX2-RV64-NEXT:    or a2, a2, a3
> @@ -8576,11 +8576,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 15
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8606,11 +8606,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 14
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8636,11 +8636,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 13
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8666,11 +8666,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 12
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8696,11 +8696,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 11
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8726,11 +8726,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 10
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8756,11 +8756,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 9
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8786,11 +8786,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 8
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8816,11 +8816,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 7
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8846,11 +8846,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 6
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8876,11 +8876,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 5
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8906,11 +8906,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 4
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8936,11 +8936,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 3
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8966,11 +8966,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 2
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -8996,11 +8996,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v26, 1
>  ; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
>  ; LMULMAX2-RV64-NEXT:    and a1, a1, a6
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 1
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -9520,11 +9520,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    lui a2, 16
>  ; LMULMAX1-RV64-NEXT:    addiw a7, a2, -1
>  ; LMULMAX1-RV64-NEXT:    and a1, a1, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a1, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a1, 1
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a3
> @@ -9581,11 +9581,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 7
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9611,11 +9611,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 6
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9641,11 +9641,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 5
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9671,11 +9671,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 4
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9701,11 +9701,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 3
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9731,11 +9731,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 2
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9761,11 +9761,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v26, 1
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9790,11 +9790,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    sh a2, 34(sp)
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v25
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9820,11 +9820,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9850,11 +9850,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9880,11 +9880,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9910,11 +9910,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9940,11 +9940,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -9970,11 +9970,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -10000,11 +10000,11 @@ define void @ctlz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
>  ; LMULMAX1-RV64-NEXT:    vslidedown.vi v25, v25, 1
>  ; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v25
>  ; LMULMAX1-RV64-NEXT:    and a2, a2, a7
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 1
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -10302,9 +10302,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX2-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a2
> @@ -10364,9 +10364,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a5, a5, 32
>  ; LMULMAX2-RV64-NEXT:    srli a5, a5, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a5, a1
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -10395,9 +10395,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -10426,9 +10426,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -10457,9 +10457,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -10488,9 +10488,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -10519,9 +10519,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -10550,9 +10550,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX2-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 2
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 2
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> -; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
> +; LMULMAX2-RV64-NEXT:    srliw a5, a1, 4
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
>  ; LMULMAX2-RV64-NEXT:    srli a5, a1, 8
>  ; LMULMAX2-RV64-NEXT:    or a1, a1, a5
> @@ -10831,9 +10831,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a2, a2, 32
>  ; LMULMAX1-RV64-NEXT:    srli a2, a2, 32
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 2
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 2
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> -; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
> +; LMULMAX1-RV64-NEXT:    srliw a3, a2, 4
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
>  ; LMULMAX1-RV64-NEXT:    srli a3, a2, 8
>  ; LMULMAX1-RV64-NEXT:    or a2, a2, a3
> @@ -10893,9 +10893,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -10924,9 +10924,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -10955,9 +10955,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -10985,9 +10985,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -11016,9 +11016,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -11047,9 +11047,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> @@ -11078,9 +11078,9 @@ define void @ctlz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
>  ; LMULMAX1-RV64-NEXT:    slli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    srli a1, a1, 32
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 2
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 2
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
> -; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
> +; LMULMAX1-RV64-NEXT:    srliw a2, a1, 4
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>  ; LMULMAX1-RV64-NEXT:    srli a2, a1, 8
>  ; LMULMAX1-RV64-NEXT:    or a1, a1, a2
>
> diff  --git a/llvm/test/CodeGen/RISCV/urem-lkk.ll b/llvm/test/CodeGen/RISCV/urem-lkk.ll
> index fb7591a26066c..f4b8e8c64f5b0 100644
> --- a/llvm/test/CodeGen/RISCV/urem-lkk.ll
> +++ b/llvm/test/CodeGen/RISCV/urem-lkk.ll
> @@ -56,7 +56,7 @@ define i32 @fold_urem_positive_odd(i32 %x) nounwind {
>  ; RV64IM-NEXT:    sub a2, a0, a1
>  ; RV64IM-NEXT:    srliw a2, a2, 1
>  ; RV64IM-NEXT:    add a1, a2, a1
> -; RV64IM-NEXT:    srli a1, a1, 6
> +; RV64IM-NEXT:    srliw a1, a1, 6
>  ; RV64IM-NEXT:    addi a2, zero, 95
>  ; RV64IM-NEXT:    mul a1, a1, a2
>  ; RV64IM-NEXT:    subw a0, a0, a1
> @@ -189,7 +189,7 @@ define i32 @combine_urem_udiv(i32 %x) nounwind {
>  ; RV64IM-NEXT:    sub a2, a0, a1
>  ; RV64IM-NEXT:    srliw a2, a2, 1
>  ; RV64IM-NEXT:    add a1, a2, a1
> -; RV64IM-NEXT:    srli a1, a1, 6
> +; RV64IM-NEXT:    srliw a1, a1, 6
>  ; RV64IM-NEXT:    addi a2, zero, 95
>  ; RV64IM-NEXT:    mul a2, a1, a2
>  ; RV64IM-NEXT:    sub a0, a0, a2
>
> diff  --git a/llvm/test/CodeGen/RISCV/urem-seteq-illegal-types.ll b/llvm/test/CodeGen/RISCV/urem-seteq-illegal-types.ll
> index c64e656cd7655..fdf1ee6a2161e 100644
> --- a/llvm/test/CodeGen/RISCV/urem-seteq-illegal-types.ll
> +++ b/llvm/test/CodeGen/RISCV/urem-seteq-illegal-types.ll
> @@ -119,7 +119,7 @@ define i1 @test_urem_even(i27 %X) nounwind {
>  ; RV64-NEXT:    lui a2, 32768
>  ; RV64-NEXT:    addiw a3, a2, -2
>  ; RV64-NEXT:    and a0, a0, a3
> -; RV64-NEXT:    srli a0, a0, 1
> +; RV64-NEXT:    srliw a0, a0, 1
>  ; RV64-NEXT:    or a0, a0, a1
>  ; RV64-NEXT:    addiw a1, a2, -1
>  ; RV64-NEXT:    and a0, a0, a1
> @@ -157,7 +157,7 @@ define i1 @test_urem_even(i27 %X) nounwind {
>  ; RV64M-NEXT:    lui a2, 32768
>  ; RV64M-NEXT:    addiw a3, a2, -2
>  ; RV64M-NEXT:    and a0, a0, a3
> -; RV64M-NEXT:    srli a0, a0, 1
> +; RV64M-NEXT:    srliw a0, a0, 1
>  ; RV64M-NEXT:    or a0, a0, a1
>  ; RV64M-NEXT:    addiw a1, a2, -1
>  ; RV64M-NEXT:    and a0, a0, a1
> @@ -193,7 +193,7 @@ define i1 @test_urem_even(i27 %X) nounwind {
>  ; RV64MV-NEXT:    lui a2, 32768
>  ; RV64MV-NEXT:    addiw a3, a2, -2
>  ; RV64MV-NEXT:    and a0, a0, a3
> -; RV64MV-NEXT:    srli a0, a0, 1
> +; RV64MV-NEXT:    srliw a0, a0, 1
>  ; RV64MV-NEXT:    or a0, a0, a1
>  ; RV64MV-NEXT:    addiw a1, a2, -1
>  ; RV64MV-NEXT:    and a0, a0, a1
> @@ -419,7 +419,7 @@ define void @test_urem_vec(<3 x i11>* %X) nounwind {
>  ; RV64-NEXT:    call __muldi3 at plt
>  ; RV64-NEXT:    slli a1, a0, 10
>  ; RV64-NEXT:    andi a0, a0, 2046
> -; RV64-NEXT:    srli a0, a0, 1
> +; RV64-NEXT:    srliw a0, a0, 1
>  ; RV64-NEXT:    or a0, a0, a1
>  ; RV64-NEXT:    andi a0, a0, 2047
>  ; RV64-NEXT:    addi a1, zero, 341
> @@ -518,7 +518,7 @@ define void @test_urem_vec(<3 x i11>* %X) nounwind {
>  ; RV64M-NEXT:    mul a1, a1, a4
>  ; RV64M-NEXT:    slli a4, a1, 10
>  ; RV64M-NEXT:    andi a1, a1, 2046
> -; RV64M-NEXT:    srli a1, a1, 1
> +; RV64M-NEXT:    srliw a1, a1, 1
>  ; RV64M-NEXT:    or a1, a1, a4
>  ; RV64M-NEXT:    andi a1, a1, 2047
>  ; RV64M-NEXT:    addi a4, zero, 341
>
> diff  --git a/llvm/test/CodeGen/RISCV/urem-vector-lkk.ll b/llvm/test/CodeGen/RISCV/urem-vector-lkk.ll
> index e91b0834e7d23..cf2e2e2a8db65 100644
> --- a/llvm/test/CodeGen/RISCV/urem-vector-lkk.ll
> +++ b/llvm/test/CodeGen/RISCV/urem-vector-lkk.ll
> @@ -164,7 +164,7 @@ define <4 x i16> @fold_urem_vec_1(<4 x i16> %x) nounwind {
>  ; RV64IM-NEXT:    addi a5, zero, 95
>  ; RV64IM-NEXT:    mul a2, a2, a5
>  ; RV64IM-NEXT:    sub a1, a1, a2
> -; RV64IM-NEXT:    srli a2, a4, 2
> +; RV64IM-NEXT:    srliw a2, a4, 2
>  ; RV64IM-NEXT:    lui a5, 264
>  ; RV64IM-NEXT:    addiw a5, a5, 1057
>  ; RV64IM-NEXT:    slli a5, a5, 15
> @@ -174,11 +174,11 @@ define <4 x i16> @fold_urem_vec_1(<4 x i16> %x) nounwind {
>  ; RV64IM-NEXT:    slli a5, a5, 12
>  ; RV64IM-NEXT:    addi a5, a5, 133
>  ; RV64IM-NEXT:    mulhu a2, a2, a5
> -; RV64IM-NEXT:    srli a2, a2, 3
> +; RV64IM-NEXT:    srliw a2, a2, 3
>  ; RV64IM-NEXT:    addi a5, zero, 124
>  ; RV64IM-NEXT:    mul a2, a2, a5
>  ; RV64IM-NEXT:    sub a2, a4, a2
> -; RV64IM-NEXT:    srli a4, a3, 1
> +; RV64IM-NEXT:    srliw a4, a3, 1
>  ; RV64IM-NEXT:    lui a5, 2675
>  ; RV64IM-NEXT:    addiw a5, a5, -251
>  ; RV64IM-NEXT:    slli a5, a5, 13
> @@ -188,7 +188,7 @@ define <4 x i16> @fold_urem_vec_1(<4 x i16> %x) nounwind {
>  ; RV64IM-NEXT:    slli a5, a5, 13
>  ; RV64IM-NEXT:    addi a5, a5, 1505
>  ; RV64IM-NEXT:    mulhu a4, a4, a5
> -; RV64IM-NEXT:    srli a4, a4, 4
> +; RV64IM-NEXT:    srliw a4, a4, 4
>  ; RV64IM-NEXT:    addi a5, zero, 98
>  ; RV64IM-NEXT:    mul a4, a4, a5
>  ; RV64IM-NEXT:    sub a3, a3, a4
> @@ -201,7 +201,7 @@ define <4 x i16> @fold_urem_vec_1(<4 x i16> %x) nounwind {
>  ; RV64IM-NEXT:    slli a4, a4, 12
>  ; RV64IM-NEXT:    addi a4, a4, 1213
>  ; RV64IM-NEXT:    mulhu a4, a6, a4
> -; RV64IM-NEXT:    srli a4, a4, 7
> +; RV64IM-NEXT:    srliw a4, a4, 7
>  ; RV64IM-NEXT:    addi a5, zero, 1003
>  ; RV64IM-NEXT:    mul a4, a4, a5
>  ; RV64IM-NEXT:    sub a4, a6, a4
> @@ -902,7 +902,7 @@ define <4 x i16> @dont_fold_urem_one(<4 x i16> %x) nounwind {
>  ; RV64IM-NEXT:    addi a5, zero, 23
>  ; RV64IM-NEXT:    mul a4, a4, a5
>  ; RV64IM-NEXT:    sub a1, a1, a4
> -; RV64IM-NEXT:    srli a4, a3, 1
> +; RV64IM-NEXT:    srliw a4, a3, 1
>  ; RV64IM-NEXT:    lui a5, 6413
>  ; RV64IM-NEXT:    addiw a5, a5, 1265
>  ; RV64IM-NEXT:    slli a5, a5, 13
> @@ -912,7 +912,7 @@ define <4 x i16> @dont_fold_urem_one(<4 x i16> %x) nounwind {
>  ; RV64IM-NEXT:    slli a5, a5, 12
>  ; RV64IM-NEXT:    addi a5, a5, 965
>  ; RV64IM-NEXT:    mulhu a4, a4, a5
> -; RV64IM-NEXT:    srli a4, a4, 7
> +; RV64IM-NEXT:    srliw a4, a4, 7
>  ; RV64IM-NEXT:    addi a5, zero, 654
>  ; RV64IM-NEXT:    mul a4, a4, a5
>  ; RV64IM-NEXT:    sub a3, a3, a4
> @@ -925,7 +925,7 @@ define <4 x i16> @dont_fold_urem_one(<4 x i16> %x) nounwind {
>  ; RV64IM-NEXT:    slli a4, a4, 12
>  ; RV64IM-NEXT:    addi a4, a4, -179
>  ; RV64IM-NEXT:    mulhu a4, a2, a4
> -; RV64IM-NEXT:    srli a4, a4, 12
> +; RV64IM-NEXT:    srliw a4, a4, 12
>  ; RV64IM-NEXT:    lui a5, 1
>  ; RV64IM-NEXT:    addiw a5, a5, 1327
>  ; RV64IM-NEXT:    mul a4, a4, a5
>
> diff  --git a/llvm/test/CodeGen/RISCV/vec3-setcc-crash.ll b/llvm/test/CodeGen/RISCV/vec3-setcc-crash.ll
> index e12f7cd6edd5e..0daecd25076bf 100644
> --- a/llvm/test/CodeGen/RISCV/vec3-setcc-crash.ll
> +++ b/llvm/test/CodeGen/RISCV/vec3-setcc-crash.ll
> @@ -70,7 +70,7 @@ define void @vec3_setcc_crash(<3 x i8>* %in, <3 x i8>* %out) {
>  ; RV64-NEXT:    mv a2, zero
>  ; RV64-NEXT:    j .LBB0_5
>  ; RV64-NEXT:  .LBB0_4:
> -; RV64-NEXT:    srli a2, a2, 8
> +; RV64-NEXT:    srliw a2, a2, 8
>  ; RV64-NEXT:  .LBB0_5:
>  ; RV64-NEXT:    slli a2, a2, 8
>  ; RV64-NEXT:    or a2, a5, a2
> @@ -79,7 +79,7 @@ define void @vec3_setcc_crash(<3 x i8>* %in, <3 x i8>* %out) {
>  ; RV64-NEXT:    mv a0, zero
>  ; RV64-NEXT:    j .LBB0_8
>  ; RV64-NEXT:  .LBB0_7:
> -; RV64-NEXT:    srli a0, a0, 16
> +; RV64-NEXT:    srliw a0, a0, 16
>  ; RV64-NEXT:  .LBB0_8:
>  ; RV64-NEXT:    sb a0, 2(a1)
>  ; RV64-NEXT:    sh a2, 0(a1)
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list