From 03656162a3dcdfb71ee727fd2a00d75237359b32 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Fri, 22 May 2015 06:04:42 +0000 Subject: MC: Shave a pointer off of MCSymbol::Name Shave a pointer off of `MCSymbolName` by storing `StringMapEntry*` instead of `StringRef`. This brings `sizeof(MCSymbol)` down to 64 on 64-bit platforms, a nice round number. My profile showed memory dropping from 914 MB down to 908 MB, roughly 0.7%. Other than memory usage, no functionality change here. (I'm looking at `llc` memory usage on `verify-uselistorder.lto.opt.bc`; see r236629 for details.) llvm-svn: 238005 --- llvm/lib/MC/MCContext.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'llvm/lib/MC/MCContext.cpp') diff --git a/llvm/lib/MC/MCContext.cpp b/llvm/lib/MC/MCContext.cpp index f3ea3cc..968fd26 100644 --- a/llvm/lib/MC/MCContext.cpp +++ b/llvm/lib/MC/MCContext.cpp @@ -125,7 +125,7 @@ MCSymbol *MCContext::getOrCreateSectionSymbol(const MCSectionELF &Section) { } auto NameIter = UsedNames.insert(std::make_pair(Name, true)).first; - Sym = new (*this) MCSymbol(NameIter->getKey(), /*isTemporary*/ false); + Sym = new (*this) MCSymbol(&*NameIter, /*isTemporary*/ false); if (!OldSym) OldSym = Sym; @@ -156,7 +156,7 @@ MCSymbol *MCContext::CreateSymbol(StringRef Name, bool AlwaysAddSuffix) { IsTemporary = Name.startswith(MAI->getPrivateGlobalPrefix()); if (IsTemporary && AlwaysAddSuffix && !UseNamesOnTempLabels) - return new (*this) MCSymbol("", true); + return new (*this) MCSymbol(nullptr, true); SmallString<128> NewName = Name; bool AddSuffix = AlwaysAddSuffix; @@ -170,8 +170,7 @@ MCSymbol *MCContext::CreateSymbol(StringRef Name, bool AlwaysAddSuffix) { if (NameEntry.second) { // Ok, we found a name. Have the MCSymbol object itself refer to the copy // of the string that is embedded in the UsedNames entry. - MCSymbol *Result = - new (*this) MCSymbol(NameEntry.first->getKey(), IsTemporary); + MCSymbol *Result = new (*this) MCSymbol(&*NameEntry.first, IsTemporary); return Result; } assert(IsTemporary && "Cannot rename non-temporary symbols"); -- cgit v1.1