summaryrefslogtreecommitdiff
path: root/test/LTO
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2017-06-15 17:26:13 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2017-06-15 17:26:13 +0000
commit95d9f1b4f9b749a1843b4e9bd90413248112091b (patch)
treecaa7e50b45c57db227ef9bde54be9b44bfefca2b /test/LTO
parent52ffcca2b54a79b810654d1a70d51161570a2f98 (diff)
Apply summary-based dead stripping to regular LTO modules with summaries.
If a regular LTO module has a summary index, then instead of linking it into the combined regular LTO module right away, add it to the combined summary index and associate it with a special module that represents the combined regular LTO module. Any such modules are linked during LTO::run(), at which time we use the results of summary-based dead stripping to control whether to link prevailing symbols. Differential Revision: https://reviews.llvm.org/D33922 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@305482 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/LTO')
-rw-r--r--test/LTO/Resolution/X86/Inputs/dead-strip-fulllto.ll16
-rw-r--r--test/LTO/Resolution/X86/dead-strip-fulllto.ll37
2 files changed, 53 insertions, 0 deletions
diff --git a/test/LTO/Resolution/X86/Inputs/dead-strip-fulllto.ll b/test/LTO/Resolution/X86/Inputs/dead-strip-fulllto.ll
new file mode 100644
index 00000000000..66754889f8b
--- /dev/null
+++ b/test/LTO/Resolution/X86/Inputs/dead-strip-fulllto.ll
@@ -0,0 +1,16 @@
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @live1() {
+ call void @live2()
+ ret void
+}
+
+declare void @live2()
+
+define void @dead1() {
+ call void @dead2()
+ ret void
+}
+
+declare void @dead2()
diff --git a/test/LTO/Resolution/X86/dead-strip-fulllto.ll b/test/LTO/Resolution/X86/dead-strip-fulllto.ll
new file mode 100644
index 00000000000..a9be2751c81
--- /dev/null
+++ b/test/LTO/Resolution/X86/dead-strip-fulllto.ll
@@ -0,0 +1,37 @@
+; RUN: opt -module-summary -o %t %s
+; RUN: opt -module-summary -o %t2 %S/Inputs/dead-strip-fulllto.ll
+; RUN: llvm-lto2 run %t -r %t,main,px -r %t,live1,p -r %t,live2,p -r %t,dead2,p \
+; RUN: %t2 -r %t2,live1,p -r %t2,live2, -r %t2,dead1,p -r %t2,dead2, \
+; RUN: -save-temps -o %t3
+; RUN: llvm-nm %t3.0 | FileCheck --check-prefix=FULL %s
+; RUN: llvm-nm %t3.1 | FileCheck --check-prefix=THIN %s
+
+; FULL-NOT: dead
+; FULL: U live1
+; FULL: T live2
+; FULL: T main
+
+; THIN-NOT: dead
+; THIN: T live1
+; THIN: U live2
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @main() {
+ call void @live1()
+ ret void
+}
+
+declare void @live1()
+
+define void @live2() {
+ ret void
+}
+
+define void @dead2() {
+ ret void
+}
+
+!0 = !{i32 1, !"ThinLTO", i32 0}
+!llvm.module.flags = !{ !0 }