LLVM  10.0.0svn
HotColdSplitting.h
Go to the documentation of this file.
1 //===- HotColdSplitting.h ---- Outline Cold Regions -------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //===----------------------------------------------------------------------===//
7 //
8 // This pass outlines cold regions to a separate function.
9 //
10 //===----------------------------------------------------------------------===//
11 
12 #ifndef LLVM_TRANSFORMS_IPO_HOTCOLDSPLITTING_H
13 #define LLVM_TRANSFORMS_IPO_HOTCOLDSPLITTING_H
14 
15 #include "llvm/IR/PassManager.h"
16 
17 namespace llvm {
18 
19 class Module;
20 class ProfileSummaryInfo;
21 class BlockFrequencyInfo;
22 class TargetTransformInfo;
23 class OptimizationRemarkEmitter;
24 class AssumptionCache;
25 class DominatorTree;
26 class CodeExtractorAnalysisCache;
27 
28 /// A sequence of basic blocks.
29 ///
30 /// A 0-sized SmallVector is slightly cheaper to move than a std::vector.
32 
34 public:
40  : PSI(ProfSI), GetBFI(GBFI), GetTTI(GTTI), GetORE(GORE), LookupAC(LAC) {}
41  bool run(Module &M);
42 
43 private:
44  bool isFunctionCold(const Function &F) const;
45  bool shouldOutlineFrom(const Function &F) const;
46  bool outlineColdRegions(Function &F, bool HasProfileSummary);
47  Function *extractColdRegion(const BlockSequence &Region,
48  const CodeExtractorAnalysisCache &CEAC,
52  AssumptionCache *AC, unsigned Count);
53  ProfileSummaryInfo *PSI;
56  std::function<OptimizationRemarkEmitter &(Function &)> *GetORE;
58 };
59 
60 /// Pass to outline cold regions.
61 class HotColdSplittingPass : public PassInfoMixin<HotColdSplittingPass> {
62 public:
64 };
65 
66 } // end namespace llvm
67 
68 #endif // LLVM_TRANSFORMS_IPO_HOTCOLDSPLITTING_H
69 
HotColdSplitting(ProfileSummaryInfo *ProfSI, function_ref< BlockFrequencyInfo *(Function &)> GBFI, function_ref< TargetTransformInfo &(Function &)> GTTI, std::function< OptimizationRemarkEmitter &(Function &)> *GORE, function_ref< AssumptionCache *(Function &)> LAC)
This class represents lattice values for constants.
Definition: AllocatorList.h:23
A Module instance is used to store all the information related to an LLVM module. ...
Definition: Module.h:66
Analysis providing profile information.
An efficient, type-erasing, non-owning reference to a callable.
Definition: STLExtras.h:104
A cache of @llvm.assume calls within a function.
F(f)
A CRTP mix-in to automatically provide informational APIs needed for passes.
Definition: PassManager.h:373
Concrete subclass of DominatorTreeBase that is used to compute a normal dominator tree...
Definition: Dominators.h:144
BlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation to estimate IR basic block frequen...
A set of analyses that are preserved following a run of a transformation pass.
Definition: PassManager.h:154
A cache for the CodeExtractor analysis.
Definition: CodeExtractor.h:46
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
This is a &#39;vector&#39; (really, a variable-sized array), optimized for the case when the array is small...
Definition: SmallVector.h:837
Pass to outline cold regions.
print Print MemDeps of function
A container for analyses that lazily runs them and caches their results.
This header defines various interfaces for pass management in LLVM.
The optimization diagnostic interface.