diff options
author | Renato Golin <renato.golin@linaro.org> | 2015-03-26 18:38:04 +0000 |
---|---|---|
committer | Renato Golin <renato.golin@linaro.org> | 2015-03-26 18:38:04 +0000 |
commit | 4c8713969ccdefd3ee6574636ca326de73e45d88 (patch) | |
tree | 2e534d81007b4fa9fca057beddb968331ac2a612 /llvm/lib/Target/ARM/ARMTargetMachine.cpp | |
parent | c947892d10e3baf7a4e808f03d9e3c5acac8d163 (diff) | |
download | bcm5719-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.cpp | 23 |
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()); } |