140 lines · plain
1// RUN: mlir-tblgen -gen-dialect-decls -I %S/../../include %s | FileCheck %s --check-prefix=DIALECT2// RUN: mlir-tblgen -gen-op-decls -I %S/../../include %s | FileCheck %s --check-prefix=OP3// RUN: mlir-tblgen -gen-typedef-decls -I %S/../../include %s | FileCheck %s --check-prefix=TYPE4// RUN: mlir-tblgen -gen-attrdef-decls -I %S/../../include %s | FileCheck %s --check-prefix=ATTR5// RUN: mlir-tblgen -gen-attr-interface-decls -I %S/../../include %s | FileCheck %s --check-prefix=ATTR-INTERFACE6// RUN: mlir-tblgen -gen-op-interface-decls -I %S/../../include %s | FileCheck %s --check-prefix=OP-INTERFACE7// RUN: mlir-tblgen -gen-type-interface-decls -I %S/../../include %s | FileCheck %s --check-prefix=TYPE-INTERFACE8// RUN: mlir-tblgen -gen-enum-decls -I %S/../../include %s | FileCheck %s --check-prefix=ENUM9 10include "mlir/IR/AttrTypeBase.td"11include "mlir/IR/EnumAttr.td"12include "mlir/IR/OpBase.td"13 14// check dialect with summary and description15def A_Dialect : Dialect {16 let name = "a";17 let cppNamespace = "";18 19 let summary = "This is a summary";20 let description = [{21 22 This is a description, needs trimming23 24 }];25// DIALECT: /// This is a summary26// DIALECT-NEXT: /// This is a description, needs trimming27// DIALECT-NEXT: class ADialect : public ::mlir::Dialect {28}29 30def A_SomeOp1 : Op<A_Dialect, "some_op1", []>{31 let summary = "Some Op1 summary line1 \nsummary line2";32 33 let description = [{34 Some Op1 description35 }];36 37 let cppNamespace = "OP1";38// OP: namespace OP139// OP-EMPTY:40// OP-NEXT: /// Some Op1 summary line141// OP-NEXT: /// summary line242// OP-NEXT: /// Some Op1 description43// OP-NEXT: class SomeOp1;44}45 46// test weird characters in description47def A_SomeOp2 : Op<A_Dialect, "some_op2", []>{48 let summary = "";49 50 let description = [{51 $ptr (`,` $mask^)? (`,` $other^)?52 oilist(53 `a` `=` $1 | `b` `=` $254 )55 }];56// OP: /// $ptr (`,` $mask^)? (`,` $other^)?57// OP-NEXT: /// oilist(58// OP-NEXT: /// `a` `=` $1 | `b` `=` $259// OP-NEXT: /// )60// OP-NEXT: class SomeOp2;61}62 63def A_TensorType : TypeDef<A_Dialect,"Tensor"> {64 let typeName = "a.simple_a_tensor";65 66 let summary = "Tensor Type A summary";67 68 let description = [{69 Tensor Type A description70 }];71 72 let extraClassDeclaration = [{73 void getSignlessBlockType() const {74 }75 }];76// TYPE: /// Tensor Type A summary77// TYPE-NEXT: /// Tensor Type A description78// TYPE-NEXT: class TensorType;79}80 81def A_SimpleAttr : AttrDef<A_Dialect,"SimpleA"> {82 let attrName = "a.simple_attr";83 let summary = "Simple Attr A summary";84 85 let description = [{86 Simple Attr A description87 }];88// ATTR: /// Simple Attr A summary89// ATTR-NEXT: /// Simple Attr A description90// ATTR-NEXT: class SimpleAAttr;91}92 93def EncodingTrait : AttrInterface<"EncodingTrait"> {94 let cppNamespace = "mlir::a::traits";95 let description = [{96 Common trait for all layouts.97 }];98 let methods = [99 ];100// ATTR-INTERFACE: namespace mlir::a::traits {101// ATTR-INTERFACE-EMPTY:102// ATTR-INTERFACE-NEXT: /// Common trait for all layouts.103// ATTR-INTERFACE-NEXT: class EncodingTrait;104}105 106def SimpleEncodingTrait : AttrInterface<"SimpleEncodingTrait"> {107 let cppNamespace = "a::traits";108// ATTR-INTERFACE: namespace a::traits {109// ATTR-INTERFACE-EMPTY:110// ATTR-INTERFACE-NEXT: class SimpleEncodingTrait;111}112 113def SimpleOpInterface : OpInterface<"SimpleOpInterface"> {114 let cppNamespace = "a::traits";115 let description = [{116 117 Simple Op Interface description118 }];119// OP-INTERFACE: namespace a::traits {120// OP-INTERFACE-EMPTY:121// OP-INTERFACE-NEXT: /// Simple Op Interface description122// OP-INTERFACE-NEXT: class SimpleOpInterface;123}124 125def SimpleTypeInterface : TypeInterface<"SimpleTypeInterface"> {126 let description = [{127 Simple Type Interface description128 }];129// TYPE-INTERFACE: /// Simple Type Interface description130// TYPE-INTERFACE-NEXT: class SimpleTypeInterface;131}132 133def MyBitEnum: I32BitEnumAttr<"MyBitEnum", "An example bit enum",134 [I32BitEnumCaseBit<"Bit0", 0, "tagged">,135 I32BitEnumCaseBit<"Bit1", 1>]> {136 let genSpecializedAttr = 0;137// ENUM: // An example bit enum138// ENUM-NEXT: enum class MyBitEnum139}140