Skip to content

Conversation

@matthias-springer
Copy link
Member

@matthias-springer matthias-springer commented Dec 11, 2024

Add a debugging flag to the dialect conversion to dump the materialization kind. This flag is useful to find out whether a missing materialization rule is for source or target materializations.

Also add missing test coverage for the buildMaterializations flag.

@llvmbot llvmbot added mlir:core MLIR Core Infrastructure mlir labels Dec 11, 2024
@llvmbot
Copy link
Member

llvmbot commented Dec 11, 2024

@llvm/pr-subscribers-mlir

@llvm/pr-subscribers-mlir-core

Author: Matthias Springer (matthias-springer)

Changes

Add a debugging flag to the dialect conversion to dump the materialization kind. This flag is meant to help users to migrate 1:1 conversion patterns to 1:N conversion patterns. (To understand what kind of materializations are created in which place.)


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

1 Files Affected:

  • (modified) mlir/lib/Transforms/Utils/DialectConversion.cpp (+9-1)
diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp
index cedf645e2985da..300805ae99b2be 100644
--- a/mlir/lib/Transforms/Utils/DialectConversion.cpp
+++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp
@@ -29,6 +29,12 @@ using namespace mlir::detail;
 
 #define DEBUG_TYPE "dialect-conversion"
 
+/// Debugging flag. If set to "true", the materialization kind is attached as
+/// an attribute to builtin.unrealized_conversion_cast ops. This flag takes
+/// effect only if ConversionConfig::buildMaterialization = false. (Otherwise,
+/// the annotated ops are replaced with materializations.)
+static const bool kDumpMaterializationKind = false;
+
 /// A utility function to log a successful result for the given reason.
 template <typename... Args>
 static void logSuccess(llvm::ScopedPrinter &os, StringRef fmt, Args &&...args) {
@@ -650,7 +656,7 @@ class CreateOperationRewrite : public OperationRewrite {
 };
 
 /// The type of materialization.
-enum MaterializationKind {
+enum MaterializationKind : int8_t {
   /// This materialization materializes a conversion for an illegal block
   /// argument type, to the original one.
   Argument,
@@ -1417,6 +1423,8 @@ ValueRange ConversionPatternRewriterImpl::buildUnresolvedMaterialization(
   builder.setInsertionPoint(ip.getBlock(), ip.getPoint());
   auto convertOp =
       builder.create<UnrealizedConversionCastOp>(loc, outputTypes, inputs);
+  if (kDumpMaterializationKind)
+    convertOp->setAttr("kind", builder.getI32IntegerAttr(kind));
   if (valueToMap) {
     assert(outputTypes.size() == 1 && "1:N mapping is not supported");
     mapping.map(valueToMap, convertOp.getResult(0));

@matthias-springer matthias-springer force-pushed the users/matthias-springer/dump_mat_kind branch from ad27f5f to 6eb92b1 Compare August 18, 2025 08:50
@matthias-springer
Copy link
Member Author

I forgot about this PR, but I think it's still useful. Can you take another look?

@matthias-springer matthias-springer force-pushed the users/matthias-springer/dump_mat_kind branch from 6eb92b1 to 0bf14af Compare August 18, 2025 12:09
@matthias-springer matthias-springer enabled auto-merge (squash) August 18, 2025 12:09
@matthias-springer matthias-springer force-pushed the users/matthias-springer/dump_mat_kind branch from 0bf14af to 3dc17c3 Compare August 18, 2025 13:12
@matthias-springer matthias-springer merged commit f84aaa6 into main Aug 18, 2025
9 checks passed
@matthias-springer matthias-springer deleted the users/matthias-springer/dump_mat_kind branch August 18, 2025 13:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mlir:core MLIR Core Infrastructure mlir

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants