[llvm] r249589 - Use SpecificBumpPtrAllocator to simplify the MCSeciton destruction.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 7 12:08:19 PDT 2015
Author: rafael
Date: Wed Oct 7 14:08:19 2015
New Revision: 249589
URL: http://llvm.org/viewvc/llvm-project?rev=249589&view=rev
Log:
Use SpecificBumpPtrAllocator to simplify the MCSeciton destruction.
Modified:
llvm/trunk/include/llvm/MC/MCContext.h
llvm/trunk/lib/MC/MCContext.cpp
Modified: llvm/trunk/include/llvm/MC/MCContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=249589&r1=249588&r2=249589&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCContext.h (original)
+++ llvm/trunk/include/llvm/MC/MCContext.h Wed Oct 7 14:08:19 2015
@@ -71,6 +71,10 @@ namespace llvm {
/// objects.
BumpPtrAllocator Allocator;
+ SpecificBumpPtrAllocator<MCSectionCOFF> COFFAllocator;
+ SpecificBumpPtrAllocator<MCSectionELF> ELFAllocator;
+ SpecificBumpPtrAllocator<MCSectionMachO> MachOAllocator;
+
/// Bindings of names to symbols.
SymbolTable Symbols;
Modified: llvm/trunk/lib/MC/MCContext.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=249589&r1=249588&r2=249589&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCContext.cpp (original)
+++ llvm/trunk/lib/MC/MCContext.cpp Wed Oct 7 14:08:19 2015
@@ -74,12 +74,9 @@ MCContext::~MCContext() {
void MCContext::reset() {
// Call the destructors so the fragments are freed
- for (auto &I : ELFUniquingMap)
- I.second->~MCSectionELF();
- for (auto &I : COFFUniquingMap)
- I.second->~MCSectionCOFF();
- for (auto &I : MachOUniquingMap)
- I.second->~MCSectionMachO();
+ COFFAllocator.DestroyAll();
+ ELFAllocator.DestroyAll();
+ MachOAllocator.DestroyAll();
UsedNames.clear();
Symbols.clear();
@@ -294,8 +291,8 @@ MCSectionMachO *MCContext::getMachOSecti
Begin = createTempSymbol(BeginSymName, false);
// Otherwise, return a new section.
- return Entry = new (*this) MCSectionMachO(Segment, Section, TypeAndAttributes,
- Reserved2, Kind, Begin);
+ return Entry = new (MachOAllocator.Allocate()) MCSectionMachO(
+ Segment, Section, TypeAndAttributes, Reserved2, Kind, Begin);
}
void MCContext::renameELFSection(MCSectionELF *Section, StringRef Name) {
@@ -322,7 +319,7 @@ MCSectionELF *MCContext::createELFRelSec
bool Inserted;
std::tie(I, Inserted) = ELFRelSecNames.insert(std::make_pair(Name, true));
- return new (*this)
+ return new (ELFAllocator.Allocate())
MCSectionELF(I->getKey(), Type, Flags, SectionKind::getReadOnly(),
EntrySize, Group, true, nullptr, Associated);
}
@@ -367,15 +364,15 @@ MCSectionELF *MCContext::getELFSection(S
if (BeginSymName)
Begin = createTempSymbol(BeginSymName, false);
- MCSectionELF *Result =
- new (*this) MCSectionELF(CachedName, Type, Flags, Kind, EntrySize,
- GroupSym, UniqueID, Begin, Associated);
+ MCSectionELF *Result = new (ELFAllocator.Allocate())
+ MCSectionELF(CachedName, Type, Flags, Kind, EntrySize, GroupSym, UniqueID,
+ Begin, Associated);
Entry.second = Result;
return Result;
}
MCSectionELF *MCContext::createELFGroupSection(const MCSymbolELF *Group) {
- MCSectionELF *Result = new (*this)
+ MCSectionELF *Result = new (ELFAllocator.Allocate())
MCSectionELF(".group", ELF::SHT_GROUP, 0, SectionKind::getReadOnly(), 4,
Group, ~0, nullptr, nullptr);
return Result;
@@ -404,7 +401,7 @@ MCSectionCOFF *MCContext::getCOFFSection
Begin = createTempSymbol(BeginSymName, false);
StringRef CachedName = Iter->first.SectionName;
- MCSectionCOFF *Result = new (*this) MCSectionCOFF(
+ MCSectionCOFF *Result = new (COFFAllocator.Allocate()) MCSectionCOFF(
CachedName, Characteristics, COMDATSymbol, Selection, Kind, Begin);
Iter->second = Result;
More information about the llvm-commits
mailing list