diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp index 2af9fc955875..2e24e9f929d2 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp @@ -15,6 +15,7 @@ #include "AMDGPU.h" #include "AMDGPUTargetMachine.h" #include "Utils/AMDGPUBaseInfo.h" +#include "llvm/CodeGen/CommandFlags.h" #include "llvm/IR/Module.h" #include "llvm/Pass.h" #include "llvm/Support/CommandLine.h" @@ -70,7 +71,7 @@ recursivelyVisitUsers(GlobalValue &GV, // and just let us hit the error when we can't handle this. // // Unfortunately, clang adds noinline to all functions at -O0. We have - // to override this here. until that's fixed. + // to override this here until that's fixed. F->removeFnAttr(Attribute::NoInline); FuncsToAlwaysInline.insert(F); @@ -90,9 +91,13 @@ static bool alwaysInlineImpl(Module &M, bool GlobalOpt) { SmallPtrSet<Function *, 8> FuncsToAlwaysInline; SmallPtrSet<Function *, 8> FuncsToNoInline; + Triple TT(M.getTargetTriple()); for (GlobalAlias &A : M.aliases()) { if (Function* F = dyn_cast<Function>(A.getAliasee())) { + if (TT.getArch() == Triple::amdgcn && + A.getLinkage() != GlobalValue::InternalLinkage) + continue; A.replaceAllUsesWith(F); AliasesToRemove.push_back(&A); } @@ -122,7 +127,7 @@ static bool alwaysInlineImpl(Module &M, bool GlobalOpt) { unsigned AS = GV.getAddressSpace(); if ((AS == AMDGPUAS::REGION_ADDRESS) || (AS == AMDGPUAS::LOCAL_ADDRESS && - !AMDGPUTargetMachine::EnableLowerModuleLDS)) + (!AMDGPUTargetMachine::EnableLowerModuleLDS || !GV.hasInitializer()))) recursivelyVisitUsers(GV, FuncsToAlwaysInline); } |
