mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
Teach MachineVerifier that early clobber defs begin at USE slots and other defs
begin at DEF slots. Fixes the second half of PR8813. llvm-svn: 122225
This commit is contained in:
parent
31af86ef44
commit
6970ec515e
@ -1005,11 +1005,6 @@ void MachineVerifier::verifyLiveIntervals() {
|
||||
}
|
||||
} else {
|
||||
// Non-PHI def.
|
||||
if (!VNI->def.isDef()) {
|
||||
report("Non-PHI def must be at a DEF slot", MF);
|
||||
*OS << "Valno #" << VNI->id << " is defined at " << VNI->def
|
||||
<< " in " << LI << '\n';
|
||||
}
|
||||
const MachineInstr *MI = LiveInts->getInstructionFromIndex(VNI->def);
|
||||
if (!MI) {
|
||||
report("No instruction at def index", MF);
|
||||
@ -1019,6 +1014,32 @@ void MachineVerifier::verifyLiveIntervals() {
|
||||
report("Defining instruction does not modify register", MI);
|
||||
*OS << "Valno #" << VNI->id << " in " << LI << '\n';
|
||||
}
|
||||
|
||||
bool isEarlyClobber = false;
|
||||
if (MI) {
|
||||
for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
|
||||
MOE = MI->operands_end(); MOI != MOE; ++MOI) {
|
||||
if (MOI->isReg() && MOI->getReg() == LI.reg && MOI->isDef() &&
|
||||
MOI->isEarlyClobber()) {
|
||||
isEarlyClobber = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Early clobber defs begin at USE slots, but other defs must begin at
|
||||
// DEF slots.
|
||||
if (isEarlyClobber) {
|
||||
if (!VNI->def.isUse()) {
|
||||
report("Early clobber def must be at a USE slot", MF);
|
||||
*OS << "Valno #" << VNI->id << " is defined at " << VNI->def
|
||||
<< " in " << LI << '\n';
|
||||
}
|
||||
} else if (!VNI->def.isDef()) {
|
||||
report("Non-PHI, non-early clobber def must be at a DEF slot", MF);
|
||||
*OS << "Valno #" << VNI->id << " is defined at " << VNI->def
|
||||
<< " in " << LI << '\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user