diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp index a4198c4329f78..4df73e67e0141 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp @@ -5277,7 +5277,8 @@ SDValue DAGTypeLegalizer::PromoteIntRes_STEP_VECTOR(SDNode *N) { SDLoc dl(N); EVT OutVT = N->getValueType(0); EVT NOutVT = TLI.getTypeToTransformTo(*DAG.getContext(), OutVT); - assert(NOutVT.isVector() && "Type must be promoted to a vector type"); + assert(NOutVT.isScalableVector() && + "Type must be promoted to a scalable vector type"); APInt StepVal = cast(N->getOperand(0))->getAPIntValue(); return DAG.getStepVector(dl, NOutVT, StepVal.sext(NOutVT.getScalarSizeInBits())); diff --git a/llvm/test/CodeGen/RISCV/rvv/stepvector.ll b/llvm/test/CodeGen/RISCV/rvv/stepvector.ll index 61e1386503b4f..e94a8a432eaef 100644 --- a/llvm/test/CodeGen/RISCV/rvv/stepvector.ll +++ b/llvm/test/CodeGen/RISCV/rvv/stepvector.ll @@ -167,6 +167,18 @@ define @stepvector_nxv2i16() { ret %v } +declare @llvm.experimental.stepvector.nxv2i15() + +define @stepvector_nxv2i15() { +; CHECK-LABEL: stepvector_nxv2i15: +; CHECK: # %bb.0: +; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu +; CHECK-NEXT: vid.v v8 +; CHECK-NEXT: ret + %v = call @llvm.experimental.stepvector.nxv2i15() + ret %v +} + declare @llvm.experimental.stepvector.nxv3i16() define @stepvector_nxv3i16() { @@ -515,7 +527,6 @@ entry: ret %3 } - define @shl_stepvector_nxv8i64() { ; CHECK-LABEL: shl_stepvector_nxv8i64: ; CHECK: # %bb.0: # %entry