diff options
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp | 12 | ||||
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/inline-calls.ll | 25 |
2 files changed, 37 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)) diff --git a/llvm/test/CodeGen/AMDGPU/inline-calls.ll b/llvm/test/CodeGen/AMDGPU/inline-calls.ll index 33a4c832e75..4541a902c1b 100644 --- a/llvm/test/CodeGen/AMDGPU/inline-calls.ll +++ b/llvm/test/CodeGen/AMDGPU/inline-calls.ll @@ -10,6 +10,7 @@ entry: } ; CHECK: {{^}}kernel: +; CHECK-NOT: call define void @kernel(i32 addrspace(1)* %out) { entry: %tmp0 = call i32 @func(i32 1) @@ -18,8 +19,32 @@ entry: } ; CHECK: {{^}}kernel2: +; CHECK-NOT: call define void @kernel2(i32 addrspace(1)* %out) { entry: call void @kernel(i32 addrspace(1)* %out) ret void } + +; CHECK-NOT: func_alias +@func_alias = alias i32 (i32), i32 (i32)* @func + +; CHECK: {{^}}kernel3: +; CHECK-NOT: call +define void @kernel3(i32 addrspace(1)* %out) { +entry: + %tmp0 = call i32 @func_alias(i32 1) + store i32 %tmp0, i32 addrspace(1)* %out + ret void +} + +; CHECK-NOT: kernel_alias +@kernel_alias = alias void (i32 addrspace(1)*), void (i32 addrspace(1)*)* @kernel + +; CHECK: {{^}}kernel4: +; CHECK-NOT: call +define void @kernel4(i32 addrspace(1)* %out) { +entry: + call void @kernel_alias(i32 addrspace(1)* %out) + ret void +} |