From 005bf5f8b05042d0a93feeb95def6bba5347ba78 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Fri, 22 May 2015 05:59:05 +0000 Subject: [PATCH] MC: Pack MCSymbol::Index in with the bitfield in MCSymbol Save a pointer for each `MCSymbol`, bringing `llc` memory usage down from 920 MB to 914 MB, around ~0.6%. (I'm looking at `llc` memory usage on `verify-uselistorder.lto.opt.bc`; see r236629 for details.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238003 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/MC/MCSymbol.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/include/llvm/MC/MCSymbol.h b/include/llvm/MC/MCSymbol.h index b39c2713351..ca22248876f 100644 --- a/include/llvm/MC/MCSymbol.h +++ b/include/llvm/MC/MCSymbol.h @@ -167,17 +167,18 @@ class MCSymbol { mutable unsigned IsUsed : 1; mutable bool HasData : 1; - mutable MCSymbolData Data; /// Index field, for use by the object file implementation. - mutable uint64_t Index = 0; + mutable uint64_t Index : 60; + + mutable MCSymbolData Data; private: // MCContext creates and uniques these. friend class MCExpr; friend class MCContext; MCSymbol(StringRef name, bool isTemporary) : Name(name), Section(nullptr), Value(nullptr), IsTemporary(isTemporary), - IsRedefinable(false), IsUsed(false), HasData(false) {} + IsRedefinable(false), IsUsed(false), HasData(false), Index(0) {} MCSymbol(const MCSymbol &) = delete; void operator=(const MCSymbol &) = delete; @@ -290,6 +291,7 @@ public: /// Set the (implementation defined) index. void setIndex(uint64_t Value) const { assert(HasData && "Uninitialized symbol data"); + assert(!(Value >> 60) && "Not enough bits for value"); Index = Value; } -- 2.34.1