LiveVariables: Do not remove dead flags from vreg operands

Also add a FIXME comment on why Mips RDDSP causes bogus dead flags to be
added which LiveVariables cleans up by accident.

llvm-svn: 264695
This commit is contained in:
Matthias Braun 2016-03-29 03:08:18 +00:00
parent 3c8edde141
commit 82cff88691
1 changed files with 8 additions and 3 deletions

View File

@ -527,9 +527,14 @@ void LiveVariables::runOnInstr(MachineInstr *MI,
MO.setIsKill(false);
if (MO.readsReg())
UseRegs.push_back(MOReg);
} else /*MO.isDef()*/ {
if (!(TargetRegisterInfo::isPhysicalRegister(MOReg) &&
MRI->isReserved(MOReg)))
} else {
assert(MO.isDef());
// FIXME: We should not remove any dead flags. Howeve the MIPS RDDSP
// instruction needs it at the moment: RDDSP gets its implicit use
// operands added too late in the processing so InstrEmitter adds an
// incorrect dead flag because the uses are not yet visible.
if (TargetRegisterInfo::isPhysicalRegister(MOReg) &&
!MRI->isReserved(MOReg))
MO.setIsDead(false);
DefRegs.push_back(MOReg);
}