[llvm] [TableGen] Fix the non-determinism in DFAPacketizerEmitter.cpp (PR #192037)

David Stuttard via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 14 06:38:24 PDT 2026


https://github.com/dstutt updated https://github.com/llvm/llvm-project/pull/192037

>From 81d75d7ecca21b30ce4bb31784f8cc158117d10c Mon Sep 17 00:00:00 2001
From: "Bao, Qiaojin (Fred)" <Qiaojin.Bao at amd.com>
Date: Tue, 14 Apr 2026 14:03:26 +0800
Subject: [PATCH 1/4] Fix the non-determinism in DFAPacketizerEmitter.cpp

Sort the std::set ProcItinList by Record name, not the pointer address.
---
 llvm/utils/TableGen/DFAPacketizerEmitter.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
index 8cb2c22736f8a..bd29f73dc484a 100644
--- a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
+++ b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
@@ -101,7 +101,13 @@ int DFAPacketizerEmitter::collectAllFuncUnits(
   LLVM_DEBUG(dbgs() << "collectAllFuncUnits");
   LLVM_DEBUG(dbgs() << " (" << ProcModels.size() << " itineraries)\n");
 
-  std::set<const Record *> ProcItinList;
+  struct RecordNameLess {
+    bool operator()(const Record *LHS, const Record *RHS) const {
+        return LHS->getName() < RHS->getName();
+    }
+  };
+
+  std::set<const Record *, RecordNameLess> ProcItinList;
   for (const CodeGenProcModel *Model : ProcModels)
     ProcItinList.insert(Model->ItinsDef);
 

>From be0920690042c94c32c26ac9795c6f9510793d37 Mon Sep 17 00:00:00 2001
From: David Stuttard <david.stuttard at amd.com>
Date: Tue, 14 Apr 2026 12:20:51 +0100
Subject: [PATCH 2/4] clang-format

---
 llvm/utils/TableGen/DFAPacketizerEmitter.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
index bd29f73dc484a..130bfabb903c9 100644
--- a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
+++ b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
@@ -103,7 +103,7 @@ int DFAPacketizerEmitter::collectAllFuncUnits(
 
   struct RecordNameLess {
     bool operator()(const Record *LHS, const Record *RHS) const {
-        return LHS->getName() < RHS->getName();
+      return LHS->getName() < RHS->getName();
     }
   };
 

>From f6e6524ade71207399495cff571a305ab85fa4d3 Mon Sep 17 00:00:00 2001
From: David Stuttard <david.stuttard at amd.com>
Date: Tue, 14 Apr 2026 14:10:21 +0100
Subject: [PATCH 3/4] Use existing LessRecord compare

---
 llvm/utils/TableGen/DFAPacketizerEmitter.cpp | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
index 130bfabb903c9..477085180670f 100644
--- a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
+++ b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
@@ -101,13 +101,7 @@ int DFAPacketizerEmitter::collectAllFuncUnits(
   LLVM_DEBUG(dbgs() << "collectAllFuncUnits");
   LLVM_DEBUG(dbgs() << " (" << ProcModels.size() << " itineraries)\n");
 
-  struct RecordNameLess {
-    bool operator()(const Record *LHS, const Record *RHS) const {
-      return LHS->getName() < RHS->getName();
-    }
-  };
-
-  std::set<const Record *, RecordNameLess> ProcItinList;
+  std::set<const Record *, LessRecord> ProcItinList;
   for (const CodeGenProcModel *Model : ProcModels)
     ProcItinList.insert(Model->ItinsDef);
 

>From 6914931b3d8a16367ff3ec3e95bcaa26546d321a Mon Sep 17 00:00:00 2001
From: David Stuttard <david.stuttard at amd.com>
Date: Tue, 14 Apr 2026 14:38:08 +0100
Subject: [PATCH 4/4] Comment change

---
 llvm/utils/TableGen/DFAPacketizerEmitter.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
index 477085180670f..5bc6da0507098 100644
--- a/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
+++ b/llvm/utils/TableGen/DFAPacketizerEmitter.cpp
@@ -101,6 +101,8 @@ int DFAPacketizerEmitter::collectAllFuncUnits(
   LLVM_DEBUG(dbgs() << "collectAllFuncUnits");
   LLVM_DEBUG(dbgs() << " (" << ProcModels.size() << " itineraries)\n");
 
+  // Use the LessRecord comparator to make the traversal deterministic with the
+  // same input
   std::set<const Record *, LessRecord> ProcItinList;
   for (const CodeGenProcModel *Model : ProcModels)
     ProcItinList.insert(Model->ItinsDef);



More information about the llvm-commits mailing list