[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