summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-05-22 05:59:05 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-05-22 05:59:05 +0000
commit9b139800a70d86682bda6c23cbd0da3aba71a217 (patch)
treea51882ce171382d64f9fd2214f2a4d12ac56a115
parent8d44ac4785208667c809c10d03afcb6aade69d89 (diff)
downloadbcm5719-llvm-9b139800a70d86682bda6c23cbd0da3aba71a217.tar.gz
bcm5719-llvm-9b139800a70d86682bda6c23cbd0da3aba71a217.zip
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
-rw-r--r--llvm/include/llvm/MC/MCSymbol.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/include/llvm/MC/MCSymbol.h b/llvm/include/llvm/MC/MCSymbol.h
index b39c2713351..ca22248876f 100644
--- a/llvm/include/llvm/MC/MCSymbol.h
+++ b/llvm/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;
}
OpenPOWER on IntegriCloud