Skip to content

Commit 2adae76

Browse files
committed
[NFC] Move hot cold splitting class to header file
Summary: This is to facilitate unittests Reviewers: compnerd, vsk, tejohnson, sebpop, brzycki, SirishP Reviewed By: tejohnson Subscribers: llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D68079 llvm-svn: 373151
1 parent 6891c72 commit 2adae76

File tree

2 files changed

+36
-31
lines changed

2 files changed

+36
-31
lines changed

llvm/include/llvm/Transforms/IPO/HotColdSplitting.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,42 @@
1717
namespace llvm {
1818

1919
class Module;
20+
class ProfileSummaryInfo;
21+
class BlockFrequencyInfo;
22+
class TargetTransformInfo;
23+
class OptimizationRemarkEmitter;
24+
class AssumptionCache;
25+
class DominatorTree;
26+
27+
/// A sequence of basic blocks.
28+
///
29+
/// A 0-sized SmallVector is slightly cheaper to move than a std::vector.
30+
using BlockSequence = SmallVector<BasicBlock *, 0>;
31+
32+
class HotColdSplitting {
33+
public:
34+
HotColdSplitting(ProfileSummaryInfo *ProfSI,
35+
function_ref<BlockFrequencyInfo *(Function &)> GBFI,
36+
function_ref<TargetTransformInfo &(Function &)> GTTI,
37+
std::function<OptimizationRemarkEmitter &(Function &)> *GORE,
38+
function_ref<AssumptionCache *(Function &)> LAC)
39+
: PSI(ProfSI), GetBFI(GBFI), GetTTI(GTTI), GetORE(GORE), LookupAC(LAC) {}
40+
bool run(Module &M);
41+
42+
private:
43+
bool isFunctionCold(const Function &F) const;
44+
bool shouldOutlineFrom(const Function &F) const;
45+
bool outlineColdRegions(Function &F, bool HasProfileSummary);
46+
Function *extractColdRegion(const BlockSequence &Region, DominatorTree &DT,
47+
BlockFrequencyInfo *BFI, TargetTransformInfo &TTI,
48+
OptimizationRemarkEmitter &ORE,
49+
AssumptionCache *AC, unsigned Count);
50+
ProfileSummaryInfo *PSI;
51+
function_ref<BlockFrequencyInfo *(Function &)> GetBFI;
52+
function_ref<TargetTransformInfo &(Function &)> GetTTI;
53+
std::function<OptimizationRemarkEmitter &(Function &)> *GetORE;
54+
function_ref<AssumptionCache *(Function &)> LookupAC;
55+
};
2056

2157
/// Pass to outline cold regions.
2258
class HotColdSplittingPass : public PassInfoMixin<HotColdSplittingPass> {

llvm/lib/Transforms/IPO/HotColdSplitting.cpp

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,6 @@ static cl::opt<int>
8585
"multiple of TCC_Basic)"));
8686

8787
namespace {
88-
89-
/// A sequence of basic blocks.
90-
///
91-
/// A 0-sized SmallVector is slightly cheaper to move than a std::vector.
92-
using BlockSequence = SmallVector<BasicBlock *, 0>;
93-
9488
// Same as blockEndsInUnreachable in CodeGen/BranchFolding.cpp. Do not modify
9589
// this function unless you modify the MBB version as well.
9690
//
@@ -169,31 +163,6 @@ static bool markFunctionCold(Function &F, bool UpdateEntryCount = false) {
169163
return Changed;
170164
}
171165

172-
class HotColdSplitting {
173-
public:
174-
HotColdSplitting(ProfileSummaryInfo *ProfSI,
175-
function_ref<BlockFrequencyInfo *(Function &)> GBFI,
176-
function_ref<TargetTransformInfo &(Function &)> GTTI,
177-
std::function<OptimizationRemarkEmitter &(Function &)> *GORE,
178-
function_ref<AssumptionCache *(Function &)> LAC)
179-
: PSI(ProfSI), GetBFI(GBFI), GetTTI(GTTI), GetORE(GORE), LookupAC(LAC) {}
180-
bool run(Module &M);
181-
182-
private:
183-
bool isFunctionCold(const Function &F) const;
184-
bool shouldOutlineFrom(const Function &F) const;
185-
bool outlineColdRegions(Function &F, bool HasProfileSummary);
186-
Function *extractColdRegion(const BlockSequence &Region, DominatorTree &DT,
187-
BlockFrequencyInfo *BFI, TargetTransformInfo &TTI,
188-
OptimizationRemarkEmitter &ORE,
189-
AssumptionCache *AC, unsigned Count);
190-
ProfileSummaryInfo *PSI;
191-
function_ref<BlockFrequencyInfo *(Function &)> GetBFI;
192-
function_ref<TargetTransformInfo &(Function &)> GetTTI;
193-
std::function<OptimizationRemarkEmitter &(Function &)> *GetORE;
194-
function_ref<AssumptionCache *(Function &)> LookupAC;
195-
};
196-
197166
class HotColdSplittingLegacyPass : public ModulePass {
198167
public:
199168
static char ID;

0 commit comments

Comments
 (0)