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

source code of mlir/lib/CAPI/Dialect/EmitC.cpp