104 lines · plain
1// RUN: mlir-tblgen -gen-rewriters -I %S/../../include %s | FileCheck %s2 3include "mlir/IR/OpBase.td"4include "mlir/IR/PatternBase.td"5 6def Test_Dialect : Dialect {7 let name = "test";8}9class NS_Op<string mnemonic, list<Trait> traits> :10 Op<Test_Dialect, mnemonic, traits>;11 12def AOp : NS_Op<"a_op", []> {13 let arguments = (ins14 AnyInteger:$any_integer15 );16 17 let results = (outs AnyInteger);18}19 20def BOp : NS_Op<"b_op", []> {21 let arguments = (ins22 AnyAttr: $any_attr,23 AnyInteger24 );25 26 let results = (outs AnyInteger);27}28 29def COp : NS_Op<"c_op", []> {30 let arguments = (ins31 AnyAttr: $any_attr,32 AnyInteger33 );34 35 let results = (outs AnyInteger);36}37 38def DOp : NS_Op<"d_op", []> {39 let arguments = (ins40 Variadic<AnyInteger>:$any_integer41 );42 43 let results = (outs AnyInteger);44}45 46def Foo : NativeCodeCall<"foo($_builder, $0)">;47 48def NonNegProp : PropConstraint<CPred<"$_self >= 0">, "non-negative integer">;49 50def EOp : NS_Op<"e_op", []> {51 let arguments = (ins52 I32Prop:$x,53 I64Prop:$y,54 AnyInteger:$z55 );56 let results = (outs I32:$res);57}58 59def FOp: NS_Op<"f_op", []> {60 let arguments = (ins61 I32Prop:$a,62 AnyInteger:$b63 );64}65 66// Test static matcher for duplicate DagNode67// ---68 69// CHECK: static ::llvm::LogicalResult [[$TYPE_CONSTRAINT:__mlir_ods_local_type_constraint.*]](70// CHECK-NEXT: {{.*::mlir::Type type}}71// CHECK: static ::llvm::LogicalResult [[$ATTR_CONSTRAINT:__mlir_ods_local_attr_constraint.*]](72// CHECK-NEXT: {{.*::mlir::Attribute attr}}73// CHECK: template <typename T>74// CHECK-NEXT: static ::llvm::LogicalResult [[$PROP_CONSTRAINT:__mlir_ods_local_prop_constraint.*]](75// CHECK-NEXT: {{.*T prop}}76// CHECK: static ::llvm::LogicalResult [[$DAG_MATCHER:static_dag_matcher.*]](77// CHECK: if(::mlir::failed([[$ATTR_CONSTRAINT]]78// CHECK: if(::mlir::failed([[$TYPE_CONSTRAINT]]79// CHECK: static ::llvm::LogicalResult [[$DAG_MATCHER2:static_dag_matcher.*]](80// CHECK-SAME: int32_t &x81// CHECK: if(::mlir::failed([[$PROP_CONSTRAINT]]82// CHECK: if(::mlir::failed([[$TYPE_CONSTRAINT]]83 84// CHECK: if(::mlir::failed([[$DAG_MATCHER]](rewriter, op1, tblgen_ops85def : Pat<(AOp (BOp I32Attr:$attr, I32:$int)),86 (AOp $int)>;87 88// CHECK: if(::mlir::failed([[$DAG_MATCHER]](rewriter, op1, tblgen_ops89def : Pat<(COp $_, (BOp I32Attr:$attr, I32:$int)),90 (COp $attr, $int)>;91 92// CHECK: auto [[$VAR:.*]] = foo(93// CHECK: ::llvm::SmallVector<::mlir::Value, 4> [[$ARR:tblgen_variadic_values_.*]];94// CHECK: [[$ARR]].push_back([[$VAR]]);95def : Pat<(AOp $x), (DOp (variadic (Foo $x)))>;96 97// CHECK: if(::mlir::failed([[$DAG_MATCHER2]]({{.*}} x{{[,)]}}98def : Pat<(AOp (EOp NonNegProp:$x, NonNegProp:$_, I32:$z)),99 (AOp $z)>;100 101// CHECK: if(::mlir::failed([[$DAG_MATCHER2]]({{.*}} x{{[,)]}}102def : Pat<(FOp $_, (EOp NonNegProp:$x, NonNegProp:$_, I32:$z)),103 (COp $x, $z)>;104