================ @@ -491,17 +491,39 @@ 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); + HeaderVPBB->insert(BaseIV, IP); + ResultTy = TruncTy; + } + + // Truncate step if needed. + Type *StepTy = TypeInfo.inferScalarType(Step); + if (ResultTy != StepTy) { + assert(StepTy->getScalarSizeInBits() > ResultTy->getScalarSizeInBits() && + "Not truncating."); + assert(StepTy->isIntegerTy() && "Truncation requires an integer type"); + Step = new VPScalarCastRecipe(Instruction::Trunc, Step, ResultTy); + auto *VecPreheader = + cast<VPBasicBlock>(Plan.getVectorLoopRegion()->getSinglePredecessor()); ---------------- fhahn wrote:
Done, thanks! https://github.com/llvm/llvm-project/pull/78113 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits