[llvm-commits] CVS: llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp

Evan Cheng evan.cheng at apple.com
Wed Mar 7 12:31:05 PST 2007



Changes in directory llvm/lib/Target/ARM:

ARMLoadStoreOptimizer.cpp updated: 1.4 -> 1.5
---
Log message:

Only safe to use a call-clobbered or spilled callee-saved register as scratch register.

---
Diffs of the changes:  (+8 -2)

 ARMLoadStoreOptimizer.cpp |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)


Index: llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp
diff -u llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.4 llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.5
--- llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp:1.4	Tue Mar  6 20:38:05 2007
+++ llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp	Wed Mar  7 14:30:36 2007
@@ -15,6 +15,7 @@
 #define DEBUG_TYPE "arm-ldst-opt"
 #include "ARM.h"
 #include "ARMAddressingModes.h"
+#include "ARMMachineFunctionInfo.h"
 #include "ARMRegisterInfo.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallVector.h"
@@ -39,6 +40,7 @@
   struct VISIBILITY_HIDDEN ARMLoadStoreOpt : public MachineFunctionPass {
     const TargetInstrInfo *TII;
     const MRegisterInfo *MRI;
+    ARMFunctionInfo *AFI;
     RegScavenger *RS;
     MachineBasicBlock::iterator RSI;
 
@@ -587,8 +589,11 @@
         // First advance to the instruction just before the start of the chain.
         if (RSI != MBB.begin())
           RS->forward(prior(RSI));
-        // Find a scratch register.
-        Scratch = RS->FindUnusedReg(&ARM::GPRRegClass);
+        // Find a scratch register. Make sure it's a call clobbered register or
+        // a spilled callee-saved register.
+        Scratch = RS->FindUnusedReg(&ARM::GPRRegClass, true);
+        if (!Scratch)
+          RS->FindUnusedReg(&ARM::GPRRegClass, AFI->getSpilledCSRegisters());
         // Process the load / store instructions.
         RS->forward(prior(MBBI));
 
@@ -661,6 +666,7 @@
 
 bool ARMLoadStoreOpt::runOnMachineFunction(MachineFunction &Fn) {
   const TargetMachine &TM = Fn.getTarget();
+  AFI = Fn.getInfo<ARMFunctionInfo>();
   TII = TM.getInstrInfo();
   MRI = TM.getRegisterInfo();
   RS = new RegScavenger();






More information about the llvm-commits mailing list