Skip to content

Commit 82eb168

Browse files
silvaseanmemfrob
authored andcommitted
[mlir] Add optional TypeConverter for materializations.
`ConversionPatternRewriter::applySignatureConversion` did not have a way to apply a signature conversion that involved materializations. Differential Revision: https://reviews.llvm.org/D99782
1 parent 6422bcf commit 82eb168

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

mlir/include/mlir/Transforms/DialectConversion.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,9 +479,12 @@ class ConversionPatternRewriter final : public PatternRewriter {
479479
/// Apply a signature conversion to the entry block of the given region. This
480480
/// replaces the entry block with a new block containing the updated
481481
/// signature. The new entry block to the region is returned for convenience.
482+
///
483+
/// If provided, `converter` will be used for any materializations.
482484
Block *
483485
applySignatureConversion(Region *region,
484-
TypeConverter::SignatureConversion &conversion);
486+
TypeConverter::SignatureConversion &conversion,
487+
TypeConverter *converter = nullptr);
485488

486489
/// Convert the types of block arguments within the given region. This
487490
/// replaces each block with a new block containing the updated signature. The

mlir/lib/Transforms/Utils/DialectConversion.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -741,10 +741,12 @@ struct ConversionPatternRewriterImpl {
741741
Block *block, TypeConverter &converter,
742742
TypeConverter::SignatureConversion *conversion = nullptr);
743743

744-
/// Apply a signature conversion on the given region.
744+
/// Apply a signature conversion on the given region, using `converter` for
745+
/// materializations if not null.
745746
Block *
746747
applySignatureConversion(Region *region,
747-
TypeConverter::SignatureConversion &conversion);
748+
TypeConverter::SignatureConversion &conversion,
749+
TypeConverter *converter);
748750

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

11471149
Block *ConversionPatternRewriterImpl::applySignatureConversion(
1148-
Region *region, TypeConverter::SignatureConversion &conversion) {
1150+
Region *region, TypeConverter::SignatureConversion &conversion,
1151+
TypeConverter *converter) {
11491152
if (!region->empty()) {
1150-
return *convertBlockSignature(&region->front(), defaultTypeConverter,
1153+
return *convertBlockSignature(&region->front(),
1154+
converter ? *converter : defaultTypeConverter,
11511155
&conversion);
11521156
}
11531157
return nullptr;
@@ -1335,8 +1339,9 @@ void ConversionPatternRewriter::eraseBlock(Block *block) {
13351339
}
13361340

13371341
Block *ConversionPatternRewriter::applySignatureConversion(
1338-
Region *region, TypeConverter::SignatureConversion &conversion) {
1339-
return impl->applySignatureConversion(region, conversion);
1342+
Region *region, TypeConverter::SignatureConversion &conversion,
1343+
TypeConverter *converter) {
1344+
return impl->applySignatureConversion(region, conversion, converter);
13401345
}
13411346

13421347
FailureOr<Block *> ConversionPatternRewriter::convertRegionTypes(

0 commit comments

Comments
 (0)