diff options
| author | Jingyue Wu <jingyue@google.com> | 2015-04-23 20:00:04 +0000 |
|---|---|---|
| committer | Jingyue Wu <jingyue@google.com> | 2015-04-23 20:00:04 +0000 |
| commit | 3286ec1484bb20d99c8d69f417b789c5da0b8166 (patch) | |
| tree | 7e91698a84b8ddaeaac451bc57ee81444da13b3f /llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp | |
| parent | 6d48859b18938e1e72f28999cf2d6e9ce55cc955 (diff) | |
| download | bcm5719-llvm-3286ec1484bb20d99c8d69f417b789c5da0b8166.tar.gz bcm5719-llvm-3286ec1484bb20d99c8d69f417b789c5da0b8166.zip | |
[NVPTX] run SeparateConstOffsetFromGEP before SLSR
Summary:
We pick this order because SeparateConstOffsetFromGEP may create more
opportunities for SLSR.
Test Plan:
reassociate-geps-and-slsr.ll
no performance regression on internal benchmarks
Reviewers: meheff
Subscribers: llvm-commits, jholewinski
Differential Revision: http://reviews.llvm.org/D9230
llvm-svn: 235632
Diffstat (limited to 'llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp')
| -rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp index f9545cc1d41..dc8e8a29528 100644 --- a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -168,11 +168,13 @@ void NVPTXPassConfig::addIRPasses() { // them unused. We could remove dead code in an ad-hoc manner, but that // requires manual work and might be error-prone. addPass(createDeadCodeEliminationPass()); - addPass(createStraightLineStrengthReducePass()); addPass(createSeparateConstOffsetFromGEPPass()); - // The SeparateConstOffsetFromGEP pass creates variadic bases that can be used - // by multiple GEPs. Run GVN or EarlyCSE to really reuse them. GVN generates - // significantly better code than EarlyCSE for some of our benchmarks. + // ReassociateGEPs exposes more opportunites for SLSR. See + // the example in reassociate-geps-and-slsr.ll. + addPass(createStraightLineStrengthReducePass()); + // SeparateConstOffsetFromGEP and SLSR creates common expressions which GVN or + // EarlyCSE can reuse. GVN generates significantly better code than EarlyCSE + // for some of our benchmarks. if (getOptLevel() == CodeGenOpt::Aggressive) addPass(createGVNPass()); else |

