[llvm] [LSR][term-fold] Adjust expansion budget based on trip count (PR #80304)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 2 06:55:25 PST 2024
================
@@ -6813,6 +6813,17 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
if (!isAlmostDeadIV(ToFold, LoopLatch, TermCond))
return std::nullopt;
+ // Inserting instructions in the preheader has a runtime cost, scale
+ // the allowed cost with the loops trip count as best we can.
+ const unsigned ExpansionBudget = [&]() {
+ if (unsigned SmallTC = SE.getSmallConstantMaxTripCount(L))
+ return std::min(2*SCEVCheapExpansionBudget, SmallTC);
+ if (std::optional<unsigned> SmallTC = getLoopEstimatedTripCount(L))
+ return std::min(2*SCEVCheapExpansionBudget, *SmallTC);
+ // Unknown trip count, assume long running by default.
+ return 2*SCEVCheapExpansionBudget;
----------------
nikic wrote:
```suggestion
unsigned Budget = 2 * SCEVCheapExpansionBudget;
if (unsigned SmallTC = SE.getSmallConstantMaxTripCount(L))
return std::min(Budget, SmallTC);
if (std::optional<unsigned> SmallTC = getLoopEstimatedTripCount(L))
return std::min(Budget, *SmallTC);
// Unknown trip count, assume long running by default.
return Budget;
```
https://github.com/llvm/llvm-project/pull/80304
More information about the llvm-commits
mailing list