Skip to content

Commit 659500c

Browse files
committed
[NFC][RDA] Break-up initialization code
Separate out the initialization code from the loop traversal so that the analysis can be reset and re-run by a user.
1 parent 083717c commit 659500c

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

llvm/include/llvm/CodeGen/ReachingDefAnalysis.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class ReachingDefAnalysis : public MachineFunctionPass {
3737
private:
3838
MachineFunction *MF;
3939
const TargetRegisterInfo *TRI;
40+
LoopTraversal::TraversalOrder TraversedMBBOrder;
4041
unsigned NumRegUnits;
4142
/// Instruction that defined each register, relative to the beginning of the
4243
/// current basic block. When a LiveRegsDefInfo is used to represent a
@@ -93,6 +94,15 @@ class ReachingDefAnalysis : public MachineFunctionPass {
9394
MachineFunctionProperties::Property::TracksLiveness);
9495
}
9596

97+
/// Re-run the analysis.
98+
void reset();
99+
100+
/// Initialize data structures.
101+
void init();
102+
103+
/// Traverse the machine function, mapping definitions.
104+
void traverse();
105+
96106
/// Provides the instruction id of the closest reaching def instruction of
97107
/// PhysReg that reaches MI, relative to the begining of MI's basic block.
98108
int getReachingDef(MachineInstr *MI, int PhysReg) const;

llvm/lib/CodeGen/ReachingDefAnalysis.cpp

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -136,38 +136,44 @@ void ReachingDefAnalysis::processBasicBlock(
136136
bool ReachingDefAnalysis::runOnMachineFunction(MachineFunction &mf) {
137137
MF = &mf;
138138
TRI = MF->getSubtarget().getRegisterInfo();
139+
LLVM_DEBUG(dbgs() << "********** REACHING DEFINITION ANALYSIS **********\n");
140+
init();
141+
traverse();
142+
return false;
143+
}
139144

145+
void ReachingDefAnalysis::releaseMemory() {
146+
// Clear the internal vectors.
147+
MBBOutRegsInfos.clear();
148+
MBBReachingDefs.clear();
149+
InstIds.clear();
140150
LiveRegs.clear();
141-
NumRegUnits = TRI->getNumRegUnits();
142-
143-
MBBReachingDefs.resize(mf.getNumBlockIDs());
151+
}
144152

145-
LLVM_DEBUG(dbgs() << "********** REACHING DEFINITION ANALYSIS **********\n");
153+
void ReachingDefAnalysis::reset() {
154+
releaseMemory();
155+
init();
156+
traverse();
157+
}
146158

159+
void ReachingDefAnalysis::init() {
160+
NumRegUnits = TRI->getNumRegUnits();
161+
MBBReachingDefs.resize(MF->getNumBlockIDs());
147162
// Initialize the MBBOutRegsInfos
148-
MBBOutRegsInfos.resize(mf.getNumBlockIDs());
163+
MBBOutRegsInfos.resize(MF->getNumBlockIDs());
164+
LoopTraversal Traversal;
165+
TraversedMBBOrder = Traversal.traverse(*MF);
166+
}
149167

168+
void ReachingDefAnalysis::traverse() {
150169
// Traverse the basic blocks.
151-
LoopTraversal Traversal;
152-
LoopTraversal::TraversalOrder TraversedMBBOrder = Traversal.traverse(mf);
153-
for (LoopTraversal::TraversedMBBInfo TraversedMBB : TraversedMBBOrder) {
170+
for (LoopTraversal::TraversedMBBInfo TraversedMBB : TraversedMBBOrder)
154171
processBasicBlock(TraversedMBB);
155-
}
156-
157172
// Sorting all reaching defs found for a ceartin reg unit in a given BB.
158173
for (MBBDefsInfo &MBBDefs : MBBReachingDefs) {
159174
for (MBBRegUnitDefs &RegUnitDefs : MBBDefs)
160175
llvm::sort(RegUnitDefs);
161176
}
162-
163-
return false;
164-
}
165-
166-
void ReachingDefAnalysis::releaseMemory() {
167-
// Clear the internal vectors.
168-
MBBOutRegsInfos.clear();
169-
MBBReachingDefs.clear();
170-
InstIds.clear();
171177
}
172178

173179
int ReachingDefAnalysis::getReachingDef(MachineInstr *MI, int PhysReg) const {

0 commit comments

Comments
 (0)