[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 21:53:32 PDT 2021


This revision was automatically updated to reflect the committed changes.
hsmhsm marked an inline comment as done.
Closed by commit rG596e61c33226: [AMDGPU] Ignore call graph node which does not have function info. (authored by hsmhsm).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107329/new/

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.363968.patch
Type: text/x-patch
Size: 2132 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210804/f9880e3c/attachment.bin>


More information about the llvm-commits mailing list