[llvm] r280221 - AMDGPU/SI: Handle aliases in AMDGPUAlwaysInlinePass
Nikolay Haustov via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 31 04:18:33 PDT 2016
Author: nhaustov
Date: Wed Aug 31 06:18:33 2016
New Revision: 280221
URL: http://llvm.org/viewvc/llvm-project?rev=280221&view=rev
Log:
AMDGPU/SI: Handle aliases in AMDGPUAlwaysInlinePass
Summary:
Simply replace usage of aliases to functions with aliasee.
This came up when bitcode linking to builtin library and
calls to aliases not being resolved.
Also made minor improvements to existing test.
Reviewers: tstellarAMD, alex-t, vpykhtin
Subscribers: arsenm, wdng, rampitec
Differential Revision: https://reviews.llvm.org/D24023
Modified:
llvm/trunk/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp
llvm/trunk/test/CodeGen/AMDGPU/inline-calls.ll
Modified: llvm/trunk/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp?rev=280221&r1=280220&r2=280221&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp Wed Aug 31 06:18:33 2016
@@ -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))
Modified: llvm/trunk/test/CodeGen/AMDGPU/inline-calls.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AMDGPU/inline-calls.ll?rev=280221&r1=280220&r2=280221&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/inline-calls.ll (original)
+++ llvm/trunk/test/CodeGen/AMDGPU/inline-calls.ll Wed Aug 31 06:18:33 2016
@@ -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
+ at 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
+ at 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
+}
More information about the llvm-commits
mailing list