mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-16 00:18:06 +00:00
Be more aggressive about removing joined physreg copies.
When a joined COPY changes subreg liveness, we keep it around as a KILL, otherwise it is safe to delete. llvm-svn: 110403
This commit is contained in:
parent
1067cd1da0
commit
0390da8c45
@ -1726,7 +1726,8 @@ bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
|
||||
bool DoDelete = true;
|
||||
assert(MI->isCopyLike() && "Unrecognized copy instruction");
|
||||
unsigned SrcReg = MI->getOperand(MI->isSubregToReg() ? 2 : 1).getReg();
|
||||
if (TargetRegisterInfo::isPhysicalRegister(SrcReg))
|
||||
if (TargetRegisterInfo::isPhysicalRegister(SrcReg) &&
|
||||
MI->getNumOperands() > 2)
|
||||
// Do not delete extract_subreg, insert_subreg of physical
|
||||
// registers unless the definition is dead. e.g.
|
||||
// %DO<def> = INSERT_SUBREG %D0<undef>, %S0<kill>, 1
|
||||
@ -1740,9 +1741,15 @@ bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
|
||||
ShortenDeadCopyLiveRange(li, MI);
|
||||
DoDelete = true;
|
||||
}
|
||||
if (!DoDelete)
|
||||
if (!DoDelete) {
|
||||
// We need the instruction to adjust liveness, so make it a KILL.
|
||||
if (MI->isSubregToReg()) {
|
||||
MI->RemoveOperand(3);
|
||||
MI->RemoveOperand(1);
|
||||
}
|
||||
MI->setDesc(tii_->get(TargetOpcode::KILL));
|
||||
mii = llvm::next(mii);
|
||||
else {
|
||||
} else {
|
||||
li_->RemoveMachineInstrFromMaps(MI);
|
||||
mii = mbbi->erase(mii);
|
||||
++numPeep;
|
||||
|
Loading…
x
Reference in New Issue
Block a user