Recompute hasPHIKill flags when shrinking live intervals.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 7 Apr 2011 18:43:14 +0000 (18:43 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Thu, 7 Apr 2011 18:43:14 +0000 (18:43 +0000)
PHI values may be deleted, causing the flags to be wrong. This fixes PR9616.

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

lib/CodeGen/LiveIntervalAnalysis.cpp

index 07f83ea7cefb060265385589dc0e387d5b8f5384..c77ae1b7a7933f84ada8008ff1e8c118e19d86a0 100644 (file)
@@ -787,6 +787,8 @@ bool LiveIntervals::shrinkToUses(LiveInterval *li,
     VNInfo *VNI = *I;
     if (VNI->isUnused())
       continue;
+    // We may eliminate PHI values, so recompute PHIKill flags.
+    VNI->setHasPHIKill(false);
     NewLI.addRange(LiveRange(VNI->def, VNI->def.getNextSlot(), VNI));
 
     // A use tied to an early-clobber def ends at the load slot and isn't caught
@@ -822,7 +824,7 @@ bool LiveIntervals::shrinkToUses(LiveInterval *li,
         VNInfo *PVNI = li->getVNInfoAt(Stop);
         // A predecessor is not required to have a live-out value for a PHI.
         if (PVNI) {
-          assert(PVNI->hasPHIKill() && "Missing hasPHIKill flag");
+          PVNI->setHasPHIKill(true);
           WorkList.push_back(std::make_pair(Stop, PVNI));
         }
       }