[llvm-commits] [llvm] r111930 - /llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp

Jim Grosbach grosbach at apple.com
Tue Aug 24 11:04:52 PDT 2010


Author: grosbach
Date: Tue Aug 24 13:04:52 2010
New Revision: 111930

URL: http://llvm.org/viewvc/llvm-project?rev=111930&view=rev
Log:
add ARM cmd line option to force always using virtual base regs when possible.
Intended to help ease reproducing problems by increasing base register usage
after heuristics for only using the when needed are in place.

Modified:
    llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp

Modified: llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp?rev=111930&r1=111929&r2=111930&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMBaseRegisterInfo.cpp Tue Aug 24 13:04:52 2010
@@ -43,6 +43,9 @@
 cl::opt<bool>
 ReuseFrameIndexVals("arm-reuse-frame-index-vals", cl::Hidden, cl::init(true),
           cl::desc("Reuse repeated frame index values"));
+cl::opt<bool>
+ForceAllBaseRegAlloc("arm-force-base-reg-alloc", cl::Hidden, cl::init(true),
+          cl::desc("Force use of virtual base registers for stack load/store"));
 }
 
 using namespace llvm;
@@ -1436,10 +1439,9 @@
   // we don't know everything for certain yet) whether this offset is likely
   // to be out of range of the immediate. Return true if so.
 
-  // FIXME: For testing, return true for all loads/stores and false for
-  // everything else. We want to create lots of base regs to shake out bugs.
+  // We only generate virtual base registers for loads and stores, so
+  // return false for everything else.
   unsigned Opc = MI->getOpcode();
-
   switch (Opc) {
   case ARM::LDR: case ARM::LDRH: case ARM::LDRB:
   case ARM::STR: case ARM::STRH: case ARM::STRB:
@@ -1448,10 +1450,20 @@
   case ARM::VLDRS: case ARM::VLDRD:
   case ARM::VSTRS: case ARM::VSTRD:
   case ARM::tSTRspi: case ARM::tLDRspi:
-    return true;
+    if (ForceAllBaseRegAlloc)
+      return true;
+    break;
   default:
     return false;
   }
+
+  // FIXME: TODO
+  // Without a virtual base register, if the function has variable sized
+  // objects, all fixed-size local references will be via the frame pointer,
+  // otherwise via the stack pointer. Approximate the offset and see if it's
+  // legal for the instruction.
+
+  return true;
 }
 
 /// materializeFrameBaseRegister - Insert defining instruction(s) for





More information about the llvm-commits mailing list