From: Pete Cooper Date: Wed, 1 Jul 2015 21:57:51 +0000 (+0000) Subject: Pack MCSymbol::Flags in to the bitfield with other members. NFC. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=f89e1bdc1a54c3bf211e86132af7c51bac8a7374;p=oota-llvm.git Pack MCSymbol::Flags in to the bitfield with other members. NFC. All file formats only needed 16-bits right now which is enough to fit in to the padding with other fields. This reduces the size of MCSymbol to 24-bytes on a 64-bit system. The layout is now 0 | class llvm::MCSymbol 0 | class llvm::PointerIntPair SectionOrFragmentAndHasName 0 | intptr_t Value | [sizeof=8, dsize=8, align=8 | nvsize=8, nvalign=8] 8 | unsigned int IsTemporary 8 | unsigned int IsRedefinable 8 | unsigned int IsUsed 8 | _Bool IsRegistered 8 | unsigned int IsExternal 8 | unsigned int IsPrivateExtern 8 | unsigned int Kind 9 | unsigned int IsUsedInReloc 9 | unsigned int SymbolContents 9 | unsigned int CommonAlignLog2 10 | uint32_t Flags 12 | uint32_t Index 16 | union 16 | uint64_t Offset 16 | uint64_t CommonSize 16 | const class llvm::MCExpr * Value | [sizeof=8, dsize=8, align=8 | nvsize=8, nvalign=8] | [sizeof=24, dsize=24, align=8 | nvsize=24, nvalign=8] git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241196 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/MC/MCSymbol.h b/include/llvm/MC/MCSymbol.h index e52a34601b0..17e6b857cf2 100644 --- a/include/llvm/MC/MCSymbol.h +++ b/include/llvm/MC/MCSymbol.h @@ -117,6 +117,11 @@ protected: static const unsigned NumCommonAlignmentBits = 5; unsigned CommonAlignLog2 : NumCommonAlignmentBits; + /// The Flags field is used by object file implementations to store + /// additional per symbol information which is not easily classified. + static const unsigned NumFlagsBits = 16; + mutable uint32_t Flags : NumFlagsBits; + /// Index field, for use by the object file implementation. mutable uint32_t Index = 0; @@ -131,10 +136,6 @@ protected: const MCExpr *Value; }; - /// The Flags field is used by object file implementations to store - /// additional per symbol information which is not easily classified. - mutable uint32_t Flags = 0; - protected: // MCContext creates and uniques these. friend class MCExpr; friend class MCContext; @@ -152,7 +153,7 @@ protected: // MCContext creates and uniques these. : IsTemporary(isTemporary), IsRedefinable(false), IsUsed(false), IsRegistered(false), IsExternal(false), IsPrivateExtern(false), Kind(Kind), IsUsedInReloc(false), SymbolContents(SymContentsUnset), - CommonAlignLog2(0) { + CommonAlignLog2(0), Flags(0) { Offset = 0; SectionOrFragmentAndHasName.setInt(!!Name); if (Name) @@ -402,10 +403,14 @@ protected: uint32_t getFlags() const { return Flags; } /// Set the (implementation defined) symbol flags. - void setFlags(uint32_t Value) const { Flags = Value; } + void setFlags(uint32_t Value) const { + assert(Value < (1U << NumFlagsBits) && "Out of range flags"); + Flags = Value; + } /// Modify the flags via a mask void modifyFlags(uint32_t Value, uint32_t Mask) const { + assert(Value < (1U << NumFlagsBits) && "Out of range flags"); Flags = (Flags & ~Mask) | Value; } }; diff --git a/lib/MC/MCSymbol.cpp b/lib/MC/MCSymbol.cpp index 2655a181a23..affc57471fd 100644 --- a/lib/MC/MCSymbol.cpp +++ b/lib/MC/MCSymbol.cpp @@ -20,6 +20,7 @@ using namespace llvm; MCSection *MCSymbol::AbsolutePseudoSection = reinterpret_cast(1); const unsigned MCSymbol::NumCommonAlignmentBits; +const unsigned MCSymbol::NumFlagsBits; void *MCSymbol::operator new(size_t s, const StringMapEntry *Name, MCContext &Ctx) {