diff options
| author | Jingyue Wu <jingyue@google.com> | 2016-02-04 04:15:36 +0000 |
|---|---|---|
| committer | Jingyue Wu <jingyue@google.com> | 2016-02-04 04:15:36 +0000 |
| commit | f650441b04069195a2fa757ed4e6b5d85e0b7892 (patch) | |
| tree | f0bc2e1a867fe29b7a166d72b0c1c40a9dfc7864 /llvm/lib | |
| parent | d5c0e4d69b7ac23c9dcdecd3c21c9bf660db23aa (diff) | |
| download | bcm5719-llvm-f650441b04069195a2fa757ed4e6b5d85e0b7892.tar.gz bcm5719-llvm-f650441b04069195a2fa757ed4e6b5d85e0b7892.zip | |
[NVPTX] Disable performance optimizations when OptLevel==None
Reviewers: jholewinski, tra, eliben
Subscribers: jholewinski, llvm-commits
Differential Revision: http://reviews.llvm.org/D16874
llvm-svn: 259749
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp | 57 |
1 files changed, 36 insertions, 21 deletions
diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp index aa931b134da..04b8f49e55b 100644 --- a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -143,14 +143,20 @@ public: void addOptimizedRegAlloc(FunctionPass *RegAllocPass) override; private: - // if the opt level is aggressive, add GVN; otherwise, add EarlyCSE. + // If the opt level is aggressive, add GVN; otherwise, add EarlyCSE. This + // function is only called in opt mode. void addEarlyCSEOrGVNPass(); + + // Add passes that propagate special memory spaces. + void addMemorySpaceInferencePasses(); + + // Add passes that perform straight-line scalar optimizations. + void addStraightLineScalarOptimizationPasses(); }; } // end anonymous namespace TargetPassConfig *NVPTXTargetMachine::createPassConfig(PassManagerBase &PM) { - NVPTXPassConfig *PassConfig = new NVPTXPassConfig(this, PM); - return PassConfig; + return new NVPTXPassConfig(this, PM); } TargetIRAnalysis NVPTXTargetMachine::getTargetIRAnalysis() { @@ -166,22 +172,7 @@ void NVPTXPassConfig::addEarlyCSEOrGVNPass() { addPass(createEarlyCSEPass()); } -void NVPTXPassConfig::addIRPasses() { - // The following passes are known to not play well with virtual regs hanging - // around after register allocation (which in our case, is *all* registers). - // We explicitly disable them here. We do, however, need some functionality - // of the PrologEpilogCodeInserter pass, so we emulate that behavior in the - // NVPTXPrologEpilog pass (see NVPTXPrologEpilogPass.cpp). - disablePass(&PrologEpilogCodeInserterID); - disablePass(&MachineCopyPropagationID); - disablePass(&TailDuplicateID); - - addPass(createNVVMReflectPass()); - addPass(createNVPTXImageOptimizerPass()); - addPass(createNVPTXAssignValidGlobalNamesPass()); - addPass(createGenericToNVVMPass()); - - // === Propagate special address spaces === +void NVPTXPassConfig::addMemorySpaceInferencePasses() { addPass(createNVPTXLowerKernelArgsPass(&getNVPTXTargetMachine())); // NVPTXLowerKernelArgs emits alloca for byval parameters which can often // be eliminated by SROA. @@ -192,8 +183,9 @@ 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()); +} - // === Straight-line scalar optimizations === +void NVPTXPassConfig::addStraightLineScalarOptimizationPasses() { addPass(createSeparateConstOffsetFromGEPPass()); addPass(createSpeculativeExecutionPass()); // ReassociateGEPs exposes more opportunites for SLSR. See @@ -208,6 +200,28 @@ void NVPTXPassConfig::addIRPasses() { // NaryReassociate on GEPs creates redundant common expressions, so run // EarlyCSE after it. addPass(createEarlyCSEPass()); +} + +void NVPTXPassConfig::addIRPasses() { + // The following passes are known to not play well with virtual regs hanging + // around after register allocation (which in our case, is *all* registers). + // We explicitly disable them here. We do, however, need some functionality + // of the PrologEpilogCodeInserter pass, so we emulate that behavior in the + // NVPTXPrologEpilog pass (see NVPTXPrologEpilogPass.cpp). + disablePass(&PrologEpilogCodeInserterID); + disablePass(&MachineCopyPropagationID); + disablePass(&TailDuplicateID); + + addPass(createNVVMReflectPass()); + if (getOptLevel() != CodeGenOpt::None) + addPass(createNVPTXImageOptimizerPass()); + addPass(createNVPTXAssignValidGlobalNamesPass()); + addPass(createGenericToNVVMPass()); + + if (getOptLevel() != CodeGenOpt::None) { + addMemorySpaceInferencePasses(); + addStraightLineScalarOptimizationPasses(); + } // === LSR and other generic IR passes === TargetPassConfig::addIRPasses(); @@ -223,7 +237,8 @@ void NVPTXPassConfig::addIRPasses() { // %1 = shl %a, 2 // // but EarlyCSE can do neither of them. - addEarlyCSEOrGVNPass(); + if (getOptLevel() != CodeGenOpt::None) + addEarlyCSEOrGVNPass(); } bool NVPTXPassConfig::addInstSelector() { |

