[llvm] [TableGen] Fix non-deterministic output from emitGetRegClassFromMatchKindFunc. (PR #218560)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 24 23:13:12 PDT 2026


https://github.com/topperc updated https://github.com/llvm/llvm-project/pull/218560

>From 2f76a34b51fa2378085c5fd15c80061b9e5a1006 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Mon, 24 Aug 2026 17:30:50 -0700
Subject: [PATCH] [TableGen] Fix non-deterministic output from
 emitGetRegClassFromMatchKindFunc.

We were iterating a std::map that uses a pointer for the key which
isn't deterministic.

To fix, dereference the pointer and use operator< from the class.
---
 llvm/utils/TableGen/AsmMatcherEmitter.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index 96188225c472e..5e2127d139081 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
@@ -2578,7 +2578,8 @@ static void emitGetRegClassFromMatchKindFunc(AsmMatcherInfo &Info,
   // it for all non-ambiguous RegisterOperands.
   // Many targets reuse the same ParserMatchClass for different register
   // classes so we can't emit a these unconditionally.
-  std::map<const ClassInfo *, const ClassInfo *> UserClassToRegClassMap;
+  std::map<const ClassInfo *, const ClassInfo *, deref<std::less<>>>
+      UserClassToRegClassMap;
   for (const Record *RO :
        Info.Records.getAllDerivedDefinitions("RegisterOperand")) {
     const RecordVal *R = RO->getValue("ParserMatchClass");



More information about the llvm-commits mailing list