eliminateFrameIndex() change.
authorEvan Cheng <evan.cheng@apple.com>
Tue, 1 May 2007 09:13:03 +0000 (09:13 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 1 May 2007 09:13:03 +0000 (09:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36626 91177308-0d34-0410-b5e6-96231b3b80d8

12 files changed:
lib/Target/ARM/ARMRegisterInfo.cpp
lib/Target/ARM/ARMRegisterInfo.h
lib/Target/Alpha/AlphaRegisterInfo.cpp
lib/Target/Alpha/AlphaRegisterInfo.h
lib/Target/IA64/IA64RegisterInfo.cpp
lib/Target/IA64/IA64RegisterInfo.h
lib/Target/PowerPC/PPCRegisterInfo.cpp
lib/Target/PowerPC/PPCRegisterInfo.h
lib/Target/Sparc/SparcRegisterInfo.cpp
lib/Target/Sparc/SparcRegisterInfo.h
lib/Target/X86/X86RegisterInfo.cpp
lib/Target/X86/X86RegisterInfo.h

index bfb8266458a57c034f43f6316b1cba00251461bf..4fd0f8929a87bed13331beded9a4be64d2b60f45 100644 (file)
@@ -689,7 +689,7 @@ unsigned findScratchRegister(RegScavenger *RS, const TargetRegisterClass *RC,
 }
 
 void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-                                          RegScavenger *RS) const{
+                                          int SPAdj, RegScavenger *RS) const{
   unsigned i = 0;
   MachineInstr &MI = *II;
   MachineBasicBlock &MBB = *MI.getParent();
@@ -705,7 +705,7 @@ void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
   unsigned FrameReg = ARM::SP;
   int FrameIndex = MI.getOperand(i).getFrameIndex();
   int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) + 
-               MF.getFrameInfo()->getStackSize();
+               MF.getFrameInfo()->getStackSize() + SPAdj;
 
   if (AFI->isGPRCalleeSavedArea1Frame(FrameIndex))
     Offset -= AFI->getGPRCalleeSavedArea1Offset();
@@ -714,6 +714,7 @@ void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
   else if (AFI->isDPRCalleeSavedAreaFrame(FrameIndex))
     Offset -= AFI->getDPRCalleeSavedAreaOffset();
   else if (hasFP(MF)) {
+    assert(SPAdj == 0 && "Unexpected");
     // There is alloca()'s in this function, must reference off the frame
     // pointer instead.
     FrameReg = getFrameRegister(MF);
@@ -988,7 +989,7 @@ void ARMRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
     unsigned ScratchReg = findScratchRegister(RS, &ARM::GPRRegClass, AFI);
     if (ScratchReg == 0)
       // No register is "free". Scavenge a register.
-      ScratchReg = RS->scavengeRegister(&ARM::GPRRegClass, II);
+      ScratchReg = RS->scavengeRegister(&ARM::GPRRegClass, II, SPAdj);
     emitARMRegPlusImmediate(MBB, II, ScratchReg, FrameReg,
                             isSub ? -Offset : Offset, TII);
     MI.getOperand(i).ChangeToRegister(ScratchReg, false, false, true);
index 95619ecb21083ef89e71870a09f0c7abbcfe9209..261cc8837bc032292a56e5f92b434c8f7798d809 100644 (file)
@@ -85,7 +85,7 @@ public:
                                      MachineBasicBlock::iterator I) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-                           RegScavenger *RS = NULL) const;
+                           int SPAdj, RegScavenger *RS = NULL) const;
 
   void processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
                                             RegScavenger *RS = NULL) const;
index 717b5388e0fe3a70622f22350d7926432010156c..72a84072c2749215f93416f0220b688771db4dc0 100644 (file)
@@ -255,7 +255,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
 //<- SP
 
 void AlphaRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-                                            RegScavenger *RS) const {
+                                            int SPAdj, RegScavenger *RS) const {
+  assert(SPAdj == 0 && "Unexpected");
+
   unsigned i = 0;
   MachineInstr &MI = *II;
   MachineBasicBlock &MBB = *MI.getParent();
index 0fd82dd864fb186839a8f7d675dacb8263ac6cf7..07fea9eebeacec14e73359f575f1faff60700ba5 100644 (file)
@@ -61,7 +61,7 @@ struct AlphaRegisterInfo : public AlphaGenRegisterInfo {
                                      MachineBasicBlock::iterator I) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-                           RegScavenger *RS = NULL) const;
