1 //===- PDL.cpp - C Interface for PDL dialect ------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "mlir-c/Dialect/PDL.h"
10 #include "mlir/CAPI/Registration.h"
11 #include "mlir/Dialect/PDL/IR/PDL.h"
12 #include "mlir/Dialect/PDL/IR/PDLOps.h"
13 #include "mlir/Dialect/PDL/IR/PDLTypes.h"
14 
15 using namespace mlir;
16 
17 MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(PDL, pdl, pdl::PDLDialect)
18 
19 //===---------------------------------------------------------------------===//
20 // PDLType
21 //===---------------------------------------------------------------------===//
22 
23 bool mlirTypeIsAPDLType(MlirType type) {
24   return unwrap(type).isa<pdl::PDLType>();
25 }
26 
27 //===---------------------------------------------------------------------===//
28 // AttributeType
29 //===---------------------------------------------------------------------===//
30 
31 bool mlirTypeIsAPDLAttributeType(MlirType type) {
32   return unwrap(type).isa<pdl::AttributeType>();
33 }
34 
35 MlirType mlirPDLAttributeTypeGet(MlirContext ctx) {
36   return wrap(pdl::AttributeType::get(unwrap(ctx)));
37 }
38 
39 //===---------------------------------------------------------------------===//
40 // OperationType
41 //===---------------------------------------------------------------------===//
42 
43 bool mlirTypeIsAPDLOperationType(MlirType type) {
44   return unwrap(type).isa<pdl::OperationType>();
45 }
46 
47 MlirType mlirPDLOperationTypeGet(MlirContext ctx) {
48   return wrap(pdl::OperationType::get(unwrap(ctx)));
49 }
50 
51 //===---------------------------------------------------------------------===//
52 // RangeType
53 //===---------------------------------------------------------------------===//
54 
55 bool mlirTypeIsAPDLRangeType(MlirType type) {
56   return unwrap(type).isa<pdl::RangeType>();
57 }
58 
59 MlirType mlirPDLRangeTypeGet(MlirType elementType) {
60   return wrap(pdl::RangeType::get(unwrap(elementType)));
61 }
62 
63 //===---------------------------------------------------------------------===//
64 // TypeType
65 //===---------------------------------------------------------------------===//
66 
67 bool mlirTypeIsAPDLTypeType(MlirType type) {
68   return unwrap(type).isa<pdl::TypeType>();
69 }
70 
71 MlirType mlirPDLTypeTypeGet(MlirContext ctx) {
72   return wrap(pdl::TypeType::get(unwrap(ctx)));
73 }
74 
75 //===---------------------------------------------------------------------===//
76 // ValueType
77 //===---------------------------------------------------------------------===//
78 
79 bool mlirTypeIsAPDLValueType(MlirType type) {
80   return unwrap(type).isa<pdl::ValueType>();
81 }
82 
83 MlirType mlirPDLValueTypeGet(MlirContext ctx) {
84   return wrap(pdl::ValueType::get(unwrap(ctx)));
85 }
86