summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/ARMTargetMachine.cpp
diff options
context:
space:
mode:
authorRenato Golin <renato.golin@linaro.org>2015-03-26 18:38:04 +0000
committerRenato Golin <renato.golin@linaro.org>2015-03-26 18:38:04 +0000
commit4c8713969ccdefd3ee6574636ca326de73e45d88 (patch)
tree2e534d81007b4fa9fca057beddb968331ac2a612 /llvm/lib/Target/ARM/ARMTargetMachine.cpp
parentc947892d10e3baf7a4e808f03d9e3c5acac8d163 (diff)
downloadbcm5719-llvm-4c8713969ccdefd3ee6574636ca326de73e45d88.tar.gz
bcm5719-llvm-4c8713969ccdefd3ee6574636ca326de73e45d88.zip
Adds an option to disable ARM ld/st optim pass
Enabled by default, but it's useful when debugging with llc. Patch by Ranjeet Singh. llvm-svn: 233303
Diffstat (limited to 'llvm/lib/Target/ARM/ARMTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/ARM/ARMTargetMachine.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/llvm/lib/Target/ARM/ARMTargetMachine.cpp b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
index fcb96e08039..1bee1b077f7 100644
--- a/llvm/lib/Target/ARM/ARMTargetMachine.cpp
+++ b/llvm/lib/Target/ARM/ARMTargetMachine.cpp
@@ -37,6 +37,11 @@ EnableAtomicTidy("arm-atomic-cfg-tidy", cl::Hidden,
" to make use of cmpxchg flow-based information"),
cl::init(true));
+static cl::opt<bool>
+EnableARMLoadStoreOpt("arm-load-store-opt", cl::Hidden,
+ cl::desc("Enable ARM load/store optimization pass"),
+ cl::init(true));
+
extern "C" void LLVMInitializeARMTarget() {
// Register the target.
RegisterTargetMachine<ARMLETargetMachine> X(TheARMLETarget);
@@ -348,18 +353,22 @@ bool ARMPassConfig::addInstSelector() {
}
void ARMPassConfig::addPreRegAlloc() {
- if (getOptLevel() != CodeGenOpt::None)
- addPass(createARMLoadStoreOptimizationPass(true));
- if (getOptLevel() != CodeGenOpt::None)
+ if (getOptLevel() != CodeGenOpt::None) {
addPass(createMLxExpansionPass());
- if (getOptLevel() != CodeGenOpt::None && !DisableA15SDOptimization) {
- addPass(createA15SDOptimizerPass());
+
+ if (EnableARMLoadStoreOpt)
+ addPass(createARMLoadStoreOptimizationPass(/* pre-register alloc */ true));
+
+ if (!DisableA15SDOptimization)
+ addPass(createA15SDOptimizerPass());
}
}
void ARMPassConfig::addPreSched2() {
if (getOptLevel() != CodeGenOpt::None) {
- addPass(createARMLoadStoreOptimizationPass());
+ if (EnableARMLoadStoreOpt)
+ addPass(createARMLoadStoreOptimizationPass());
+
addPass(createExecutionDependencyFixPass(&ARM::DPRRegClass));
}
@@ -373,7 +382,7 @@ void ARMPassConfig::addPreSched2() {
addPass(createThumb2SizeReductionPass());
if (!getARMSubtarget().isThumb1Only())
addPass(&IfConverterID);
- }
+ }
addPass(createThumb2ITBlockPass());
}
OpenPOWER on IntegriCloud