| // RUN: mlir-tblgen -gen-rewriters -I %S/../../include %s | FileCheck %s |
| |
| include "mlir/IR/OpBase.td" |
| |
| def Test_Dialect : Dialect { |
| let name = ""; |
| } |
| class NS_Op<string mnemonic, list<OpTrait> traits> : |
| Op<Test_Dialect, mnemonic, traits>; |
| |
| def OpA : NS_Op<"op_a", []> { |
| let arguments = (ins I32:$operand, I32Attr:$attr); |
| let results = (outs I32:$result); |
| } |
| |
| def OpB : NS_Op<"op_b", []> { |
| let arguments = (ins I32:$operand, I32Attr:$attr); |
| let results = (outs I32:$result); |
| } |
| |
| def MyRule : Pat<(OpA $input, $attr), (OpB $input, $attr)>; |
| def MyRule2 : Pat<(OpA (OpA $input, $attr), $attr), (OpB $input, $attr)>; |
| |
| // Test rewrite rule naming |
| // --- |
| |
| // CHECK: Generated from: |
| // CHECK-NEXT: {{.*pattern.td.*}} |
| // CHECK: struct MyRule : public RewritePattern |
| |
| // CHECK-LABEL: struct MyRule2 : public RewritePattern |
| // CHECK: s.autogeneratedRewritePatternOps[0] = op0; |
| // CHECK: s.autogeneratedRewritePatternOps[1] = op1; |
| // CHECK: rewriter.getFusedLoc({ |
| // CHECK-SAME: s.autogeneratedRewritePatternOps[0]->getLoc() |
| // CHECK-SAME: s.autogeneratedRewritePatternOps[1]->getLoc() |
| |
| def : Pat<(OpA $input, $attr), (OpB $input, $attr)>; |
| |
| // Test basic structure generated from Pattern |
| // --- |
| |
| // CHECK: struct GeneratedConvert0 : public RewritePattern |
| |
| // CHECK: GeneratedConvert0(MLIRContext *context) : RewritePattern("op_a", {"op_b"}, 1, context) {} |
| |
| // CHECK: struct MatchedState : public PatternState { |
| // CHECK: Value *input; |
| // CHECK: IntegerAttr attr; |
| // CHECK: }; |
| |
| // CHECK: PatternMatchResult match(Operation *op0) const override |
| |
| // CHECK: void rewrite(Operation *op, std::unique_ptr<PatternState> state, |
| // CHECK: PatternRewriter &rewriter) const override |
| |
| |
| // CHECK: void populateWithGenerated(MLIRContext *context, OwningRewritePatternList *patterns) |
| // CHECK: patterns->push_back(llvm::make_unique<MyRule>(context)); |
| // CHECK: patterns->push_back(llvm::make_unique<GeneratedConvert0>(context)); |