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

llvmlistbot at llvm.org llvmlistbot at llvm.org
Thu Apr 9 16:45:16 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir-core

Author: Colin He (CPlusMinus2000)

<details>
<summary>Changes</summary>

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.

---
Full diff: https://github.com/llvm/llvm-project/pull/191323.diff


1 Files Affected:

- (modified) mlir/lib/Transforms/Utils/DialectConversion.cpp (+6-5) 


``````````diff
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);
 

``````````

</details>


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


More information about the Mlir-commits mailing list