[clang-tidy][NFC]remove deps of clang in clang tidy test (#116588)
[llvm-project.git] / mlir / test / mlir-tblgen / openmp-ops-verify.td
blobdc8bc4bdbe2e785b75161b874ba8c61d34c77594
1 // Tablegen tests for the verification of clause-based OpenMP dialect operation
2 // definitions.
4 // Run tablegen to generate OmpCommon.td in temp directory first.
5 // RUN: mkdir -p %t/mlir/Dialect/OpenMP
6 // RUN: mlir-tblgen --gen-directive-decl --directives-dialect=OpenMP \
7 // RUN:   %S/../../../llvm/include/llvm/Frontend/OpenMP/OMP.td \
8 // RUN:   -I %S/../../../llvm/include > %t/mlir/Dialect/OpenMP/OmpCommon.td
10 // RUN: not mlir-tblgen -verify-openmp-ops -I %S/../../include -I %t %s 2>&1 | FileCheck %s
12 include "mlir/Dialect/OpenMP/OpenMPOpBase.td"
15 def OpenMP_SimpleClause : OpenMP_Clause<
16     /*traits=*/false, /*arguments=*/false, /*assemblyFormat=*/false,
17     /*description=*/false, /*extraClassDeclaration=*/false> {
18   let arguments = (ins I32:$val1);
19   let reqAssemblyFormat = "`val1` `(` $val1 `)`";
20   let description = "Simple clause description.";
21   let extraClassDeclaration = "void simpleClauseExtraClassDecl();";
25 // -----------------------------------------------------------------------------
26 // Verify errors / warnings for overriding each field.
27 // -----------------------------------------------------------------------------
29 def 1OverrideArgsOp : OpenMP_Op<"op", clauses=[OpenMP_SimpleClause]> {
30   let description = "Description of operation." # clausesDescription;
31   dag arguments = (ins I32:$myval);
33 // CHECK: warning: 'Simple' clause-defined argument 'I32:$val1' not present in operation.
34 // CHECK-SAME: Consider `dag arguments = !con(clausesArgs, ...)` or explicitly skipping this field.
35 // CHECK-NEXT: def 1OverrideArgsOp
37 def 2OverrideAssemblyFormatOp : OpenMP_Op<"op", clauses=[OpenMP_SimpleClause]> {
38   let description = "Description of operation." # clausesDescription;
39   string assemblyFormat = "`alt_repr` `(` $val1 `)`";
41 // CHECK: warning: 'Simple' clause-defined `reqAssemblyFormat` not present in operation.
42 // CHECK-SAME: Consider concatenating `clauses[{Req,Opt}]AssemblyFormat` or explicitly skipping this field.
43 // CHECK-NEXT: def 2OverrideAssemblyFormatOp
45 def 3OverrideDescriptionOp : OpenMP_Op<"op", clauses=[OpenMP_SimpleClause]> {
46   let description = "Description of operation.";
48 // CHECK: error: 'Simple' clause-defined `description` not present in operation.
49 // CHECK-SAME: Consider concatenating `clausesDescription` or explicitly skipping this field.
50 // CHECK-NEXT: def 3OverrideDescriptionOp
52 def 4OverrideExtraClassDeclarationOp : OpenMP_Op<"op", clauses=[OpenMP_SimpleClause]> {
53   let description = "Description of operation." # clausesDescription;
54   string extraClassDeclaration = "";
56 // CHECK: warning: 'Simple' clause-defined `extraClassDeclaration` not present in operation.
57 // CHECK-SAME: Consider concatenating `clausesExtraClassDeclaration` or explicitly skipping this field.
58 // CHECK-NEXT: def 4OverrideExtraClassDeclarationOp
61 // -----------------------------------------------------------------------------
62 // Verify that reporting is correct when OpenMP_Clause is inherited indirectly.
63 // -----------------------------------------------------------------------------
65 class OpenMP_IndirectClauseSkip<
66     bit traits = false, bit arguments = false, bit assemblyFormat = false,
67     bit description = false, bit extraClassDeclaration = false
68   > : OpenMP_Clause<traits, arguments, assemblyFormat, description,
69                     extraClassDeclaration> {
70   let arguments = (ins I32:$val2);
71   let reqAssemblyFormat = "`val2` `(` $val2 `)`";
72   let description = "Indirectly-inherited clause description.";
73   let extraClassDeclaration = "void indirectClauseExtraClassDecl();";
76 def IndirectClause : OpenMP_IndirectClauseSkip<>;
78 def 5IndirectClauseOp : OpenMP_Op<"op", clauses=[IndirectClause]> {
79   let description = "Description of operation." # clausesDescription;
80   dag arguments = (ins I32:$myval);
82 // CHECK: warning: 'Indirect' clause-defined argument 'I32:$val2' not present in operation.
83 // CHECK-NEXT: def 5IndirectClauseOp
86 // -----------------------------------------------------------------------------
87 // Verify that multiple clauses are taken into account.
88 // -----------------------------------------------------------------------------
90 def 6MultiClauseOp : OpenMP_Op<"op", clauses=[OpenMP_SimpleClause, IndirectClause]> {
91   let description = "Description of operation." # clausesDescription;
92   let arguments = (ins I32:$val1);
93   let assemblyFormat = "`val2` `(` $val2 `)`";
95 // CHECK: warning: 'Simple' clause-defined `reqAssemblyFormat` not present in operation.
96 // CHECK-NEXT: def 6MultiClauseOp
97 // CHECK: warning: 'Indirect' clause-defined argument 'I32:$val2' not present in operation.
98 // CHECK-NEXT: def 6MultiClauseOp
101 // -----------------------------------------------------------------------------
102 // Verify that reporting is correct when clause definitions have other
103 // superclasses in addition to OpenMP_Clause.
104 // -----------------------------------------------------------------------------
106 class Placeholder {}
107 def MultiSuperClassClause : Placeholder, OpenMP_IndirectClauseSkip<>;
109 def 7MultiSuperClassClauseOp : OpenMP_Op<"op", clauses=[IndirectClause]> {
110   let description = "Description of operation." # clausesDescription;
111   dag arguments = (ins I32:$myval);
113 // CHECK: warning: 'Indirect' clause-defined argument 'I32:$val2' not present in operation.
114 // CHECK-NEXT: def 7MultiSuperClassClauseOp
117 // -----------------------------------------------------------------------------
118 // Verify that no errors are produced if the field being overriden is also
119 // skipped for the clause.
120 // -----------------------------------------------------------------------------
122 def SkipArgsOp : OpenMP_Op<"op",
123     clauses=[OpenMP_IndirectClauseSkip<arguments=true>]> {
124   let description = "Description of operation." # clausesDescription;
125   dag arguments = (ins I32:$myval);
127 def SkipAssemblyFormatOp : OpenMP_Op<"op",
128     clauses=[OpenMP_IndirectClauseSkip<assemblyFormat=true>]> {
129   let description = "Description of operation." # clausesDescription;
130   string assemblyFormat = "`alt_repr` `(` $val1 `)`";
132 def SkipDescriptionOp : OpenMP_Op<"op",
133     clauses=[OpenMP_IndirectClauseSkip<description=true>]> {
134   let description = "Description of operation.";
136 def SkipExtraClassDeclarationOp : OpenMP_Op<"op",
137     clauses=[OpenMP_IndirectClauseSkip<extraClassDeclaration=true>]> {
138   let description = "Description of operation." # clausesDescription;
139   string extraClassDeclaration = "";
141 // CHECK-NOT: error:
142 // CHECK-NOT: warning: