================ @@ -491,19 +491,41 @@ void VPlanTransforms::removeDeadRecipes(VPlan &Plan) { static VPValue *createScalarIVSteps(VPlan &Plan, const InductionDescriptor &ID, ScalarEvolution &SE, Instruction *TruncI, - Type *IVTy, VPValue *StartV, - VPValue *Step) { + VPValue *StartV, VPValue *Step) { VPBasicBlock *HeaderVPBB = Plan.getVectorLoopRegion()->getEntryBasicBlock(); auto IP = HeaderVPBB->getFirstNonPhi(); VPCanonicalIVPHIRecipe *CanonicalIV = Plan.getCanonicalIV(); - Type *TruncTy = TruncI ? TruncI->getType() : IVTy; VPValue *BaseIV = CanonicalIV; - if (!CanonicalIV->isCanonical(ID.getKind(), StartV, Step, TruncTy)) { - BaseIV = new VPDerivedIVRecipe(ID, StartV, CanonicalIV, Step, - TruncI ? TruncI->getType() : nullptr); + VPTypeAnalysis TypeInfo(SE.getContext()); + Type *StepTy = TypeInfo.inferScalarType(Step); + if (!CanonicalIV->isCanonical(ID.getKind(), StartV, Step)) { + BaseIV = new VPDerivedIVRecipe(ID, StartV, CanonicalIV, Step); HeaderVPBB->insert(BaseIV->getDefiningRecipe(), IP); } + // Truncate base induction if needed. + if (TruncI) { + Type *TruncTy = TruncI->getType(); + assert(TypeInfo.inferScalarType(BaseIV)->getScalarSizeInBits() > + TruncTy->getScalarSizeInBits() && + StepTy->isIntegerTy() && "Truncation requires an integer step"); ---------------- ayalz wrote:
```suggestion assert(ResultTy->getScalarSizeInBits() > TruncTy->getScalarSizeInBits() && ResultTy->isIntegerTy() && "Truncation requires an integer type"); ``` https://github.com/llvm/llvm-project/pull/78113 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits