summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2017-02-02 18:13:46 +0000
committerMehdi Amini <mehdi.amini@apple.com>2017-02-02 18:13:46 +0000
commitdc5a7444f0e32012b8c612bfb6fdb3ebc65addac (patch)
tree2f4ba15943be096bb3f5f7ed66949f0d41d00f3d /llvm/lib/Transforms
parent8d17b4050076c9dea7b68dc0ac208de8f19d9c01 (diff)
downloadbcm5719-llvm-dc5a7444f0e32012b8c612bfb6fdb3ebc65addac.tar.gz
bcm5719-llvm-dc5a7444f0e32012b8c612bfb6fdb3ebc65addac.zip
[ThinLTO] Add an auto-hide feature
When a symbol is not exported outside of the DSO, it is can be hidden. Usually we try to internalize as much as possible, but it is not always possible, for instance a symbol can be referenced outside of the LTO unit, or there can be cross-module reference in ThinLTO. Differential Revision: https://reviews.llvm.org/D28978 llvm-svn: 293912
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/IPO/FunctionImport.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/IPO/FunctionImport.cpp b/llvm/lib/Transforms/IPO/FunctionImport.cpp
index b8fc79a03b6..f469c24dd42 100644
--- a/llvm/lib/Transforms/IPO/FunctionImport.cpp
+++ b/llvm/lib/Transforms/IPO/FunctionImport.cpp
@@ -650,6 +650,13 @@ void llvm::thinLTOInternalizeModule(Module &TheModule,
return !GlobalValue::isLocalLinkage(Linkage);
};
+ // Try to auto-hide the symbols.
+ for (auto &GO : TheModule.global_objects()) {
+ const auto &GS = DefinedGlobals.find(GO.getGUID());
+ if (GS != DefinedGlobals.end() && GS->second->flags().AutoHide)
+ GO.setVisibility(GlobalValue::HiddenVisibility);
+ }
+
// FIXME: See if we can just internalize directly here via linkage changes
// based on the index, rather than invoking internalizeModule.
llvm::internalizeModule(TheModule, MustPreserveGV);
OpenPOWER on IntegriCloud