[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