[llvm-mca] Clear the content of map VariantDescriptors in InstrBuilder before we...
authorAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Mon, 2 Jul 2018 20:39:57 +0000 (20:39 +0000)
committerAndrea Di Biagio <Andrea_DiBiagio@sn.scee.net>
Mon, 2 Jul 2018 20:39:57 +0000 (20:39 +0000)
Different CodeBlocks don't overlap. The same MCInst cannot appear in more than
one code block because all blocks are instantiated before the simulation is run.

We should always clear the content of map VariantDescriptors before every
simulation, since VariantDescriptors cannot possibly store useful information
for the next blocks. It is also "safer" to clear its content because `MCInst*`
is used as the key type for map VariantDescriptors.

llvm-svn: 336142

llvm/tools/llvm-mca/InstrBuilder.h
llvm/tools/llvm-mca/llvm-mca.cpp

index 1c325d9..e5e80d7 100644 (file)
@@ -69,6 +69,8 @@ public:
     return ProcResourceMasks;
   }
 
+  void clear() { VariantDescriptors.shrink_and_clear(); }
+
   std::unique_ptr<Instruction> createInstruction(const llvm::MCInst &MCI);
 };
 } // namespace mca
index 4cdd6ba..6bea827 100644 (file)
@@ -547,6 +547,9 @@ int main(int argc, char **argv) {
 
     P->run();
     Printer.printReport(TOF->os());
+
+    // Clear the InstrBuilder internal state in preparation for another round.
+    IB.clear();
   }
 
   TOF->keep();