Don't look for empty live ranges in the unions.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Sat, 12 May 2012 00:33:28 +0000 (00:33 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Sat, 12 May 2012 00:33:28 +0000 (00:33 +0000)
Empty live ranges represent undef and still get allocated, but they
won't appear in LiveIntervalUnions.

Patch by Patrik Hägglund!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156685 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/RegAllocBase.cpp

index b00eceb17f11cfbc078d846a2ea355ed45ba7b79..b8d1d185e9f659b0a28b3f11caa158f7c0930d84 100644 (file)
@@ -69,11 +69,14 @@ void RegAllocBase::verify() {
   for (LiveIntervals::iterator liItr = LIS->begin(), liEnd = LIS->end();
        liItr != liEnd; ++liItr) {
     unsigned reg = liItr->first;
+    LiveInterval* li = liItr->second;
     if (TargetRegisterInfo::isPhysicalRegister(reg)) continue;
     if (!VRM->hasPhys(reg)) continue; // spilled?
+    if (li->empty()) continue; // unionVRegs will only be filled if li is
+                               // non-empty
     unsigned PhysReg = VRM->getPhys(reg);
     if (!unionVRegs[PhysReg].test(reg)) {
-      dbgs() << "LiveVirtReg " << reg << " not in union " <<
+      dbgs() << "LiveVirtReg " << PrintReg(reg, TRI) << " not in union " <<
         TRI->getName(PhysReg) << "\n";
       llvm_unreachable("unallocated live vreg");
     }