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.)

llvm-svn: 238003
This commit is contained in:
Duncan P. N. Exon Smith 2015-05-22 05:59:05 +00:00
parent 8d44ac4785
commit 9b139800a7
1 changed files with 5 additions and 3 deletions

View File

@ -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;
}