- Added a hook processFunctionBeforeCalleeSaveScn(). This is called by PEI just
authorEvan Cheng <evan.cheng@apple.com>
Thu, 28 Sep 2006 00:07:19 +0000 (00:07 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Thu, 28 Sep 2006 00:07:19 +0000 (00:07 +0000)
before it determines which callee-save registers are to be spilled. This allows
the target to make changes such as forcing certain physical registers to be
spilled.
- Modified comments. It's important to note the order of registers in the array
returns by getCalleeSaveRegs() determines the order of callee save spill code.

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

include/llvm/Target/MRegisterInfo.h

index 6091c469374975de7e9fff7267ac5c960fbcf9d7..a45d53aa3c5152e016aee413394ffdd67cb6406b 100644 (file)
@@ -283,7 +283,9 @@ public:
   }
 
   /// getCalleeSaveRegs - Return a null-terminated list of all of the
-  /// callee-save registers on this target.
+  /// callee-save registers on this target. The register should be in the
+  /// order of desired callee-save stack frame offset. The first register is
+  /// closed to the incoming stack pointer if stack grows down, and vice versa.
   virtual const unsigned* getCalleeSaveRegs() const = 0;
 
   /// getCalleeSaveRegClasses - Return a null-terminated list of the preferred
@@ -371,12 +373,16 @@ public:
     assert(0 && "Call Frame Pseudo Instructions do not exist on this target!");
   }
 
+  /// processFunctionBeforeCalleeSaveScan - This method is called immediately
+  /// before PrologEpilogInserter scans the physical registers used to determine
+  /// what callee-save registers should be spilled. This method is optional.
+  virtual void processFunctionBeforeCalleeSaveScan(MachineFunction &MF) const {
+  }
+
   /// processFunctionBeforeFrameFinalized - This method is called immediately
   /// before the specified functions frame layout (MF.getFrameInfo()) is
   /// finalized.  Once the frame is finalized, MO_FrameIndex operands are
-  /// replaced with direct constants.  This method is optional. The return value
-  /// is the number of instructions added to (negative if removed from) the
-  /// basic block
+  /// replaced with direct constants.  This method is optional.
   ///
   virtual void processFunctionBeforeFrameFinalized(MachineFunction &MF) const {
   }