summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/IPO/HotColdSplitting.cpp
diff options
context:
space:
mode:
authorTeresa Johnson <tejohnson@google.com>2018-10-24 18:53:47 +0000
committerTeresa Johnson <tejohnson@google.com>2018-10-24 18:53:47 +0000
commitc8dba682bba9c80654d7a10331f718da9b7b0475 (patch)
tree319803db7b4c42403065259031055708cb8362cf /llvm/lib/Transforms/IPO/HotColdSplitting.cpp
parentb40e0520e1b0c401c38aee194c0f7ef6f7849e98 (diff)
downloadbcm5719-llvm-c8dba682bba9c80654d7a10331f718da9b7b0475.tar.gz
bcm5719-llvm-c8dba682bba9c80654d7a10331f718da9b7b0475.zip
[hot-cold-split] Name split functions with ".cold" suffix
Summary: The current default of appending "_"+entry block label to the new extracted cold function breaks demangling. Change the deliminator from "_" to "." to enable demangling. Because the header block label will be empty for release compile code, use "extracted" after the "." when the label is empty. Additionally, add a mechanism for the client to pass in an alternate suffix applied after the ".", and have the hot cold split pass use "cold."+Count, where the Count is currently 1 but can be used to uniquely number multiple cold functions split out from the same function with D53588. Reviewers: sebpop, hiraditya Subscribers: llvm-commits, erik.pilkington Differential Revision: https://reviews.llvm.org/D53534 llvm-svn: 345178
Diffstat (limited to 'llvm/lib/Transforms/IPO/HotColdSplitting.cpp')
-rw-r--r--llvm/lib/Transforms/IPO/HotColdSplitting.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/IPO/HotColdSplitting.cpp b/llvm/lib/Transforms/IPO/HotColdSplitting.cpp
index d3e086e972a..a63cd842241 100644
--- a/llvm/lib/Transforms/IPO/HotColdSplitting.cpp
+++ b/llvm/lib/Transforms/IPO/HotColdSplitting.cpp
@@ -265,7 +265,7 @@ private:
DominatorTree *DT, PostDomTree *PDT);
Function *extractColdRegion(const SmallVectorImpl<BasicBlock *> &Region,
DominatorTree *DT, BlockFrequencyInfo *BFI,
- OptimizationRemarkEmitter &ORE);
+ OptimizationRemarkEmitter &ORE, unsigned Count);
bool isOutlineCandidate(const SmallVectorImpl<BasicBlock *> &Region,
const BasicBlock *Exit) const {
if (!Exit)
@@ -331,16 +331,18 @@ bool HotColdSplitting::shouldOutlineFrom(const Function &F) const {
return true;
}
-Function *
-HotColdSplitting::extractColdRegion(const SmallVectorImpl<BasicBlock *> &Region,
- DominatorTree *DT, BlockFrequencyInfo *BFI,
- OptimizationRemarkEmitter &ORE) {
+Function *HotColdSplitting::extractColdRegion(
+ const SmallVectorImpl<BasicBlock *> &Region, DominatorTree *DT,
+ BlockFrequencyInfo *BFI, OptimizationRemarkEmitter &ORE, unsigned Count) {
assert(!Region.empty());
LLVM_DEBUG(for (auto *BB : Region)
llvm::dbgs() << "\nExtracting: " << *BB;);
// TODO: Pass BFI and BPI to update profile information.
- CodeExtractor CE(Region, DT);
+ CodeExtractor CE(Region, DT, /* AggregateArgs */ false, /* BFI */ nullptr,
+ /* BPI */ nullptr, /* AllowVarArgs */ false,
+ /* AllowAlloca */ false,
+ /* Suffix */ "cold." + std::to_string(Count));
SetVector<Value *> Inputs, Outputs, Sinks;
CE.findInputsOutputs(Inputs, Outputs, Sinks);
@@ -426,7 +428,7 @@ const Function *HotColdSplitting::outlineColdBlocks(Function &F,
++NumColdSESEFound;
ValidColdRegion.push_back(ExitColdRegion);
// Candidate for outlining. FIXME: Continue outlining.
- return extractColdRegion(ValidColdRegion, DT, BFI, ORE);
+ return extractColdRegion(ValidColdRegion, DT, BFI, ORE, /* Count */ 1);
}
}
}
OpenPOWER on IntegriCloud