Skip to content

Commit 3c862b4

Browse files
[mlir] Expose optional PatternBenefit to function / SCF populate functions (NFC) (#159752)
Pattern benefit allows users to give priority to a pattern.
1 parent fba55c8 commit 3c862b4

File tree

4 files changed

+23
-17
lines changed

4 files changed

+23
-17
lines changed

mlir/include/mlir/Dialect/SCF/Transforms/Patterns.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,13 @@ class ForLoopPipeliningPattern : public OpRewritePattern<ForOp> {
5151
/// TypeConverter, but otherwise don't care what type conversions are happening.
5252
void populateSCFStructuralTypeConversionsAndLegality(
5353
const TypeConverter &typeConverter, RewritePatternSet &patterns,
54-
ConversionTarget &target);
54+
ConversionTarget &target, PatternBenefit benefit = 1);
5555

5656
/// Similar to `populateSCFStructuralTypeConversionsAndLegality` but does not
5757
/// populate the conversion target.
5858
void populateSCFStructuralTypeConversions(const TypeConverter &typeConverter,
59-
RewritePatternSet &patterns);
59+
RewritePatternSet &patterns,
60+
PatternBenefit benefit = 1);
6061

6162
/// Updates the ConversionTarget with dynamic legality of SCF operations based
6263
/// on the provided type converter.

mlir/include/mlir/Transforms/DialectConversion.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -811,17 +811,19 @@ convertOpResultTypes(Operation *op, ValueRange operands,
811811
/// ops which use FunctionType to represent their type.
812812
void populateFunctionOpInterfaceTypeConversionPattern(
813813
StringRef functionLikeOpName, RewritePatternSet &patterns,
814-
const TypeConverter &converter);
814+
const TypeConverter &converter, PatternBenefit benefit = 1);
815815

816816
template <typename FuncOpT>
817817
void populateFunctionOpInterfaceTypeConversionPattern(
818-
RewritePatternSet &patterns, const TypeConverter &converter) {
819-
populateFunctionOpInterfaceTypeConversionPattern(FuncOpT::getOperationName(),
820-
patterns, converter);
818+
RewritePatternSet &patterns, const TypeConverter &converter,
819+
PatternBenefit benefit = 1) {
820+
populateFunctionOpInterfaceTypeConversionPattern(
821+
FuncOpT::getOperationName(), patterns, converter, benefit);
821822
}
822823

823824
void populateAnyFunctionOpInterfaceTypeConversionPattern(
824-
RewritePatternSet &patterns, const TypeConverter &converter);
825+
RewritePatternSet &patterns, const TypeConverter &converter,
826+
PatternBenefit benefit = 1);
825827

826828
//===----------------------------------------------------------------------===//
827829
// Conversion PatternRewriter

mlir/lib/Dialect/SCF/Transforms/StructuralTypeConversions.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,11 @@ class ConvertConditionOpTypes : public OpConversionPattern<ConditionOp> {
217217
} // namespace
218218

219219
void mlir::scf::populateSCFStructuralTypeConversions(
220-
const TypeConverter &typeConverter, RewritePatternSet &patterns) {
220+
const TypeConverter &typeConverter, RewritePatternSet &patterns,
221+
PatternBenefit benefit) {
221222
patterns.add<ConvertForOpTypes, ConvertIfOpTypes, ConvertYieldOpTypes,
222223
ConvertWhileOpTypes, ConvertConditionOpTypes>(
223-
typeConverter, patterns.getContext());
224+
typeConverter, patterns.getContext(), benefit);
224225
}
225226

226227
void mlir::scf::populateSCFStructuralTypeConversionTarget(
@@ -240,7 +241,7 @@ void mlir::scf::populateSCFStructuralTypeConversionTarget(
240241

241242
void mlir::scf::populateSCFStructuralTypeConversionsAndLegality(
242243
const TypeConverter &typeConverter, RewritePatternSet &patterns,
243-
ConversionTarget &target) {
244-
populateSCFStructuralTypeConversions(typeConverter, patterns);
244+
ConversionTarget &target, PatternBenefit benefit) {
245+
populateSCFStructuralTypeConversions(typeConverter, patterns, benefit);
245246
populateSCFStructuralTypeConversionTarget(typeConverter, target);
246247
}

mlir/lib/Transforms/Utils/DialectConversion.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3802,8 +3802,9 @@ namespace {
38023802
struct FunctionOpInterfaceSignatureConversion : public ConversionPattern {
38033803
FunctionOpInterfaceSignatureConversion(StringRef functionLikeOpName,
38043804
MLIRContext *ctx,
3805-
const TypeConverter &converter)
3806-
: ConversionPattern(converter, functionLikeOpName, /*benefit=*/1, ctx) {}
3805+
const TypeConverter &converter,
3806+
PatternBenefit benefit)
3807+
: ConversionPattern(converter, functionLikeOpName, benefit, ctx) {}
38073808

38083809
LogicalResult
38093810
matchAndRewrite(Operation *op, ArrayRef<Value> /*operands*/,
@@ -3848,15 +3849,16 @@ mlir::convertOpResultTypes(Operation *op, ValueRange operands,
38483849

38493850
void mlir::populateFunctionOpInterfaceTypeConversionPattern(
38503851
StringRef functionLikeOpName, RewritePatternSet &patterns,
3851-
const TypeConverter &converter) {
3852+
const TypeConverter &converter, PatternBenefit benefit) {
38523853
patterns.add<FunctionOpInterfaceSignatureConversion>(
3853-
functionLikeOpName, patterns.getContext(), converter);
3854+
functionLikeOpName, patterns.getContext(), converter, benefit);
38543855
}
38553856

38563857
void mlir::populateAnyFunctionOpInterfaceTypeConversionPattern(
3857-
RewritePatternSet &patterns, const TypeConverter &converter) {
3858+
RewritePatternSet &patterns, const TypeConverter &converter,
3859+
PatternBenefit benefit) {
38583860
patterns.add<AnyFunctionOpInterfaceSignatureConversion>(
3859-
converter, patterns.getContext());
3861+
converter, patterns.getContext(), benefit);
38603862
}
38613863

38623864
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)