20
20
#include " llvm/ADT/DepthFirstIterator.h"
21
21
#include " llvm/CodeGen/LivePhysRegs.h"
22
22
#include " llvm/CodeGen/MachineFunctionPass.h"
23
+ #include " llvm/CodeGen/MachineRegisterClassInfo.h"
23
24
#include " llvm/CodeGen/ReachingDefAnalysis.h"
24
25
#include " llvm/CodeGen/RegisterClassInfo.h"
25
26
#include " llvm/CodeGen/TargetInstrInfo.h"
@@ -38,7 +39,7 @@ class BreakFalseDeps : public MachineFunctionPass {
38
39
MachineFunction *MF = nullptr ;
39
40
const TargetInstrInfo *TII = nullptr ;
40
41
const TargetRegisterInfo *TRI = nullptr ;
41
- RegisterClassInfo RegClassInfo;
42
+ RegisterClassInfo * RegClassInfo = nullptr ;
42
43
43
44
// / List of undefined register reads in this block in forward order.
44
45
std::vector<std::pair<MachineInstr *, unsigned >> UndefReads;
@@ -58,6 +59,7 @@ class BreakFalseDeps : public MachineFunctionPass {
58
59
void getAnalysisUsage (AnalysisUsage &AU) const override {
59
60
AU.setPreservesAll ();
60
61
AU.addRequired <ReachingDefAnalysis>();
62
+ AU.addRequired <MachineRegisterClassInfoWrapperPass>();
61
63
MachineFunctionPass::getAnalysisUsage (AU);
62
64
}
63
65
@@ -103,6 +105,7 @@ class BreakFalseDeps : public MachineFunctionPass {
103
105
char BreakFalseDeps::ID = 0 ;
104
106
INITIALIZE_PASS_BEGIN (BreakFalseDeps, DEBUG_TYPE, " BreakFalseDeps" , false , false )
105
107
INITIALIZE_PASS_DEPENDENCY(ReachingDefAnalysis)
108
+ INITIALIZE_PASS_DEPENDENCY(MachineRegisterClassInfoWrapperPass)
106
109
INITIALIZE_PASS_END(BreakFalseDeps, DEBUG_TYPE, " BreakFalseDeps" , false , false )
107
110
108
111
FunctionPass *llvm::createBreakFalseDeps() { return new BreakFalseDeps (); }
@@ -153,7 +156,7 @@ bool BreakFalseDeps::pickBestRegisterForUndef(MachineInstr *MI, unsigned OpIdx,
153
156
// max clearance or clearance higher than Pref.
154
157
unsigned MaxClearance = 0 ;
155
158
unsigned MaxClearanceReg = OriginalReg;
156
- ArrayRef<MCPhysReg> Order = RegClassInfo. getOrder (OpRC);
159
+ ArrayRef<MCPhysReg> Order = RegClassInfo-> getOrder (OpRC);
157
160
for (MCPhysReg Reg : Order) {
158
161
unsigned Clearance = RDA->getClearance (MI, Reg);
159
162
if (Clearance <= MaxClearance)
@@ -285,8 +288,7 @@ bool BreakFalseDeps::runOnMachineFunction(MachineFunction &mf) {
285
288
TII = MF->getSubtarget ().getInstrInfo ();
286
289
TRI = MF->getSubtarget ().getRegisterInfo ();
287
290
RDA = &getAnalysis<ReachingDefAnalysis>();
288
-
289
- RegClassInfo.runOnMachineFunction (mf);
291
+ RegClassInfo = &getAnalysis<MachineRegisterClassInfoWrapperPass>().getRCI ();
290
292
291
293
LLVM_DEBUG (dbgs () << " ********** BREAK FALSE DEPENDENCIES **********\n " );
292
294
0 commit comments