16
16
// /
17
17
// ===----------------------------------------------------------------------===//
18
18
19
+ #include " llvm/CodeGen/RegUsageInfoCollector.h"
19
20
#include " llvm/ADT/Statistic.h"
20
21
#include " llvm/CodeGen/MachineFunctionPass.h"
21
22
#include " llvm/CodeGen/MachineOperand.h"
23
+ #include " llvm/CodeGen/MachinePassManager.h"
22
24
#include " llvm/CodeGen/MachineRegisterInfo.h"
23
25
#include " llvm/CodeGen/Passes.h"
24
26
#include " llvm/CodeGen/RegisterUsageInfo.h"
@@ -36,11 +38,23 @@ STATISTIC(NumCSROpt,
36
38
37
39
namespace {
38
40
39
- class RegUsageInfoCollector : public MachineFunctionPass {
41
+ class RegUsageInfoCollector {
42
+ PhysicalRegisterUsageInfo &PRUI;
43
+
44
+ public:
45
+ RegUsageInfoCollector (PhysicalRegisterUsageInfo &PRUI) : PRUI(PRUI) {}
46
+ bool run (MachineFunction &MF);
47
+
48
+ // Call getCalleeSaves and then also set the bits for subregs and
49
+ // fully saved superregs.
50
+ static void computeCalleeSavedRegs (BitVector &SavedRegs, MachineFunction &MF);
51
+ };
52
+
53
+ class RegUsageInfoCollectorLegacy : public MachineFunctionPass {
40
54
public:
41
- RegUsageInfoCollector () : MachineFunctionPass(ID) {
42
- PassRegistry &Registry = * PassRegistry::getPassRegistry ();
43
- initializeRegUsageInfoCollectorPass (Registry );
55
+ static char ID;
56
+ RegUsageInfoCollectorLegacy () : MachineFunctionPass(ID) {
57
+ initializeRegUsageInfoCollectorLegacyPass (* PassRegistry::getPassRegistry () );
44
58
}
45
59
46
60
StringRef getPassName () const override {
@@ -54,26 +68,19 @@ class RegUsageInfoCollector : public MachineFunctionPass {
54
68
}
55
69
56
70
bool runOnMachineFunction (MachineFunction &MF) override ;
57
-
58
- // Call getCalleeSaves and then also set the bits for subregs and
59
- // fully saved superregs.
60
- static void computeCalleeSavedRegs (BitVector &SavedRegs, MachineFunction &MF);
61
-
62
- static char ID;
63
71
};
64
-
65
72
} // end of anonymous namespace
66
73
67
- char RegUsageInfoCollector ::ID = 0 ;
74
+ char RegUsageInfoCollectorLegacy ::ID = 0 ;
68
75
69
- INITIALIZE_PASS_BEGIN (RegUsageInfoCollector , " RegUsageInfoCollector" ,
76
+ INITIALIZE_PASS_BEGIN (RegUsageInfoCollectorLegacy , " RegUsageInfoCollector" ,
70
77
" Register Usage Information Collector" , false , false )
71
78
INITIALIZE_PASS_DEPENDENCY(PhysicalRegisterUsageInfoWrapperLegacy)
72
- INITIALIZE_PASS_END(RegUsageInfoCollector , " RegUsageInfoCollector" ,
79
+ INITIALIZE_PASS_END(RegUsageInfoCollectorLegacy , " RegUsageInfoCollector" ,
73
80
" Register Usage Information Collector" , false , false )
74
81
75
82
FunctionPass *llvm::createRegUsageInfoCollector() {
76
- return new RegUsageInfoCollector ();
83
+ return new RegUsageInfoCollectorLegacy ();
77
84
}
78
85
79
86
// TODO: Move to hook somwehere?
@@ -97,12 +104,29 @@ static bool isCallableFunction(const MachineFunction &MF) {
97
104
}
98
105
}
99
106
100
- bool RegUsageInfoCollector::runOnMachineFunction (MachineFunction &MF) {
107
+ PreservedAnalyses
108
+ RegUsageInfoCollectorPass::run (MachineFunction &MF,
109
+ MachineFunctionAnalysisManager &MFAM) {
110
+ Module &MFA = *MF.getFunction ().getParent ();
111
+ auto *PRUI = MFAM.getResult <ModuleAnalysisManagerMachineFunctionProxy>(MF)
112
+ .getCachedResult <PhysicalRegisterUsageInfoAnalysis>(MFA);
113
+ assert (PRUI && " PhysicalRegisterUsageInfoAnalysis not available" );
114
+ RegUsageInfoCollector (*PRUI).run (MF);
115
+ return PreservedAnalyses::all ();
116
+ }
117
+
118
+ bool RegUsageInfoCollectorLegacy::runOnMachineFunction (MachineFunction &MF) {
119
+ PhysicalRegisterUsageInfo &PRUI =
120
+ getAnalysis<PhysicalRegisterUsageInfoWrapperLegacy>().getPRUI ();
121
+ return RegUsageInfoCollector (PRUI).run (MF);
122
+ }
123
+
124
+ bool RegUsageInfoCollector::run (MachineFunction &MF) {
101
125
MachineRegisterInfo *MRI = &MF.getRegInfo ();
102
126
const TargetRegisterInfo *TRI = MF.getSubtarget ().getRegisterInfo ();
103
127
const LLVMTargetMachine &TM = MF.getTarget ();
104
128
105
- LLVM_DEBUG (dbgs () << " -------------------- " << getPassName ()
129
+ LLVM_DEBUG (dbgs () << " -------------------- Reg Usage Info Collector "
106
130
<< " -------------------- \n Function Name : "
107
131
<< MF.getName () << ' \n ' );
108
132
@@ -129,8 +153,6 @@ bool RegUsageInfoCollector::runOnMachineFunction(MachineFunction &MF) {
129
153
130
154
const Function &F = MF.getFunction ();
131
155
132
- PhysicalRegisterUsageInfo &PRUI =
133
- getAnalysis<PhysicalRegisterUsageInfoWrapperLegacy>().getPRUI ();
134
156
PRUI.setTargetMachine (TM);
135
157
136
158
LLVM_DEBUG (dbgs () << " Clobbered Registers: " );
0 commit comments