forked from OSchip/llvm-project
[AMDGPU] Ignore call graph node which does not have function info.
While collecting reachable callees (from kernels), ignore call graph node which does not have associated function or associated function is not a definition. Reviewed By: rampitec Differential Revision: https://reviews.llvm.org/D107329
This commit is contained in:
parent
df4e0beaeb
commit
596e61c332
|
@ -68,6 +68,11 @@ class CollectReachableCallees {
|
|||
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;
|
||||
|
|
|
@ -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
|
||||
@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
|
||||
}
|
Loading…
Reference in New Issue