@@ -57,7 +57,6 @@ class MachineLateInstrsCleanup : public MachineFunctionPass {
57
57
58
58
void removeRedundantDef (MachineInstr *MI);
59
59
void clearKillsForDef (Register Reg, MachineBasicBlock *MBB,
60
- MachineBasicBlock::iterator I,
61
60
BitVector &VisitedPreds);
62
61
63
62
public:
@@ -110,14 +109,11 @@ bool MachineLateInstrsCleanup::runOnMachineFunction(MachineFunction &MF) {
110
109
return Changed;
111
110
}
112
111
113
- // Clear any previous kill flag on Reg found before I in MBB. Walk backwards
114
- // in MBB and if needed continue in predecessors until a use/def of Reg is
115
- // encountered. This seems to be faster in practice than tracking kill flags
116
- // in a map.
117
- void MachineLateInstrsCleanup::
118
- clearKillsForDef (Register Reg, MachineBasicBlock *MBB,
119
- MachineBasicBlock::iterator I,
120
- BitVector &VisitedPreds) {
112
+ // Clear any preceding kill flag on Reg after removing a redundant
113
+ // definition.
114
+ void MachineLateInstrsCleanup::clearKillsForDef (Register Reg,
115
+ MachineBasicBlock *MBB,
116
+ BitVector &VisitedPreds) {
121
117
VisitedPreds.set (MBB->getNumber ());
122
118
123
119
// Kill flag in MBB
@@ -137,13 +133,13 @@ clearKillsForDef(Register Reg, MachineBasicBlock *MBB,
137
133
assert (!MBB->pred_empty () && " Predecessor def not found!" );
138
134
for (MachineBasicBlock *Pred : MBB->predecessors ())
139
135
if (!VisitedPreds.test (Pred->getNumber ()))
140
- clearKillsForDef (Reg, Pred, Pred-> end (), VisitedPreds);
136
+ clearKillsForDef (Reg, Pred, VisitedPreds);
141
137
}
142
138
143
139
void MachineLateInstrsCleanup::removeRedundantDef (MachineInstr *MI) {
144
140
Register Reg = MI->getOperand (0 ).getReg ();
145
141
BitVector VisitedPreds (MI->getMF ()->getNumBlockIDs ());
146
- clearKillsForDef (Reg, MI->getParent (), MI-> getIterator (), VisitedPreds);
142
+ clearKillsForDef (Reg, MI->getParent (), VisitedPreds);
147
143
MI->eraseFromParent ();
148
144
++NumRemoved;
149
145
}
0 commit comments