Skip to content

Commit

Permalink
[mlir] Add optional TypeConverter for materializations.
Browse files Browse the repository at this point in the history
`ConversionPatternRewriter::applySignatureConversion` did not have a way
to apply a signature conversion that involved materializations.

Differential Revision: https://reviews.llvm.org/D99782
  • Loading branch information
silvasean committed Apr 2, 2021
1 parent 4be8a26 commit 223dcdc
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
5 changes: 4 additions & 1 deletion mlir/include/mlir/Transforms/DialectConversion.h
Expand Up @@ -479,9 +479,12 @@ class ConversionPatternRewriter final : public PatternRewriter {
/// Apply a signature conversion to the entry block of the given region. This
/// replaces the entry block with a new block containing the updated
/// signature. The new entry block to the region is returned for convenience.
///
/// If provided, `converter` will be used for any materializations.
Block *
applySignatureConversion(Region *region,
TypeConverter::SignatureConversion &conversion);
TypeConverter::SignatureConversion &conversion,
TypeConverter *converter = nullptr);

/// Convert the types of block arguments within the given region. This
/// replaces each block with a new block containing the updated signature. The
Expand Down
17 changes: 11 additions & 6 deletions mlir/lib/Transforms/Utils/DialectConversion.cpp
Expand Up @@ -741,10 +741,12 @@ struct ConversionPatternRewriterImpl {
Block *block, TypeConverter &converter,
TypeConverter::SignatureConversion *conversion = nullptr);

/// Apply a signature conversion on the given region.
/// Apply a signature conversion on the given region, using `converter` for
/// materializations if not null.
Block *
applySignatureConversion(Region *region,
TypeConverter::SignatureConversion &conversion);
TypeConverter::SignatureConversion &conversion,
TypeConverter *converter);

/// Convert the types of block arguments within the given region.
FailureOr<Block *>
Expand Down Expand Up @@ -1145,9 +1147,11 @@ FailureOr<Block *> ConversionPatternRewriterImpl::convertBlockSignature(
}

Block *ConversionPatternRewriterImpl::applySignatureConversion(
Region *region, TypeConverter::SignatureConversion &conversion) {
Region *region, TypeConverter::SignatureConversion &conversion,
TypeConverter *converter) {
if (!region->empty()) {
return *convertBlockSignature(&region->front(), defaultTypeConverter,
return *convertBlockSignature(&region->front(),
converter ? *converter : defaultTypeConverter,
&conversion);
}
return nullptr;
Expand Down Expand Up @@ -1335,8 +1339,9 @@ void ConversionPatternRewriter::eraseBlock(Block *block) {
}

Block *ConversionPatternRewriter::applySignatureConversion(
Region *region, TypeConverter::SignatureConversion &conversion) {
return impl->applySignatureConversion(region, conversion);
Region *region, TypeConverter::SignatureConversion &conversion,
TypeConverter *converter) {
return impl->applySignatureConversion(region, conversion, converter);
}

FailureOr<Block *> ConversionPatternRewriter::convertRegionTypes(
Expand Down

0 comments on commit 223dcdc

Please sign in to comment.