mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Better diagnostics when inline asm fails to allocate.
asm.c:2:7: error: ran out of registers during register allocation asm(""::"r"(0), "r"(1), "r"(2), "r"(3), "r"(4), "r"(5), "r"(6), "r"(7), "r"(8), "r"(9)); ^ git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134310 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -324,19 +324,21 @@ void RegAllocBase::allocatePhysRegs() {
|
||||
|
||||
if (AvailablePhysReg == ~0u) {
|
||||
// selectOrSplit failed to find a register!
|
||||
std::string msg;
|
||||
raw_string_ostream Msg(msg);
|
||||
Msg << "Ran out of registers during register allocation!"
|
||||
"\nCannot allocate: " << *VirtReg;
|
||||
const char *Msg = "ran out of registers during register allocation";
|
||||
// Probably caused by an inline asm.
|
||||
MachineInstr *MI;
|
||||
for (MachineRegisterInfo::reg_iterator I = MRI->reg_begin(VirtReg->reg);
|
||||
MachineInstr *MI = I.skipInstruction();) {
|
||||
if (!MI->isInlineAsm())
|
||||
continue;
|
||||
Msg << "\nPlease check your inline asm statement for "
|
||||
"invalid constraints:\n";
|
||||
MI->print(Msg, &VRM->getMachineFunction().getTarget());
|
||||
}
|
||||
report_fatal_error(Msg.str());
|
||||
(MI = I.skipInstruction());)
|
||||
if (MI->isInlineAsm())
|
||||
break;
|
||||
if (MI)
|
||||
MI->emitError(Msg);
|
||||
else
|
||||
report_fatal_error(Msg);
|
||||
// Keep going after reporting the error.
|
||||
VRM->assignVirt2Phys(VirtReg->reg,
|
||||
RegClassInfo.getOrder(MRI->getRegClass(VirtReg->reg)).front());
|
||||
continue;
|
||||
}
|
||||
|
||||
if (AvailablePhysReg)
|
||||
|
Reference in New Issue
Block a user