GISel/Combiner: maintain created instructions in a SetVector
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 1 Dec 2022 11:24:01 +0000 (12:24 +0100)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 7 Dec 2022 20:40:34 +0000 (21:40 +0100)
This is not a correctness fix because the set is only used for debug
output. However, it helps avoid noise when looking at diffs between
compiler runs.

The set is only maintained with debug output enabled, so the added cost
should be acceptable.

Differential Revision: https://reviews.llvm.org/D139465

llvm/lib/CodeGen/GlobalISel/Combiner.cpp

index 5b1f20a..748fa27 100644 (file)
@@ -12,6 +12,7 @@
 
 #include "llvm/CodeGen/GlobalISel/Combiner.h"
 #include "llvm/ADT/PostOrderIterator.h"
+#include "llvm/ADT/SetVector.h"
 #include "llvm/CodeGen/GlobalISel/CSEInfo.h"
 #include "llvm/CodeGen/GlobalISel/CSEMIRBuilder.h"
 #include "llvm/CodeGen/GlobalISel/CombinerInfo.h"
@@ -52,7 +53,9 @@ class WorkListMaintainer : public GISelChangeObserver {
   WorkListTy &WorkList;
   /// The instructions that have been created but we want to report once they
   /// have their operands. This is only maintained if debug output is requested.
-  SmallPtrSet<const MachineInstr *, 4> CreatedInstrs;
+#ifndef NDEBUG
+  SetVector<const MachineInstr *> CreatedInstrs;
+#endif
 
 public:
   WorkListMaintainer(WorkListTy &WorkList) : WorkList(WorkList) {}