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

Evan Cheng evan.cheng at apple.com
Tue Jan 2 13:31:30 PST 2007



Changes in directory llvm/lib/CodeGen:

PrologEpilogInserter.cpp updated: 1.62 -> 1.63
---
Log message:

- Fixing naming inconsistency: calleesave -> calleesaved.
- Make use of spillCalleeSavedRegisters() and restoreCalleeSavedRegisters().

---
Diffs of the changes:  (+30 -24)

 PrologEpilogInserter.cpp |   54 ++++++++++++++++++++++++++---------------------
 1 files changed, 30 insertions(+), 24 deletions(-)


Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp
diff -u llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.62 llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.63
--- llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.62	Wed Dec  6 20:25:34 2006
+++ llvm/lib/CodeGen/PrologEpilogInserter.cpp	Tue Jan  2 15:31:15 2007
@@ -46,7 +46,8 @@
 
       // Allow the target machine to make some adjustments to the function
       // e.g. UsedPhysRegs before calculateCalleeSavedRegisters.
-      Fn.getTarget().getRegisterInfo()->processFunctionBeforeCalleeSaveScan(Fn);
+      Fn.getTarget().getRegisterInfo()
+        ->processFunctionBeforeCalleeSavedScan(Fn);
 
       // Scan the function for modified callee saved registers and insert spill
       // code for any callee saved registers that are modified.  Also calculate
@@ -80,7 +81,7 @@
     }
   
   private:
-    // MinCSFrameIndex, MaxCSFrameIndex - Keeps the range of callee save
+    // MinCSFrameIndex, MaxCSFrameIndex - Keeps the range of callee saved
     // stack frame indexes.
     unsigned MinCSFrameIndex, MaxCSFrameIndex;
 
@@ -109,7 +110,7 @@
   const TargetFrameInfo *TFI = Fn.getTarget().getFrameInfo();
 
   // Get the callee saved register list...
-  const unsigned *CSRegs = RegInfo->getCalleeSaveRegs();
+  const unsigned *CSRegs = RegInfo->getCalleeSavedRegs();
 
   // Get the function call frame set-up and tear-down instruction opcode
   int FrameSetupOpcode   = RegInfo->getCallFrameSetupOpcode();
@@ -151,7 +152,7 @@
   //
   const bool *PhysRegsUsed = Fn.getUsedPhysregs();
   const TargetRegisterClass* const *CSRegClasses =
-    RegInfo->getCalleeSaveRegClasses();
+    RegInfo->getCalleeSavedRegClasses();
   std::vector<CalleeSavedInfo> CSI;
   for (unsigned i = 0; CSRegs[i]; ++i) {
     unsigned Reg = CSRegs[i];
@@ -174,7 +175,7 @@
 
   unsigned NumFixedSpillSlots;
   const std::pair<unsigned,int> *FixedSpillSlots =
-    TFI->getCalleeSaveSpillSlots(NumFixedSpillSlots);
+    TFI->getCalleeSavedSpillSlots(NumFixedSpillSlots);
 
   // Now that we know which registers need to be saved and restored, allocate
   // stack slots for them.
@@ -228,10 +229,13 @@
   // code into the entry block.
   MachineBasicBlock *MBB = Fn.begin();
   MachineBasicBlock::iterator I = MBB->begin();
-  for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
-    // Insert the spill to the stack frame.
-    RegInfo->storeRegToStackSlot(*MBB, I, CSI[i].getReg(), CSI[i].getFrameIdx(),
-                                 CSI[i].getRegClass());
+  if (!RegInfo->spillCalleeSavedRegisters(*MBB, I, CSI)) {
+    for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
+      // Insert the spill to the stack frame.
+      RegInfo->storeRegToStackSlot(*MBB, I, CSI[i].getReg(),
+                                   CSI[i].getFrameIdx(),
+                                   CSI[i].getRegClass());
+    }
   }
 
   // Add code to restore the callee-save registers in each exiting block.
@@ -255,19 +259,21 @@
       
       // Restore all registers immediately before the return and any terminators
       // that preceed it.
-      for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
-        RegInfo->loadRegFromStackSlot(*MBB, I, CSI[i].getReg(),
-                                      CSI[i].getFrameIdx(),
-                                      CSI[i].getRegClass());
-        assert(I != MBB->begin() &&
-               "loadRegFromStackSlot didn't insert any code!");
-        // Insert in reverse order.  loadRegFromStackSlot can insert multiple
-        // instructions.
-        if (AtStart)
-          I = MBB->begin();
-        else {
-          I = BeforeI;
-          ++I;
+      if (!RegInfo->restoreCalleeSavedRegisters(*MBB, I, CSI)) {
+        for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
+          RegInfo->loadRegFromStackSlot(*MBB, I, CSI[i].getReg(),
+                                        CSI[i].getFrameIdx(),
+                                        CSI[i].getRegClass());
+          assert(I != MBB->begin() &&
+                 "loadRegFromStackSlot didn't insert any code!");
+          // Insert in reverse order.  loadRegFromStackSlot can insert multiple
+          // instructions.
+          if (AtStart)
+            I = MBB->begin();
+          else {
+            I = BeforeI;
+            ++I;
+          }
         }
       }
     }
@@ -319,7 +325,7 @@
   }
 
   // First assign frame offsets to stack objects that are used to spill
-  // callee save registers.
+  // callee saved registers.
   if (StackGrowsDown) {
     for (unsigned i = 0, e = FFI->getObjectIndexEnd(); i != e; ++i) {
       if (i < MinCSFrameIndex || i > MaxCSFrameIndex)
@@ -356,7 +362,7 @@
   }
 
   // Then assign frame offsets to stack objects that are not used to spill
-  // callee save registers.
+  // callee saved registers.
   for (unsigned i = 0, e = FFI->getObjectIndexEnd(); i != e; ++i) {
     if (i >= MinCSFrameIndex && i <= MaxCSFrameIndex)
       continue;






More information about the llvm-commits mailing list