Merging r308808, r308813 and r308906:
------------------------------------------------------------------------ r308808 | arsenm | 2017-07-21 16:56:13 -0700 (Fri, 21 Jul 2017) | 6 lines RA: Remove assert on empty live intervals This is possible if there is an undef use when splitting the vreg during spilling. Fixes bug 33620. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r308813 | arsenm | 2017-07-21 17:24:01 -0700 (Fri, 21 Jul 2017) | 6 lines RA: Remove another assert on empty intervals This case is similar to the one fixed in r308808, except when rematerializing. Fixes bug 33884. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r308906 | arsenm | 2017-07-24 11:07:55 -0700 (Mon, 24 Jul 2017) | 6 lines RA: Replace asserts related to empty live intervals These don't exactly assert the same thing anymore, and allow empty live intervals with non-empty uses. Removed in r308808 and r308813. ------------------------------------------------------------------------ llvm-svn: 309171
This commit is contained in:
@@ -133,18 +133,19 @@ void RegAllocBase::allocatePhysRegs() {
|
||||
if (AvailablePhysReg)
|
||||
Matrix->assign(*VirtReg, AvailablePhysReg);
|
||||
|
||||
for (VirtRegVec::iterator I = SplitVRegs.begin(), E = SplitVRegs.end();
|
||||
I != E; ++I) {
|
||||
LiveInterval *SplitVirtReg = &LIS->getInterval(*I);
|
||||
for (unsigned Reg : SplitVRegs) {
|
||||
assert(LIS->hasInterval(Reg));
|
||||
|
||||
LiveInterval *SplitVirtReg = &LIS->getInterval(Reg);
|
||||
assert(!VRM->hasPhys(SplitVirtReg->reg) && "Register already assigned");
|
||||
if (MRI->reg_nodbg_empty(SplitVirtReg->reg)) {
|
||||
assert(SplitVirtReg->empty() && "Non-empty but used interval");
|
||||
DEBUG(dbgs() << "not queueing unused " << *SplitVirtReg << '\n');
|
||||
aboutToRemoveInterval(*SplitVirtReg);
|
||||
LIS->removeInterval(SplitVirtReg->reg);
|
||||
continue;
|
||||
}
|
||||
DEBUG(dbgs() << "queuing new interval: " << *SplitVirtReg << "\n");
|
||||
assert(!SplitVirtReg->empty() && "expecting non-empty interval");
|
||||
assert(TargetRegisterInfo::isVirtualRegister(SplitVirtReg->reg) &&
|
||||
"expect split value in virtual register");
|
||||
enqueue(SplitVirtReg);
|
||||
|
||||
Reference in New Issue
Block a user