[PATCH] D89773: [IRCE] consolidate profitability check
Serguei Katkov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 20 02:05:23 PDT 2020
skatkov created this revision.
skatkov added reviewers: ebrevnov, mkazantsev.
Herald added subscribers: dantrushin, hiraditya.
Herald added a project: LLVM.
skatkov requested review of this revision.
Use BFI if it is available and BPI otherwise.
This promised follow-up after D89451 <https://reviews.llvm.org/D89451>.
https://reviews.llvm.org/D89773
Files:
llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
Index: llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
+++ llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
@@ -243,6 +243,10 @@
llvm::Optional<llvm::function_ref<llvm::BlockFrequencyInfo &()> >;
GetBFIFunc GetBFI;
+ // Returns true if it is profitable to do a transform basing on estimation of
+ // number of iterations.
+ bool checkProfitability(const Loop &L, unsigned LatchBrExitIdx);
+
public:
InductiveRangeCheckElimination(ScalarEvolution &SE,
BranchProbabilityInfo *BPI, DominatorTree &DT,
@@ -787,16 +791,6 @@
unsigned LatchBrExitIdx = LatchBr->getSuccessor(0) == Header ? 1 : 0;
- BranchProbability ExitProbability =
- BPI ? BPI->getEdgeProbability(LatchBr->getParent(), LatchBrExitIdx)
- : BranchProbability::getZero();
-
- if (!SkipProfitabilityChecks &&
- ExitProbability > BranchProbability(1, MaxExitProbReciprocal)) {
- FailureReason = "short running loop, not profitable";
- return None;
- }
-
ICmpInst *ICI = dyn_cast<ICmpInst>(LatchBr->getCondition());
if (!ICI || !isa<IntegerType>(ICI->getOperand(0)->getType())) {
FailureReason = "latch terminator branch not conditional on integral icmp";
@@ -1855,6 +1849,37 @@
return Changed;
}
+bool
+InductiveRangeCheckElimination::checkProfitability(const Loop &L,
+ unsigned LatchBrExitIdx) {
+ if (SkipProfitabilityChecks)
+ return true;
+ if (GetBFI.hasValue()) {
+ BlockFrequencyInfo &BFI = (*GetBFI)();
+ uint64_t hFreq = BFI.getBlockFreq(L.getHeader()).getFrequency();
+ uint64_t phFreq = BFI.getBlockFreq(L.getLoopPreheader()).getFrequency();
+ if (phFreq != 0 && hFreq != 0 && (hFreq / phFreq < MinRuntimeIterations)) {
+ LLVM_DEBUG(dbgs() << "irce: could not prove profitability: "
+ << "the estimated number of iterations basing on "
+ "frequency info is " << (hFreq / phFreq) << "\n";);
+ return false;
+ }
+ return true;
+ }
+
+ if (!BPI)
+ return true;
+ BranchProbability ExitProbability =
+ BPI->getEdgeProbability(L.getLoopLatch(), LatchBrExitIdx);
+ if (ExitProbability > BranchProbability(1, MaxExitProbReciprocal)) {
+ LLVM_DEBUG(dbgs() << "irce: could not prove profitability: "
+ << "the exit probability is too big " << ExitProbability
+ << "\n";);
+ return false;
+ }
+ return true;
+}
+
bool InductiveRangeCheckElimination::run(
Loop *L, function_ref<void(Loop *, bool)> LPMAddNewLoop) {
if (L->getBlocks().size() >= LoopSizeCutoff) {
@@ -1901,18 +1926,8 @@
return false;
}
LoopStructure LS = MaybeLoopStructure.getValue();
- // Profitability check.
- if (!SkipProfitabilityChecks && GetBFI.hasValue()) {
- BlockFrequencyInfo &BFI = (*GetBFI)();
- uint64_t hFreq = BFI.getBlockFreq(LS.Header).getFrequency();
- uint64_t phFreq = BFI.getBlockFreq(Preheader).getFrequency();
- if (phFreq != 0 && hFreq != 0 && (hFreq / phFreq < MinRuntimeIterations)) {
- LLVM_DEBUG(dbgs() << "irce: could not prove profitability: "
- << "the estimated number of iterations basing on "
- "frequency info is " << (hFreq / phFreq) << "\n";);
- return false;
- }
- }
+ if (!checkProfitability(*L, LS.LatchBrExitIdx))
+ return false;
const SCEVAddRecExpr *IndVar =
cast<SCEVAddRecExpr>(SE.getMinusSCEV(SE.getSCEV(LS.IndVarBase), SE.getSCEV(LS.IndVarStep)));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D89773.299296.patch
Type: text/x-patch
Size: 3693 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201020/b24d0da5/attachment.bin>
More information about the llvm-commits
mailing list