mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
AsmPrinter: Avoid creating symbols in DwarfStringPool
Stop creating symbols we don't need in `DwarfStringPool`. The consumers only call `DwarfStringPoolEntryRef::getSymbol()` when DWARF is relocatable, so this just stops creating the unused symbols when it's not. This drops memory usage from 851 MB to 845 MB, around 0.7%. (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@238122 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -9,10 +9,16 @@
|
||||
|
||||
#include "DwarfStringPool.h"
|
||||
#include "llvm/CodeGen/AsmPrinter.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/MC/MCStreamer.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
DwarfStringPool::DwarfStringPool(BumpPtrAllocator &A, AsmPrinter &Asm,
|
||||
StringRef Prefix)
|
||||
: Pool(A), Prefix(Prefix),
|
||||
ShouldCreateSymbols(Asm.MAI->doesDwarfUseRelocationsAcrossSections()) {}
|
||||
|
||||
DwarfStringPool::EntryRef DwarfStringPool::getEntry(AsmPrinter &Asm,
|
||||
StringRef Str) {
|
||||
auto I = Pool.insert(std::make_pair(Str, EntryTy()));
|
||||
@@ -20,7 +26,7 @@ DwarfStringPool::EntryRef DwarfStringPool::getEntry(AsmPrinter &Asm,
|
||||
auto &Entry = I.first->second;
|
||||
Entry.Index = Pool.size() - 1;
|
||||
Entry.Offset = NumBytes;
|
||||
Entry.Symbol = Asm.createTempSymbol(Prefix);
|
||||
Entry.Symbol = ShouldCreateSymbols ? Asm.createTempSymbol(Prefix) : nullptr;
|
||||
|
||||
NumBytes += Str.size() + 1;
|
||||
assert(NumBytes > Entry.Offset && "Unexpected overflow");
|
||||
@@ -44,8 +50,12 @@ void DwarfStringPool::emit(AsmPrinter &Asm, MCSection *StrSection,
|
||||
Entries[E.getValue().Index] = &E;
|
||||
|
||||
for (const auto &Entry : Entries) {
|
||||
assert(ShouldCreateSymbols == static_cast<bool>(Entry->getValue().Symbol) &&
|
||||
"Mismatch between setting and entry");
|
||||
|
||||
// Emit a label for reference from debug information entries.
|
||||
Asm.OutStreamer->EmitLabel(Entry->getValue().Symbol);
|
||||
if (ShouldCreateSymbols)
|
||||
Asm.OutStreamer->EmitLabel(Entry->getValue().Symbol);
|
||||
|
||||
// Emit the string itself with a terminating null byte.
|
||||
Asm.OutStreamer->AddComment("string offset=" +
|
||||
|
Reference in New Issue
Block a user