[llvm] r342276 - HotColdSplit: fix isSingleEntrySingleExit
Sebastian Pop via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 14 13:36:16 PDT 2018
Author: spop
Date: Fri Sep 14 13:36:14 2018
New Revision: 342276
URL: http://llvm.org/viewvc/llvm-project?rev=342276&view=rev
Log:
HotColdSplit: fix isSingleEntrySingleExit
remove duplicate entries from isSingleEntrySingleExit: the Entry block is
already added by the loop over the dominance frontier.
Remove the heuristic from isOutlineCandidate that a region is too small when it
only contains a basic block. With this change we now grow regions starting from
a block and we continue adding to the ValidColdRegion. Check the heuristic just
before code generation.
Modified:
llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp
Modified: llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp?rev=342276&r1=342275&r2=342276&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp (original)
+++ llvm/trunk/lib/Transforms/IPO/HotColdSplitting.cpp Fri Sep 14 13:36:14 2018
@@ -87,7 +87,6 @@ static bool isSingleEntrySingleExit(Basi
if (!PDT->dominates(Exit, Entry))
return false;
- Region.push_back(Entry);
for (auto I = df_begin(Entry), E = df_end(Entry); I != E;) {
if (*I == Exit) {
I.skipChildren();
@@ -230,9 +229,7 @@ private:
const BasicBlock *Exit) const {
if (!Exit)
return false;
- // TODO: Find a better metric to compute the size of region being outlined.
- if (Region.size() == 1)
- return false;
+
// Regions with landing pads etc.
for (const BasicBlock *BB : Region) {
if (BB->isEHPad() || BB->hasAddressTaken())
@@ -344,8 +341,7 @@ Function *HotColdSplitting::outlineColdB
BasicBlock *BB = *I;
if (PSI->isColdBB(BB, BFI) || !HotBlocks.count(BB)) {
SmallVector<BasicBlock *, 4> ValidColdRegion, Region;
- auto *BBNode = (*PDT)[BB];
- auto Exit = BBNode->getIDom()->getBlock();
+ BasicBlock *Exit = (*PDT)[BB]->getIDom()->getBlock();
// We might need a virtual exit which post-dominates all basic blocks.
if (!Exit)
continue;
@@ -360,12 +356,12 @@ Function *HotColdSplitting::outlineColdB
Exit = (*PDT)[Exit]->getIDom()->getBlock();
}
if (ExitColdRegion) {
+ // Do not outline a region with only one block.
+ if (ValidColdRegion.size() == 1)
+ continue;
+
++NumColdSESEFound;
// Candidate for outlining. FIXME: Continue outlining.
- // FIXME: Shouldn't need uniquing, debug isSingleEntrySingleExit
- //std::sort(ValidColdRegion.begin(), ValidColdRegion.end());
- auto last = std::unique(ValidColdRegion.begin(), ValidColdRegion.end());
- ValidColdRegion.erase(last, ValidColdRegion.end());
return extractColdRegion(ValidColdRegion, DT, BFI, ORE);
}
}
More information about the llvm-commits
mailing list