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