1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-22 02:33:06 +01:00

Set IgnoreLLVMUsed to false in CallGraph::addToCallGraph()

clang++ uses llvm.compiler.used in certain cases to preserve
symbol which is fully inlined. D96087 has resulted in undefined
symbols in such cases. Set it to false by default to preserve
old behavior but keep the option for specific uses where we
want to ignore these (e.g. to detect a potential indirect call
to a function).

Differential Revision: https://reviews.llvm.org/D99897
This commit is contained in:
Stanislav Mekhanoshin 2021-04-05 13:01:44 -07:00
parent 16f0e00ff4
commit 3071fb3566
2 changed files with 11 additions and 3 deletions

View File

@ -82,7 +82,7 @@ void CallGraph::addToCallGraph(Function *F) {
if (!F->hasLocalLinkage() ||
F->hasAddressTaken(nullptr, /*IgnoreCallbackUses=*/true,
/* IgnoreAssumeLikeCalls */ true,
/* IgnoreLLVMUsed */ true))
/* IgnoreLLVMUsed */ false))
ExternalCallingNode->addCalledFunction(nullptr, Node);
populateCallGraphNode(Node);

View File

@ -1,12 +1,20 @@
; RUN: opt < %s -print-callgraph -disable-output 2>&1 | FileCheck %s
; The test will report used1 and used2 functions as used on the grounds
; of llvm.*.used references. Passing IgnoreLLVMUsed = true into the
; Function::hasAddressTaken() in the CallGraph::addToCallGraph() has to
; change their uses to zero.
; CHECK: Call graph node <<null function>><<{{.*}}>> #uses=0
; CHECK-NEXT: CS<None> calls function 'used1'
; CHECK-NEXT: CS<None> calls function 'used2'
; CHECK-NEXT: CS<None> calls function 'unused'
; CHECK-EMPTY:
; CHECK-NEXT: Call graph node for function: 'unused'<<{{.*}}>> #uses=1
; CHECK-EMPTY:
; CHECK-NEXT: Call graph node for function: 'used1'<<{{.*}}>> #uses=0
; CHECK-NEXT: Call graph node for function: 'used1'<<{{.*}}>> #uses=1
; CHECK-EMPTY:
; CHECK-NEXT: Call graph node for function: 'used2'<<{{.*}}>> #uses=0
; CHECK-NEXT: Call graph node for function: 'used2'<<{{.*}}>> #uses=1
; CHECK-EMPTY:
@llvm.used = appending global [1 x i8*] [i8* bitcast (void ()* @used1 to i8*)]