Verify that one of the ranges produced by region splitting is allocatable.

We should not be attempting a region split if it won't lead to at least one
directly allocatable interval. That could cause infinite splitting loops.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124893 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jakob Stoklund Olesen 2011-02-04 19:33:07 +00:00
parent b412915ff6
commit 9b3d24bf3d

View File

@ -812,8 +812,22 @@ void RAGreedy::splitAroundRegion(LiveInterval &VirtReg, unsigned PhysReg,
// separate into connected components. Some components may be allocatable. // separate into connected components. Some components may be allocatable.
SE.finish(); SE.finish();
if (VerifyEnabled) if (VerifyEnabled) {
MF->verify(this, "After splitting live range around region"); MF->verify(this, "After splitting live range around region");
#ifndef NDEBUG
// Make sure that at least one of the new intervals can allocate to PhysReg.
// That was the whole point of splitting the live range.
bool found = false;
for (LiveRangeEdit::iterator I = LREdit.begin(), E = LREdit.end(); I != E;
++I)
if (!checkUncachedInterference(**I, PhysReg)) {
found = true;
break;
}
assert(found && "No allocatable intervals after pointless splitting");
#endif
}
} }
unsigned RAGreedy::tryRegionSplit(LiveInterval &VirtReg, AllocationOrder &Order, unsigned RAGreedy::tryRegionSplit(LiveInterval &VirtReg, AllocationOrder &Order,