[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