14
14
#define LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H
15
15
16
16
#include " llvm/CodeGen/MachineFunctionPass.h"
17
+ #include " llvm/CodeGen/MachinePassManager.h"
17
18
#include " llvm/Support/BlockFrequency.h"
18
19
#include < cstdint>
19
20
#include < memory>
@@ -30,29 +31,30 @@ class raw_ostream;
30
31
31
32
// / MachineBlockFrequencyInfo pass uses BlockFrequencyInfoImpl implementation
32
33
// / to estimate machine basic block frequencies.
33
- class MachineBlockFrequencyInfo : public MachineFunctionPass {
34
+ class MachineBlockFrequencyInfo {
34
35
using ImplType = BlockFrequencyInfoImpl<MachineBasicBlock>;
35
36
std::unique_ptr<ImplType> MBFI;
36
37
37
38
public:
38
- static char ID;
39
-
40
- MachineBlockFrequencyInfo ();
39
+ MachineBlockFrequencyInfo (); // Legacy pass manager only.
41
40
explicit MachineBlockFrequencyInfo (MachineFunction &F,
42
41
MachineBranchProbabilityInfo &MBPI,
43
42
MachineLoopInfo &MLI);
44
- ~MachineBlockFrequencyInfo () override ;
45
-
46
- void getAnalysisUsage (AnalysisUsage &AU) const override ;
43
+ MachineBlockFrequencyInfo (MachineBlockFrequencyInfo &&);
44
+ ~MachineBlockFrequencyInfo ();
47
45
48
- bool runOnMachineFunction (MachineFunction &F) override ;
46
+ // / Handle invalidation explicitly.
47
+ bool invalidate (MachineFunction &F, const PreservedAnalyses &PA,
48
+ MachineFunctionAnalysisManager::Invalidator &);
49
49
50
50
// / calculate - compute block frequency info for the given function.
51
51
void calculate (const MachineFunction &F,
52
52
const MachineBranchProbabilityInfo &MBPI,
53
53
const MachineLoopInfo &MLI);
54
54
55
- void releaseMemory () override ;
55
+ void print (raw_ostream &OS);
56
+
57
+ void releaseMemory ();
56
58
57
59
// / getblockFreq - Return block frequency. Return 0 if we don't have the
58
60
// / information. Please note that initial frequency is equal to 1024. It means
@@ -107,6 +109,49 @@ Printable printBlockFreq(const MachineBlockFrequencyInfo &MBFI,
107
109
Printable printBlockFreq (const MachineBlockFrequencyInfo &MBFI,
108
110
const MachineBasicBlock &MBB);
109
111
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
+ };
110
155
} // end namespace llvm
111
156
112
157
#endif // LLVM_CODEGEN_MACHINEBLOCKFREQUENCYINFO_H
0 commit comments