[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