- Notifications
You must be signed in to change notification settings - Fork 15.3k
Open
Labels
Description
This work try to move EVL lowering into tryToBuildVPlanWithVPRecipes for removing the following TODO.
// TODO: try to put it close to addActiveLaneMask(). The ultimate goal of this work is to move addExplicitVectorLength to:
if (useActiveLaneMask(Style)) { ... } else if (CM.foldTailWithEVL() && !Plan->hasScalarVFOnly()) { VPlanTransforms::runPass(VPlanTransforms::addExplicitVectorLength, *Plan, CM.getMaxSafeElements()); } As an intermediate step, it will first be moved to the beginning of the following for loop:
for (ElementCount VF = MinVF; ElementCount::isKnownLT(VF, MaxVFTimes2);) { VFRange SubRange = {VF, MaxVFTimes2}; if (auto Plan = tryToBuildVPlanWithVPRecipes( std::unique_ptr<VPlan>(VPlan0->duplicate()), SubRange, &LVer)) { /* Move VPlanTransforms::addExplicitVectorLength to HERE*/ bool HasScalarVF = Plan->hasScalarVFOnly(); // Now optimize the initial VPlan. if (!HasScalarVF) VPlanTransforms::runPass(VPlanTransforms::truncateToMinimalBitwidths, *Plan, CM.getMinimalBitwidths()); //VPlanTransforms::runPass(VPlanTransforms::optimize, *Plan); VPlanTransforms::runPass(VPlanTransforms::optimize1, *Plan); // TODO: try to put it close to addActiveLaneMask(). if (CM.foldTailWithEVL() && !HasScalarVF) VPlanTransforms::runPass(VPlanTransforms::addExplicitVectorLength, *Plan, CM.getMaxSafeElements()); VPlanTransforms::runPass(VPlanTransforms::optimize2, *Plan); assert(verifyVPlanIsValid(*Plan) && "VPlan is invalid"); VPlans.push_back(std::move(Plan)); } VF = SubRange.End; } and then finally into tryToBuildVPlanWithVPRecipes.