[llvm-commits] CVS: llvm/lib/CodeGen/PrologEpilogInserter.cpp

Evan Cheng evan.cheng at apple.com
Thu Feb 22 17:11:43 PST 2007



Changes in directory llvm/lib/CodeGen:

PrologEpilogInserter.cpp updated: 1.68 -> 1.69
---
Log message:

First potential client of register scavenger.

---
Diffs of the changes:  (+13 -4)

 PrologEpilogInserter.cpp |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)


Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp
diff -u llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.68 llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.69
--- llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.68	Fri Jan 26 15:22:28 2007
+++ llvm/lib/CodeGen/PrologEpilogInserter.cpp	Thu Feb 22 19:11:26 2007
@@ -20,6 +20,7 @@
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/CodeGen/MachineFrameInfo.h"
+#include "llvm/CodeGen/RegisterScavenging.h"
 #include "llvm/Target/TargetMachine.h"
 #include "llvm/Target/MRegisterInfo.h"
 #include "llvm/Target/TargetFrameInfo.h"
@@ -231,10 +232,12 @@
   MachineBasicBlock::iterator I = MBB->begin();
   if (!RegInfo->spillCalleeSavedRegisters(*MBB, I, CSI)) {
     for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
+      // Add the callee-saved register as live-in. It's killed at the spill.
+      MBB->addLiveIn(CSI[i].getReg());
+
       // Insert the spill to the stack frame.
       RegInfo->storeRegToStackSlot(*MBB, I, CSI[i].getReg(),
-                                   CSI[i].getFrameIdx(),
-                                   CSI[i].getRegClass());
+                                   CSI[i].getFrameIdx(), CSI[i].getRegClass());
     }
   }
 
@@ -440,8 +443,9 @@
   assert(TM.getRegisterInfo() && "TM::getRegisterInfo() must be implemented!");
   const MRegisterInfo &MRI = *TM.getRegisterInfo();
 
-  for (MachineFunction::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB)
-    for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ++I)
+  for (MachineFunction::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB) {
+    RegScavenger RS(BB);
+    for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) {
       for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
         if (I->getOperand(i).isFrameIndex()) {
           // If this instruction has a FrameIndex operand, we need to use that
@@ -449,4 +453,9 @@
           MRI.eliminateFrameIndex(I);
           break;
         }
+      // Update register states.
+      if (MRI.requiresRegisterScavenging())
+        RS.forward();
+    }
+  }
 }






More information about the llvm-commits mailing list