[llvm-commits] [llvm] r48811 - /llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp

Owen Anderson resistor at mac.com
Tue Mar 25 20:03:24 PDT 2008


Author: resistor
Date: Tue Mar 25 22:03:23 2008
New Revision: 48811

URL: http://llvm.org/viewvc/llvm-project?rev=48811&view=rev
Log:
Dead PHI instructions need to be handled specially.

Modified:
    llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp

Modified: llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp?rev=48811&r1=48810&r2=48811&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp (original)
+++ llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Tue Mar 25 22:03:23 2008
@@ -414,6 +414,12 @@
   while (P != FirstNonPHI && P->getOpcode() == TargetInstrInfo::PHI) {
     unsigned DestReg = P->getOperand(0).getReg();
 
+    // Don't both doing PHI elimination for dead PHI's.
+    if (P->registerDefIsDead(DestReg)) {
+      ++P;
+      continue;
+    }
+
     LiveInterval& PI = LI.getOrCreateInterval(DestReg);
     unsigned pIdx = LI.getInstructionIndex(FirstNonPHI);
     VNInfo* PVN = PI.getLiveRangeContaining(pIdx)->valno;
@@ -911,6 +917,22 @@
   
   for (std::vector<MachineInstr*>::iterator I = phis.begin(), E = phis.end();
        I != E; ++I) {
+    // If this is a dead PHI node, then remove it from LiveIntervals.
+    unsigned DestReg = (*I)->getOperand(0).getReg();
+    if ((*I)->registerDefIsDead(DestReg)) {
+      LiveInterval& PI = LI.getInterval(DestReg);
+      
+      if (PI.containsOneValue()) {
+        LI.removeInterval(DestReg);
+      } else {
+        MachineBasicBlock::iterator PIter = *I;
+        while (PIter->getOpcode() == TargetInstrInfo::PHI) ++PIter;
+        unsigned idx = LI.getInstructionIndex(PIter);
+        
+        PI.removeRange(*PI.getLiveRangeContaining(idx), true);
+      }
+    }
+      
     LI.RemoveMachineInstrFromMaps(*I);
     (*I)->eraseFromParent();
   }





More information about the llvm-commits mailing list