Correctly mark a valno that was previous defined by a PHI node as having an
authorOwen Anderson <resistor@mac.com>
Wed, 2 Apr 2008 02:12:45 +0000 (02:12 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 2 Apr 2008 02:12:45 +0000 (02:12 +0000)
unknown defining inst after PHI elimination.

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

lib/CodeGen/StrongPHIElimination.cpp

index f89d9f2f2e88abe055efe56bd997e4e2ded57eea..6416690e29f70a211741189a6c36e584eaee16da 100644 (file)
@@ -845,7 +845,6 @@ void StrongPHIElimination::mergeLiveIntervals(unsigned primary,
 }
 
 bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
-  
   LiveIntervals& LI = getAnalysis<LiveIntervals>();
   
   // Compute DFS numbers of each block
@@ -889,17 +888,21 @@ bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
     
     // If this is a dead PHI node, then remove it from LiveIntervals.
     unsigned DestReg = PInstr->getOperand(0).getReg();
+    LiveInterval& PI = LI.getInterval(DestReg);
     if (PInstr->registerDefIsDead(DestReg)) {
-      LiveInterval& PI = LI.getInterval(DestReg);
-      
       if (PI.containsOneValue()) {
         LI.removeInterval(DestReg);
       } else {
         unsigned idx = LI.getDefIndex(LI.getInstructionIndex(PInstr));
         PI.removeRange(*PI.getLiveRangeContaining(idx), true);
       }
+    } else {
+      // If the PHI is not dead, then the valno defined by the PHI
+      // now has an unknown def.
+      unsigned idx = LI.getDefIndex(LI.getInstructionIndex(PInstr));
+      PI.getLiveRangeContaining(idx)->valno->def = ~0U;
     }
-      
+    
     LI.RemoveMachineInstrFromMaps(PInstr);
     PInstr->eraseFromParent();
   }