[llvm] 5f0ac1e - Set IgnoreLLVMUsed to false in CallGraph::addToCallGraph()

Stanislav Mekhanoshin via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 8 11:14:18 PDT 2021


Author: Stanislav Mekhanoshin
Date: 2021-04-08T11:14:09-07:00
New Revision: 5f0ac1ef78880f233dea2070ab55894c6bd2690c

URL: https://github.com/llvm/llvm-project/commit/5f0ac1ef78880f233dea2070ab55894c6bd2690c
DIFF: https://github.com/llvm/llvm-project/commit/5f0ac1ef78880f233dea2070ab55894c6bd2690c.diff

LOG: 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

Added: 
    llvm/test/Analysis/CallGraph/llvm-used.ll

Modified: 
    llvm/lib/Analysis/CallGraph.cpp

Removed: 
    llvm/test/Analysis/CallGraph/ignore-llvm-used.ll


################################################################################
diff  --git a/llvm/lib/Analysis/CallGraph.cpp b/llvm/lib/Analysis/CallGraph.cpp
index bca45678c6a20..dfbd29b7d6366 100644
--- a/llvm/lib/Analysis/CallGraph.cpp
+++ b/llvm/lib/Analysis/CallGraph.cpp
@@ -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);

diff  --git a/llvm/test/Analysis/CallGraph/ignore-llvm-used.ll b/llvm/test/Analysis/CallGraph/llvm-used.ll
similarity index 69%
rename from llvm/test/Analysis/CallGraph/ignore-llvm-used.ll
rename to llvm/test/Analysis/CallGraph/llvm-used.ll
index ac6569b96f06a..09d4e95d594b4 100644
--- a/llvm/test/Analysis/CallGraph/ignore-llvm-used.ll
+++ b/llvm/test/Analysis/CallGraph/llvm-used.ll
@@ -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*)]


        


More information about the llvm-commits mailing list