summaryrefslogtreecommitdiffstats
path: root/llvm/test/LTO/Resolution/X86
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2017-09-13 17:09:20 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2017-09-13 17:09:20 +0000
commitd067c8ed59ccd8a74f266c9fd06c9cfbdef834a1 (patch)
treecca978a90ae9bf4c12fca52b073fbc137c0e3557 /llvm/test/LTO/Resolution/X86
parent9707aa74d6641078e00e44a7885b195113d006c6 (diff)
downloadbcm5719-llvm-d067c8ed59ccd8a74f266c9fd06c9cfbdef834a1.tar.gz
bcm5719-llvm-d067c8ed59ccd8a74f266c9fd06c9cfbdef834a1.zip
ThinLTO: Correctly follow aliasee references when dead stripping.
We were previously handling aliases during dead stripping by adding the aliased global's "original name" GUID to the worklist. This will lead to incorrect behaviour if the global has local linkage because the original name GUID will not correspond to the global's GUID in the summary. Because an alias is just another name for the global that it references, there is no need to mark the referenced global as used, or to follow references from any other copies of the global. So all we need to do is to follow references from the aliasee's summary instead of the alias. Differential Revision: https://reviews.llvm.org/D37789 llvm-svn: 313157
Diffstat (limited to 'llvm/test/LTO/Resolution/X86')
-rw-r--r--llvm/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll4
-rw-r--r--llvm/test/LTO/Resolution/X86/dead-strip-alias.ll20
2 files changed, 24 insertions, 0 deletions
diff --git a/llvm/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll b/llvm/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll
new file mode 100644
index 00000000000..16154d2c45b
--- /dev/null
+++ b/llvm/test/LTO/Resolution/X86/Inputs/dead-strip-alias.ll
@@ -0,0 +1,4 @@
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@external = global i8 42
diff --git a/llvm/test/LTO/Resolution/X86/dead-strip-alias.ll b/llvm/test/LTO/Resolution/X86/dead-strip-alias.ll
new file mode 100644
index 00000000000..d009a484e4f
--- /dev/null
+++ b/llvm/test/LTO/Resolution/X86/dead-strip-alias.ll
@@ -0,0 +1,20 @@
+; RUN: opt -module-summary -o %t %s
+; RUN: opt -module-summary -o %t2 %S/Inputs/dead-strip-alias.ll
+; RUN: llvm-lto2 run %t -r %t,main,px -r %t,alias,p -r %t,external, \
+; RUN: %t2 -r %t2,external,p \
+; RUN: -save-temps -o %t3
+; RUN: llvm-nm %t3.1 | FileCheck %s
+
+; CHECK: D external
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+@alias = alias i8*, i8** @internal
+
+@internal = internal global i8* @external
+@external = external global i8
+
+define i8** @main() {
+ ret i8** @alias
+}
OpenPOWER on IntegriCloud