diff options
author | Volodymyr Sapsai <vsapsai@apple.com> | 2017-11-10 00:47:47 +0000 |
---|---|---|
committer | Volodymyr Sapsai <vsapsai@apple.com> | 2017-11-10 00:47:47 +0000 |
commit | a73960213eac65cbb099a52318035cf4539b7703 (patch) | |
tree | 8b656ede5a98dc9b870aab6a7d30fe0834e9e4ef /llvm/test/Bitcode/thinlto-function-summary-callgraph-cast.ll | |
parent | c183e2c33b0581390e678e74bcfc83b3a34f3350 (diff) | |
download | bcm5719-llvm-a73960213eac65cbb099a52318035cf4539b7703.tar.gz bcm5719-llvm-a73960213eac65cbb099a52318035cf4539b7703.zip |
[ThinLTO] Fix missing call graph edges for calls with bitcasts.
This change doesn't fix the root cause of the miscompile PR34966 as the root
cause is in the linker ld64. This change makes call graph more complete
allowing to have better module imports/exports.
rdar://problem/35344706
Reviewers: tejohnson
Reviewed By: tejohnson
Subscribers: mehdi_amini, inglorion, eraman, llvm-commits, hiraditya
Differential Revision: https://reviews.llvm.org/D39356
llvm-svn: 317853
Diffstat (limited to 'llvm/test/Bitcode/thinlto-function-summary-callgraph-cast.ll')
-rw-r--r-- | llvm/test/Bitcode/thinlto-function-summary-callgraph-cast.ll | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/llvm/test/Bitcode/thinlto-function-summary-callgraph-cast.ll b/llvm/test/Bitcode/thinlto-function-summary-callgraph-cast.ll new file mode 100644 index 00000000000..b377ba8f00d --- /dev/null +++ b/llvm/test/Bitcode/thinlto-function-summary-callgraph-cast.ll @@ -0,0 +1,31 @@ +; Test to check the callgraph for calls to casts. +; RUN: opt -module-summary %s -o %t.o +; RUN: llvm-bcanalyzer -dump %t.o | FileCheck %s +; PR34966 + +; CHECK: <GLOBALVAL_SUMMARY_BLOCK +; CHECK-NEXT: <VERSION +; "op7=1" is a call to "callee" function. +; CHECK-NEXT: <PERMODULE {{.*}} op7=1 op8=[[ALIASID:[0-9]+]]/> +; CHECK-NEXT: <PERMODULE {{.*}} op0=[[ALIASEEID:[0-9]+]] +; CHECK-NEXT: <ALIAS {{.*}} op0=[[ALIASID]] {{.*}} op2=[[ALIASEEID]]/> +; CHECK-NEXT: </GLOBALVAL_SUMMARY_BLOCK> + +; ModuleID = 'thinlto-function-summary-callgraph-cast.ll' +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define void @caller() { + call void bitcast (void (...)* @callee to void ()*)() + call void bitcast (void (...)* @analias to void ()*)() + ret void +} + +declare void @callee(...) + +@analias = alias void (...), bitcast (void ()* @aliasee to void (...)*) + +define void @aliasee() { +entry: + ret void +} |