Skip to content

Commit

Permalink
[LV] Add option to still enable the legacy cost model. (llvm#99536)
Browse files Browse the repository at this point in the history
This patch adds a new temporary option to still use the legacy cost
model after llvm#92555. It defaults
to false and the only intended use is to adjust the default to true in
the soon-to-be-cut release branch.

PR: llvm#99536
  • Loading branch information
fhahn authored and sgundapa committed Jul 23, 2024
1 parent dcc4415 commit 7dc331e
Showing 1 changed file with 20 additions and 10 deletions.
30 changes: 20 additions & 10 deletions llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,11 @@ static cl::opt<unsigned> VectorizeMemoryCheckThreshold(
"vectorize-memory-check-threshold", cl::init(128), cl::Hidden,
cl::desc("The maximum allowed number of runtime memory checks"));

static cl::opt<bool> UseLegacyCostModel(
"vectorize-use-legacy-cost-model", cl::init(false), cl::Hidden,
cl::desc("Use the legacy cost model instead of the VPlan-based cost model. "
"This option will be removed in the future."));

// Option prefer-predicate-over-epilogue indicates that an epilogue is undesired,
// that predication is preferred, and this lists all options. I.e., the
// vectorizer will try to fold the tail-loop (epilogue) into the vector body
Expand Down Expand Up @@ -10319,8 +10324,9 @@ bool LoopVectorizePass::processLoop(Loop *L) {
InnerLoopUnroller Unroller(L, PSE, LI, DT, TLI, TTI, AC, ORE, IC, &LVL,
&CM, BFI, PSI, Checks);

VPlan &BestPlan = LVP.getBestPlan();
assert(BestPlan.hasScalarVFOnly() &&
VPlan &BestPlan =
UseLegacyCostModel ? LVP.getBestPlanFor(VF.Width) : LVP.getBestPlan();
assert((UseLegacyCostModel || BestPlan.hasScalarVFOnly()) &&
"VPlan cost model and legacy cost model disagreed");
LVP.executePlan(VF.Width, IC, BestPlan, Unroller, DT, false);

Expand Down Expand Up @@ -10437,14 +10443,18 @@ bool LoopVectorizePass::processLoop(Loop *L) {
if (!MainILV.areSafetyChecksAdded())
DisableRuntimeUnroll = true;
} else {
VPlan &BestPlan = LVP.getBestPlan();
assert(size(BestPlan.vectorFactors()) == 1 &&
"Plan should have a single VF");
ElementCount Width = *BestPlan.vectorFactors().begin();
LLVM_DEBUG(dbgs() << "VF picked by VPlan cost model: " << Width
<< "\n");
assert(VF.Width == Width &&
"VPlan cost model and legacy cost model disagreed");
ElementCount Width = VF.Width;
VPlan &BestPlan =
UseLegacyCostModel ? LVP.getBestPlanFor(Width) : LVP.getBestPlan();
if (!UseLegacyCostModel) {
assert(size(BestPlan.vectorFactors()) == 1 &&
"Plan should have a single VF");
Width = *BestPlan.vectorFactors().begin();
LLVM_DEBUG(dbgs()
<< "VF picked by VPlan cost model: " << Width << "\n");
assert(VF.Width == Width &&
"VPlan cost model and legacy cost model disagreed");
}
InnerLoopVectorizer LB(L, PSE, LI, DT, TLI, TTI, AC, ORE, Width,
VF.MinProfitableTripCount, IC, &LVL, &CM, BFI,
PSI, Checks);
Expand Down

0 comments on commit 7dc331e

Please sign in to comment.