summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2017-03-28 22:31:35 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2017-03-28 22:31:35 +0000
commit0d56b959adc7dc3cc1c573d55a4f535b9d2aaa42 (patch)
tree7b23cf8705739891246b4444fd4c2a4a3b8b210c
parent9747d8070b03ec3cef71c1b04e513c6a8d84b0ad (diff)
downloadbcm5719-llvm-0d56b959adc7dc3cc1c573d55a4f535b9d2aaa42.tar.gz
bcm5719-llvm-0d56b959adc7dc3cc1c573d55a4f535b9d2aaa42.zip
LTO: Replace InputFile::Symbol::getFlags() with predicate accessors. NFC.
This makes the predicates independent of the flag representation and makes the code a little easier to read. llvm-svn: 298951
-rw-r--r--lld/COFF/InputFiles.cpp8
-rw-r--r--lld/COFF/LTO.cpp4
-rw-r--r--lld/ELF/InputFiles.cpp9
-rw-r--r--lld/ELF/LTO.cpp4
-rw-r--r--llvm/include/llvm/LTO/LTO.h10
-rw-r--r--llvm/lib/LTO/LTO.cpp4
-rw-r--r--llvm/tools/gold/gold-plugin.cpp10
7 files changed, 24 insertions, 25 deletions
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 4632943dc44..bd3294ed79f 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -343,14 +343,12 @@ void BitcodeFile::parse() {
MB.getBuffer(), Saver.save(ParentName + MB.getBufferIdentifier()))));
for (const lto::InputFile::Symbol &ObjSym : Obj->symbols()) {
StringRef SymName = Saver.save(ObjSym.getName());
- auto Flags = ObjSym.getFlags();
Symbol *Sym;
- if (Flags & object::BasicSymbolRef::SF_Undefined) {
+ if (ObjSym.isUndefined()) {
Sym = Symtab->addUndefined(SymName, this, false);
- } else if (Flags & object::BasicSymbolRef::SF_Common) {
+ } else if (ObjSym.isCommon()) {
Sym = Symtab->addCommon(this, SymName, ObjSym.getCommonSize());
- } else if ((Flags & object::BasicSymbolRef::SF_Weak) &&
- (Flags & object::BasicSymbolRef::SF_Indirect)) {
+ } else if (ObjSym.isWeak() && ObjSym.isIndirect()) {
// Weak external.
Sym = Symtab->addUndefined(SymName, this, true);
std::string Fallback = ObjSym.getCOFFWeakExternalFallback();
diff --git a/lld/COFF/LTO.cpp b/lld/COFF/LTO.cpp
index 70a27401ad4..298b71fffd1 100644
--- a/lld/COFF/LTO.cpp
+++ b/lld/COFF/LTO.cpp
@@ -105,9 +105,7 @@ void BitcodeCompiler::add(BitcodeFile &F) {
// flags an undefined in IR with a definition in ASM as prevailing.
// Once IRObjectFile is fixed to report only one symbol this hack can
// be removed.
- R.Prevailing =
- !(ObjSym.getFlags() & object::BasicSymbolRef::SF_Undefined) &&
- B->getFile() == &F;
+ R.Prevailing = !ObjSym.isUndefined() && B->getFile() == &F;
R.VisibleToRegularObj = Sym->IsUsedInRegularObj;
if (R.Prevailing)
undefine(Sym);
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index f3c9873c422..a5b72798fba 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -792,8 +792,7 @@ static Symbol *createBitcodeSymbol(const std::vector<bool> &KeptComdats,
const lto::InputFile::Symbol &ObjSym,
BitcodeFile *F) {
StringRef NameRef = Saver.save(ObjSym.getName());
- uint32_t Flags = ObjSym.getFlags();
- uint32_t Binding = (Flags & BasicSymbolRef::SF_Weak) ? STB_WEAK : STB_GLOBAL;
+ uint32_t Binding = ObjSym.isWeak() ? STB_WEAK : STB_GLOBAL;
uint8_t Type = ObjSym.isTLS() ? STT_TLS : STT_NOTYPE;
uint8_t Visibility = mapVisibility(ObjSym.getVisibility());
@@ -805,12 +804,12 @@ static Symbol *createBitcodeSymbol(const std::vector<bool> &KeptComdats,
Visibility, Type, CanOmitFromDynSym,
F);
- if (Flags & BasicSymbolRef::SF_Undefined)
+ if (ObjSym.isUndefined())
return Symtab<ELFT>::X->addUndefined(NameRef, /*IsLocal=*/false, Binding,
Visibility, Type, CanOmitFromDynSym,
F);
- if (Flags & BasicSymbolRef::SF_Common)
+ if (ObjSym.isCommon())
return Symtab<ELFT>::X->addCommon(NameRef, ObjSym.getCommonSize(),
ObjSym.getCommonAlignment(), Binding,
Visibility, STT_OBJECT, F);
@@ -956,7 +955,7 @@ std::vector<StringRef> LazyObjectFile::getBitcodeSymbols() {
std::unique_ptr<lto::InputFile> Obj = check(lto::InputFile::create(this->MB));
std::vector<StringRef> V;
for (const lto::InputFile::Symbol &Sym : Obj->symbols())
- if (!(Sym.getFlags() & BasicSymbolRef::SF_Undefined))
+ if (!Sym.isUndefined())
V.push_back(Saver.save(Sym.getName()));
return V;
}
diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index 7ac7725183c..dd435173101 100644
--- a/lld/ELF/LTO.cpp
+++ b/lld/ELF/LTO.cpp
@@ -125,9 +125,7 @@ void BitcodeCompiler::add(BitcodeFile &F) {
// flags an undefined in IR with a definition in ASM as prevailing.
// Once IRObjectFile is fixed to report only one symbol this hack can
// be removed.
- R.Prevailing =
- !(ObjSym.getFlags() & object::BasicSymbolRef::SF_Undefined) &&
- B->File == &F;
+ R.Prevailing = !ObjSym.isUndefined() && B->File == &F;
R.VisibleToRegularObj =
Sym->IsUsedInRegularObj || (R.Prevailing && Sym->includeInDynsym());
diff --git a/llvm/include/llvm/LTO/LTO.h b/llvm/include/llvm/LTO/LTO.h
index f7debe062c5..57b220fe733 100644
--- a/llvm/include/llvm/LTO/LTO.h
+++ b/llvm/include/llvm/LTO/LTO.h
@@ -152,6 +152,15 @@ public:
skip();
}
+ bool isUndefined() const {
+ return Flags & object::BasicSymbolRef::SF_Undefined;
+ }
+ bool isCommon() const { return Flags & object::BasicSymbolRef::SF_Common; }
+ bool isWeak() const { return Flags & object::BasicSymbolRef::SF_Weak; }
+ bool isIndirect() const {
+ return Flags & object::BasicSymbolRef::SF_Indirect;
+ }
+
/// For COFF weak externals, returns the name of the symbol that is used
/// as a fallback if the weak external remains undefined.
std::string getCOFFWeakExternalFallback() const {
@@ -171,7 +180,6 @@ public:
/// Returns the mangled name of the global.
StringRef getName() const { return Name; }
- uint32_t getFlags() const { return Flags; }
GlobalValue::VisibilityTypes getVisibility() const {
if (isGV())
return getGV()->getVisibility();
diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp
index f5e80041130..de02de9d614 100644
--- a/llvm/lib/LTO/LTO.cpp
+++ b/llvm/lib/LTO/LTO.cpp
@@ -575,7 +575,7 @@ Error LTO::addRegularLTO(BitcodeModule BM, const SymbolResolution *&ResI,
if (Sym.isGV()) {
GlobalValue *GV = Sym.getGV();
if (Res.Prevailing) {
- if (Sym.getFlags() & object::BasicSymbolRef::SF_Undefined)
+ if (Sym.isUndefined())
continue;
Keep.push_back(GV);
switch (GV->getLinkage()) {
@@ -608,7 +608,7 @@ Error LTO::addRegularLTO(BitcodeModule BM, const SymbolResolution *&ResI,
// Common resolution: collect the maximum size/alignment over all commons.
// We also record if we see an instance of a common as prevailing, so that
// if none is prevailing we can ignore it later.
- if (Sym.getFlags() & object::BasicSymbolRef::SF_Common) {
+ if (Sym.isCommon()) {
// FIXME: We should figure out what to do about commons defined by asm.
// For now they aren't reported correctly by ModuleSymbolTable.
auto &CommonRes = RegularLTO.Commons[Sym.getGV()->getName()];
diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp
index 719c5db050a..52d352f4bc7 100644
--- a/llvm/tools/gold/gold-plugin.cpp
+++ b/llvm/tools/gold/gold-plugin.cpp
@@ -496,8 +496,6 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file,
sys::path::filename(Obj->getSourceFileName()).str();
for (auto &Sym : Obj->symbols()) {
- uint32_t Symflags = Sym.getFlags();
-
cf.syms.push_back(ld_plugin_symbol());
ld_plugin_symbol &sym = cf.syms.back();
sym.version = nullptr;
@@ -523,13 +521,13 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file,
break;
}
- if (Symflags & object::BasicSymbolRef::SF_Undefined) {
+ if (Sym.isUndefined()) {
sym.def = LDPK_UNDEF;
- if (Symflags & object::BasicSymbolRef::SF_Weak)
+ if (Sym.isWeak())
sym.def = LDPK_WEAKUNDEF;
- } else if (Symflags & object::BasicSymbolRef::SF_Common)
+ } else if (Sym.isCommon())
sym.def = LDPK_COMMON;
- else if (Symflags & object::BasicSymbolRef::SF_Weak)
+ else if (Sym.isWeak())
sym.def = LDPK_WEAKDEF;
else
sym.def = LDPK_DEF;
OpenPOWER on IntegriCloud