[PATCH] D107329: [AMDGPU] Ignore call graph node which does not have function info.

Mahesha S via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 3 01:48:02 PDT 2021


hsmhsm created this revision.
hsmhsm added reviewers: foad, rampitec.
Herald added subscribers: kerbowa, hiraditya, t-tye, tpr, dstuttard, yaxunl, nhaehnle, jvesely, kzhuravl, arsenm.
hsmhsm requested review of this revision.
Herald added subscribers: llvm-commits, wdng.
Herald added a project: LLVM.

While collecting reachable callees (from kernels), ignore call graph node which
does not have associated function or associated function is not a definition.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D107329

Files:
  llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp
  llvm/test/CodeGen/AMDGPU/replace-lds-by-ptr-call-to-declare-only-func.ll


Index: llvm/test/CodeGen/AMDGPU/replace-lds-by-ptr-call-to-declare-only-func.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/AMDGPU/replace-lds-by-ptr-call-to-declare-only-func.ll
@@ -0,0 +1,38 @@
+; RUN: opt -S -mtriple=amdgcn--  -amdgpu-replace-lds-use-with-pointer -amdgpu-enable-lds-replace-with-pointer=true < %s | FileCheck %s
+
+; DESCRIPTION:
+;
+; The kernel 'kern' makes a call to declared only function `foo`, hence `foo`
+; is not considered as reachable callee, and is ignored. The function `goo`
+; which uses LDS is not called from kernel 'kern', hence it is also ignored.
+;
+
+; Original LDS should exist.
+; CHECK: @lds = internal local_unnamed_addr addrspace(3) global i32 undef, align 4
+ at lds = internal local_unnamed_addr addrspace(3) global i32 undef, align 4
+
+; Pointer should not be created.
+; CHECK-NOT: @lds.ptr = internal unnamed_addr addrspace(3) global i16 undef, align 2
+
+; CHECK: declare i32 @foo()
+declare i32 @foo()
+
+; No change
+define internal void @goo() {
+; CHECK-LABEL: entry:
+; CHECK:   store i32 undef, i32 addrspace(3)* @lds, align 4
+; CHECK:   ret void
+entry:
+  store i32 undef, i32 addrspace(3)* @lds, align 4
+  ret void
+}
+
+; No change
+define weak amdgpu_kernel void @kern() {
+; CHECK-LABEL: entry:
+; CHECK-LABEL:   %nt = call i32 @foo()
+; CHECK-LABEL:   ret void
+entry:
+  %nt = call i32 @foo()
+  ret void
+}
Index: llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp
+++ llvm/lib/Target/AMDGPU/Utils/AMDGPULDSUtils.cpp
@@ -68,6 +68,11 @@
       if (!VisitedCGNodes.insert(CGN).second)
         continue;
 
+      // Ignore call graph node which does not have associated function or
+      // associated function is not a definition.
+      if (!CGN->getFunction() || CGN->getFunction()->isDeclaration())
+        continue;
+
       for (auto GI = CGN->begin(), GE = CGN->end(); GI != GE; ++GI) {
         auto *RCB = cast<CallBase>(GI->first.getValue());
         auto *RCGN = GI->second;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107329.363649.patch
Type: text/x-patch
Size: 2132 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210803/521c7b8f/attachment.bin>


More information about the llvm-commits mailing list