@@ -136,38 +136,44 @@ void ReachingDefAnalysis::processBasicBlock(
136
136
bool ReachingDefAnalysis::runOnMachineFunction (MachineFunction &mf) {
137
137
MF = &mf;
138
138
TRI = MF->getSubtarget ().getRegisterInfo ();
139
+ LLVM_DEBUG (dbgs () << " ********** REACHING DEFINITION ANALYSIS **********\n " );
140
+ init ();
141
+ traverse ();
142
+ return false ;
143
+ }
139
144
145
+ void ReachingDefAnalysis::releaseMemory () {
146
+ // Clear the internal vectors.
147
+ MBBOutRegsInfos.clear ();
148
+ MBBReachingDefs.clear ();
149
+ InstIds.clear ();
140
150
LiveRegs.clear ();
141
- NumRegUnits = TRI->getNumRegUnits ();
142
-
143
- MBBReachingDefs.resize (mf.getNumBlockIDs ());
151
+ }
144
152
145
- LLVM_DEBUG (dbgs () << " ********** REACHING DEFINITION ANALYSIS **********\n " );
153
+ void ReachingDefAnalysis::reset () {
154
+ releaseMemory ();
155
+ init ();
156
+ traverse ();
157
+ }
146
158
159
+ void ReachingDefAnalysis::init () {
160
+ NumRegUnits = TRI->getNumRegUnits ();
161
+ MBBReachingDefs.resize (MF->getNumBlockIDs ());
147
162
// Initialize the MBBOutRegsInfos
148
- MBBOutRegsInfos.resize (mf.getNumBlockIDs ());
163
+ MBBOutRegsInfos.resize (MF->getNumBlockIDs ());
164
+ LoopTraversal Traversal;
165
+ TraversedMBBOrder = Traversal.traverse (*MF);
166
+ }
149
167
168
+ void ReachingDefAnalysis::traverse () {
150
169
// 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)
154
171
processBasicBlock (TraversedMBB);
155
- }
156
-
157
172
// Sorting all reaching defs found for a ceartin reg unit in a given BB.
158
173
for (MBBDefsInfo &MBBDefs : MBBReachingDefs) {
159
174
for (MBBRegUnitDefs &RegUnitDefs : MBBDefs)
160
175
llvm::sort (RegUnitDefs);
161
176
}
162
-
163
- return false ;
164
- }
165
-
166
- void ReachingDefAnalysis::releaseMemory () {
167
- // Clear the internal vectors.
168
- MBBOutRegsInfos.clear ();
169
- MBBReachingDefs.clear ();
170
- InstIds.clear ();
171
177
}
172
178
173
179
int ReachingDefAnalysis::getReachingDef (MachineInstr *MI, int PhysReg) const {
0 commit comments