mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
MC: Shave a pointer off of MCSymbol::Name
Shave a pointer off of `MCSymbolName` by storing `StringMapEntry<bool>*` 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
This commit is contained in:
parent
e4d1b4e7ed
commit
eb5171e9d0
@ -15,7 +15,7 @@
|
||||
#define LLVM_MC_MCSYMBOL_H
|
||||
|
||||
#include "llvm/ADT/PointerIntPair.h"
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
|
||||
@ -145,7 +145,7 @@ class MCSymbol {
|
||||
|
||||
/// Name - The name of the symbol. The referred-to string data is actually
|
||||
/// held by the StringMap that lives in MCContext.
|
||||
StringRef Name;
|
||||
const StringMapEntry<bool> *Name;
|
||||
|
||||
/// The section the symbol is defined in. This is null for undefined symbols,
|
||||
/// and the special AbsolutePseudoSection value for absolute symbols. If this
|
||||
@ -176,8 +176,8 @@ class MCSymbol {
|
||||
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),
|
||||
MCSymbol(const StringMapEntry<bool> *Name, bool isTemporary)
|
||||
: Name(Name), Section(nullptr), Value(nullptr), IsTemporary(isTemporary),
|
||||
IsRedefinable(false), IsUsed(false), HasData(false), Index(0) {}
|
||||
|
||||
MCSymbol(const MCSymbol &) = delete;
|
||||
@ -190,7 +190,7 @@ private: // MCContext creates and uniques these.
|
||||
|
||||
public:
|
||||
/// getName - Get the symbol name.
|
||||
StringRef getName() const { return Name; }
|
||||
StringRef getName() const { return Name ? Name->first() : ""; }
|
||||
|
||||
bool hasData() const { return HasData; }
|
||||
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user