mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
Don't assume that an instruction ending a register's live range always reads
the register; it may be a dead def instead. Fixes PR8820. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122218 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
39ffcb7b62
commit
636f15ff04
@ -1072,10 +1072,24 @@ void MachineVerifier::verifyLiveIntervals() {
|
||||
<< MBBStartIdx << '\n';
|
||||
} else if (TargetRegisterInfo::isVirtualRegister(LI.reg) &&
|
||||
!MI->readsVirtualRegister(LI.reg)) {
|
||||
// FIXME: Should we require a kill flag?
|
||||
report("Instruction killing live segment doesn't read register", MI);
|
||||
I->print(*OS);
|
||||
*OS << " in " << LI << '\n';
|
||||
// A live range can end with either a redefinition, a kill flag on a
|
||||
// use, or a dead flag on a def.
|
||||
// FIXME: Should we check for each of these?
|
||||
bool hasDeadDef = false;
|
||||
for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
|
||||
MOE = MI->operands_end(); MOI != MOE; ++MOI) {
|
||||
if (MOI->isReg() && MOI->isDef() && MOI->isDead()) {
|
||||
hasDeadDef = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasDeadDef) {
|
||||
report("Instruction killing live segment neither defines nor reads "
|
||||
"register", MI);
|
||||
I->print(*OS);
|
||||
*OS << " in " << LI << '\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user