xref: /llvm-project-15.0.7/mlir/test/CAPI/pdl.c (revision 4e00a192)
1 //===- pdl.c - Test of PDL dialect C API ----------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM
4 // Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // RUN: mlir-capi-pdl-test 2>&1 | FileCheck %s
11 
12 #include "mlir-c/Dialect/PDL.h"
13 #include "mlir-c/BuiltinTypes.h"
14 #include "mlir-c/IR.h"
15 
16 #include <assert.h>
17 #include <inttypes.h>
18 #include <stdio.h>
19 #include <stdlib.h>
20 
21 // CHECK-LABEL: testAttributeType
22 void testAttributeType(MlirContext ctx) {
23   fprintf(stderr, "testAttributeType\n");
24 
25   MlirType parsedType = mlirTypeParseGet(
26       ctx, mlirStringRefCreateFromCString("!pdl.attribute"));
27   MlirType constructedType = mlirPDLAttributeTypeGet(ctx);
28 
29   assert(!mlirTypeIsNull(parsedType) && "couldn't parse PDLAttributeType");
30   assert(!mlirTypeIsNull(constructedType) && "couldn't construct PDLAttributeType");
31 
32   // CHECK: parsedType isa PDLType: 1
33   fprintf(stderr, "parsedType isa PDLType: %d\n",
34       mlirTypeIsAPDLType(parsedType));
35   // CHECK: parsedType isa PDLAttributeType: 1
36   fprintf(stderr, "parsedType isa PDLAttributeType: %d\n",
37       mlirTypeIsAPDLAttributeType(parsedType));
38   // CHECK: parsedType isa PDLOperationType: 0
39   fprintf(stderr, "parsedType isa PDLOperationType: %d\n",
40       mlirTypeIsAPDLOperationType(parsedType));
41   // CHECK: parsedType isa PDLRangeType: 0
42   fprintf(stderr, "parsedType isa PDLRangeType: %d\n",
43       mlirTypeIsAPDLRangeType(parsedType));
44   // CHECK: parsedType isa PDLTypeType: 0
45   fprintf(stderr, "parsedType isa PDLTypeType: %d\n",
46       mlirTypeIsAPDLTypeType(parsedType));
47   // CHECK: parsedType isa PDLValueType: 0
48   fprintf(stderr, "parsedType isa PDLValueType: %d\n",
49       mlirTypeIsAPDLValueType(parsedType));
50 
51   // CHECK: constructedType isa PDLType: 1
52   fprintf(stderr, "constructedType isa PDLType: %d\n",
53       mlirTypeIsAPDLType(constructedType));
54   // CHECK: constructedType isa PDLAttributeType: 1
55   fprintf(stderr, "constructedType isa PDLAttributeType: %d\n",
56       mlirTypeIsAPDLAttributeType(constructedType));
57   // CHECK: constructedType isa PDLOperationType: 0
58   fprintf(stderr, "constructedType isa PDLOperationType: %d\n",
59       mlirTypeIsAPDLOperationType(constructedType));
60   // CHECK: constructedType isa PDLRangeType: 0
61   fprintf(stderr, "constructedType isa PDLRangeType: %d\n",
62       mlirTypeIsAPDLRangeType(constructedType));
63   // CHECK: constructedType isa PDLTypeType: 0
64   fprintf(stderr, "constructedType isa PDLTypeType: %d\n",
65       mlirTypeIsAPDLTypeType(constructedType));
66   // CHECK: constructedType isa PDLValueType: 0
67   fprintf(stderr, "constructedType isa PDLValueType: %d\n",
68       mlirTypeIsAPDLValueType(constructedType));
69 
70   // CHECK: equal: 1
71   fprintf(stderr, "equal: %d\n", mlirTypeEqual(parsedType, constructedType));
72 
73   // CHECK: !pdl.attribute
74   mlirTypeDump(parsedType);
75   // CHECK: !pdl.attribute
76   mlirTypeDump(constructedType);
77 
78   fprintf(stderr, "\n\n");
79 }
80 
81 // CHECK-LABEL: testOperationType
82 void testOperationType(MlirContext ctx) {
83   fprintf(stderr, "testOperationType\n");
84 
85   MlirType parsedType = mlirTypeParseGet(
86       ctx, mlirStringRefCreateFromCString("!pdl.operation"));
87   MlirType constructedType = mlirPDLOperationTypeGet(ctx);
88 
89   assert(!mlirTypeIsNull(parsedType) && "couldn't parse PDLAttributeType");
90   assert(!mlirTypeIsNull(constructedType) && "couldn't construct PDLAttributeType");
91 
92   // CHECK: parsedType isa PDLType: 1
93   fprintf(stderr, "parsedType isa PDLType: %d\n",
94       mlirTypeIsAPDLType(parsedType));
95   // CHECK: parsedType isa PDLAttributeType: 0
96   fprintf(stderr, "parsedType isa PDLAttributeType: %d\n",
97       mlirTypeIsAPDLAttributeType(parsedType));
98   // CHECK: parsedType isa PDLOperationType: 1
99   fprintf(stderr, "parsedType isa PDLOperationType: %d\n",
100       mlirTypeIsAPDLOperationType(parsedType));
101   // CHECK: parsedType isa PDLRangeType: 0
102   fprintf(stderr, "parsedType isa PDLRangeType: %d\n",
103       mlirTypeIsAPDLRangeType(parsedType));
104   // CHECK: parsedType isa PDLTypeType: 0
105   fprintf(stderr, "parsedType isa PDLTypeType: %d\n",
106       mlirTypeIsAPDLTypeType(parsedType));
107   // CHECK: parsedType isa PDLValueType: 0
108   fprintf(stderr, "parsedType isa PDLValueType: %d\n",
109       mlirTypeIsAPDLValueType(parsedType));
110 
111   // CHECK: constructedType isa PDLType: 1
112   fprintf(stderr, "constructedType isa PDLType: %d\n",
113       mlirTypeIsAPDLType(constructedType));
114   // CHECK: constructedType isa PDLAttributeType: 0
115   fprintf(stderr, "constructedType isa PDLAttributeType: %d\n",
116       mlirTypeIsAPDLAttributeType(constructedType));
117   // CHECK: constructedType isa PDLOperationType: 1
118   fprintf(stderr, "constructedType isa PDLOperationType: %d\n",
119       mlirTypeIsAPDLOperationType(constructedType));
120   // CHECK: constructedType isa PDLRangeType: 0
121   fprintf(stderr, "constructedType isa PDLRangeType: %d\n",
122       mlirTypeIsAPDLRangeType(constructedType));
123   // CHECK: constructedType isa PDLTypeType: 0
124   fprintf(stderr, "constructedType isa PDLTypeType: %d\n",
125       mlirTypeIsAPDLTypeType(constructedType));
126   // CHECK: constructedType isa PDLValueType: 0
127   fprintf(stderr, "constructedType isa PDLValueType: %d\n",
128       mlirTypeIsAPDLValueType(constructedType));
129 
130   // CHECK: equal: 1
131   fprintf(stderr, "equal: %d\n", mlirTypeEqual(parsedType, constructedType));
132 
133   // CHECK: !pdl.operation
134   mlirTypeDump(parsedType);
135   // CHECK: !pdl.operation
136   mlirTypeDump(constructedType);
137 
138   fprintf(stderr, "\n\n");
139 }
140 
141 // CHECK-LABEL: testRangeType
142 void testRangeType(MlirContext ctx) {
143   fprintf(stderr, "testRangeType\n");
144 
145   MlirType typeType = mlirPDLTypeTypeGet(ctx);
146   MlirType parsedType = mlirTypeParseGet(
147       ctx, mlirStringRefCreateFromCString("!pdl.range<type>"));
148   MlirType constructedType = mlirPDLRangeTypeGet(typeType);
149 
150   assert(!mlirTypeIsNull(typeType) && "couldn't get PDLTypeType");
151   assert(!mlirTypeIsNull(parsedType) && "couldn't parse PDLAttributeType");
152   assert(!mlirTypeIsNull(constructedType) && "couldn't construct PDLAttributeType");
153 
154   // CHECK: parsedType isa PDLType: 1
155   fprintf(stderr, "parsedType isa PDLType: %d\n",
156       mlirTypeIsAPDLType(parsedType));
157   // CHECK: parsedType isa PDLAttributeType: 0
158   fprintf(stderr, "parsedType isa PDLAttributeType: %d\n",
159       mlirTypeIsAPDLAttributeType(parsedType));
160   // CHECK: parsedType isa PDLOperationType: 0
161   fprintf(stderr, "parsedType isa PDLOperationType: %d\n",
162       mlirTypeIsAPDLOperationType(parsedType));
163   // CHECK: parsedType isa PDLRangeType: 1
164   fprintf(stderr, "parsedType isa PDLRangeType: %d\n",
165       mlirTypeIsAPDLRangeType(parsedType));
166   // CHECK: parsedType isa PDLTypeType: 0
167   fprintf(stderr, "parsedType isa PDLTypeType: %d\n",
168       mlirTypeIsAPDLTypeType(parsedType));
169   // CHECK: parsedType isa PDLValueType: 0
170   fprintf(stderr, "parsedType isa PDLValueType: %d\n",
171       mlirTypeIsAPDLValueType(parsedType));
172 
173   // CHECK: constructedType isa PDLType: 1
174   fprintf(stderr, "constructedType isa PDLType: %d\n",
175       mlirTypeIsAPDLType(constructedType));
176   // CHECK: constructedType isa PDLAttributeType: 0
177   fprintf(stderr, "constructedType isa PDLAttributeType: %d\n",
178       mlirTypeIsAPDLAttributeType(constructedType));
179   // CHECK: constructedType isa PDLOperationType: 0
180   fprintf(stderr, "constructedType isa PDLOperationType: %d\n",
181       mlirTypeIsAPDLOperationType(constructedType));
182   // CHECK: constructedType isa PDLRangeType: 1
183   fprintf(stderr, "constructedType isa PDLRangeType: %d\n",
184       mlirTypeIsAPDLRangeType(constructedType));
185   // CHECK: constructedType isa PDLTypeType: 0
186   fprintf(stderr, "constructedType isa PDLTypeType: %d\n",
187       mlirTypeIsAPDLTypeType(constructedType));
188   // CHECK: constructedType isa PDLValueType: 0
189   fprintf(stderr, "constructedType isa PDLValueType: %d\n",
190       mlirTypeIsAPDLValueType(constructedType));
191 
192   // CHECK: equal: 1
193   fprintf(stderr, "equal: %d\n", mlirTypeEqual(parsedType, constructedType));
194 
195   // CHECK: !pdl.range<type>
196   mlirTypeDump(parsedType);
197   // CHECK: !pdl.range<type>
198   mlirTypeDump(constructedType);
199 
200   fprintf(stderr, "\n\n");
201 }
202 
203 // CHECK-LABEL: testTypeType
204 void testTypeType(MlirContext ctx) {
205   fprintf(stderr, "testTypeType\n");
206 
207   MlirType parsedType = mlirTypeParseGet(
208       ctx, mlirStringRefCreateFromCString("!pdl.type"));
209   MlirType constructedType = mlirPDLTypeTypeGet(ctx);
210 
211   assert(!mlirTypeIsNull(parsedType) && "couldn't parse PDLAttributeType");
212   assert(!mlirTypeIsNull(constructedType) && "couldn't construct PDLAttributeType");
213 
214   // CHECK: parsedType isa PDLType: 1
215   fprintf(stderr, "parsedType isa PDLType: %d\n",
216       mlirTypeIsAPDLType(parsedType));
217   // CHECK: parsedType isa PDLAttributeType: 0
218   fprintf(stderr, "parsedType isa PDLAttributeType: %d\n",
219       mlirTypeIsAPDLAttributeType(parsedType));
220   // CHECK: parsedType isa PDLOperationType: 0
221   fprintf(stderr, "parsedType isa PDLOperationType: %d\n",
222       mlirTypeIsAPDLOperationType(parsedType));
223   // CHECK: parsedType isa PDLRangeType: 0
224   fprintf(stderr, "parsedType isa PDLRangeType: %d\n",
225       mlirTypeIsAPDLRangeType(parsedType));
226   // CHECK: parsedType isa PDLTypeType: 1
227   fprintf(stderr, "parsedType isa PDLTypeType: %d\n",
228       mlirTypeIsAPDLTypeType(parsedType));
229   // CHECK: parsedType isa PDLValueType: 0
230   fprintf(stderr, "parsedType isa PDLValueType: %d\n",
231       mlirTypeIsAPDLValueType(parsedType));
232 
233   // CHECK: constructedType isa PDLType: 1
234   fprintf(stderr, "constructedType isa PDLType: %d\n",
235       mlirTypeIsAPDLType(constructedType));
236   // CHECK: constructedType isa PDLAttributeType: 0
237   fprintf(stderr, "constructedType isa PDLAttributeType: %d\n",
238       mlirTypeIsAPDLAttributeType(constructedType));
239   // CHECK: constructedType isa PDLOperationType: 0
240   fprintf(stderr, "constructedType isa PDLOperationType: %d\n",
241       mlirTypeIsAPDLOperationType(constructedType));
242   // CHECK: constructedType isa PDLRangeType: 0
243   fprintf(stderr, "constructedType isa PDLRangeType: %d\n",
244       mlirTypeIsAPDLRangeType(constructedType));
245   // CHECK: constructedType isa PDLTypeType: 1
246   fprintf(stderr, "constructedType isa PDLTypeType: %d\n",
247       mlirTypeIsAPDLTypeType(constructedType));
248   // CHECK: constructedType isa PDLValueType: 0
249   fprintf(stderr, "constructedType isa PDLValueType: %d\n",
250       mlirTypeIsAPDLValueType(constructedType));
251 
252   // CHECK: equal: 1
253   fprintf(stderr, "equal: %d\n", mlirTypeEqual(parsedType, constructedType));
254 
255   // CHECK: !pdl.type
256   mlirTypeDump(parsedType);
257   // CHECK: !pdl.type
258   mlirTypeDump(constructedType);
259 
260   fprintf(stderr, "\n\n");
261 }
262 
263 // CHECK-LABEL: testValueType
264 void testValueType(MlirContext ctx) {
265   fprintf(stderr, "testValueType\n");
266 
267   MlirType parsedType = mlirTypeParseGet(
268       ctx, mlirStringRefCreateFromCString("!pdl.value"));
269   MlirType constructedType = mlirPDLValueTypeGet(ctx);
270 
271   assert(!mlirTypeIsNull(parsedType) && "couldn't parse PDLAttributeType");
272   assert(!mlirTypeIsNull(constructedType) && "couldn't construct PDLAttributeType");
273 
274   // CHECK: parsedType isa PDLType: 1
275   fprintf(stderr, "parsedType isa PDLType: %d\n",
276       mlirTypeIsAPDLType(parsedType));
277   // CHECK: parsedType isa PDLAttributeType: 0
278   fprintf(stderr, "parsedType isa PDLAttributeType: %d\n",
279       mlirTypeIsAPDLAttributeType(parsedType));
280   // CHECK: parsedType isa PDLOperationType: 0
281   fprintf(stderr, "parsedType isa PDLOperationType: %d\n",
282       mlirTypeIsAPDLOperationType(parsedType));
283   // CHECK: parsedType isa PDLRangeType: 0
284   fprintf(stderr, "parsedType isa PDLRangeType: %d\n",
285       mlirTypeIsAPDLRangeType(parsedType));
286   // CHECK: parsedType isa PDLTypeType: 0
287   fprintf(stderr, "parsedType isa PDLTypeType: %d\n",
288       mlirTypeIsAPDLTypeType(parsedType));
289   // CHECK: parsedType isa PDLValueType: 1
290   fprintf(stderr, "parsedType isa PDLValueType: %d\n",
291       mlirTypeIsAPDLValueType(parsedType));
292 
293   // CHECK: constructedType isa PDLType: 1
294   fprintf(stderr, "constructedType isa PDLType: %d\n",
295       mlirTypeIsAPDLType(constructedType));
296   // CHECK: constructedType isa PDLAttributeType: 0
297   fprintf(stderr, "constructedType isa PDLAttributeType: %d\n",
298       mlirTypeIsAPDLAttributeType(constructedType));
299   // CHECK: constructedType isa PDLOperationType: 0
300   fprintf(stderr, "constructedType isa PDLOperationType: %d\n",
301       mlirTypeIsAPDLOperationType(constructedType));
302   // CHECK: constructedType isa PDLRangeType: 0
303   fprintf(stderr, "constructedType isa PDLRangeType: %d\n",
304       mlirTypeIsAPDLRangeType(constructedType));
305   // CHECK: constructedType isa PDLTypeType: 0
306   fprintf(stderr, "constructedType isa PDLTypeType: %d\n",
307       mlirTypeIsAPDLTypeType(constructedType));
308   // CHECK: constructedType isa PDLValueType: 1
309   fprintf(stderr, "constructedType isa PDLValueType: %d\n",
310       mlirTypeIsAPDLValueType(constructedType));
311 
312   // CHECK: equal: 1
313   fprintf(stderr, "equal: %d\n", mlirTypeEqual(parsedType, constructedType));
314 
315   // CHECK: !pdl.value
316   mlirTypeDump(parsedType);
317   // CHECK: !pdl.value
318   mlirTypeDump(constructedType);
319 
320   fprintf(stderr, "\n\n");
321 }
322 
323 int main() {
324   MlirContext ctx = mlirContextCreate();
325   mlirDialectHandleRegisterDialect(mlirGetDialectHandle__pdl__(), ctx);
326   testAttributeType(ctx);
327   testOperationType(ctx);
328   testRangeType(ctx);
329   testTypeType(ctx);
330   testValueType(ctx);
331   return EXIT_SUCCESS;
332 }
333