1414#define LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H
1515
1616#include " llvm/CodeGen/MachineFunctionPass.h"
17+ #include " llvm/CodeGen/MachinePassManager.h"
1718#include " llvm/Support/BlockFrequency.h"
1819#include < cstdint>
1920#include < memory>
@@ -30,29 +31,30 @@ class raw_ostream;
3031
3132// / MachineBlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation
3233// / to estimate machine basic block frequencies.
33- class MachineBlockFrequencyInfo : public MachineFunctionPass {
34+ class MachineBlockFrequencyInfo {
3435 using ImplType = BlockFrequencyInfoImpl<MachineBasicBlock>;
3536 std::unique_ptr<ImplType> MBFI;
3637
3738public:
38- static char ID;
39-
40- MachineBlockFrequencyInfo ();
39+ MachineBlockFrequencyInfo (); // Legacy pass manager only.
4140 explicit MachineBlockFrequencyInfo (MachineFunction &F,
4241 MachineBranchProbabilityInfo &MBPI,
4342 MachineLoopInfo &MLI);
44- ~MachineBlockFrequencyInfo () override ;
45-
46- void getAnalysisUsage (AnalysisUsage &AU) const override ;
43+ MachineBlockFrequencyInfo (MachineBlockFrequencyInfo &&);
44+ ~MachineBlockFrequencyInfo ();
4745
48- bool runOnMachineFunction (MachineFunction &F) override ;
46+ // / Handle invalidation explicitly.
47+ bool invalidate (MachineFunction &F, const PreservedAnalyses &PA,
48+ MachineFunctionAnalysisManager::Invalidator &);
4949
5050 // / calculate - compute block frequency info for the given function.
5151 void calculate (const MachineFunction &F,
5252 const MachineBranchProbabilityInfo &MBPI,
5353 const MachineLoopInfo &MLI);
5454
55- void releaseMemory () override ;
55+ void print (raw_ostream &OS);
56+
57+ void releaseMemory ();
5658
5759 // / getblockFreq - Return block frequency. Return 0 if we don't have the
5860 // / information. Please note that initial frequency is equal to 1024. It means
@@ -107,6 +109,49 @@ Printable printBlockFreq(const MachineBlockFrequencyInfo &MBFI,
107109Printable printBlockFreq (const MachineBlockFrequencyInfo &MBFI,
108110 const MachineBasicBlock &MBB);
109111
112+ class MachineBlockFrequencyAnalysis
113+ : public AnalysisInfoMixin<MachineBlockFrequencyAnalysis> {
114+ friend AnalysisInfoMixin<MachineBlockFrequencyAnalysis>;
115+ static AnalysisKey Key;
116+
117+ public:
118+ using Result = MachineBlockFrequencyInfo;
119+
120+ Result run (MachineFunction &MF, MachineFunctionAnalysisManager &MFAM);
121+ };
122+
123+ // / Printer pass for the \c MachineBlockFrequencyInfo results.
124+ class MachineBlockFrequencyPrinterPass
125+ : public PassInfoMixin<MachineBlockFrequencyPrinterPass> {
126+ raw_ostream &OS;
127+
128+ public:
129+ explicit MachineBlockFrequencyPrinterPass (raw_ostream &OS) : OS(OS) {}
130+
131+ PreservedAnalyses run (MachineFunction &MF,
132+ MachineFunctionAnalysisManager &MFAM);
133+
134+ static bool isRequired () { return true ; }
135+ };
136+
137+ class MachineBlockFrequencyInfoWrapperPass : public MachineFunctionPass {
138+ MachineBlockFrequencyInfo MBFI;
139+
140+ public:
141+ static char ID;
142+
143+ MachineBlockFrequencyInfoWrapperPass ();
144+
145+ void getAnalysisUsage (AnalysisUsage &AU) const override ;
146+
147+ bool runOnMachineFunction (MachineFunction &F) override ;
148+
149+ void releaseMemory () override { MBFI.releaseMemory (); }
150+
151+ MachineBlockFrequencyInfo &getMBFI () { return MBFI; }
152+
153+ const MachineBlockFrequencyInfo &getMBFI () const { return MBFI; }
154+ };
110155} // end namespace llvm
111156
112157#endif // LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H
0 commit comments