From c1b9d47b3b30ba6714776e4a255968946e48bb29 Mon Sep 17 00:00:00 2001 From: Jingyue Wu Date: Tue, 26 Apr 2016 22:59:25 +0000 Subject: [PATCH] [NVPTX] Fix some usages of CodeGenOpt::None. NVPTXLowerKernelArgs is required for correctness, so it should not be guarded by CodeGenOpt::None. NVPTXPeephole is optimization only, so it should be skipped when CodeGenOpt::None. llvm-svn: 267619 --- llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp index 60cbf79..b28aa76 100644 --- a/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp +++ b/llvm/lib/Target/NVPTX/NVPTXTargetMachine.cpp @@ -181,7 +181,6 @@ void NVPTXPassConfig::addEarlyCSEOrGVNPass() { } void NVPTXPassConfig::addAddressSpaceInferencePasses() { - addPass(createNVPTXLowerKernelArgsPass(&getNVPTXTargetMachine())); // NVPTXLowerKernelArgs emits alloca for byval parameters which can often // be eliminated by SROA. addPass(createSROAPass()); @@ -235,6 +234,9 @@ void NVPTXPassConfig::addIRPasses() { addPass(createNVPTXAssignValidGlobalNamesPass()); addPass(createGenericToNVVMPass()); + // NVPTXLowerKernelArgs is required for correctness and should be run right + // before the address space inference passes. + addPass(createNVPTXLowerKernelArgsPass(&getNVPTXTargetMachine())); if (getOptLevel() != CodeGenOpt::None) { addAddressSpaceInferencePasses(); addStraightLineScalarOptimizationPasses(); @@ -273,10 +275,12 @@ bool NVPTXPassConfig::addInstSelector() { void NVPTXPassConfig::addPostRegAlloc() { addPass(createNVPTXPrologEpilogPass(), false); - // NVPTXPrologEpilogPass calculates frame object offset and replace frame - // index with VRFrame register. NVPTXPeephole need to be run after that and - // will replace VRFrame with VRFrameLocal when possible. - addPass(createNVPTXPeephole()); + if (getOptLevel() != CodeGenOpt::None) { + // NVPTXPrologEpilogPass calculates frame object offset and replace frame + // index with VRFrame register. NVPTXPeephole need to be run after that and + // will replace VRFrame with VRFrameLocal when possible. + addPass(createNVPTXPeephole()); + } } FunctionPass *NVPTXPassConfig::createTargetRegisterAllocator(bool) { -- 2.7.4