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

Owen Anderson resistor at mac.com
Tue Jan 8 13:54:55 PST 2008


Author: resistor
Date: Tue Jan  8 15:54:52 2008
New Revision: 45759

URL: http://llvm.org/viewvc/llvm-project?rev=45759&view=rev
Log:
Rename registers that do not need copies.

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=45759&r1=45758&r2=45759&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp (original)
+++ llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Tue Jan  8 15:54:52 2008
@@ -44,6 +44,7 @@
     
     std::map<unsigned, std::vector<unsigned> > Stacks;
     std::set<unsigned> UsedByAnother;
+    std::map<unsigned, std::set<unsigned> > RenameSets;
 
     bool runOnMachineFunction(MachineFunction &Fn);
     
@@ -442,7 +443,8 @@
       }
     }
     
-    // FIXME: Cache renaming information
+    // Cache renaming information
+    RenameSets.insert(std::make_pair(P->getOperand(0).getReg(), PHIUnion));
     
     ProcessedNames.insert(PHIUnion.begin(), PHIUnion.end());
     ++P;
@@ -649,8 +651,22 @@
   // FIXME: This process should probably preserve LiveVariables
   InsertCopies(Fn.begin());
   
-  // FIXME: Perform renaming
-  // FIXME: Remove Phi instrs
+  // Perform renaming
+  typedef std::map<unsigned, std::set<unsigned> > RenameSetType;
+  for (RenameSetType::iterator I = RenameSets.begin(), E = RenameSets.end();
+       I != E; ++I)
+    for (std::set<unsigned>::iterator SI = I->second.begin(),
+         SE = I->second.end(); SI != SE; ++SI)
+      Fn.getRegInfo().replaceRegWith(*SI, I->first);
+  
+  // FIXME: Insert last-minute copies
+  
+  // Remove PHIs
+  for (MachineFunction::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I)
+    for (MachineBasicBlock::iterator BI = I->begin(), BE = I->end();
+         BI != BE; ++BI)
+      if (BI->getOpcode() == TargetInstrInfo::PHI)
+        BI->eraseFromParent();
   
   return false;
 }





More information about the llvm-commits mailing list