diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp index 89dc4271d0a72..f63b59fa271dc 100644 --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -5832,14 +5832,17 @@ SDValue RISCVTargetLowering::lowerMaskedGather(SDValue Op, } } - if (XLenVT == MVT::i32 && IndexVT.getVectorElementType().bitsGT(XLenVT)) { - IndexVT = IndexVT.changeVectorElementType(XLenVT); - Index = DAG.getNode(ISD::TRUNCATE, DL, IndexVT, Index); - } - if (!VL) VL = getDefaultVLOps(VT, ContainerVT, DL, DAG, Subtarget).second; + if (XLenVT == MVT::i32 && IndexVT.getVectorElementType().bitsGT(XLenVT)) { + IndexVT = IndexVT.changeVectorElementType(XLenVT); + SDValue TrueMask = DAG.getNode(RISCVISD::VMSET_VL, DL, Mask.getValueType(), + VL); + Index = DAG.getNode(RISCVISD::TRUNCATE_VECTOR_VL, DL, IndexVT, Index, + TrueMask, VL); + } + unsigned IntID = IsUnmasked ? Intrinsic::riscv_vluxei : Intrinsic::riscv_vluxei_mask; SmallVector Ops{Chain, DAG.getTargetConstant(IntID, DL, XLenVT)}; @@ -5940,14 +5943,17 @@ SDValue RISCVTargetLowering::lowerMaskedScatter(SDValue Op, } } - if (XLenVT == MVT::i32 && IndexVT.getVectorElementType().bitsGT(XLenVT)) { - IndexVT = IndexVT.changeVectorElementType(XLenVT); - Index = DAG.getNode(ISD::TRUNCATE, DL, IndexVT, Index); - } - if (!VL) VL = getDefaultVLOps(VT, ContainerVT, DL, DAG, Subtarget).second; + if (XLenVT == MVT::i32 && IndexVT.getVectorElementType().bitsGT(XLenVT)) { + IndexVT = IndexVT.changeVectorElementType(XLenVT); + SDValue TrueMask = DAG.getNode(RISCVISD::VMSET_VL, DL, Mask.getValueType(), + VL); + Index = DAG.getNode(RISCVISD::TRUNCATE_VECTOR_VL, DL, IndexVT, Index, + TrueMask, VL); + } + unsigned IntID = IsUnmasked ? Intrinsic::riscv_vsoxei : Intrinsic::riscv_vsoxei_mask; SmallVector Ops{Chain, DAG.getTargetConstant(IntID, DL, XLenVT)}; diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll index 65e66cd230583..9cd6b26dc151f 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll @@ -1036,9 +1036,9 @@ define <8 x i64> @mgather_baseidx_sext_v8i8_v8i64(i64* %base, <8 x i8> %idxs, <8 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1063,9 +1063,9 @@ define <8 x i64> @mgather_baseidx_zext_v8i8_v8i64(i64* %base, <8 x i8> %idxs, <8 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1114,9 +1114,9 @@ define <8 x i64> @mgather_baseidx_sext_v8i16_v8i64(i64* %base, <8 x i16> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1141,9 +1141,9 @@ define <8 x i64> @mgather_baseidx_zext_v8i16_v8i64(i64* %base, <8 x i16> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1191,9 +1191,9 @@ define <8 x i64> @mgather_baseidx_sext_v8i32_v8i64(i64* %base, <8 x i32> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1218,9 +1218,9 @@ define <8 x i64> @mgather_baseidx_zext_v8i32_v8i64(i64* %base, <8 x i32> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1244,9 +1244,9 @@ define <8 x i64> @mgather_baseidx_v8i64(i64* %base, <8 x i64> %idxs, <8 x i1> %m ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1906,9 +1906,9 @@ define <8 x double> @mgather_baseidx_sext_v8i8_v8f64(double* %base, <8 x i8> %id ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1933,9 +1933,9 @@ define <8 x double> @mgather_baseidx_zext_v8i8_v8f64(double* %base, <8 x i8> %id ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -1984,9 +1984,9 @@ define <8 x double> @mgather_baseidx_sext_v8i16_v8f64(double* %base, <8 x i16> % ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -2011,9 +2011,9 @@ define <8 x double> @mgather_baseidx_zext_v8i16_v8f64(double* %base, <8 x i16> % ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -2061,9 +2061,9 @@ define <8 x double> @mgather_baseidx_sext_v8i32_v8f64(double* %base, <8 x i32> % ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -2088,9 +2088,9 @@ define <8 x double> @mgather_baseidx_zext_v8i32_v8f64(double* %base, <8 x i32> % ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret @@ -2114,9 +2114,9 @@ define <8 x double> @mgather_baseidx_v8f64(double* %base, <8 x i64> %idxs, <8 x ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v12, (a0), v16, v0.t ; RV32-NEXT: vmv.v.v v8, v12 ; RV32-NEXT: ret diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll index eb542774134f6..66cba4d3f7552 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll @@ -842,9 +842,9 @@ define void @mscatter_baseidx_sext_v8i8_v8i64(<8 x i64> %val, i64* %base, <8 x i ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -867,9 +867,9 @@ define void @mscatter_baseidx_zext_v8i8_v8i64(<8 x i64> %val, i64* %base, <8 x i ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -914,9 +914,9 @@ define void @mscatter_baseidx_sext_v8i16_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -939,9 +939,9 @@ define void @mscatter_baseidx_zext_v8i16_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -985,9 +985,9 @@ define void @mscatter_baseidx_sext_v8i32_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1010,9 +1010,9 @@ define void @mscatter_baseidx_zext_v8i32_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1034,9 +1034,9 @@ define void @mscatter_baseidx_v8i64(<8 x i64> %val, i64* %base, <8 x i64> %idxs, ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v12, v12, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1636,9 +1636,9 @@ define void @mscatter_baseidx_sext_v8i8_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1661,9 +1661,9 @@ define void @mscatter_baseidx_zext_v8i8_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1708,9 +1708,9 @@ define void @mscatter_baseidx_sext_v8i16_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1733,9 +1733,9 @@ define void @mscatter_baseidx_zext_v8i16_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1779,9 +1779,9 @@ define void @mscatter_baseidx_sext_v8i32_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1804,9 +1804,9 @@ define void @mscatter_baseidx_zext_v8i32_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1828,9 +1828,9 @@ define void @mscatter_baseidx_v8f64(<8 x double> %val, double* %base, <8 x i64> ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v12, v12, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, zero, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpgather.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpgather.ll index e88fb6e71dcfd..25d8a69f70e44 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpgather.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpgather.ll @@ -964,9 +964,9 @@ define <8 x i64> @vpgather_baseidx_sext_v8i8_v8i64(i64* %base, <8 x i8> %idxs, < ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -990,9 +990,9 @@ define <8 x i64> @vpgather_baseidx_zext_v8i8_v8i64(i64* %base, <8 x i8> %idxs, < ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1039,9 +1039,9 @@ define <8 x i64> @vpgather_baseidx_sext_v8i16_v8i64(i64* %base, <8 x i16> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1065,9 +1065,9 @@ define <8 x i64> @vpgather_baseidx_zext_v8i16_v8i64(i64* %base, <8 x i16> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1113,9 +1113,9 @@ define <8 x i64> @vpgather_baseidx_sext_v8i32_v8i64(i64* %base, <8 x i32> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1139,9 +1139,9 @@ define <8 x i64> @vpgather_baseidx_zext_v8i32_v8i64(i64* %base, <8 x i32> %idxs, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1164,9 +1164,9 @@ define <8 x i64> @vpgather_baseidx_v8i64(i64* %base, <8 x i64> %idxs, <8 x i1> % ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1701,9 +1701,9 @@ define <8 x double> @vpgather_baseidx_sext_v8i8_v8f64(double* %base, <8 x i8> %i ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1727,9 +1727,9 @@ define <8 x double> @vpgather_baseidx_zext_v8i8_v8f64(double* %base, <8 x i8> %i ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1776,9 +1776,9 @@ define <8 x double> @vpgather_baseidx_sext_v8i16_v8f64(double* %base, <8 x i16> ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1802,9 +1802,9 @@ define <8 x double> @vpgather_baseidx_zext_v8i16_v8f64(double* %base, <8 x i16> ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1850,9 +1850,9 @@ define <8 x double> @vpgather_baseidx_sext_v8i32_v8f64(double* %base, <8 x i32> ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1876,9 +1876,9 @@ define <8 x double> @vpgather_baseidx_zext_v8i32_v8f64(double* %base, <8 x i32> ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v12, v8 ; RV32-NEXT: vsll.vi v8, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -1901,9 +1901,9 @@ define <8 x double> @vpgather_baseidx_v8f64(double* %base, <8 x i64> %idxs, <8 x ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v12, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; @@ -2053,12 +2053,11 @@ define <32 x double> @vpgather_baseidx_sext_v32i8_v32f64(double* %base, <32 x i8 ; RV32-NEXT: mv a2, a3 ; RV32-NEXT: .LBB88_2: ; RV32-NEXT: vsext.vf8 v24, v8 -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v10, 2 -; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli a3, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a2, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v12, v16, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v10, 2 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v16, (a0), v12, v0.t ; RV32-NEXT: li a2, 16 @@ -2068,9 +2067,9 @@ define <32 x double> @vpgather_baseidx_sext_v32i8_v32f64(double* %base, <32 x i8 ; RV32-NEXT: .LBB88_4: ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v24, v24, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v4, v24, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v10 ; RV32-NEXT: vluxei32.v v8, (a0), v4, v0.t ; RV32-NEXT: ret @@ -2127,12 +2126,11 @@ define <32 x double> @vpgather_baseidx_zext_v32i8_v32f64(double* %base, <32 x i8 ; RV32-NEXT: mv a2, a3 ; RV32-NEXT: .LBB89_2: ; RV32-NEXT: vzext.vf8 v24, v8 -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v10, 2 -; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli a3, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a2, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v12, v16, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v10, 2 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v16, (a0), v12, v0.t ; RV32-NEXT: li a2, 16 @@ -2142,9 +2140,9 @@ define <32 x double> @vpgather_baseidx_zext_v32i8_v32f64(double* %base, <32 x i8 ; RV32-NEXT: .LBB89_4: ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v24, v24, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v4, v24, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v10 ; RV32-NEXT: vluxei32.v v8, (a0), v4, v0.t ; RV32-NEXT: ret @@ -2265,12 +2263,11 @@ define <32 x double> @vpgather_baseidx_sext_v32i16_v32f64(double* %base, <32 x i ; RV32-NEXT: mv a2, a3 ; RV32-NEXT: .LBB91_2: ; RV32-NEXT: vsext.vf4 v24, v8 -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v12, 2 -; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli a3, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a2, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v8, v16, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v12, 2 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t ; RV32-NEXT: li a2, 16 @@ -2280,9 +2277,9 @@ define <32 x double> @vpgather_baseidx_sext_v32i16_v32f64(double* %base, <32 x i ; RV32-NEXT: .LBB91_4: ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v24, v24, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v4, v24, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v12 ; RV32-NEXT: vluxei32.v v8, (a0), v4, v0.t ; RV32-NEXT: ret @@ -2339,12 +2336,11 @@ define <32 x double> @vpgather_baseidx_zext_v32i16_v32f64(double* %base, <32 x i ; RV32-NEXT: mv a2, a3 ; RV32-NEXT: .LBB92_2: ; RV32-NEXT: vzext.vf4 v24, v8 -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v12, 2 -; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli a3, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a2, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v8, v16, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v12, 2 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t ; RV32-NEXT: li a2, 16 @@ -2354,9 +2350,9 @@ define <32 x double> @vpgather_baseidx_zext_v32i16_v32f64(double* %base, <32 x i ; RV32-NEXT: .LBB92_4: ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v24, v24, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v4, v24, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v12 ; RV32-NEXT: vluxei32.v v8, (a0), v4, v0.t ; RV32-NEXT: ret @@ -2476,12 +2472,11 @@ define <32 x double> @vpgather_baseidx_sext_v32i32_v32f64(double* %base, <32 x i ; RV32-NEXT: mv a2, a3 ; RV32-NEXT: .LBB94_2: ; RV32-NEXT: vsext.vf2 v24, v8 -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v1, 2 -; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a3, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a2, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v4, v8, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v1, 2 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v16, (a0), v4, v0.t ; RV32-NEXT: li a2, 16 @@ -2491,9 +2486,9 @@ define <32 x double> @vpgather_baseidx_sext_v32i32_v32f64(double* %base, <32 x i ; RV32-NEXT: .LBB94_4: ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v8, v24, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v1 ; RV32-NEXT: vluxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret @@ -2550,12 +2545,11 @@ define <32 x double> @vpgather_baseidx_zext_v32i32_v32f64(double* %base, <32 x i ; RV32-NEXT: mv a2, a3 ; RV32-NEXT: .LBB95_2: ; RV32-NEXT: vzext.vf2 v24, v8 -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v1, 2 -; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a3, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a2, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v4, v8, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v1, 2 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v16, (a0), v4, v0.t ; RV32-NEXT: li a2, 16 @@ -2565,9 +2559,9 @@ define <32 x double> @vpgather_baseidx_zext_v32i32_v32f64(double* %base, <32 x i ; RV32-NEXT: .LBB95_4: ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v8, v24, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v1 ; RV32-NEXT: vluxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret @@ -2619,12 +2613,12 @@ define <32 x double> @vpgather_baseidx_v32f64(double* %base, <32 x i64> %idxs, < ; RV32-NEXT: # %bb.1: ; RV32-NEXT: mv a2, a3 ; RV32-NEXT: .LBB96_2: -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v24, 2 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli a3, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a2, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v28, v16, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v24, 2 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v16, (a0), v28, v0.t ; RV32-NEXT: li a2, 16 @@ -2634,9 +2628,9 @@ define <32 x double> @vpgather_baseidx_v32f64(double* %base, <32 x i64> %idxs, < ; RV32-NEXT: .LBB96_4: ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v28, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vmv1r.v v0, v24 ; RV32-NEXT: vluxei32.v v8, (a0), v28, v0.t ; RV32-NEXT: ret diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll index 5255910217f21..863cad75c1a8a 100644 --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll @@ -778,9 +778,9 @@ define void @vpscatter_baseidx_sext_v8i8_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -804,9 +804,9 @@ define void @vpscatter_baseidx_zext_v8i8_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -853,9 +853,9 @@ define void @vpscatter_baseidx_sext_v8i16_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -879,9 +879,9 @@ define void @vpscatter_baseidx_zext_v8i16_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -927,9 +927,9 @@ define void @vpscatter_baseidx_sext_v8i32_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -953,9 +953,9 @@ define void @vpscatter_baseidx_zext_v8i32_v8i64(<8 x i64> %val, i64* %base, <8 x ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -978,9 +978,9 @@ define void @vpscatter_baseidx_v8i64(<8 x i64> %val, i64* %base, <8 x i64> %idxs ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v12, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1499,9 +1499,9 @@ define void @vpscatter_baseidx_sext_v8i8_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1525,9 +1525,9 @@ define void @vpscatter_baseidx_zext_v8i8_v8f64(<8 x double> %val, double* %base, ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf8 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1574,9 +1574,9 @@ define void @vpscatter_baseidx_sext_v8i16_v8f64(<8 x double> %val, double* %base ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1600,9 +1600,9 @@ define void @vpscatter_baseidx_zext_v8i16_v8f64(<8 x double> %val, double* %base ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf4 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1648,9 +1648,9 @@ define void @vpscatter_baseidx_sext_v8i32_v8f64(<8 x double> %val, double* %base ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1674,9 +1674,9 @@ define void @vpscatter_baseidx_zext_v8i32_v8f64(<8 x double> %val, double* %base ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vzext.vf2 v16, v12 ; RV32-NEXT: vsll.vi v12, v16, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1699,9 +1699,9 @@ define void @vpscatter_baseidx_v8f64(<8 x double> %val, double* %base, <8 x i64> ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, mu ; RV32-NEXT: vsll.vi v12, v12, 3 -; RV32-NEXT: vsetvli a2, zero, e32, m2, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; RV32-NEXT: vnsrl.wx v16, v12, zero -; RV32-NEXT: vsetvli zero, a1, e64, m4, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m4, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1898,69 +1898,57 @@ define void @vpscatter_baseidx_sext_v32i32_v32f64(<32 x double> %val, double* %b ; RV32-NEXT: addi sp, sp, -16 ; RV32-NEXT: .cfi_def_cfa_offset 16 ; RV32-NEXT: csrr a3, vlenb -; RV32-NEXT: li a4, 24 -; RV32-NEXT: mul a3, a3, a4 +; RV32-NEXT: slli a3, a3, 4 ; RV32-NEXT: sub sp, sp, a3 ; RV32-NEXT: li a3, 32 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, mu ; RV32-NEXT: vle32.v v24, (a1) ; RV32-NEXT: csrr a1, vlenb -; RV32-NEXT: slli a1, a1, 4 -; RV32-NEXT: add a1, sp, a1 -; RV32-NEXT: addi a1, a1, 16 -; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill -; RV32-NEXT: csrr a1, vlenb ; RV32-NEXT: slli a1, a1, 3 ; RV32-NEXT: add a1, sp, a1 ; RV32-NEXT: addi a1, a1, 16 +; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill +; RV32-NEXT: addi a1, sp, 16 ; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill ; RV32-NEXT: vsetivli zero, 16, e32, m8, ta, mu ; RV32-NEXT: vslidedown.vi v8, v24, 16 -; RV32-NEXT: addi a1, sp, 16 -; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: li a3, 16 -; RV32-NEXT: vsext.vf2 v8, v24 +; RV32-NEXT: vsext.vf2 v16, v24 ; RV32-NEXT: mv a1, a2 ; RV32-NEXT: bltu a2, a3, .LBB81_2 ; RV32-NEXT: # %bb.1: ; RV32-NEXT: li a1, 16 ; RV32-NEXT: .LBB81_2: ; RV32-NEXT: li a3, 0 -; RV32-NEXT: addi a4, sp, 16 -; RV32-NEXT: vl8re8.v v24, (a4) # Unknown-size Folded Reload -; RV32-NEXT: vsext.vf2 v16, v24 -; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli a4, zero, e32, m4, ta, mu -; RV32-NEXT: vnsrl.wx v24, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsext.vf2 v24, v8 +; RV32-NEXT: vsll.vi v8, v16, 3 +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu +; RV32-NEXT: vnsrl.wx v16, v8, zero +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: addi a1, a2, -16 -; RV32-NEXT: csrr a4, vlenb -; RV32-NEXT: slli a4, a4, 3 -; RV32-NEXT: add a4, sp, a4 -; RV32-NEXT: addi a4, a4, 16 +; RV32-NEXT: addi a4, sp, 16 ; RV32-NEXT: vl8re8.v v8, (a4) # Unknown-size Folded Reload -; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t +; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: bltu a2, a1, .LBB81_4 ; RV32-NEXT: # %bb.3: ; RV32-NEXT: mv a3, a1 ; RV32-NEXT: .LBB81_4: -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v0, 2 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu -; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV32-NEXT: vsll.vi v8, v24, 3 +; RV32-NEXT: vsetvli zero, a3, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v0, 2 ; RV32-NEXT: vsetvli zero, a3, e64, m8, ta, mu ; RV32-NEXT: csrr a1, vlenb -; RV32-NEXT: slli a1, a1, 4 +; RV32-NEXT: slli a1, a1, 3 ; RV32-NEXT: add a1, sp, a1 ; RV32-NEXT: addi a1, a1, 16 ; RV32-NEXT: vl8re8.v v8, (a1) # Unknown-size Folded Reload ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: csrr a0, vlenb -; RV32-NEXT: li a1, 24 -; RV32-NEXT: mul a0, a0, a1 +; RV32-NEXT: slli a0, a0, 4 ; RV32-NEXT: add sp, sp, a0 ; RV32-NEXT: addi sp, sp, 16 ; RV32-NEXT: ret @@ -2044,69 +2032,57 @@ define void @vpscatter_baseidx_zext_v32i32_v32f64(<32 x double> %val, double* %b ; RV32-NEXT: addi sp, sp, -16 ; RV32-NEXT: .cfi_def_cfa_offset 16 ; RV32-NEXT: csrr a3, vlenb -; RV32-NEXT: li a4, 24 -; RV32-NEXT: mul a3, a3, a4 +; RV32-NEXT: slli a3, a3, 4 ; RV32-NEXT: sub sp, sp, a3 ; RV32-NEXT: li a3, 32 ; RV32-NEXT: vsetvli zero, a3, e32, m8, ta, mu ; RV32-NEXT: vle32.v v24, (a1) ; RV32-NEXT: csrr a1, vlenb -; RV32-NEXT: slli a1, a1, 4 -; RV32-NEXT: add a1, sp, a1 -; RV32-NEXT: addi a1, a1, 16 -; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill -; RV32-NEXT: csrr a1, vlenb ; RV32-NEXT: slli a1, a1, 3 ; RV32-NEXT: add a1, sp, a1 ; RV32-NEXT: addi a1, a1, 16 +; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill +; RV32-NEXT: addi a1, sp, 16 ; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill ; RV32-NEXT: vsetivli zero, 16, e32, m8, ta, mu ; RV32-NEXT: vslidedown.vi v8, v24, 16 -; RV32-NEXT: addi a1, sp, 16 -; RV32-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu ; RV32-NEXT: li a3, 16 -; RV32-NEXT: vzext.vf2 v8, v24 +; RV32-NEXT: vzext.vf2 v16, v24 ; RV32-NEXT: mv a1, a2 ; RV32-NEXT: bltu a2, a3, .LBB82_2 ; RV32-NEXT: # %bb.1: ; RV32-NEXT: li a1, 16 ; RV32-NEXT: .LBB82_2: ; RV32-NEXT: li a3, 0 -; RV32-NEXT: addi a4, sp, 16 -; RV32-NEXT: vl8re8.v v24, (a4) # Unknown-size Folded Reload -; RV32-NEXT: vzext.vf2 v16, v24 -; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli a4, zero, e32, m4, ta, mu -; RV32-NEXT: vnsrl.wx v24, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vzext.vf2 v24, v8 +; RV32-NEXT: vsll.vi v8, v16, 3 +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu +; RV32-NEXT: vnsrl.wx v16, v8, zero +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: addi a1, a2, -16 -; RV32-NEXT: csrr a4, vlenb -; RV32-NEXT: slli a4, a4, 3 -; RV32-NEXT: add a4, sp, a4 -; RV32-NEXT: addi a4, a4, 16 +; RV32-NEXT: addi a4, sp, 16 ; RV32-NEXT: vl8re8.v v8, (a4) # Unknown-size Folded Reload -; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t +; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: bltu a2, a1, .LBB82_4 ; RV32-NEXT: # %bb.3: ; RV32-NEXT: mv a3, a1 ; RV32-NEXT: .LBB82_4: -; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu -; RV32-NEXT: vslidedown.vi v0, v0, 2 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, mu -; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu +; RV32-NEXT: vsll.vi v8, v24, 3 +; RV32-NEXT: vsetvli zero, a3, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero +; RV32-NEXT: vsetivli zero, 2, e8, mf4, ta, mu +; RV32-NEXT: vslidedown.vi v0, v0, 2 ; RV32-NEXT: vsetvli zero, a3, e64, m8, ta, mu ; RV32-NEXT: csrr a1, vlenb -; RV32-NEXT: slli a1, a1, 4 +; RV32-NEXT: slli a1, a1, 3 ; RV32-NEXT: add a1, sp, a1 ; RV32-NEXT: addi a1, a1, 16 ; RV32-NEXT: vl8re8.v v8, (a1) # Unknown-size Folded Reload ; RV32-NEXT: vsoxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: csrr a0, vlenb -; RV32-NEXT: li a1, 24 -; RV32-NEXT: mul a0, a0, a1 +; RV32-NEXT: slli a0, a0, 4 ; RV32-NEXT: add sp, sp, a0 ; RV32-NEXT: addi sp, sp, 16 ; RV32-NEXT: ret diff --git a/llvm/test/CodeGen/RISCV/rvv/vpgather-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/vpgather-sdnode.ll index 1aa4b914481cc..9f0eb0249df9b 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vpgather-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vpgather-sdnode.ll @@ -1055,9 +1055,9 @@ define @vpgather_baseidx_sext_nxv8i8_nxv8i64(i64* %base, @vpgather_baseidx_zext_nxv8i8_nxv8i64(i64* %base, @vpgather_baseidx_sext_nxv8i16_nxv8i64(i64* %base, @vpgather_baseidx_zext_nxv8i16_nxv8i64(i64* %base, @vpgather_baseidx_sext_nxv8i32_nxv8i64(i64* %base, @vpgather_baseidx_zext_nxv8i32_nxv8i64(i64* %base, @vpgather_baseidx_nxv8i64(i64* %base, @vpgather_baseidx_sext_nxv6i8_nxv6f64(double* %base ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1876,9 +1876,9 @@ define @vpgather_baseidx_zext_nxv6i8_nxv6f64(double* %base ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1925,9 +1925,9 @@ define @vpgather_baseidx_sext_nxv6i16_nxv6f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1951,9 +1951,9 @@ define @vpgather_baseidx_zext_nxv6i16_nxv6f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -1999,9 +1999,9 @@ define @vpgather_baseidx_sext_nxv6i32_nxv6f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2025,9 +2025,9 @@ define @vpgather_baseidx_zext_nxv6i32_nxv6f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2050,9 +2050,9 @@ define @vpgather_baseidx_nxv6f64(double* %base, @vpgather_baseidx_sext_nxv8i8_nxv8f64(double* %base ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2142,9 +2142,9 @@ define @vpgather_baseidx_zext_nxv8i8_nxv8f64(double* %base ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf8 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2191,9 +2191,9 @@ define @vpgather_baseidx_sext_nxv8i16_nxv8f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2217,9 +2217,9 @@ define @vpgather_baseidx_zext_nxv8i16_nxv8f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf4 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2265,9 +2265,9 @@ define @vpgather_baseidx_sext_nxv8i32_nxv8f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2291,9 +2291,9 @@ define @vpgather_baseidx_zext_nxv8i32_nxv8f64(double* %bas ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf2 v16, v8 ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; @@ -2316,9 +2316,9 @@ define @vpgather_baseidx_nxv8f64(double* %base, @vpgather_baseidx_nxv16i16_nxv16f64(double* %base, define @vpgather_baseidx_sext_nxv16i16_nxv16f64(double* %base, %idxs, %m, i32 zeroext %evl) { ; RV32-LABEL: vpgather_baseidx_sext_nxv16i16_nxv16f64: ; RV32: # %bb.0: -; RV32-NEXT: vmv1r.v v12, v0 -; RV32-NEXT: li a3, 0 ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu -; RV32-NEXT: vsext.vf4 v16, v10 ; RV32-NEXT: csrr a2, vlenb -; RV32-NEXT: srli a5, a2, 3 -; RV32-NEXT: vsetvli a4, zero, e8, mf4, ta, mu -; RV32-NEXT: sub a4, a1, a2 -; RV32-NEXT: vslidedown.vx v0, v0, a5 -; RV32-NEXT: bltu a1, a4, .LBB104_2 +; RV32-NEXT: vsext.vf4 v16, v8 +; RV32-NEXT: mv a3, a1 +; RV32-NEXT: bltu a1, a2, .LBB104_2 ; RV32-NEXT: # %bb.1: -; RV32-NEXT: mv a3, a4 +; RV32-NEXT: mv a3, a2 ; RV32-NEXT: .LBB104_2: -; RV32-NEXT: vsetvli a4, zero, e64, m8, ta, mu -; RV32-NEXT: vsext.vf4 v24, v8 -; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV32-NEXT: vnsrl.wx v8, v16, zero -; RV32-NEXT: vsetvli zero, a3, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t +; RV32-NEXT: li a4, 0 +; RV32-NEXT: vsext.vf4 v24, v10 +; RV32-NEXT: vsll.vi v8, v16, 3 +; RV32-NEXT: vsetvli zero, a3, e32, m4, ta, mu +; RV32-NEXT: vnsrl.wx v16, v8, zero +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t +; RV32-NEXT: srli a3, a2, 3 +; RV32-NEXT: vsetvli a5, zero, e8, mf4, ta, mu +; RV32-NEXT: sub a2, a1, a2 +; RV32-NEXT: vslidedown.vx v0, v0, a3 ; RV32-NEXT: bltu a1, a2, .LBB104_4 ; RV32-NEXT: # %bb.3: -; RV32-NEXT: mv a1, a2 +; RV32-NEXT: mv a4, a2 ; RV32-NEXT: .LBB104_4: -; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu -; RV32-NEXT: vsll.vi v24, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV32-NEXT: vnsrl.wx v4, v24, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu -; RV32-NEXT: vmv1r.v v0, v12 -; RV32-NEXT: vluxei32.v v8, (a0), v4, v0.t +; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV32-NEXT: vsll.vi v16, v24, 3 +; RV32-NEXT: vsetvli zero, a4, e32, m4, ta, mu +; RV32-NEXT: vnsrl.wx v24, v16, zero +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu +; RV32-NEXT: vluxei32.v v16, (a0), v24, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpgather_baseidx_sext_nxv16i16_nxv16f64: @@ -2526,37 +2524,35 @@ define @vpgather_baseidx_sext_nxv16i16_nxv16f64(double* % define @vpgather_baseidx_zext_nxv16i16_nxv16f64(double* %base, %idxs, %m, i32 zeroext %evl) { ; RV32-LABEL: vpgather_baseidx_zext_nxv16i16_nxv16f64: ; RV32: # %bb.0: -; RV32-NEXT: vmv1r.v v12, v0 -; RV32-NEXT: li a3, 0 ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu -; RV32-NEXT: vzext.vf4 v16, v10 ; RV32-NEXT: csrr a2, vlenb -; RV32-NEXT: srli a5, a2, 3 -; RV32-NEXT: vsetvli a4, zero, e8, mf4, ta, mu -; RV32-NEXT: sub a4, a1, a2 -; RV32-NEXT: vslidedown.vx v0, v0, a5 -; RV32-NEXT: bltu a1, a4, .LBB105_2 +; RV32-NEXT: vzext.vf4 v16, v8 +; RV32-NEXT: mv a3, a1 +; RV32-NEXT: bltu a1, a2, .LBB105_2 ; RV32-NEXT: # %bb.1: -; RV32-NEXT: mv a3, a4 +; RV32-NEXT: mv a3, a2 ; RV32-NEXT: .LBB105_2: -; RV32-NEXT: vsetvli a4, zero, e64, m8, ta, mu -; RV32-NEXT: vzext.vf4 v24, v8 -; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV32-NEXT: vnsrl.wx v8, v16, zero -; RV32-NEXT: vsetvli zero, a3, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t +; RV32-NEXT: li a4, 0 +; RV32-NEXT: vzext.vf4 v24, v10 +; RV32-NEXT: vsll.vi v8, v16, 3 +; RV32-NEXT: vsetvli zero, a3, e32, m4, ta, mu +; RV32-NEXT: vnsrl.wx v16, v8, zero +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t +; RV32-NEXT: srli a3, a2, 3 +; RV32-NEXT: vsetvli a5, zero, e8, mf4, ta, mu +; RV32-NEXT: sub a2, a1, a2 +; RV32-NEXT: vslidedown.vx v0, v0, a3 ; RV32-NEXT: bltu a1, a2, .LBB105_4 ; RV32-NEXT: # %bb.3: -; RV32-NEXT: mv a1, a2 +; RV32-NEXT: mv a4, a2 ; RV32-NEXT: .LBB105_4: -; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu -; RV32-NEXT: vsll.vi v24, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV32-NEXT: vnsrl.wx v4, v24, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu -; RV32-NEXT: vmv1r.v v0, v12 -; RV32-NEXT: vluxei32.v v8, (a0), v4, v0.t +; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, mu +; RV32-NEXT: vsll.vi v16, v24, 3 +; RV32-NEXT: vsetvli zero, a4, e32, m4, ta, mu +; RV32-NEXT: vnsrl.wx v24, v16, zero +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu +; RV32-NEXT: vluxei32.v v16, (a0), v24, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpgather_baseidx_zext_nxv16i16_nxv16f64: diff --git a/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll index ca444ee17b0c0..62b2338948689 100644 --- a/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll @@ -814,9 +814,9 @@ define void @vpscatter_baseidx_sext_nxv8i8_nxv8i64( %val, i64* ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf8 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -840,9 +840,9 @@ define void @vpscatter_baseidx_zext_nxv8i8_nxv8i64( %val, i64* ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf8 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -889,9 +889,9 @@ define void @vpscatter_baseidx_sext_nxv8i16_nxv8i64( %val, i64 ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf4 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -915,9 +915,9 @@ define void @vpscatter_baseidx_zext_nxv8i16_nxv8i64( %val, i64 ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf4 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -963,9 +963,9 @@ define void @vpscatter_baseidx_sext_nxv8i32_nxv8i64( %val, i64 ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf2 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -989,9 +989,9 @@ define void @vpscatter_baseidx_zext_nxv8i32_nxv8i64( %val, i64 ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf2 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1014,9 +1014,9 @@ define void @vpscatter_baseidx_nxv8i64( %val, i64* %base, %val, d ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf8 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1615,9 +1615,9 @@ define void @vpscatter_baseidx_zext_nxv6i8_nxv6f64( %val, d ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf8 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1664,9 +1664,9 @@ define void @vpscatter_baseidx_sext_nxv6i16_nxv6f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf4 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1690,9 +1690,9 @@ define void @vpscatter_baseidx_zext_nxv6i16_nxv6f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf4 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1738,9 +1738,9 @@ define void @vpscatter_baseidx_sext_nxv6i32_nxv6f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf2 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1764,9 +1764,9 @@ define void @vpscatter_baseidx_zext_nxv6i32_nxv6f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf2 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1789,9 +1789,9 @@ define void @vpscatter_baseidx_nxv6f64( %val, double* %base ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1854,9 +1854,9 @@ define void @vpscatter_baseidx_sext_nxv8i8_nxv8f64( %val, d ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf8 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1880,9 +1880,9 @@ define void @vpscatter_baseidx_zext_nxv8i8_nxv8f64( %val, d ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf8 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1929,9 +1929,9 @@ define void @vpscatter_baseidx_sext_nxv8i16_nxv8f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf4 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -1955,9 +1955,9 @@ define void @vpscatter_baseidx_zext_nxv8i16_nxv8f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf4 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -2003,9 +2003,9 @@ define void @vpscatter_baseidx_sext_nxv8i32_nxv8f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsext.vf2 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -2029,9 +2029,9 @@ define void @vpscatter_baseidx_zext_nxv8i32_nxv8f64( %val, ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vzext.vf2 v24, v16 ; RV32-NEXT: vsll.vi v16, v24, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -2054,9 +2054,9 @@ define void @vpscatter_baseidx_nxv8f64( %val, double* %base ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v16, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v16, zero -; RV32-NEXT: vsetvli zero, a1, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t ; RV32-NEXT: ret ; @@ -2231,9 +2231,9 @@ define void @vpscatter_baseidx_sext_nxv16i16_nxv16f64( %va ; RV32-NEXT: li a4, 0 ; RV32-NEXT: vsext.vf4 v16, v26 ; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a3, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v8, zero -; RV32-NEXT: vsetvli zero, a3, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: addi a3, sp, 16 ; RV32-NEXT: vl8re8.v v8, (a3) # Unknown-size Folded Reload ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t @@ -2247,9 +2247,9 @@ define void @vpscatter_baseidx_sext_nxv16i16_nxv16f64( %va ; RV32-NEXT: .LBB97_4: ; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a4, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a4, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: csrr a1, vlenb ; RV32-NEXT: slli a1, a1, 3 ; RV32-NEXT: add a1, sp, a1 @@ -2347,9 +2347,9 @@ define void @vpscatter_baseidx_zext_nxv16i16_nxv16f64( %va ; RV32-NEXT: li a4, 0 ; RV32-NEXT: vzext.vf4 v16, v26 ; RV32-NEXT: vsll.vi v8, v8, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a3, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v24, v8, zero -; RV32-NEXT: vsetvli zero, a3, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: addi a3, sp, 16 ; RV32-NEXT: vl8re8.v v8, (a3) # Unknown-size Folded Reload ; RV32-NEXT: vsoxei32.v v8, (a0), v24, v0.t @@ -2363,9 +2363,9 @@ define void @vpscatter_baseidx_zext_nxv16i16_nxv16f64( %va ; RV32-NEXT: .LBB98_4: ; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, mu ; RV32-NEXT: vsll.vi v8, v16, 3 -; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, mu +; RV32-NEXT: vsetvli zero, a4, e32, m4, ta, mu ; RV32-NEXT: vnsrl.wx v16, v8, zero -; RV32-NEXT: vsetvli zero, a4, e64, m8, ta, mu +; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu ; RV32-NEXT: csrr a1, vlenb ; RV32-NEXT: slli a1, a1, 3 ; RV32-NEXT: add a1, sp, a1