xref: /llvm-project/mlir/lib/CAPI/Dialect/EmitC.cpp (revision 43491f0e9594b55a79ba775daed598cd37fc3cad)
13c464d23SEliud de León //===- EmitC.cpp - C Interface for EmitC dialect --------------------------===//
23c464d23SEliud de León //
33c464d23SEliud de León // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43c464d23SEliud de León // See https://llvm.org/LICENSE.txt for license information.
53c464d23SEliud de León // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63c464d23SEliud de León //
73c464d23SEliud de León //===----------------------------------------------------------------------===//
83c464d23SEliud de León 
93c464d23SEliud de León #include "mlir-c/Dialect/EmitC.h"
103c464d23SEliud de León #include "mlir/CAPI/Registration.h"
113c464d23SEliud de León #include "mlir/Dialect/EmitC/IR/EmitC.h"
123c464d23SEliud de León 
13*43491f0eSEliud de León using namespace mlir;
14*43491f0eSEliud de León 
153c464d23SEliud de León MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(EmitC, emitc, mlir::emitc::EmitCDialect)
16*43491f0eSEliud de León 
17*43491f0eSEliud de León // Ensure the C-API enums are uint64_t-castable to C++ equivalents.
18*43491f0eSEliud de León static_assert(static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_EQ) ==
19*43491f0eSEliud de León                       static_cast<uint64_t>(emitc::CmpPredicate::eq) &&
20*43491f0eSEliud de León                   static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_NE) ==
21*43491f0eSEliud de León                       static_cast<uint64_t>(emitc::CmpPredicate::ne) &&
22*43491f0eSEliud de León                   static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_LT) ==
23*43491f0eSEliud de León                       static_cast<uint64_t>(emitc::CmpPredicate::lt) &&
24*43491f0eSEliud de León                   static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_LE) ==
25*43491f0eSEliud de León                       static_cast<uint64_t>(emitc::CmpPredicate::le) &&
26*43491f0eSEliud de León                   static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_GT) ==
27*43491f0eSEliud de León                       static_cast<uint64_t>(emitc::CmpPredicate::gt) &&
28*43491f0eSEliud de León                   static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_GE) ==
29*43491f0eSEliud de León                       static_cast<uint64_t>(emitc::CmpPredicate::ge) &&
30*43491f0eSEliud de León                   static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_THREE_WAY) ==
31*43491f0eSEliud de León                       static_cast<uint64_t>(emitc::CmpPredicate::three_way),
32*43491f0eSEliud de León               "MlirEmitCCmpPredicate (C-API) and CmpPredicate (C++) mismatch");
33*43491f0eSEliud de León 
34*43491f0eSEliud de León //===---------------------------------------------------------------------===//
35*43491f0eSEliud de León // ArrayType
36*43491f0eSEliud de León //===---------------------------------------------------------------------===//
37*43491f0eSEliud de León 
38*43491f0eSEliud de León bool mlirTypeIsAEmitCArrayType(MlirType type) {
39*43491f0eSEliud de León   return isa<emitc::ArrayType>(unwrap(type));
40*43491f0eSEliud de León }
41*43491f0eSEliud de León 
42*43491f0eSEliud de León MlirTypeID mlirEmitCArrayTypeGetTypeID(void) {
43*43491f0eSEliud de León   return wrap(emitc::ArrayType::getTypeID());
44*43491f0eSEliud de León }
45*43491f0eSEliud de León 
46*43491f0eSEliud de León MlirType mlirEmitCArrayTypeGet(intptr_t nDims, int64_t *shape,
47*43491f0eSEliud de León                                MlirType elementType) {
48*43491f0eSEliud de León   return wrap(
49*43491f0eSEliud de León       emitc::ArrayType::get(llvm::ArrayRef(shape, nDims), unwrap(elementType)));
50*43491f0eSEliud de León }
51*43491f0eSEliud de León 
52*43491f0eSEliud de León //===---------------------------------------------------------------------===//
53*43491f0eSEliud de León // LValueType
54*43491f0eSEliud de León //===---------------------------------------------------------------------===//
55*43491f0eSEliud de León 
56*43491f0eSEliud de León bool mlirTypeIsAEmitCLValueType(MlirType type) {
57*43491f0eSEliud de León   return isa<emitc::LValueType>(unwrap(type));
58*43491f0eSEliud de León }
59*43491f0eSEliud de León 
60*43491f0eSEliud de León MlirTypeID mlirEmitCLValueTypeGetTypeID(void) {
61*43491f0eSEliud de León   return wrap(emitc::LValueType::getTypeID());
62*43491f0eSEliud de León }
63*43491f0eSEliud de León 
64*43491f0eSEliud de León MlirType mlirEmitCLValueTypeGet(MlirType valueType) {
65*43491f0eSEliud de León   return wrap(emitc::LValueType::get(unwrap(valueType)));
66*43491f0eSEliud de León }
67*43491f0eSEliud de León 
68*43491f0eSEliud de León //===---------------------------------------------------------------------===//
69*43491f0eSEliud de León // OpaqueType
70*43491f0eSEliud de León //===---------------------------------------------------------------------===//
71*43491f0eSEliud de León 
72*43491f0eSEliud de León bool mlirTypeIsAEmitCOpaqueType(MlirType type) {
73*43491f0eSEliud de León   return isa<emitc::OpaqueType>(unwrap(type));
74*43491f0eSEliud de León }
75*43491f0eSEliud de León 
76*43491f0eSEliud de León MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void) {
77*43491f0eSEliud de León   return wrap(emitc::OpaqueType::getTypeID());
78*43491f0eSEliud de León }
79*43491f0eSEliud de León 
80*43491f0eSEliud de León MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, MlirStringRef value) {
81*43491f0eSEliud de León   return wrap(emitc::OpaqueType::get(unwrap(ctx), unwrap(value)));
82*43491f0eSEliud de León }
83*43491f0eSEliud de León 
84*43491f0eSEliud de León //===---------------------------------------------------------------------===//
85*43491f0eSEliud de León // PointerType
86*43491f0eSEliud de León //===---------------------------------------------------------------------===//
87*43491f0eSEliud de León 
88*43491f0eSEliud de León bool mlirTypeIsAEmitCPointerType(MlirType type) {
89*43491f0eSEliud de León   return isa<emitc::PointerType>(unwrap(type));
90*43491f0eSEliud de León }
91*43491f0eSEliud de León 
92*43491f0eSEliud de León MlirTypeID mlirEmitCPointerTypeGetTypeID(void) {
93*43491f0eSEliud de León   return wrap(emitc::PointerType::getTypeID());
94*43491f0eSEliud de León }
95*43491f0eSEliud de León 
96*43491f0eSEliud de León MlirType mlirEmitCPointerTypeGet(MlirType pointee) {
97*43491f0eSEliud de León   return wrap(emitc::PointerType::get(unwrap(pointee)));
98*43491f0eSEliud de León }
99*43491f0eSEliud de León 
100*43491f0eSEliud de León //===---------------------------------------------------------------------===//
101*43491f0eSEliud de León // PtrDiffTType
102*43491f0eSEliud de León //===---------------------------------------------------------------------===//
103*43491f0eSEliud de León 
104*43491f0eSEliud de León bool mlirTypeIsAEmitCPtrDiffTType(MlirType type) {
105*43491f0eSEliud de León   return isa<emitc::PtrDiffTType>(unwrap(type));
106*43491f0eSEliud de León }
107*43491f0eSEliud de León 
108*43491f0eSEliud de León MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void) {
109*43491f0eSEliud de León   return wrap(emitc::PtrDiffTType::getTypeID());
110*43491f0eSEliud de León }
111*43491f0eSEliud de León 
112*43491f0eSEliud de León MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx) {
113*43491f0eSEliud de León   return wrap(emitc::PtrDiffTType::get(unwrap(ctx)));
114*43491f0eSEliud de León }
115*43491f0eSEliud de León 
116*43491f0eSEliud de León //===---------------------------------------------------------------------===//
117*43491f0eSEliud de León // SignedSizeTType
118*43491f0eSEliud de León //===---------------------------------------------------------------------===//
119*43491f0eSEliud de León 
120*43491f0eSEliud de León bool mlirTypeIsAEmitCSignedSizeTType(MlirType type) {
121*43491f0eSEliud de León   return isa<emitc::SignedSizeTType>(unwrap(type));
122*43491f0eSEliud de León }
123*43491f0eSEliud de León 
124*43491f0eSEliud de León MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void) {
125*43491f0eSEliud de León   return wrap(emitc::SignedSizeTType::getTypeID());
126*43491f0eSEliud de León }
127*43491f0eSEliud de León 
128*43491f0eSEliud de León MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx) {
129*43491f0eSEliud de León   return wrap(emitc::SignedSizeTType::get(unwrap(ctx)));
130*43491f0eSEliud de León }
131*43491f0eSEliud de León 
132*43491f0eSEliud de León //===---------------------------------------------------------------------===//
133*43491f0eSEliud de León // SizeTType
134*43491f0eSEliud de León //===---------------------------------------------------------------------===//
135*43491f0eSEliud de León 
136*43491f0eSEliud de León bool mlirTypeIsAEmitCSizeTType(MlirType type) {
137*43491f0eSEliud de León   return isa<emitc::SizeTType>(unwrap(type));
138*43491f0eSEliud de León }
139*43491f0eSEliud de León 
140*43491f0eSEliud de León MlirTypeID mlirEmitCSizeTTypeGetTypeID(void) {
141*43491f0eSEliud de León   return wrap(emitc::SizeTType::getTypeID());
142*43491f0eSEliud de León }
143*43491f0eSEliud de León 
144*43491f0eSEliud de León MlirType mlirEmitCSizeTTypeGet(MlirContext ctx) {
145*43491f0eSEliud de León   return wrap(emitc::SizeTType::get(unwrap(ctx)));
146*43491f0eSEliud de León }
147*43491f0eSEliud de León 
148*43491f0eSEliud de León //===----------------------------------------------------------------------===//
149*43491f0eSEliud de León // CmpPredicate attribute.
150*43491f0eSEliud de León //===----------------------------------------------------------------------===//
151*43491f0eSEliud de León 
152*43491f0eSEliud de León bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr) {
153*43491f0eSEliud de León   return llvm::isa<emitc::CmpPredicateAttr>(unwrap(attr));
154*43491f0eSEliud de León }
155*43491f0eSEliud de León 
156*43491f0eSEliud de León MlirAttribute mlirEmitCCmpPredicateAttrGet(MlirContext ctx,
157*43491f0eSEliud de León                                            MlirEmitCCmpPredicate val) {
158*43491f0eSEliud de León   return wrap((Attribute)emitc::CmpPredicateAttr::get(
159*43491f0eSEliud de León       unwrap(ctx), static_cast<emitc::CmpPredicate>(val)));
160*43491f0eSEliud de León }
161*43491f0eSEliud de León 
162*43491f0eSEliud de León MlirEmitCCmpPredicate mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr) {
163*43491f0eSEliud de León   return static_cast<MlirEmitCCmpPredicate>(
164*43491f0eSEliud de León       llvm::cast<emitc::CmpPredicateAttr>(unwrap(attr)).getValue());
165*43491f0eSEliud de León }
166*43491f0eSEliud de León 
167*43491f0eSEliud de León MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void) {
168*43491f0eSEliud de León   return wrap(emitc::CmpPredicateAttr::getTypeID());
169*43491f0eSEliud de León }
170*43491f0eSEliud de León 
171*43491f0eSEliud de León //===----------------------------------------------------------------------===//
172*43491f0eSEliud de León // Opaque attribute.
173*43491f0eSEliud de León //===----------------------------------------------------------------------===//
174*43491f0eSEliud de León 
175*43491f0eSEliud de León bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr) {
176*43491f0eSEliud de León   return llvm::isa<emitc::OpaqueAttr>(unwrap(attr));
177*43491f0eSEliud de León }
178*43491f0eSEliud de León 
179*43491f0eSEliud de León MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, MlirStringRef value) {
180*43491f0eSEliud de León   return wrap((Attribute)emitc::OpaqueAttr::get(unwrap(ctx), unwrap(value)));
181*43491f0eSEliud de León }
182*43491f0eSEliud de León 
183*43491f0eSEliud de León MlirStringRef mlirEmitCOpaqueAttrGetValue(MlirAttribute attr) {
184*43491f0eSEliud de León   return wrap(llvm::cast<emitc::OpaqueAttr>(unwrap(attr)).getValue());
185*43491f0eSEliud de León }
186*43491f0eSEliud de León 
187*43491f0eSEliud de León MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void) {
188*43491f0eSEliud de León   return wrap(emitc::OpaqueAttr::getTypeID());
189*43491f0eSEliud de León }
190