From c63035aa568ab73a1b6efa3f7e34089d1ecb6e46 Mon Sep 17 00:00:00 2001 From: Yaron Keren Date: Wed, 17 Sep 2014 09:25:36 +0000 Subject: [PATCH] Add and update reset() and doInitialization() methods to MC* and passes. This enables reusing a PassManager instead of re-constructing it every time. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217948 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/CodeGen/StackMaps.h | 6 ++++++ include/llvm/MC/MCELFStreamer.h | 8 ++++++++ include/llvm/MC/MCWinCOFFStreamer.h | 6 ++++++ lib/MC/MCAssembler.cpp | 5 +++++ lib/MC/MCContext.cpp | 3 +++ lib/MC/MCMachOStreamer.cpp | 6 ++++++ lib/MC/MCStreamer.cpp | 1 + lib/Target/X86/X86AsmPrinter.h | 6 ++++++ 8 files changed, 41 insertions(+) diff --git a/include/llvm/CodeGen/StackMaps.h b/include/llvm/CodeGen/StackMaps.h index a04cdf8abf2..dd22ab0b54c 100644 --- a/include/llvm/CodeGen/StackMaps.h +++ b/include/llvm/CodeGen/StackMaps.h @@ -118,6 +118,12 @@ public: StackMaps(AsmPrinter &AP); + void reset() { + CSInfos.clear(); + ConstPool.clear(); + FnStackSize.clear(); + } + /// \brief Generate a stackmap record for a stackmap instruction. /// /// MI must be a raw STACKMAP, not a PATCHPOINT. diff --git a/include/llvm/MC/MCELFStreamer.h b/include/llvm/MC/MCELFStreamer.h index 66729fe0147..4bfcee377cc 100644 --- a/include/llvm/MC/MCELFStreamer.h +++ b/include/llvm/MC/MCELFStreamer.h @@ -41,6 +41,14 @@ public: virtual ~MCELFStreamer(); + /// state management + void reset() override { + LocalCommons.clear(); + BindingExplicitlySet.clear(); + SeenIdent = false; + MCObjectStreamer::reset(); + } + /// @name MCStreamer Interface /// @{ diff --git a/include/llvm/MC/MCWinCOFFStreamer.h b/include/llvm/MC/MCWinCOFFStreamer.h index 7d2d0e4f556..d6ca5fb61da 100644 --- a/include/llvm/MC/MCWinCOFFStreamer.h +++ b/include/llvm/MC/MCWinCOFFStreamer.h @@ -30,6 +30,12 @@ public: MCWinCOFFStreamer(MCContext &Context, MCAsmBackend &MAB, MCCodeEmitter &CE, raw_ostream &OS); + /// state management + void reset() override { + CurSymbol = nullptr; + MCObjectStreamer::reset(); + } + /// \name MCStreamer interface /// \{ diff --git a/lib/MC/MCAssembler.cpp b/lib/MC/MCAssembler.cpp index a6aa5da2421..709a8defec5 100644 --- a/lib/MC/MCAssembler.cpp +++ b/lib/MC/MCAssembler.cpp @@ -364,11 +364,16 @@ void MCAssembler::reset() { SymbolMap.clear(); IndirectSymbols.clear(); DataRegions.clear(); + LinkerOptions.clear(); + FileNames.clear(); ThumbFuncs.clear(); + BundleAlignSize = 0; RelaxAll = false; NoExecStack = false; SubsectionsViaSymbols = false; ELFHeaderEFlags = 0; + LOHContainer.reset(); + VersionMinInfo.Major = 0; // reset objects owned by us getBackend().reset(); diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index 4266759b1f0..9d8a57e55f6 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -73,7 +73,10 @@ void MCContext::reset() { Symbols.clear(); Allocator.Reset(); Instances.clear(); + CompilationDir.clear(); + MainFileName.clear(); MCDwarfLineTablesCUMap.clear(); + SectionStartEndSyms.clear(); MCGenDwarfLabelEntries.clear(); DwarfDebugFlags = StringRef(); DwarfCompileUnitID = 0; diff --git a/lib/MC/MCMachOStreamer.cpp b/lib/MC/MCMachOStreamer.cpp index 23b89759a2c..a147c3dda38 100644 --- a/lib/MC/MCMachOStreamer.cpp +++ b/lib/MC/MCMachOStreamer.cpp @@ -55,6 +55,12 @@ public: : MCObjectStreamer(Context, MAB, OS, Emitter), LabelSections(label) {} + /// state management + void reset() override { + HasSectionLabel.clear(); + MCObjectStreamer::reset(); + } + /// @name MCStreamer Interface /// @{ diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp index 914e3372670..b6cc8884f26 100644 --- a/lib/MC/MCStreamer.cpp +++ b/lib/MC/MCStreamer.cpp @@ -48,6 +48,7 @@ MCStreamer::~MCStreamer() { } void MCStreamer::reset() { + DwarfFrameInfos.clear(); for (unsigned i = 0; i < getNumWinFrameInfos(); ++i) delete WinFrameInfos[i]; WinFrameInfos.clear(); diff --git a/lib/Target/X86/X86AsmPrinter.h b/lib/Target/X86/X86AsmPrinter.h index 48248dd70f3..748b948d212 100644 --- a/lib/Target/X86/X86AsmPrinter.h +++ b/lib/Target/X86/X86AsmPrinter.h @@ -116,6 +116,12 @@ class LLVM_LIBRARY_VISIBILITY X86AsmPrinter : public AsmPrinter { /// \brief Return the symbol for the specified constant pool entry. MCSymbol *GetCPISymbol(unsigned CPID) const override; + bool doInitialization(Module &M) override { + SMShadowTracker.reset(0); + SM.reset(); + return AsmPrinter::doInitialization(M); + } + bool runOnMachineFunction(MachineFunction &F) override; };