187 lines · plain
1// RUN: mlir-tblgen -gen-dialect-doc -I %S/../../include -dialect=test %s | FileCheck %s2// RUN: mlir-tblgen -gen-dialect-doc -I %S/../../include -dialect=test_toc %s | FileCheck %s --check-prefix=CHECK_TOC3 4include "mlir/IR/OpBase.td"5include "mlir/IR/AttrTypeBase.td"6include "mlir/IR/EnumAttr.td"7include "mlir/Interfaces/SideEffectInterfaces.td"8 9def Test_Dialect : Dialect {10 let name = "test";11 let summary = "Dialect of ops to test";12 let description = [{13 Dialect without a [TOC] here.14 TOC added by tool.15 }];16 let cppNamespace = "NS";17}18 19def OpGroupA : OpDocGroup {20 let summary = "Group of ops";21 let description = "Grouped for some reason.";22}23 24let opDocGroup = OpGroupA in {25def ADOp : Op<Test_Dialect, "d", [NoMemoryEffect, SingleBlockImplicitTerminator<"YieldOp">]>;26def AAOp : Op<Test_Dialect, "a", [NoMemoryEffect, SingleBlockImplicitTerminator<"YieldOp">]>;27}28 29def OpGroupB : OpDocGroup {30 let summary = "Other group of ops";31 let description = "Grouped for some other reason.";32}33 34let opDocGroup = OpGroupB in {35def ACOp : Op<Test_Dialect, "c", [NoMemoryEffect, SingleBlockImplicitTerminator<"YieldOp">]>;36def ABOp : Op<Test_Dialect, "b", [NoMemoryEffect, SingleBlockImplicitTerminator<"YieldOp">]>;37}38 39def AEOp : Op<Test_Dialect, "e", [NoMemoryEffect]> {40 let summary = "Op with a summary";41 let description = "Op with a description";42 let arguments = (ins ConfinedType<AnyType, [CPred<"::llvm::isa<::mlir::TensorType>($_self)">]>:$tensor,43 I16Attr:$int_attr);44 let results = (outs45 ConfinedType<AnyType, [CPred<"::llvm::isa<::mlir::TensorType>($_self)">]>:$output46 ); 47}48 49def TestAttr : DialectAttr<Test_Dialect, CPred<"true">> {50 let summary = "attribute summary";51 let description = "attribute description";52}53 54def TestType : DialectType<Test_Dialect, CPred<"true">> {55 let summary = "type summary";56 let description = "type description";57}58 59def TestAttrDef : AttrDef<Test_Dialect, "TestAttrDef"> {60 let mnemonic = "test_attr_def";61}62 63def TestAttrDefParams : AttrDef<Test_Dialect, "TestAttrDefParams"> {64 let mnemonic = "test_attr_def_params";65 let parameters = (ins "int":$value);66 67 let assemblyFormat = "`<` $value `>`";68}69 70def TestTypeDef : TypeDef<Test_Dialect, "TestTypeDef"> {71 let mnemonic = "test_type_def";72}73 74def TestTypeDefParams : TypeDef<Test_Dialect, "TestTypeDefParams"> {75 let mnemonic = "test_type_def_params";76 let parameters = (ins "int":$value);77 78 let assemblyFormat = "`<` $value `>`";79}80 81def TestEnum :82 I32EnumAttr<"TestEnum",83 "enum summary", [84 I32EnumAttrCase<"First", 0, "first">,85 I32EnumAttrCase<"Second", 1, "second">,86 I32EnumAttrCase<"Third", 2, "third">]> {87 let genSpecializedAttr = 1;88 let cppNamespace = "NS";89}90 91// CHECK: Dialect without a [TOC] here.92// CHECK-NEXT: TOC added by tool.93// CHECK-EMPTY:94// CHECK-NEXT: [TOC]95// CHECK-EMPTY:96 97// CHECK-NOT: [TOC]98 99// CHECK: test.e100// CHECK-EMPTY:101// CHECK-NEXT: _Op with a summary_102// CHECK-EMPTY:103// CHECK-NEXT: Op with a description104// CHECK-EMPTY:105 106// CHECK: Operands:107// CHECK-EMPTY:108// CHECK-NEXT: | Operand | Description |109// CHECK-NEXT: | :-----: | ----------- |110// CHECK-NEXT: | `tensor` | |111// CHECK-EMPTY:112// CHECK-NEXT: Results:113// CHECK-EMPTY:114// CHECK-NEXT: | Result | Description |115// CHECK-NEXT: | :----: | ----------- |116// CHECK-NEXT: | `output` | |117// CHECK-EMPTY:118 119// CHECK: Group of ops120// CHECK: test.a121// CHECK: test.d122// CHECK: Other group123// CHECK: test.b124// CHECK: test.c125// CHECK: Traits: `SingleBlockImplicitTerminator<YieldOp>`, `SingleBlock`126// CHECK: Interfaces: `NoMemoryEffect (MemoryEffectOpInterface)`127// CHECK: Effects: `MemoryEffects::Effect{}`128 129// CHECK: ## Attribute constraints130// CHECK-EMPTY:131// CHECK-NEXT: ### attribute summary132// CHECK-EMPTY:133// CHECK: attribute description134 135// CHECK: TestAttrDefAttr136// CHECK: Syntax:137// CHECK: #test.test_attr_def138 139// CHECK: TestAttrDefParamsAttr140// CHECK: Syntax:141// CHECK: #test.test_attr_def_params142 143// CHECK: ## Type constraints144// CHECK: ### type summary145// CHECK: type description146 147// CHECK: TestTypeDefType148// CHECK: Syntax:149// CHECK: !test.test_type_def150 151// CHECK: TestTypeDefParamsType152// CHECK: Syntax:153// CHECK: !test.test_type_def_params154 155// CHECK: ## Enums156// CHECK-EMPTY:157// CHECK-NEXT: ### TestEnum158// CHECK-EMPTY:159// CHECK-NEXT: _Enum summary_160// CHECK-EMPTY:161// CHECK-NEXT: #### Cases:162// CHECK-EMPTY:163// CHECK-NEXT: | Symbol | Value | String |164// CHECK-NEXT: | :----: | :---: | ------ |165// CHECK-NEXT: | First | `0` | first |166// CHECK-NEXT: | Second | `1` | second |167// CHECK-NEXT: | Third | `2` | third |168// CHECK-EMPTY:169 170def Toc_Dialect : Dialect {171 let name = "test_toc";172 let summary = "Dialect of ops to test";173 let description = [{174 Dialect with175 176 [TOC]177 178 here.179 }];180 let cppNamespace = "NS";181}182def BOp : Op<Toc_Dialect, "b", []>;183 184// CHECK_TOC: Dialect with185// CHECK_TOC: [TOC]186// CHECK_TOC: here.187