diff options
author | James Molloy <james.molloy@arm.com> | 2014-05-16 14:11:38 +0000 |
---|---|---|
committer | James Molloy <james.molloy@arm.com> | 2014-05-16 14:11:38 +0000 |
commit | 2c9f8a715ed61a68eff0f4310254d24e16594d39 (patch) | |
tree | 5a703232a558e504f885a6e260cdff538233762c /lib/Target/ARM | |
parent | bdbf5af5c698e91b1201dfc8269a1d7f257e15c6 (diff) | |
download | llvm-2c9f8a715ed61a68eff0f4310254d24e16594d39.tar.gz llvm-2c9f8a715ed61a68eff0f4310254d24e16594d39.tar.bz2 llvm-2c9f8a715ed61a68eff0f4310254d24e16594d39.tar.xz |
Enable the Load/Store optimization pass for Thumb1 but make it return immediately for now.
Patch by Moritz Roth!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208991 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM')
-rw-r--r-- | lib/Target/ARM/ARMLoadStoreOptimizer.cpp | 11 | ||||
-rw-r--r-- | lib/Target/ARM/ARMTargetMachine.cpp | 11 |
2 files changed, 14 insertions, 8 deletions
diff --git a/lib/Target/ARM/ARMLoadStoreOptimizer.cpp b/lib/Target/ARM/ARMLoadStoreOptimizer.cpp index e642aa61d5..5b678bd279 100644 --- a/lib/Target/ARM/ARMLoadStoreOptimizer.cpp +++ b/lib/Target/ARM/ARMLoadStoreOptimizer.cpp @@ -68,7 +68,7 @@ namespace { const ARMSubtarget *STI; ARMFunctionInfo *AFI; RegScavenger *RS; - bool isThumb2; + bool isThumb1, isThumb2; bool runOnMachineFunction(MachineFunction &Fn) override; @@ -1520,6 +1520,10 @@ bool ARMLoadStoreOpt::runOnMachineFunction(MachineFunction &Fn) { STI = &TM.getSubtarget<ARMSubtarget>(); RS = new RegScavenger(); isThumb2 = AFI->isThumb2Function(); + isThumb1 = AFI->isThumbFunction() && !isThumb2; + + // Don't do anything in this pass with Thumb1 for now. + if (isThumb1) return false; bool Modified = false; for (MachineFunction::iterator MFI = Fn.begin(), E = Fn.end(); MFI != E; @@ -1581,6 +1585,11 @@ bool ARMPreAllocLoadStoreOpt::runOnMachineFunction(MachineFunction &Fn) { MRI = &Fn.getRegInfo(); MF = &Fn; + ARMFunctionInfo *AFI = Fn.getInfo<ARMFunctionInfo>(); + bool isThumb1 = AFI->isThumbFunction() && !AFI->isThumb2Function(); + // Don't do anything in this pass with Thumb1 for now. + if (isThumb1) return false; + bool Modified = false; for (MachineFunction::iterator MFI = Fn.begin(), E = Fn.end(); MFI != E; ++MFI) diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp index 91e22dc16f..887622705e 100644 --- a/lib/Target/ARM/ARMTargetMachine.cpp +++ b/lib/Target/ARM/ARMTargetMachine.cpp @@ -247,8 +247,7 @@ bool ARMPassConfig::addInstSelector() { } bool ARMPassConfig::addPreRegAlloc() { - // FIXME: temporarily disabling load / store optimization pass for Thumb1. - if (getOptLevel() != CodeGenOpt::None && !getARMSubtarget().isThumb1Only()) + if (getOptLevel() != CodeGenOpt::None) addPass(createARMLoadStoreOptimizationPass(true)); if (getOptLevel() != CodeGenOpt::None && getARMSubtarget().isCortexA9()) addPass(createMLxExpansionPass()); @@ -262,12 +261,10 @@ bool ARMPassConfig::addPreRegAlloc() { } bool ARMPassConfig::addPreSched2() { - // FIXME: temporarily disabling load / store optimization pass for Thumb1. if (getOptLevel() != CodeGenOpt::None) { - if (!getARMSubtarget().isThumb1Only()) { - addPass(createARMLoadStoreOptimizationPass()); - printAndVerify("After ARM load / store optimizer"); - } + addPass(createARMLoadStoreOptimizationPass()); + printAndVerify("After ARM load / store optimizer"); + if (getARMSubtarget().hasNEON()) addPass(createExecutionDependencyFixPass(&ARM::DPRRegClass)); } |