Add and update reset() and doInitialization() methods to MC* and passes.
authorYaron Keren <yaron.keren@gmail.com>
Wed, 17 Sep 2014 09:25:36 +0000 (09:25 +0000)
committerYaron Keren <yaron.keren@gmail.com>
Wed, 17 Sep 2014 09:25:36 +0000 (09:25 +0000)
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
include/llvm/MC/MCELFStreamer.h
include/llvm/MC/MCWinCOFFStreamer.h
lib/MC/MCAssembler.cpp
lib/MC/MCContext.cpp
lib/MC/MCMachOStreamer.cpp
lib/MC/MCStreamer.cpp
lib/Target/X86/X86AsmPrinter.h

index a04cdf8abf28fa226005e95f1f2e086d67de8ac9..dd22ab0b54c4fe7a3f1d8143ccdc6f700dd9079b 100644 (file)
@@ -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.
index 66729fe0147efa7bd6b3d3e9d463ace5323021c5..4bfcee377cc581796630a9e0ab0721a78013071b 100644 (file)
@@ -41,6 +41,14 @@ public:
 
   virtual ~MCELFStreamer();
 
+  /// state management
+  void reset() override {
+    LocalCommons.clear();
+    BindingExplicitlySet.clear();
+    SeenIdent = false;
+    MCObjectStreamer::reset();
+  }
+
   /// @name MCStreamer Interface
   /// @{
 
index 7d2d0e4f5560eb6eb421d5d7cffa11df130105f3..d6ca5fb61da96c09dc81b68f1cd19d92e061c85f 100644 (file)
@@ -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
   /// \{
 
index a6aa5da2421a5be2969b62641098e48046b22b85..709a8defec586f38dc6a2d7b49fddc1472025ee4 100644 (file)
@@ -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();
index 4266759b1f0e196a75bf05e2695aea7413122169..9d8a57e55f6cda00c1d423d80a5afa597333b798 100644 (file)
@@ -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;
index 23b89759a2c5ec8507452d4f5206d86427c9b055..a147c3dda38174815af665a9c9b9f4428ce80d4a 100644 (file)
@@ -55,6 +55,12 @@ public:
       : MCObjectStreamer(Context, MAB, OS, Emitter),
         LabelSections(label) {}
 
+  /// state management
+  void reset() override {
+    HasSectionLabel.clear();
+    MCObjectStreamer::reset();
+  }
+
   /// @name MCStreamer Interface
   /// @{
 
index 914e337267002c14fb07dfab4a41852979a08911..b6cc8884f2625779d64f165789d8d7bf60a7b559 100644 (file)
@@ -48,6 +48,7 @@ MCStreamer::~MCStreamer() {
 }
 
 void MCStreamer::reset() {
+  DwarfFrameInfos.clear();
   for (unsigned i = 0; i < getNumWinFrameInfos(); ++i)
     delete WinFrameInfos[i];
   WinFrameInfos.clear();
index 48248dd70f3f801caa3945408ee1902db111ce77..748b948d212f85a9bb764d3efe9cb6e95ea63b36 100644 (file)
@@ -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;
 };