To find the exiting VN of a LiveInterval from a block, use the previous slot
authorCameron Zwarich <zwarich@apple.com>
Wed, 12 Oct 2011 21:24:54 +0000 (21:24 +0000)
committerCameron Zwarich <zwarich@apple.com>
Wed, 12 Oct 2011 21:24:54 +0000 (21:24 +0000)
rather than the previous index. If a block has a single instruction, the
previous index may be in a different basic block.

I have no clue how this used to work on all of test-suite, because now this
failure is seen quite often when trying to compile code with -strong-phi-elim.
This fixes PR10252.

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

lib/CodeGen/StrongPHIElimination.cpp

index 0fabd8e6eef9e4c606a05171aa583ee818894114..76e6c9966a7578f2fa0607bdfb2c1d446cc2ccba 100644 (file)
@@ -674,7 +674,7 @@ void StrongPHIElimination::InsertCopiesForPHI(MachineInstr *PHI,
     if (PHIColor && SrcColor == PHIColor) {
       LiveInterval &SrcInterval = LI->getInterval(SrcReg);
       SlotIndex PredIndex = LI->getMBBEndIdx(PredBB);
-      VNInfo *SrcVNI = SrcInterval.getVNInfoAt(PredIndex.getPrevIndex());
+      VNInfo *SrcVNI = SrcInterval.getVNInfoAt(PredIndex.getPrevSlot());
       assert(SrcVNI);
       SrcVNI->setHasPHIKill(true);
       continue;