mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-01 10:57:21 +00:00
Error out, rather than infinite looping, if constant island pass can't converge.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78377 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
15c592ddff
commit
b6879b2b84
@ -271,15 +271,23 @@ bool ARMConstantIslands::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
// Iteratively place constant pool entries and fix up branches until there
|
// Iteratively place constant pool entries and fix up branches until there
|
||||||
// is no change.
|
// is no change.
|
||||||
bool MadeChange = false;
|
bool MadeChange = false;
|
||||||
|
unsigned NoCPIters = 0, NoBRIters = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
bool Change = false;
|
bool CPChange = false;
|
||||||
for (unsigned i = 0, e = CPUsers.size(); i != e; ++i)
|
for (unsigned i = 0, e = CPUsers.size(); i != e; ++i)
|
||||||
Change |= HandleConstantPoolUser(MF, i);
|
CPChange |= HandleConstantPoolUser(MF, i);
|
||||||
|
if (CPChange && ++NoCPIters > 30)
|
||||||
|
llvm_unreachable("Constant Island pass failed to converge!");
|
||||||
DEBUG(dumpBBs());
|
DEBUG(dumpBBs());
|
||||||
|
|
||||||
|
bool BRChange = false;
|
||||||
for (unsigned i = 0, e = ImmBranches.size(); i != e; ++i)
|
for (unsigned i = 0, e = ImmBranches.size(); i != e; ++i)
|
||||||
Change |= FixUpImmediateBr(MF, ImmBranches[i]);
|
BRChange |= FixUpImmediateBr(MF, ImmBranches[i]);
|
||||||
|
if (BRChange && ++NoBRIters > 30)
|
||||||
|
llvm_unreachable("Branch Fix Up pass failed to converge!");
|
||||||
DEBUG(dumpBBs());
|
DEBUG(dumpBBs());
|
||||||
if (!Change)
|
|
||||||
|
if (!CPChange && !BRChange)
|
||||||
break;
|
break;
|
||||||
MadeChange = true;
|
MadeChange = true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user