[Mlir-commits] [mlir] [mlir] Deterministic containers for unrealized materializations (PR #191323)

Colin He llvmlistbot at llvm.org
Thu Apr 9 16:44:44 PDT 2026


https://github.com/CPlusMinus2000 created https://github.com/llvm/llvm-project/pull/191323

Iteration over unrealized materializations in DialectConversion is non-deterministic as the materialization metadata is stored in a DenseMap. Replacing with a Vector-backed `llvm::MapVector` restores deterministic behaviour.

>From 5881b83056cf7d19429946e56b579e6fbd046bf5 Mon Sep 17 00:00:00 2001
From: Colin He <hcolin88 at gmail.com>
Date: Thu, 9 Apr 2026 16:40:30 -0700
Subject: [PATCH] [mlir] Deterministic containers for unrealized
 materializations

Iteration over unrealized materializations in DialectConversion
is non-deterministic as the materialization metadata is stored
in a DenseMap. Replacing with a Vector-backed `llvm::MapVector`
restores deterministic behaviour.
---
 mlir/lib/Transforms/Utils/DialectConversion.cpp | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp
index cad27763ab165..9666302507281 100644
--- a/mlir/lib/Transforms/Utils/DialectConversion.cpp
+++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp
@@ -1139,7 +1139,7 @@ struct ConversionPatternRewriterImpl : public RewriterBase::Listener {
   DenseSet<UnrealizedConversionCastOp> patternMaterializations;
 
   /// A mapping for looking up metadata of unresolved materializations.
-  DenseMap<UnrealizedConversionCastOp, UnresolvedMaterializationInfo>
+  llvm::MapVector<UnrealizedConversionCastOp, UnresolvedMaterializationInfo>
       unresolvedMaterializations;
 
   /// The current type converter, or nullptr if no type converter is currently
@@ -3243,8 +3243,8 @@ void mlir::reconcileUnrealizedCasts(
 
 namespace mlir {
 static void reconcileUnrealizedCasts(
-    const DenseMap<UnrealizedConversionCastOp, UnresolvedMaterializationInfo>
-        &castOps,
+    const llvm::MapVector<UnrealizedConversionCastOp,
+                          UnresolvedMaterializationInfo> &castOps,
     SmallVectorImpl<UnrealizedConversionCastOp> *remainingCastOps) {
   reconcileUnrealizedCastsImpl(
       castOps.keys(),
@@ -3486,8 +3486,9 @@ LogicalResult OperationConverter::applyConversion(ArrayRef<Operation *> ops) {
   // Reconcile all UnrealizedConversionCastOps that were inserted by the
   // dialect conversion frameworks. (Not the ones that were inserted by
   // patterns.)
-  const DenseMap<UnrealizedConversionCastOp, UnresolvedMaterializationInfo>
-      &materializations = rewriterImpl.unresolvedMaterializations;
+  const llvm::MapVector<UnrealizedConversionCastOp,
+                        UnresolvedMaterializationInfo> &materializations =
+      rewriterImpl.unresolvedMaterializations;
   SmallVector<UnrealizedConversionCastOp> remainingCastOps;
   reconcileUnrealizedCasts(materializations, &remainingCastOps);
 



More information about the Mlir-commits mailing list