From a6c9744a6ce55ec525834f16de2bc2dedfc65524 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 31 Aug 2016 12:30:34 +0000 Subject: [PATCH] Delete DefinedBitcode. Given that we almost always want to handle it as DefinedRegular, just use DefinedRegular. llvm-svn: 280226 --- lld/ELF/LTO.cpp | 6 ++++-- lld/ELF/OutputSections.cpp | 2 -- lld/ELF/SymbolTable.cpp | 2 +- lld/ELF/Symbols.cpp | 12 ------------ lld/ELF/Symbols.h | 25 +++++++++++-------------- 5 files changed, 16 insertions(+), 31 deletions(-) diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index af873c6dd7c0..f24327a139a2 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -201,8 +201,10 @@ void BitcodeCompiler::add(BitcodeFile &F) { handleUndefinedAsmRefs(Sym, GV, AsmUndefinedRefs); continue; } - auto *B = dyn_cast(S->body()); - if (!B || B->file() != &F) + SymbolBody *B = S->body(); + if (B->kind() != SymbolBody::DefinedRegularKind) + continue; + if (B->File != &F) continue; // We collect the set of symbols we want to internalize here diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 37fc05452061..0ec12d00b9e8 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -1474,8 +1474,6 @@ SymbolTableSection::getOutputSection(SymbolBody *Sym) { case SymbolBody::LazyArchiveKind: case SymbolBody::LazyObjectKind: break; - case SymbolBody::DefinedBitcodeKind: - llvm_unreachable("should have been replaced"); } return nullptr; } diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index e701d928c117..0aacb04aa95d 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -471,7 +471,7 @@ Symbol *SymbolTable::addBitcode(StringRef Name, uint8_t Binding, /*IsUsedInRegularObj*/ false, F); int Cmp = compareDefinedNonCommon(S, WasInserted, Binding); if (Cmp > 0) - replaceBody(S, Name, StOther, Type, F); + replaceBody>(S, Name, StOther, Type, F); else if (Cmp == 0) reportDuplicate(S->body(), F); return S; diff --git a/lld/ELF/Symbols.cpp b/lld/ELF/Symbols.cpp index 0d63281580f2..7699cb2b520f 100644 --- a/lld/ELF/Symbols.cpp +++ b/lld/ELF/Symbols.cpp @@ -81,8 +81,6 @@ static typename ELFT::uint getSymVA(const SymbolBody &Body, case SymbolBody::LazyObjectKind: assert(Body.symbol()->IsUsedInRegularObj && "lazy symbol reached writer"); return 0; - case SymbolBody::DefinedBitcodeKind: - llvm_unreachable("should have been replaced"); } llvm_unreachable("invalid symbol kind"); } @@ -192,16 +190,6 @@ Defined::Defined(Kind K, StringRef Name, uint8_t StOther, uint8_t Type) Defined::Defined(Kind K, uint32_t NameOffset, uint8_t StOther, uint8_t Type) : SymbolBody(K, NameOffset, StOther, Type) {} -DefinedBitcode::DefinedBitcode(StringRef Name, uint8_t StOther, uint8_t Type, - BitcodeFile *F) - : Defined(DefinedBitcodeKind, Name, StOther, Type) { - this->File = F; -} - -bool DefinedBitcode::classof(const SymbolBody *S) { - return S->kind() == DefinedBitcodeKind; -} - Undefined::Undefined(StringRef Name, uint8_t StOther, uint8_t Type, InputFile *File) : SymbolBody(SymbolBody::UndefinedKind, Name, StOther, Type) { diff --git a/lld/ELF/Symbols.h b/lld/ELF/Symbols.h index 47dea9af1810..abbfa26cc13a 100644 --- a/lld/ELF/Symbols.h +++ b/lld/ELF/Symbols.h @@ -45,7 +45,6 @@ public: DefinedRegularKind = DefinedFirst, SharedKind, DefinedCommonKind, - DefinedBitcodeKind, DefinedSyntheticKind, DefinedLast = DefinedSyntheticKind, UndefinedKind, @@ -159,14 +158,6 @@ public: static bool classof(const SymbolBody *S) { return S->isDefined(); } }; -// The defined symbol in LLVM bitcode files. -class DefinedBitcode : public Defined { -public: - DefinedBitcode(StringRef Name, uint8_t StOther, uint8_t Type, BitcodeFile *F); - static bool classof(const SymbolBody *S); - BitcodeFile *file() { return (BitcodeFile *)this->File; } -}; - template class DefinedCommon : public Defined { public: DefinedCommon(StringRef N, uint64_t Size, uint64_t Alignment, uint8_t StOther, @@ -217,6 +208,12 @@ public: llvm::ELF::STT_NOTYPE), Value(0), Size(0), Section(NullInputSection) {} + DefinedRegular(StringRef Name, uint8_t StOther, uint8_t Type, BitcodeFile *F) + : Defined(SymbolBody::DefinedRegularKind, Name, StOther, Type), Value(0), + Size(0), Section(NullInputSection) { + this->File = F; + } + static bool classof(const SymbolBody *S) { return S->kind() == SymbolBody::DefinedRegularKind; } @@ -439,11 +436,11 @@ struct Symbol { // large and aligned enough to store any derived class of SymbolBody. We // assume that the size and alignment of ELF64LE symbols is sufficient for any // ELFT, and we verify this with the static_asserts in replaceBody. - llvm::AlignedCharArrayUnion< - DefinedBitcode, DefinedCommon, - DefinedRegular, - DefinedSynthetic, Undefined, - SharedSymbol, LazyArchive, LazyObject> + llvm::AlignedCharArrayUnion, + DefinedRegular, + DefinedSynthetic, + Undefined, SharedSymbol, + LazyArchive, LazyObject> Body; SymbolBody *body() { return reinterpret_cast(Body.buffer); }