[ThinLTO] Remove too aggressive assertion in building function call graph.

The assertion was introduced in r317853 but there are cases when a call
isn't handled either as direct or indirect. In this case we add a
reference graph edge but not a call graph edge.

Reviewers: tejohnson

Reviewed By: tejohnson

Subscribers: mehdi_amini, inglorion, eraman, hiraditya, efriedma, llvm-commits

Differential Revision: https://reviews.llvm.org/D40056



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318540 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Volodymyr Sapsai 2017-11-17 18:28:05 +00:00
parent 39107fc224
commit 3c60df7cce
2 changed files with 17 additions and 4 deletions

View File

@ -280,8 +280,9 @@ computeFunctionSummary(ModuleSummaryIndex &Index, const Module &M,
// Skip inline assembly calls.
if (CI && CI->isInlineAsm())
continue;
assert(CalledValue && !isa<Constant>(CalledValue) &&
"Expected indirect call");
// Skip direct calls.
if (!CalledValue || isa<Constant>(CalledValue))
continue;
uint32_t NumVals, NumCandidates;
uint64_t TotalCount;

View File

@ -5,8 +5,10 @@
; CHECK: <GLOBALVAL_SUMMARY_BLOCK
; CHECK-NEXT: <VERSION
; "op7=1" is a call to "callee" function.
; CHECK-NEXT: <PERMODULE {{.*}} op7=1 op8=[[ALIASID:[0-9]+]]/>
; "op7" is a call to "callee" function.
; CHECK-NEXT: <PERMODULE {{.*}} op7=3 op8=[[ALIASID:[0-9]+]]/>
; "another_caller" has only references but no calls.
; CHECK-NEXT: <PERMODULE {{.*}} op4=3 {{.*}} op7={{[0-9]+}}/>
; CHECK-NEXT: <PERMODULE {{.*}} op0=[[ALIASEEID:[0-9]+]]
; CHECK-NEXT: <ALIAS {{.*}} op0=[[ALIASID]] {{.*}} op2=[[ALIASEEID]]/>
; CHECK-NEXT: </GLOBALVAL_SUMMARY_BLOCK>
@ -21,6 +23,12 @@ define void @caller() {
ret void
}
define void @another_caller() {
; Test calls that aren't handled either as direct or indirect.
call void select (i1 icmp eq (i32* @global, i32* null), void ()* @f, void ()* @g)()
ret void
}
declare void @callee(...)
@analias = alias void (...), bitcast (void ()* @aliasee to void (...)*)
@ -29,3 +37,7 @@ define void @aliasee() {
entry:
ret void
}
declare void @f()
declare void @g()
@global = extern_weak global i32