[llvm-branch-commits] [llvm-branch] r85744 - in /llvm/branches/Apple/Leela: lib/Target/ARM/ARMBaseRegisterInfo.cpp test/CodeGen/Thumb2/ldr-str-imm12.ll

Bill Wendling isanbard at gmail.com
Sun Nov 1 13:23:25 PST 2009


Author: void
Date: Sun Nov  1 15:23:25 2009
New Revision: 85744

URL: http://llvm.org/viewvc/llvm-project?rev=85744&view=rev
Log:
$ svn merge -c 85743 https://llvm.org/svn/llvm-project/llvm/trunk
--- Merging r85743 into '.':
A    test/CodeGen/Thumb2/ldr-str-imm12.ll
U    lib/Target/ARM/ARMBaseRegisterInfo.cpp


Added:
    llvm/branches/Apple/Leela/test/CodeGen/Thumb2/ldr-str-imm12.ll
      - copied unchanged from r85743, llvm/trunk/test/CodeGen/Thumb2/ldr-str-imm12.ll
Modified:
    llvm/branches/Apple/Leela/lib/Target/ARM/ARMBaseRegisterInfo.cpp

Modified: llvm/branches/Apple/Leela/lib/Target/ARM/ARMBaseRegisterInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Leela/lib/Target/ARM/ARMBaseRegisterInfo.cpp?rev=85744&r1=85743&r2=85744&view=diff

==============================================================================
--- llvm/branches/Apple/Leela/lib/Target/ARM/ARMBaseRegisterInfo.cpp (original)
+++ llvm/branches/Apple/Leela/lib/Target/ARM/ARMBaseRegisterInfo.cpp Sun Nov  1 15:23:25 2009
@@ -1116,6 +1116,7 @@
   unsigned FrameReg = ARM::SP;
   int FrameIndex = MI.getOperand(i).getIndex();
   int Offset = MFI->getObjectOffset(FrameIndex) + MFI->getStackSize() + SPAdj;
+  bool isFixed = MFI->isFixedObjectIndex(FrameIndex);
 
   // When doing dynamic stack realignment, all of these need to change(?)
   if (AFI->isGPRCalleeSavedArea1Frame(FrameIndex))
@@ -1128,7 +1129,7 @@
     // When dynamically realigning the stack, use the frame pointer for
     // parameters, and the stack pointer for locals.
     assert (hasFP(MF) && "dynamic stack realignment without a FP!");
-    if (FrameIndex < 0) {
+    if (isFixed) {
       FrameReg = getFrameRegister(MF);
       Offset -= AFI->getFramePtrSpillOffset();
       // When referencing from the frame pointer, stack pointer adjustments
@@ -1137,13 +1138,22 @@
     }
   } else if (hasFP(MF) && AFI->hasStackFrame()) {
     assert(SPAdj == 0 && "Unexpected stack offset!");
-    // Use frame pointer to reference fixed objects unless this is a
-    // frameless function.
-    FrameReg = getFrameRegister(MF);
-    Offset -= AFI->getFramePtrSpillOffset();
+    if (isFixed || MFI->hasVarSizedObjects()) {
+      // Use frame pointer to reference fixed objects unless this is a
+      // frameless function.
+      FrameReg = getFrameRegister(MF);
+      Offset -= AFI->getFramePtrSpillOffset();
+    } else if (AFI->isThumb2Function()) {
+      // In Thumb2 mode, the negative offset is very limited.
+      int FPOffset = Offset - AFI->getFramePtrSpillOffset();
+      if (FPOffset >= -255 && FPOffset < 0) {
+        FrameReg = getFrameRegister(MF);
+        Offset = FPOffset;
+      }
+    }
   }
 
-  // modify MI as necessary to handle as much of 'Offset' as possible
+  // Modify MI as necessary to handle as much of 'Offset' as possible
   bool Done = false;
   if (!AFI->isThumbFunction())
     Done = rewriteARMFrameIndex(MI, i, FrameReg, Offset, TII);





More information about the llvm-branch-commits mailing list