[PATCH] D27687: [ThinLTO] Thin link efficiency improvement: don't re-export globals (NFC)
Teresa Johnson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 15 16:00:35 PST 2016
This revision was automatically updated to reflect the committed changes.
Closed by commit rL289896: [ThinLTO] Thin link efficiency improvement: don't re-export globals (NFC) (authored by tejohnson).
Changed prior to commit:
https://reviews.llvm.org/D27687?vs=81272&id=81685#toc
Repository:
rL LLVM
https://reviews.llvm.org/D27687
Files:
llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
llvm/trunk/test/ThinLTO/X86/Inputs/export.ll
llvm/trunk/test/ThinLTO/X86/export.ll
Index: llvm/trunk/test/ThinLTO/X86/export.ll
===================================================================
--- llvm/trunk/test/ThinLTO/X86/export.ll
+++ llvm/trunk/test/ThinLTO/X86/export.ll
@@ -0,0 +1,26 @@
+; Do setup work for all below tests: generate bitcode and combined index
+; RUN: opt -module-summary %s -o %t1.bc
+; RUN: opt -module-summary %p/Inputs/export.ll -o %t2.bc
+; RUN: llvm-lto -thinlto-action=thinlink -o %t3.bc %t1.bc %t2.bc
+
+; Ensure statics are promoted/renamed correctly from this file.
+; RUN: llvm-lto -thinlto-action=promote %t1.bc -thinlto-index=%t3.bc -o - | llvm-dis -o - | FileCheck %s
+; CHECK-DAG: @staticvar.llvm.0 = hidden global
+; CHECK-DAG: define hidden void @staticfunc.llvm.0
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.11.0"
+
+ at staticvar = internal global i32 1, align 4
+
+define void @callstaticfunc() #0 {
+entry:
+ call void @staticfunc()
+ ret void
+}
+
+define internal void @staticfunc() #0 {
+entry:
+ %0 = load i32, i32* @staticvar, align 4
+ ret void
+}
Index: llvm/trunk/test/ThinLTO/X86/Inputs/export.ll
===================================================================
--- llvm/trunk/test/ThinLTO/X86/Inputs/export.ll
+++ llvm/trunk/test/ThinLTO/X86/Inputs/export.ll
@@ -0,0 +1,10 @@
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.11.0"
+
+define i32 @main() #0 {
+entry:
+ call void @callstaticfunc()
+ ret i32 0
+}
+
+declare void @callstaticfunc()
Index: llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
===================================================================
--- llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
+++ llvm/trunk/lib/Transforms/IPO/FunctionImport.cpp
@@ -338,22 +338,26 @@
<< ProcessedThreshold << "\n");
continue;
}
+ bool PreviouslyImported = ProcessedThreshold != 0;
// Mark this function as imported in this module, with the current Threshold
ProcessedThreshold = AdjThreshold;
// Make exports in the source module.
if (ExportLists) {
auto &ExportList = (*ExportLists)[ExportModulePath];
ExportList.insert(GUID);
- // Mark all functions and globals referenced by this function as exported
- // to the outside if they are defined in the same source module.
- for (auto &Edge : ResolvedCalleeSummary->calls()) {
- auto CalleeGUID = Edge.first.getGUID();
- exportGlobalInModule(Index, ExportModulePath, CalleeGUID, ExportList);
- }
- for (auto &Ref : ResolvedCalleeSummary->refs()) {
- auto GUID = Ref.getGUID();
- exportGlobalInModule(Index, ExportModulePath, GUID, ExportList);
+ if (!PreviouslyImported) {
+ // This is the first time this function was exported from its source
+ // module, so mark all functions and globals it references as exported
+ // to the outside if they are defined in the same source module.
+ for (auto &Edge : ResolvedCalleeSummary->calls()) {
+ auto CalleeGUID = Edge.first.getGUID();
+ exportGlobalInModule(Index, ExportModulePath, CalleeGUID, ExportList);
+ }
+ for (auto &Ref : ResolvedCalleeSummary->refs()) {
+ auto GUID = Ref.getGUID();
+ exportGlobalInModule(Index, ExportModulePath, GUID, ExportList);
+ }
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D27687.81685.patch
Type: text/x-patch
Size: 3394 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161216/a27152c9/attachment.bin>
More information about the llvm-commits
mailing list