1616// /
1717// ===----------------------------------------------------------------------===//
1818
19+ #include " llvm/CodeGen/RegUsageInfoCollector.h"
1920#include " llvm/ADT/Statistic.h"
2021#include " llvm/CodeGen/MachineFunctionPass.h"
2122#include " llvm/CodeGen/MachineOperand.h"
23+ #include " llvm/CodeGen/MachinePassManager.h"
2224#include " llvm/CodeGen/MachineRegisterInfo.h"
2325#include " llvm/CodeGen/Passes.h"
2426#include " llvm/CodeGen/RegisterUsageInfo.h"
@@ -36,11 +38,23 @@ STATISTIC(NumCSROpt,
3638
3739namespace {
3840
39- class RegUsageInfoCollector : public MachineFunctionPass {
41+ class RegUsageInfoCollector {
42+ PhysicalRegisterUsageInfo &PRUI;
43+
4044public:
41- RegUsageInfoCollector () : MachineFunctionPass(ID) {
42- PassRegistry &Registry = *PassRegistry::getPassRegistry ();
43- initializeRegUsageInfoCollectorPass (Registry);
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 {
54+ public:
55+ static char ID;
56+ RegUsageInfoCollectorLegacy () : MachineFunctionPass(ID) {
57+ initializeRegUsageInfoCollectorLegacyPass (*PassRegistry::getPassRegistry ());
4458 }
4559
4660 StringRef getPassName () const override {
@@ -54,26 +68,19 @@ class RegUsageInfoCollector : public MachineFunctionPass {
5468 }
5569
5670 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;
6371};
64-
6572} // end of anonymous namespace
6673
67- char RegUsageInfoCollector ::ID = 0 ;
74+ char RegUsageInfoCollectorLegacy ::ID = 0 ;
6875
69- INITIALIZE_PASS_BEGIN (RegUsageInfoCollector , " RegUsageInfoCollector" ,
76+ INITIALIZE_PASS_BEGIN (RegUsageInfoCollectorLegacy , " RegUsageInfoCollector" ,
7077 " Register Usage Information Collector" , false , false )
7178INITIALIZE_PASS_DEPENDENCY(PhysicalRegisterUsageInfoWrapperLegacy)
72- INITIALIZE_PASS_END(RegUsageInfoCollector , " RegUsageInfoCollector" ,
79+ INITIALIZE_PASS_END(RegUsageInfoCollectorLegacy , " RegUsageInfoCollector" ,
7380 " Register Usage Information Collector" , false , false )
7481
7582FunctionPass *llvm::createRegUsageInfoCollector() {
76- return new RegUsageInfoCollector ();
83+ return new RegUsageInfoCollectorLegacy ();
7784}
7885
7986// TODO: Move to hook somwehere?
@@ -97,14 +104,32 @@ static bool isCallableFunction(const MachineFunction &MF) {
97104 }
98105}
99106
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 <PhysicalRegisterUsageAnalysis>(MFA);
113+ assert (PRUI && " PhysicalRegisterUsageAnalysis 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) {
101125 MachineRegisterInfo *MRI = &MF.getRegInfo ();
102126 const TargetRegisterInfo *TRI = MF.getSubtarget ().getRegisterInfo ();
103127 const TargetMachine &TM = MF.getTarget ();
104128
105- LLVM_DEBUG (dbgs () << " -------------------- " << getPassName ()
106- << " -------------------- \n Function Name : "
107- << MF.getName () << ' \n ' );
129+ LLVM_DEBUG (
130+ dbgs ()
131+ << " -------------------- Register Usage Information Collector Pass"
132+ << " -------------------- \n Function Name : " << MF.getName () << ' \n ' );
108133
109134 // Analyzing the register usage may be expensive on some targets.
110135 if (!isCallableFunction (MF)) {
@@ -129,8 +154,6 @@ bool RegUsageInfoCollector::runOnMachineFunction(MachineFunction &MF) {
129154
130155 const Function &F = MF.getFunction ();
131156
132- PhysicalRegisterUsageInfo &PRUI =
133- getAnalysis<PhysicalRegisterUsageInfoWrapperLegacy>().getPRUI ();
134157 PRUI.setTargetMachine (TM);
135158
136159 LLVM_DEBUG (dbgs () << " Clobbered Registers: " );
0 commit comments