[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