forked from OSchip/llvm-project
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 llvm-svn: 280221
This commit is contained in:
parent
75b1fb9b9e
commit
eba808957e
|
@ -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))
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue