xref: /llvm-project/mlir/test/mlir-tblgen/openmp-ops.td (revision 6568062ff1821f561c834f9f216fba0293e6f1c4)
13c9a9c73SSergio Afonso// Tablegen tests for the automatic population of OpenMP dialect operation
23c9a9c73SSergio Afonso// fields from clauses. Arguments and extra class declarations are checked from
33c9a9c73SSergio Afonso// the output of tablegen declarations. Summary, description, assembly format
43c9a9c73SSergio Afonso// and traits are checked from the output of tablegen docs.
53c9a9c73SSergio Afonso
63c9a9c73SSergio Afonso// Run tablegen to generate OmpCommon.td in temp directory first.
73c9a9c73SSergio Afonso// RUN: mkdir -p %t/mlir/Dialect/OpenMP
83c9a9c73SSergio Afonso// RUN: mlir-tblgen --gen-directive-decl --directives-dialect=OpenMP \
97333c099SChristian Sigg// RUN:   %S/../../../llvm/include/llvm/Frontend/OpenMP/OMP.td \
107333c099SChristian Sigg// RUN:   -I %S/../../../llvm/include > %t/mlir/Dialect/OpenMP/OmpCommon.td
113c9a9c73SSergio Afonso
127333c099SChristian Sigg// RUN: mlir-tblgen -gen-op-decls -I %S/../../include -I %t %s | FileCheck %s --check-prefix=DECL
137333c099SChristian Sigg// RUN: mlir-tblgen -gen-op-doc -I %S/../../include -I %t %s | FileCheck %s --check-prefix=DOC
143c9a9c73SSergio Afonso
153c9a9c73SSergio Afonsoinclude "mlir/Dialect/OpenMP/OpenMPOpBase.td"
163c9a9c73SSergio Afonso
173c9a9c73SSergio Afonso// Dummy traits.
183c9a9c73SSergio Afonso
193c9a9c73SSergio Afonsodef TraitOne : NativeOpTrait<"TraitOne">;
203c9a9c73SSergio Afonsodef TraitTwo : NativeOpTrait<"TraitTwo">;
213c9a9c73SSergio Afonsodef TraitThree : NativeOpTrait<"TraitThree">;
223c9a9c73SSergio Afonso
233c9a9c73SSergio Afonso// Test clauses.
243c9a9c73SSergio Afonso
253c9a9c73SSergio Afonsoclass OptClauseSkip<
263c9a9c73SSergio Afonso    bit traits = false, bit arguments = false, bit assemblyFormat = false,
273c9a9c73SSergio Afonso    bit description = false, bit extraClassDeclaration = false
28*6568062fSSergio Afonso  > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
29*6568062fSSergio Afonso                    extraClassDeclaration> {
303c9a9c73SSergio Afonso  let traits = [
313c9a9c73SSergio Afonso    TraitOne
323c9a9c73SSergio Afonso  ];
333c9a9c73SSergio Afonso
343c9a9c73SSergio Afonso  let arguments = (ins
353c9a9c73SSergio Afonso    Optional<AnyInteger>:$opt_simple_val
363c9a9c73SSergio Afonso  );
373c9a9c73SSergio Afonso
38*6568062fSSergio Afonso  let optAssemblyFormat = [{
393c9a9c73SSergio Afonso    `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
403c9a9c73SSergio Afonso  }];
413c9a9c73SSergio Afonso
423c9a9c73SSergio Afonso  let description = [{
433c9a9c73SSergio Afonso    Optional clause description.
443c9a9c73SSergio Afonso  }];
453c9a9c73SSergio Afonso
463c9a9c73SSergio Afonso  let extraClassDeclaration = [{
473c9a9c73SSergio Afonso    void optClauseExtraClassDecl();
483c9a9c73SSergio Afonso  }];
493c9a9c73SSergio Afonso}
503c9a9c73SSergio Afonso
513c9a9c73SSergio Afonsodef OptClause : OptClauseSkip<>;
523c9a9c73SSergio Afonso
533c9a9c73SSergio Afonsodef OptClauseTwo : OpenMP_Clause<
54*6568062fSSergio Afonso    /*skipTraits=*/false, /*skipArguments=*/false, /*skipAssemblyFormat=*/false,
55*6568062fSSergio Afonso    /*skipDescription=*/false, /*skipExtraClassDeclaration=*/false> {
563c9a9c73SSergio Afonso  let traits = [
573c9a9c73SSergio Afonso    TraitOne, TraitTwo
583c9a9c73SSergio Afonso  ];
593c9a9c73SSergio Afonso
603c9a9c73SSergio Afonso  let arguments = (ins
613c9a9c73SSergio Afonso    Optional<AnyInteger>:$opt_two_val
623c9a9c73SSergio Afonso  );
633c9a9c73SSergio Afonso
64*6568062fSSergio Afonso  let optAssemblyFormat = [{
653c9a9c73SSergio Afonso    `opt_two` `(` $opt_two_val `:` type($opt_two_val) `)`
663c9a9c73SSergio Afonso  }];
673c9a9c73SSergio Afonso
683c9a9c73SSergio Afonso  let description = [{
693c9a9c73SSergio Afonso    Optional clause two description.
703c9a9c73SSergio Afonso  }];
713c9a9c73SSergio Afonso
723c9a9c73SSergio Afonso  let extraClassDeclaration = [{
733c9a9c73SSergio Afonso    void optClauseTwoExtraClassDecl();
743c9a9c73SSergio Afonso  }];
753c9a9c73SSergio Afonso}
763c9a9c73SSergio Afonso
773c9a9c73SSergio Afonsoclass ReqClauseSkip<
783c9a9c73SSergio Afonso    bit traits = false, bit arguments = false, bit assemblyFormat = false,
793c9a9c73SSergio Afonso    bit description = false, bit extraClassDeclaration = false
80*6568062fSSergio Afonso  > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
81*6568062fSSergio Afonso                    extraClassDeclaration> {
823c9a9c73SSergio Afonso  let traits = [
833c9a9c73SSergio Afonso    TraitTwo
843c9a9c73SSergio Afonso  ];
853c9a9c73SSergio Afonso
863c9a9c73SSergio Afonso  let arguments = (ins
873c9a9c73SSergio Afonso    AnyInteger:$req_simple_val
883c9a9c73SSergio Afonso  );
893c9a9c73SSergio Afonso
90*6568062fSSergio Afonso  let reqAssemblyFormat = [{
913c9a9c73SSergio Afonso    `reqsimple` `(` $req_simple_val `:` type($req_simple_val) `)`
923c9a9c73SSergio Afonso  }];
933c9a9c73SSergio Afonso
943c9a9c73SSergio Afonso  let description = [{
953c9a9c73SSergio Afonso    Required clause description.
963c9a9c73SSergio Afonso  }];
973c9a9c73SSergio Afonso
983c9a9c73SSergio Afonso  let extraClassDeclaration = [{
993c9a9c73SSergio Afonso    void reqClauseExtraClassDecl();
1003c9a9c73SSergio Afonso  }];
1013c9a9c73SSergio Afonso}
1023c9a9c73SSergio Afonso
1033c9a9c73SSergio Afonsodef ReqClause : ReqClauseSkip<>;
1043c9a9c73SSergio Afonso
1053c9a9c73SSergio Afonsodef ReqClauseTwo : OpenMP_Clause<
106*6568062fSSergio Afonso    /*skipTraits=*/false, /*skipArguments=*/false, /*skipAssemblyFormat=*/false,
107*6568062fSSergio Afonso    /*skipDescription=*/false, /*skipExtraClassDeclaration=*/false> {
1083c9a9c73SSergio Afonso  let traits = [
1093c9a9c73SSergio Afonso    TraitTwo, TraitThree
1103c9a9c73SSergio Afonso  ];
1113c9a9c73SSergio Afonso
1123c9a9c73SSergio Afonso  let arguments = (ins
1133c9a9c73SSergio Afonso    AnyInteger:$req_two_val
1143c9a9c73SSergio Afonso  );
1153c9a9c73SSergio Afonso
116*6568062fSSergio Afonso  let reqAssemblyFormat = [{
1173c9a9c73SSergio Afonso    `req_two` `(` $req_two_val `:` type($req_two_val) `)`
1183c9a9c73SSergio Afonso  }];
1193c9a9c73SSergio Afonso
1203c9a9c73SSergio Afonso  let description = [{
1213c9a9c73SSergio Afonso    Required clause two description.
1223c9a9c73SSergio Afonso  }];
1233c9a9c73SSergio Afonso
1243c9a9c73SSergio Afonso  let extraClassDeclaration = [{
1253c9a9c73SSergio Afonso    void reqClauseTwoExtraClassDecl();
1263c9a9c73SSergio Afonso  }];
1273c9a9c73SSergio Afonso}
1283c9a9c73SSergio Afonso
1293c9a9c73SSergio Afonso// Clause-based operation definitions.
1303c9a9c73SSergio Afonso
131*6568062fSSergio Afonsodef OpAddArguments : OpenMP_Op<"op_add_arguments",
132*6568062fSSergio Afonso    traits=[AttrSizedOperandSegments], clauses=[ReqClause, OptClause]> {
133*6568062fSSergio Afonso  let summary = "operation with clauses - arguments added";
134*6568062fSSergio Afonso  let description = [{
135*6568062fSSergio Afonso    Description of operation with clauses - arguments added.
136*6568062fSSergio Afonso  }] # clausesDescription;
137*6568062fSSergio Afonso  let arguments = !con(clausesArgs, (ins Optional<AnyInteger>:$opt_added,
138*6568062fSSergio Afonso                                         AnyInteger:$req_added));
139*6568062fSSergio Afonso  let assemblyFormat = clausesReqAssemblyFormat #
140*6568062fSSergio Afonso    "`req_added` `(` $req_added `:` type($req_added) `)` oilist(" #
141*6568062fSSergio Afonso    clausesOptAssemblyFormat #
142*6568062fSSergio Afonso    "|`opt_added` `(` $opt_added `:` type($opt_added) `)`) attr-dict";
143*6568062fSSergio Afonso}
144*6568062fSSergio Afonso
145*6568062fSSergio Afonso// DECL-LABEL: class OpAddArguments : public ::mlir::Op<
146*6568062fSSergio Afonso// DECL: getReqSimpleVal() {
147*6568062fSSergio Afonso// DECL: getOptSimpleVal() {
148*6568062fSSergio Afonso// DECL: void reqClauseExtraClassDecl();
149*6568062fSSergio Afonso// DECL: void optClauseExtraClassDecl();
150*6568062fSSergio Afonso
151*6568062fSSergio Afonso// DOC-LABEL: omp::OpAddArguments
152*6568062fSSergio Afonso// DOC: _Operation with clauses - arguments added_
153*6568062fSSergio Afonso// DOC: operation ::= `omp.op_add_arguments`
154*6568062fSSergio Afonso// DOC: `reqsimple` `(` $req_simple_val `:` type($req_simple_val) `)`
155*6568062fSSergio Afonso// DOC: `req_added` `(` $req_added `:` type($req_added) `)`
156*6568062fSSergio Afonso// DOC: oilist(
157*6568062fSSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
158*6568062fSSergio Afonso// DOC: |`opt_added` `(` $opt_added `:` type($opt_added) `)`
159*6568062fSSergio Afonso// DOC-NOT: $region
160*6568062fSSergio Afonso// DOC: attr-dict
161*6568062fSSergio Afonso// DOC: Description of operation with clauses - arguments added.
162*6568062fSSergio Afonso// DOC: Required clause description.
163*6568062fSSergio Afonso// DOC: Optional clause description.
164*6568062fSSergio Afonso// DOC: Traits: `AttrSizedOperandSegments`, `TraitOne`, `TraitTwo`
165*6568062fSSergio Afonso
1663c9a9c73SSergio Afonsodef OpOptClause : OpenMP_Op<"op_with_opt",
1673c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[OptClause]> {
1683c9a9c73SSergio Afonso  let summary = "operation with optional clause";
1693c9a9c73SSergio Afonso  let description = [{
1703c9a9c73SSergio Afonso    Description of operation with optional clause.
1713c9a9c73SSergio Afonso  }] # clausesDescription;
1723c9a9c73SSergio Afonso}
1733c9a9c73SSergio Afonso
1743c9a9c73SSergio Afonso// DECL-LABEL: class OpOptClause : public ::mlir::Op<
1753c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
1763c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
1773c9a9c73SSergio Afonso
1783c9a9c73SSergio Afonso// DOC-LABEL: omp::OpOptClause
1793c9a9c73SSergio Afonso// DOC: _Operation with optional clause_
1803c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_with_opt`
1813c9a9c73SSergio Afonso// DOC: oilist(
1823c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
1833c9a9c73SSergio Afonso// DOC-NOT: $region
1843c9a9c73SSergio Afonso// DOC: attr-dict
1853c9a9c73SSergio Afonso// DOC: Description of operation with optional clause.
1863c9a9c73SSergio Afonso// DOC: Optional clause description.
1873c9a9c73SSergio Afonso// DOC: Traits: `TraitOne`, `TraitThree`
1883c9a9c73SSergio Afonso
1893c9a9c73SSergio Afonsodef OpReqClause : OpenMP_Op<"op_with_req",
1903c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[ReqClause]> {
1913c9a9c73SSergio Afonso  let summary = "operation with required clause";
1923c9a9c73SSergio Afonso  let description = [{
1933c9a9c73SSergio Afonso    Description of operation with required clause.
1943c9a9c73SSergio Afonso  }] # clausesDescription;
1953c9a9c73SSergio Afonso}
1963c9a9c73SSergio Afonso
1973c9a9c73SSergio Afonso// DECL-LABEL: class OpReqClause : public ::mlir::Op<
1983c9a9c73SSergio Afonso// DECL: getReqSimpleVal() {
1993c9a9c73SSergio Afonso// DECL: void reqClauseExtraClassDecl();
2003c9a9c73SSergio Afonso
2013c9a9c73SSergio Afonso// DOC-LABEL: omp::OpReqClause
2023c9a9c73SSergio Afonso// DOC: _Operation with required clause_
2033c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_with_req`
2043c9a9c73SSergio Afonso// DOC-NOT: oilist(
2053c9a9c73SSergio Afonso// DOC: `reqsimple` `(` $req_simple_val `:` type($req_simple_val) `)`
2063c9a9c73SSergio Afonso// DOC-NOT: $region
2073c9a9c73SSergio Afonso// DOC: attr-dict
2083c9a9c73SSergio Afonso// DOC: Description of operation with required clause.
2093c9a9c73SSergio Afonso// DOC: Required clause description.
2103c9a9c73SSergio Afonso// DOC: Traits: `TraitThree`, `TraitTwo`
2113c9a9c73SSergio Afonso
2123c9a9c73SSergio Afonsodef OpReqOptClause : OpenMP_Op<"op_with_req_and_opt",
2133c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[ReqClause, OptClause]> {
2143c9a9c73SSergio Afonso  let summary = "operation with required and optional clauses";
2153c9a9c73SSergio Afonso  let description = [{
2163c9a9c73SSergio Afonso    Description of operation with required and optional clauses.
2173c9a9c73SSergio Afonso  }] # clausesDescription;
2183c9a9c73SSergio Afonso}
2193c9a9c73SSergio Afonso
2203c9a9c73SSergio Afonso// DECL-LABEL: class OpReqOptClause : public ::mlir::Op<
2213c9a9c73SSergio Afonso// DECL: getReqSimpleVal() {
2223c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
2233c9a9c73SSergio Afonso// DECL: void reqClauseExtraClassDecl();
2243c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
2253c9a9c73SSergio Afonso
2263c9a9c73SSergio Afonso// DOC-LABEL: omp::OpReqOptClause
2273c9a9c73SSergio Afonso// DOC: _Operation with required and optional clauses_
2283c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_with_req_and_opt`
2293c9a9c73SSergio Afonso// DOC: `reqsimple` `(` $req_simple_val `:` type($req_simple_val) `)`
2303c9a9c73SSergio Afonso// DOC: oilist(
2313c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
2323c9a9c73SSergio Afonso// DOC-NOT: $region
2333c9a9c73SSergio Afonso// DOC: attr-dict
2343c9a9c73SSergio Afonso// DOC: Description of operation with required and optional clauses.
2353c9a9c73SSergio Afonso// DOC: Required clause description.
2363c9a9c73SSergio Afonso// DOC: Optional clause description.
2373c9a9c73SSergio Afonso// DOC: Traits: `TraitOne`, `TraitThree`, `TraitTwo`
2383c9a9c73SSergio Afonso
2393c9a9c73SSergio Afonsodef OpSingleRegion : OpenMP_Op<"op_single_region",
2403c9a9c73SSergio Afonso    clauses=[OptClause], singleRegion=true> {
2413c9a9c73SSergio Afonso  let summary = "operation with a single region";
2423c9a9c73SSergio Afonso  let description = [{
2433c9a9c73SSergio Afonso    Description of operation with a single region.
2443c9a9c73SSergio Afonso  }] # clausesDescription;
2453c9a9c73SSergio Afonso}
2463c9a9c73SSergio Afonso
2473c9a9c73SSergio Afonso// DECL-LABEL: class OpSingleRegion : public ::mlir::Op<
2483c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
2493c9a9c73SSergio Afonso// DECL: getRegion() {
2503c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
2513c9a9c73SSergio Afonso
2523c9a9c73SSergio Afonso// DOC-LABEL: omp::OpSingleRegion
2533c9a9c73SSergio Afonso// DOC: _Operation with a single region_
2543c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_single_region`
2553c9a9c73SSergio Afonso// DOC: oilist(
2563c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
2573c9a9c73SSergio Afonso// DOC: ) $region attr-dict
2583c9a9c73SSergio Afonso// DOC: Description of operation with a single region.
2593c9a9c73SSergio Afonso// DOC: Optional clause description.
2603c9a9c73SSergio Afonso// DOC: Traits: `TraitOne`
2613c9a9c73SSergio Afonso
2623c9a9c73SSergio Afonsodef OpSkipArguments : OpenMP_Op<"op_skip_arguments",
2633c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[OptClauseSkip<arguments=true>]> {
2643c9a9c73SSergio Afonso  let summary = "operation with clause - arguments skipped";
2653c9a9c73SSergio Afonso  let description = [{
2663c9a9c73SSergio Afonso    Description of operation with clause - arguments skipped.
2673c9a9c73SSergio Afonso  }] # clausesDescription;
2683c9a9c73SSergio Afonso  let arguments = !con(clausesArgs, (ins Optional<AnyInteger>:$opt_simple_val));
2693c9a9c73SSergio Afonso}
2703c9a9c73SSergio Afonso
2713c9a9c73SSergio Afonso// DECL-LABEL: class OpSkipArguments : public ::mlir::Op<
2723c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
2733c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
2743c9a9c73SSergio Afonso
2753c9a9c73SSergio Afonso// DOC-LABEL: omp::OpSkipArguments
2763c9a9c73SSergio Afonso// DOC: _Operation with clause - arguments skipped_
2773c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_skip_arguments`
2783c9a9c73SSergio Afonso// DOC: oilist(
2793c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
2803c9a9c73SSergio Afonso// DOC-NOT: $region
2813c9a9c73SSergio Afonso// DOC: attr-dict
2823c9a9c73SSergio Afonso// DOC: Description of operation with clause - arguments skipped.
2833c9a9c73SSergio Afonso// DOC: Optional clause description.
2843c9a9c73SSergio Afonso// DOC: Traits: `TraitOne`, `TraitThree`
2853c9a9c73SSergio Afonso
2863c9a9c73SSergio Afonsodef OpSkipAssemblyFormat : OpenMP_Op<"op_skip_assembly_format",
2873c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[ReqClauseSkip<assemblyFormat=true>,
2883c9a9c73SSergio Afonso                                  OptClause]> {
2893c9a9c73SSergio Afonso  let summary = "operation with clauses - assemblyFormat skipped";
2903c9a9c73SSergio Afonso  let description = [{
2913c9a9c73SSergio Afonso    Description of operation with clauses - assemblyFormat skipped.
2923c9a9c73SSergio Afonso  }] # clausesDescription;
2933c9a9c73SSergio Afonso  let assemblyFormat = [{
2943c9a9c73SSergio Afonso    `alt_assembly_format` `(` $req_simple_val `:` type($req_simple_val) `)`
2953c9a9c73SSergio Afonso  }] # clausesAssemblyFormat # "attr-dict";
2963c9a9c73SSergio Afonso}
2973c9a9c73SSergio Afonso
2983c9a9c73SSergio Afonso// DECL-LABEL: class OpSkipAssemblyFormat : public ::mlir::Op<
2993c9a9c73SSergio Afonso// DECL: getReqSimpleVal() {
3003c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
3013c9a9c73SSergio Afonso// DECL: void reqClauseExtraClassDecl();
3023c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
3033c9a9c73SSergio Afonso
3043c9a9c73SSergio Afonso// DOC-LABEL: omp::OpSkipAssemblyFormat
3053c9a9c73SSergio Afonso// DOC: _Operation with clauses - assemblyFormat skipped_
3063c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_skip_assembly_format`
3073c9a9c73SSergio Afonso// DOC: `alt_assembly_format` `(` $req_simple_val `:` type($req_simple_val) `)`
3083c9a9c73SSergio Afonso// DOC: oilist(
3093c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
3103c9a9c73SSergio Afonso// DOC-NOT: $region
3113c9a9c73SSergio Afonso// DOC: attr-dict
3123c9a9c73SSergio Afonso// DOC: Description of operation with clauses - assemblyFormat skipped.
3133c9a9c73SSergio Afonso// DOC: Required clause description.
3143c9a9c73SSergio Afonso// DOC: Optional clause description.
3153c9a9c73SSergio Afonso// DOC: Traits: `TraitOne`, `TraitThree`
3163c9a9c73SSergio Afonso
3173c9a9c73SSergio Afonsodef OpSkipDescription : OpenMP_Op<"op_skip_description",
3183c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[OptClauseSkip<description=true>]> {
3193c9a9c73SSergio Afonso  let summary = "operation with clause - description skipped";
3203c9a9c73SSergio Afonso  let description = [{
3213c9a9c73SSergio Afonso    Description of operation with clause - description skipped.
3223c9a9c73SSergio Afonso  }] # clausesDescription;
3233c9a9c73SSergio Afonso}
3243c9a9c73SSergio Afonso
3253c9a9c73SSergio Afonso// DECL-LABEL: class OpSkipDescription : public ::mlir::Op<
3263c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
3273c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
3283c9a9c73SSergio Afonso
3293c9a9c73SSergio Afonso// DOC-LABEL: omp::OpSkipDescription
3303c9a9c73SSergio Afonso// DOC: _Operation with clause - description skipped_
3313c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_skip_description`
3323c9a9c73SSergio Afonso// DOC: oilist(
3333c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
3343c9a9c73SSergio Afonso// DOC-NOT: $region
3353c9a9c73SSergio Afonso// DOC: attr-dict
3363c9a9c73SSergio Afonso// DOC: Description of operation with clause - description skipped.
3373c9a9c73SSergio Afonso// DOC-NOT: Optional clause description.
3383c9a9c73SSergio Afonso// DOC: Traits: `TraitOne`, `TraitThree`
3393c9a9c73SSergio Afonso
3403c9a9c73SSergio Afonsodef OpSkipExtraClassDeclaration : OpenMP_Op<"op_skip_extra_class_declaration",
3413c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[OptClauseSkip<extraClassDeclaration=true>]> {
3423c9a9c73SSergio Afonso  let summary = "operation with clause - extraClassDeclaration skipped";
3433c9a9c73SSergio Afonso  let description = [{
3443c9a9c73SSergio Afonso    Description of operation with clause - extraClassDeclaration skipped.
3453c9a9c73SSergio Afonso  }] # clausesDescription;
3463c9a9c73SSergio Afonso}
3473c9a9c73SSergio Afonso
3483c9a9c73SSergio Afonso// DECL-LABEL: class OpSkipExtraClassDeclaration : public ::mlir::Op<
3493c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
3503c9a9c73SSergio Afonso// DECL-NOT: void optClauseExtraClassDecl();
3513c9a9c73SSergio Afonso
3523c9a9c73SSergio Afonso// DOC-LABEL: omp::OpSkipExtraClassDeclaration
3533c9a9c73SSergio Afonso// DOC: _Operation with clause - extraClassDeclaration skipped_
3543c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_skip_extra_class_declaration`
3553c9a9c73SSergio Afonso// DOC: oilist(
3563c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
3573c9a9c73SSergio Afonso// DOC-NOT: $region
3583c9a9c73SSergio Afonso// DOC: attr-dict
3593c9a9c73SSergio Afonso// DOC: Description of operation with clause - extraClassDeclaration skipped.
3603c9a9c73SSergio Afonso// DOC: Optional clause description.
3613c9a9c73SSergio Afonso// DOC: Traits: `TraitOne`, `TraitThree`
3623c9a9c73SSergio Afonso
3633c9a9c73SSergio Afonsodef OpSkipTraits : OpenMP_Op<"op_skip_traits",
3643c9a9c73SSergio Afonso    traits=[TraitThree], clauses=[OptClauseSkip<traits=true>]> {
3653c9a9c73SSergio Afonso  let summary = "operation with clause - traits skipped";
3663c9a9c73SSergio Afonso  let description = [{
3673c9a9c73SSergio Afonso    Description of operation with clause - traits skipped.
3683c9a9c73SSergio Afonso  }] # clausesDescription;
3693c9a9c73SSergio Afonso}
3703c9a9c73SSergio Afonso
3713c9a9c73SSergio Afonso// DECL-LABEL: class OpSkipTraits : public ::mlir::Op<
3723c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
3733c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
3743c9a9c73SSergio Afonso
3753c9a9c73SSergio Afonso// DOC-LABEL: omp::OpSkipTraits
3763c9a9c73SSergio Afonso// DOC: _Operation with clause - traits skipped_
3773c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_skip_traits`
3783c9a9c73SSergio Afonso// DOC: oilist(
3793c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
3803c9a9c73SSergio Afonso// DOC-NOT: $region
3813c9a9c73SSergio Afonso// DOC: attr-dict
3823c9a9c73SSergio Afonso// DOC: Description of operation with clause - traits skipped.
3833c9a9c73SSergio Afonso// DOC: Optional clause description.
3843c9a9c73SSergio Afonso// DOC: Traits: `TraitThree`
3853c9a9c73SSergio Afonso
3863c9a9c73SSergio Afonsodef OpTwoOptionalClauses : OpenMP_Op<"op_two_opt_clauses",
3873c9a9c73SSergio Afonso    traits=[AttrSizedOperandSegments], clauses=[OptClause, OptClauseTwo]> {
3883c9a9c73SSergio Afonso  let summary = "operation with two optional clauses";
3893c9a9c73SSergio Afonso  let description = [{
3903c9a9c73SSergio Afonso    Description of operation with two optional clauses.
3913c9a9c73SSergio Afonso  }] # clausesDescription;
3923c9a9c73SSergio Afonso}
3933c9a9c73SSergio Afonso
3943c9a9c73SSergio Afonso// DECL-LABEL: class OpTwoOptionalClauses : public ::mlir::Op<
3953c9a9c73SSergio Afonso// DECL: getOptSimpleVal() {
3963c9a9c73SSergio Afonso// DECL: getOptTwoVal() {
3973c9a9c73SSergio Afonso// DECL: void optClauseExtraClassDecl();
3983c9a9c73SSergio Afonso// DECL: void optClauseTwoExtraClassDecl();
3993c9a9c73SSergio Afonso
4003c9a9c73SSergio Afonso// DOC-LABEL: omp::OpTwoOptionalClauses
4013c9a9c73SSergio Afonso// DOC: _Operation with two optional clauses_
4023c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_two_opt_clauses`
4033c9a9c73SSergio Afonso// DOC: oilist(
4043c9a9c73SSergio Afonso// DOC: `optsimple` `(` $opt_simple_val `:` type($opt_simple_val) `)`
4053c9a9c73SSergio Afonso// DOC: |
4063c9a9c73SSergio Afonso// DOC: `opt_two` `(` $opt_two_val `:` type($opt_two_val) `)`
4073c9a9c73SSergio Afonso// DOC-NOT: $region
4083c9a9c73SSergio Afonso// DOC: attr-dict
4093c9a9c73SSergio Afonso// DOC: Description of operation with two optional clauses.
4103c9a9c73SSergio Afonso// DOC: Optional clause description.
4113c9a9c73SSergio Afonso// DOC: Optional clause two description.
4123c9a9c73SSergio Afonso// DOC: Traits: `AttrSizedOperandSegments`, `TraitOne`, `TraitTwo`
4133c9a9c73SSergio Afonso
4143c9a9c73SSergio Afonsodef OpTwoRequiredClauses : OpenMP_Op<"op_two_req_clauses",
4153c9a9c73SSergio Afonso    clauses=[ReqClause, ReqClauseTwo]> {
4163c9a9c73SSergio Afonso  let summary = "operation with two required clauses";
4173c9a9c73SSergio Afonso  let description = [{
4183c9a9c73SSergio Afonso    Description of operation with two required clauses.
4193c9a9c73SSergio Afonso  }] # clausesDescription;
4203c9a9c73SSergio Afonso}
4213c9a9c73SSergio Afonso
4223c9a9c73SSergio Afonso// DECL-LABEL: class OpTwoRequiredClauses : public ::mlir::Op<
4233c9a9c73SSergio Afonso// DECL: getReqSimpleVal() {
4243c9a9c73SSergio Afonso// DECL: getReqTwoVal() {
4253c9a9c73SSergio Afonso// DECL: void reqClauseExtraClassDecl();
4263c9a9c73SSergio Afonso// DECL: void reqClauseTwoExtraClassDecl();
4273c9a9c73SSergio Afonso
4283c9a9c73SSergio Afonso// DOC-LABEL: omp::OpTwoRequiredClauses
4293c9a9c73SSergio Afonso// DOC: _Operation with two required clauses_
4303c9a9c73SSergio Afonso// DOC: operation ::= `omp.op_two_req_clauses`
4313c9a9c73SSergio Afonso// DOC-NOT: oilist(
4323c9a9c73SSergio Afonso// DOC: `reqsimple` `(` $req_simple_val `:` type($req_simple_val) `)`
4333c9a9c73SSergio Afonso// DOC-NOT: |
4343c9a9c73SSergio Afonso// DOC: `req_two` `(` $req_two_val `:` type($req_two_val) `)`
4353c9a9c73SSergio Afonso// DOC-NOT: $region
4363c9a9c73SSergio Afonso// DOC: attr-dict
4373c9a9c73SSergio Afonso// DOC: Description of operation with two required clauses.
4383c9a9c73SSergio Afonso// DOC: Required clause description.
4393c9a9c73SSergio Afonso// DOC: Required clause two description.
4403c9a9c73SSergio Afonso// DOC: Traits: `TraitThree`, `TraitTwo`
4413c9a9c73SSergio Afonso
4423c9a9c73SSergio Afonsodef OpZeroClauses : OpenMP_Op<"op_zero_clauses"> {
4433c9a9c73SSergio Afonso  let summary = "operation with no clauses";
4443c9a9c73SSergio Afonso  let description = [{
4453c9a9c73SSergio Afonso    Description of operation with no clauses.
4463c9a9c73SSergio Afonso  }] # clausesDescription;
4473c9a9c73SSergio Afonso}
4483c9a9c73SSergio Afonso
4493c9a9c73SSergio Afonso// DECL-LABEL: class OpZeroClauses : public ::mlir::Op<
4503c9a9c73SSergio Afonso// DECL: static void build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState);
4513c9a9c73SSergio Afonso
4523c9a9c73SSergio Afonso// DOC-LABEL: omp::OpZeroClauses
4533c9a9c73SSergio Afonso// DOC: _Operation with no clauses_
4543c9a9c73SSergio Afonso// DOC-NOT: operation ::=
4553c9a9c73SSergio Afonso// DOC: Description of operation with no clauses.
4563c9a9c73SSergio Afonso// DOC-NOT: Traits:
457