[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
This commit is contained in:
Mehdi Amini
2017-02-02 18:13:46 +00:00
parent 8d17b40500
commit dc5a7444f0
12 changed files with 123 additions and 48 deletions

View File

@@ -800,13 +800,14 @@ static GlobalValueSummary::GVFlags getDecodedGVSummaryFlags(uint64_t RawFlags,
// like getDecodedLinkage() above. Any future change to the linkage enum and
// to getDecodedLinkage() will need to be taken into account here as above.
auto Linkage = GlobalValue::LinkageTypes(RawFlags & 0xF); // 4 bits
RawFlags = RawFlags >> 4;
bool NotEligibleToImport = (RawFlags & 0x1) || Version < 3;
bool NotEligibleToImport = ((RawFlags >> 4) & 0x1) || Version < 3;
// The LiveRoot flag wasn't introduced until version 3. For dead stripping
// to work correctly on earlier versions, we must conservatively treat all
// values as live.
bool LiveRoot = (RawFlags & 0x2) || Version < 3;
return GlobalValueSummary::GVFlags(Linkage, NotEligibleToImport, LiveRoot);
bool LiveRoot = ((RawFlags >> 5) & 0x1) || Version < 3;
bool AutoHide = (RawFlags >> 6) & 0x1;
return GlobalValueSummary::GVFlags(Linkage, NotEligibleToImport, LiveRoot,
AutoHide);
}
static GlobalValue::VisibilityTypes getDecodedVisibility(unsigned Val) {