blob: d8e92cb1ed5ad6a991dd6fc0dba02b42904faa80 [file] [log] [blame]
// 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));