diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp index 63f5fb3cdf0..886b1b0f2b2 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp @@ -35,8 +35,20 @@ public: char AMDGPUAlwaysInline::ID = 0; bool AMDGPUAlwaysInline::runOnModule(Module &M) { + std::vector<GlobalAlias*> AliasesToRemove; std::vector<Function *> FuncsToClone; + for (GlobalAlias &A : M.aliases()) { + if (Function* F = dyn_cast<Function>(A.getAliasee())) { + A.replaceAllUsesWith(F); + AliasesToRemove.push_back(&A); + } + } + + for (GlobalAlias* A : AliasesToRemove) { + A->eraseFromParent(); + } + for (Function &F : M) { if (!F.hasLocalLinkage() && !F.isDeclaration() && !F.use_empty() && !F.hasFnAttribute(Attribute::NoInline)) |