+                           int SPAdj, RegScavenger *RS = NULL) const;
 
   //void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
 
index e7e1441210360e46f1d3bea2467c5a4094318015..41a15fdc5e8a5669223fd85396fe5278e509f3c6 100644 (file)
@@ -177,7 +177,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
 }
 
 void IA64RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-                                           RegScavenger *RS)const{
+                                           int SPAdj, RegScavenger *RS)const{
+  assert(SPAdj == 0 && "Unexpected");
+
   unsigned i = 0;
   MachineInstr &MI = *II;
   MachineBasicBlock &MBB = *MI.getParent();
index 89d9c5e0fce4f7ee42290b72f639cdf21ef75550..d90f3211eb81263777db959fd26ccbd83b5f42b0 100644 (file)
@@ -60,7 +60,7 @@ struct IA64RegisterInfo : public IA64GenRegisterInfo {
                                      MachineBasicBlock::iterator MI) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator MI,
-                           RegScavenger *RS = NULL) const;
+                           int SPAdj, RegScavenger *RS = NULL) const;
 
   void emitPrologue(MachineFunction &MF) const;
   void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const;
index 89fa90b7d7943f1e10c3a3f3de3b44aa991e459b..a788a75da5e665996ac250d9e4863b5579f8aa08 100644 (file)
@@ -589,7 +589,9 @@ void PPCRegisterInfo::lowerDynamicAlloc(MachineBasicBlock::iterator II) const {
 }
 
 void PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-                                          RegScavenger *RS) const {
+                                          int SPAdj, RegScavenger *RS) const {
+  assert(SPAdj == 0 && "Unexpected");
+
   // Get the instruction.
   MachineInstr &MI = *II;
   // Get the instruction's basic block.
index d8e80250918d664f3225e5b2069877f1922eaad1..0caf1065d03c660f4d0be9cdea0d42439a62031d 100644 (file)
@@ -80,7 +80,7 @@ public:
   
   void lowerDynamicAlloc(MachineBasicBlock::iterator II) const;
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-                           RegScavenger *RS = NULL) const;
+                           int SPAdj, RegScavenger *RS = NULL) const;
 
   /// determineFrameLayout - Determine the size of the frame and maximum call
   /// frame size.
index 521e9b964ecc3e6140ef5a5239f2b6ea10494a7d..ded1bcd836a8c1602ce4d9e0eec999a709940e82 100644 (file)
@@ -165,7 +165,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
 }
 
 void SparcRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-                                            RegScavenger *RS) const {
+                                            int SPAdj, RegScavenger *RS) const {
+  assert(SPAdj == 0 && "Unexpected");
+
   unsigned i = 0;
   MachineInstr &MI = *II;
   while (!MI.getOperand(i).isFrameIndex()) {
index 520836e9dee3af19a0d13c572c5d5973cae7f545..b7ea4d6f4c987a8d592edb0d938d0b25b64b0d79 100644 (file)
@@ -64,7 +64,7 @@ struct SparcRegisterInfo : public SparcGenRegisterInfo {
                                      MachineBasicBlock::iterator I) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
-                           RegScavenger *RS = NULL) const;
+                           int SPAdj, RegScavenger *RS = NULL) const;
 
   void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;
 
index 52ab7f0945d5ed5d0cd33e9b6fe314291165379a..e5f57ca24e02e0666de7219340d1707776e432df 100644 (file)
@@ -986,7 +986,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
 }
 
 void X86RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
-                                          RegScavenger *RS) const{
+                                          int SPAdj, RegScavenger *RS) const{
+  assert(SPAdj == 0 && "Unexpected");
+
   unsigned i = 0;
   MachineInstr &MI = *II;
   MachineFunction &MF = *MI.getParent()->getParent();
index dbf7bf03d208864aae1763819932aced221876f3..cf83f99963de365857f7b817803a7e1927cbae37 100644 (file)
@@ -94,7 +94,7 @@ public:
                                      MachineBasicBlock::iterator MI) const;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator MI,
-                           RegScavenger *RS = NULL) const;
+                           int SPAdj, RegScavenger *RS = NULL) const;
 
   void processFunctionBeforeFrameFinalized(MachineFunction &MF) const;