summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2017-02-02 18:31:35 +0000
committerMehdi Amini <mehdi.amini@apple.com>2017-02-02 18:31:35 +0000
commit97624fb1ec15e6e064c403ecfc3259b116e048e5 (patch)
tree39e04ac2af4cdc91c15c9363959b17aa9b37f97a /llvm/lib/Transforms
parent3e64d066de3e11a34ac02a2fab9f648ff056d4e2 (diff)
downloadbcm5719-llvm-97624fb1ec15e6e064c403ecfc3259b116e048e5.tar.gz
bcm5719-llvm-97624fb1ec15e6e064c403ecfc3259b116e048e5.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. This is a recommit of r293912 after fixing build failures. Differential Revision: https://reviews.llvm.org/D28978 llvm-svn: 293918
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