mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-25 17:20:48 +00:00
If the 2addr instruction has other kills, don't move it below any other uses since we don't want to extend other live ranges.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144772 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -933,6 +933,7 @@ TwoAddressInstructionPass::RescheduleMIBelowKill(MachineBasicBlock *MBB,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
SmallSet<unsigned, 2> Uses;
|
SmallSet<unsigned, 2> Uses;
|
||||||
|
SmallSet<unsigned, 2> Kills;
|
||||||
SmallSet<unsigned, 2> Defs;
|
SmallSet<unsigned, 2> Defs;
|
||||||
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||||
const MachineOperand &MO = MI->getOperand(i);
|
const MachineOperand &MO = MI->getOperand(i);
|
||||||
@@ -943,8 +944,11 @@ TwoAddressInstructionPass::RescheduleMIBelowKill(MachineBasicBlock *MBB,
|
|||||||
continue;
|
continue;
|
||||||
if (MO.isDef())
|
if (MO.isDef())
|
||||||
Defs.insert(MOReg);
|
Defs.insert(MOReg);
|
||||||
else
|
else {
|
||||||
Uses.insert(MOReg);
|
Uses.insert(MOReg);
|
||||||
|
if (MO.isKill() && MOReg != Reg)
|
||||||
|
Kills.insert(MOReg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move the copies connected to MI down as well.
|
// Move the copies connected to MI down as well.
|
||||||
@@ -991,7 +995,8 @@ TwoAddressInstructionPass::RescheduleMIBelowKill(MachineBasicBlock *MBB,
|
|||||||
} else {
|
} else {
|
||||||
if (Defs.count(MOReg))
|
if (Defs.count(MOReg))
|
||||||
return false;
|
return false;
|
||||||
if (MOReg != Reg && MO.isKill() && Uses.count(MOReg))
|
if (MOReg != Reg &&
|
||||||
|
((MO.isKill() && Uses.count(MOReg)) || Kills.count(MOReg)))
|
||||||
// Don't want to extend other live ranges and update kills.
|
// Don't want to extend other live ranges and update kills.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user