================ @@ -491,17 +491,38 @@ 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); - HeaderVPBB->insert(BaseIV->getDefiningRecipe(), IP); + VPSingleDefRecipe *BaseIV = CanonicalIV; + if (!CanonicalIV->isCanonical(ID.getKind(), StartV, Step)) { + BaseIV = new VPDerivedIVRecipe(ID, StartV, CanonicalIV, Step); + HeaderVPBB->insert(BaseIV, IP); + } + + // Truncate base induction if needed. + VPTypeAnalysis TypeInfo(SE.getContext()); + Type *ResultTy = TypeInfo.inferScalarType(BaseIV); + if (TruncI) { + Type *TruncTy = TruncI->getType(); + assert(ResultTy->getScalarSizeInBits() > TruncTy->getScalarSizeInBits() && + "Not truncating."); + assert(ResultTy->isIntegerTy() && "Truncation requires an integer type"); + BaseIV = new VPScalarCastRecipe(Instruction::Trunc, BaseIV, TruncTy); ---------------- fhahn wrote:
Argh, sent the update too early (or too late in the day)! Should be fixed now., there were a number of test failures. 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