[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

@@ -971,13 +971,13 @@ static unsigned getEncodedLinkage(const GlobalValue &GV) {
static uint64_t getEncodedGVSummaryFlags(GlobalValueSummary::GVFlags Flags) {
uint64_t RawFlags = 0;
RawFlags |= Flags.NotEligibleToImport; // bool
RawFlags |= (Flags.LiveRoot << 1);
// Linkage don't need to be remapped at that time for the summary. Any future
// change to the getEncodedLinkage() function will need to be taken into
// account here as well.
RawFlags = (RawFlags << 4) | Flags.Linkage; // 4 bits
RawFlags |= Flags.Linkage; // 4 bits linkage
RawFlags |= (Flags.NotEligibleToImport << 4); // bool
RawFlags |= (Flags.LiveRoot << 5); // bool
RawFlags |= (Flags.AutoHide << 6); // bool
return RawFlags;
}