diff options
Diffstat (limited to 'mlir/lib/Transforms/Utils/DialectConversion.cpp')
-rw-r--r-- | mlir/lib/Transforms/Utils/DialectConversion.cpp | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/mlir/lib/Transforms/Utils/DialectConversion.cpp b/mlir/lib/Transforms/Utils/DialectConversion.cpp index bf0136b..3a23bbf 100644 --- a/mlir/lib/Transforms/Utils/DialectConversion.cpp +++ b/mlir/lib/Transforms/Utils/DialectConversion.cpp @@ -1856,6 +1856,44 @@ void ConversionPatternRewriterImpl::replaceOp( Operation *op, SmallVector<SmallVector<Value>> &&newValues) { assert(newValues.size() == op->getNumResults() && "incorrect number of replacement values"); + LLVM_DEBUG({ + logger.startLine() << "** Replace : '" << op->getName() << "'(" << op + << ")\n"; + if (currentTypeConverter) { + // If the user-provided replacement types are different from the + // legalized types, as per the current type converter, print a note. + // In most cases, the replacement types are expected to match the types + // produced by the type converter, so this could indicate a bug in the + // user code. + for (auto [result, repls] : + llvm::zip_equal(op->getResults(), newValues)) { + Type resultType = result.getType(); + auto logProlog = [&, repls = repls]() { + logger.startLine() << " Note: Replacing op result of type " + << resultType << " with value(s) of type ("; + llvm::interleaveComma(repls, logger.getOStream(), [&](Value v) { + logger.getOStream() << v.getType(); + }); + logger.getOStream() << ")"; + }; + SmallVector<Type> convertedTypes; + if (failed(currentTypeConverter->convertTypes(resultType, + convertedTypes))) { + logProlog(); + logger.getOStream() << ", but the type converter failed to legalize " + "the original type.\n"; + continue; + } + if (TypeRange(convertedTypes) != TypeRange(ValueRange(repls))) { + logProlog(); + logger.getOStream() << ", but the legalized type(s) is/are ("; + llvm::interleaveComma(convertedTypes, logger.getOStream(), + [&](Type t) { logger.getOStream() << t; }); + logger.getOStream() << ")\n"; + } + } + } + }); if (!config.allowPatternRollback) { // Pattern rollback is not allowed: materialize all IR changes immediately. @@ -2072,10 +2110,6 @@ void ConversionPatternRewriter::replaceOp(Operation *op, Operation *newOp) { void ConversionPatternRewriter::replaceOp(Operation *op, ValueRange newValues) { assert(op->getNumResults() == newValues.size() && "incorrect # of replacement values"); - LLVM_DEBUG({ - impl->logger.startLine() - << "** Replace : '" << op->getName() << "'(" << op << ")\n"; - }); // If the current insertion point is before the erased operation, we adjust // the insertion point to be after the operation. @@ -2093,10 +2127,6 @@ void ConversionPatternRewriter::replaceOpWithMultiple( Operation *op, SmallVector<SmallVector<Value>> &&newValues) { assert(op->getNumResults() == newValues.size() && "incorrect # of replacement values"); - LLVM_DEBUG({ - impl->logger.startLine() - << "** Replace : '" << op->getName() << "'(" << op << ")\n"; - }); // If the current insertion point is before the erased operation, we adjust // the insertion point to be after the operation. |