MLIR 23.0.0git
EmitC.cpp
Go to the documentation of this file.
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
12
13using namespace mlir;
14using namespace mlir::emitc;
15
16MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(EmitC, emitc, mlir::emitc::EmitCDialect)
17
18// Ensure the C-API enums are uint64_t-castable to C++ equivalents.
19static_assert(static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_EQ) ==
20 static_cast<uint64_t>(emitc::CmpPredicate::eq) &&
21 static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_NE) ==
22 static_cast<uint64_t>(emitc::CmpPredicate::ne) &&
23 static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_LT) ==
24 static_cast<uint64_t>(emitc::CmpPredicate::lt) &&
25 static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_LE) ==
26 static_cast<uint64_t>(emitc::CmpPredicate::le) &&
27 static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_GT) ==
28 static_cast<uint64_t>(emitc::CmpPredicate::gt) &&
29 static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_GE) ==
30 static_cast<uint64_t>(emitc::CmpPredicate::ge) &&
31 static_cast<uint64_t>(MLIR_EMITC_CMP_PREDICATE_THREE_WAY) ==
32 static_cast<uint64_t>(emitc::CmpPredicate::three_way),
33 "MlirEmitCCmpPredicate (C-API) and CmpPredicate (C++) mismatch");
34
35//===---------------------------------------------------------------------===//
36// ArrayType
37//===---------------------------------------------------------------------===//
38
39bool mlirTypeIsAEmitCArrayType(MlirType type) {
40 return isa<emitc::ArrayType>(unwrap(type));
41}
42
44 return wrap(emitc::ArrayType::getTypeID());
45}
46
48 MlirType elementType) {
49 return wrap(
50 emitc::ArrayType::get(llvm::ArrayRef(shape, nDims), unwrap(elementType)));
51}
52
54 return wrap(emitc::ArrayType::name);
55}
56
57//===---------------------------------------------------------------------===//
58// LValueType
59//===---------------------------------------------------------------------===//
60
61bool mlirTypeIsAEmitCLValueType(MlirType type) {
62 return isa<emitc::LValueType>(unwrap(type));
63}
64
66 return wrap(emitc::LValueType::getTypeID());
67}
68
69MlirType mlirEmitCLValueTypeGet(MlirType valueType) {
70 return wrap(emitc::LValueType::get(unwrap(valueType)));
71}
72
74 return wrap(emitc::LValueType::name);
75}
76
77//===---------------------------------------------------------------------===//
78// OpaqueType
79//===---------------------------------------------------------------------===//
80
81bool mlirTypeIsAEmitCOpaqueType(MlirType type) {
82 return isa<emitc::OpaqueType>(unwrap(type));
83}
84
86 return wrap(emitc::OpaqueType::getTypeID());
87}
88
89MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, MlirStringRef value) {
90 return wrap(emitc::OpaqueType::get(unwrap(ctx), unwrap(value)));
91}
92
94 return wrap(emitc::OpaqueType::name);
95}
96
97//===---------------------------------------------------------------------===//
98// PointerType
99//===---------------------------------------------------------------------===//
100
101bool mlirTypeIsAEmitCPointerType(MlirType type) {
102 return isa<emitc::PointerType>(unwrap(type));
103}
104
106 return wrap(emitc::PointerType::getTypeID());
107}
108
109MlirType mlirEmitCPointerTypeGet(MlirType pointee) {
110 return wrap(emitc::PointerType::get(unwrap(pointee)));
111}
112
114 return wrap(emitc::PointerType::name);
115}
116
117//===---------------------------------------------------------------------===//
118// PtrDiffTType
119//===---------------------------------------------------------------------===//
120
121bool mlirTypeIsAEmitCPtrDiffTType(MlirType type) {
122 return isa<emitc::PtrDiffTType>(unwrap(type));
123}
124
126 return wrap(emitc::PtrDiffTType::getTypeID());
127}
128
129MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx) {
130 return wrap(emitc::PtrDiffTType::get(unwrap(ctx)));
131}
132
134 return wrap(emitc::PtrDiffTType::name);
135}
136
137//===---------------------------------------------------------------------===//
138// SignedSizeTType
139//===---------------------------------------------------------------------===//
140
142 return isa<emitc::SignedSizeTType>(unwrap(type));
143}
144
146 return wrap(emitc::SignedSizeTType::getTypeID());
147}
148
149MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx) {
150 return wrap(emitc::SignedSizeTType::get(unwrap(ctx)));
151}
152
154 return wrap(emitc::SignedSizeTType::name);
155}
156
157//===---------------------------------------------------------------------===//
158// SizeTType
159//===---------------------------------------------------------------------===//
160
161bool mlirTypeIsAEmitCSizeTType(MlirType type) {
162 return isa<emitc::SizeTType>(unwrap(type));
163}
164
166 return wrap(emitc::SizeTType::getTypeID());
167}
168
169MlirType mlirEmitCSizeTTypeGet(MlirContext ctx) {
170 return wrap(emitc::SizeTType::get(unwrap(ctx)));
171}
172
174 return wrap(emitc::SizeTType::name);
175}
176
177//===----------------------------------------------------------------------===//
178// CmpPredicate attribute.
179//===----------------------------------------------------------------------===//
180
181bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr) {
182 return llvm::isa<emitc::CmpPredicateAttr>(unwrap(attr));
183}
184
185MlirAttribute mlirEmitCCmpPredicateAttrGet(MlirContext ctx,
187 return wrap((Attribute)emitc::CmpPredicateAttr::get(
188 unwrap(ctx), static_cast<emitc::CmpPredicate>(val)));
189}
190
192 return wrap(emitc::CmpPredicateAttr::name);
193}
194
196 return static_cast<MlirEmitCCmpPredicate>(
197 llvm::cast<emitc::CmpPredicateAttr>(unwrap(attr)).getValue());
198}
199
201 return wrap(emitc::CmpPredicateAttr::getTypeID());
202}
203
204//===----------------------------------------------------------------------===//
205// Opaque attribute.
206//===----------------------------------------------------------------------===//
207
208bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr) {
209 return llvm::isa<emitc::OpaqueAttr>(unwrap(attr));
210}
211
212MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, MlirStringRef value) {
213 return wrap((Attribute)emitc::OpaqueAttr::get(unwrap(ctx), unwrap(value)));
214}
215
217 return wrap(emitc::OpaqueAttr::name);
218}
219
221 return wrap(llvm::cast<emitc::OpaqueAttr>(unwrap(attr)).getValue());
222}
223
225 return wrap(emitc::OpaqueAttr::getTypeID());
226}
MlirTypeID mlirEmitCLValueTypeGetTypeID(void)
Definition EmitC.cpp:65
bool mlirTypeIsAEmitCSizeTType(MlirType type)
Definition EmitC.cpp:161
bool mlirTypeIsAEmitCSignedSizeTType(MlirType type)
Definition EmitC.cpp:141
MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void)
Definition EmitC.cpp:125
MlirStringRef mlirEmitCPointerTypeGetName(void)
Definition EmitC.cpp:113
MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx)
Definition EmitC.cpp:149
bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr)
Definition EmitC.cpp:181
MlirStringRef mlirEmitCSizeTTypeGetName(void)
Definition EmitC.cpp:173
MlirType mlirEmitCArrayTypeGet(intptr_t nDims, int64_t *shape, MlirType elementType)
Definition EmitC.cpp:47
MlirStringRef mlirEmitCCmpPredicateAttrGetName(void)
Definition EmitC.cpp:191
MlirType mlirEmitCPointerTypeGet(MlirType pointee)
Definition EmitC.cpp:109
MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, MlirStringRef value)
Definition EmitC.cpp:212
MlirStringRef mlirEmitCOpaqueAttrGetValue(MlirAttribute attr)
Definition EmitC.cpp:220
bool mlirTypeIsAEmitCArrayType(MlirType type)
Definition EmitC.cpp:39
MlirType mlirEmitCSizeTTypeGet(MlirContext ctx)
Definition EmitC.cpp:169
MlirAttribute mlirEmitCCmpPredicateAttrGet(MlirContext ctx, MlirEmitCCmpPredicate val)
Definition EmitC.cpp:185
MlirTypeID mlirEmitCSizeTTypeGetTypeID(void)
Definition EmitC.cpp:165
MlirStringRef mlirEmitCOpaqueTypeGetName(void)
Definition EmitC.cpp:93
MlirStringRef mlirEmitCPtrDiffTTypeGetName(void)
Definition EmitC.cpp:133
MlirStringRef mlirEmitCArrayTypeGetName(void)
Definition EmitC.cpp:53
bool mlirTypeIsAEmitCLValueType(MlirType type)
Definition EmitC.cpp:61
bool mlirTypeIsAEmitCPtrDiffTType(MlirType type)
Definition EmitC.cpp:121
MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void)
Definition EmitC.cpp:145
bool mlirTypeIsAEmitCOpaqueType(MlirType type)
Definition EmitC.cpp:81
MlirEmitCCmpPredicate mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr)
Definition EmitC.cpp:195
bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr)
Definition EmitC.cpp:208
MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx)
Definition EmitC.cpp:129
bool mlirTypeIsAEmitCPointerType(MlirType type)
Definition EmitC.cpp:101
MlirStringRef mlirEmitCSignedSizeTTypeGetName(void)
Definition EmitC.cpp:153
MlirStringRef mlirEmitCOpaqueAttrGetName(void)
Definition EmitC.cpp:216
MlirTypeID mlirEmitCArrayTypeGetTypeID(void)
Definition EmitC.cpp:43
MlirType mlirEmitCLValueTypeGet(MlirType valueType)
Definition EmitC.cpp:69
MlirStringRef mlirEmitCLValueTypeGetName(void)
Definition EmitC.cpp:73
MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void)
Definition EmitC.cpp:85
MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void)
Definition EmitC.cpp:200
MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, MlirStringRef value)
Definition EmitC.cpp:89
MlirTypeID mlirEmitCPointerTypeGetTypeID(void)
Definition EmitC.cpp:105
MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void)
Definition EmitC.cpp:224
#define MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Name, Namespace, ClassName)
Attributes are known-constant values of operations.
Definition Attributes.h:25
MlirDiagnostic wrap(mlir::Diagnostic &diagnostic)
Definition Diagnostics.h:24
mlir::Diagnostic & unwrap(MlirDiagnostic diagnostic)
Definition Diagnostics.h:19
MlirEmitCCmpPredicate
Definition EmitC.h:22
@ MLIR_EMITC_CMP_PREDICATE_LE
Definition EmitC.h:26
@ MLIR_EMITC_CMP_PREDICATE_EQ
Definition EmitC.h:23
@ MLIR_EMITC_CMP_PREDICATE_THREE_WAY
Definition EmitC.h:29
@ MLIR_EMITC_CMP_PREDICATE_LT
Definition EmitC.h:25
@ MLIR_EMITC_CMP_PREDICATE_GE
Definition EmitC.h:28
@ MLIR_EMITC_CMP_PREDICATE_NE
Definition EmitC.h:24
@ MLIR_EMITC_CMP_PREDICATE_GT
Definition EmitC.h:27
Include the generated interface declarations.
A pointer to a sized fragment of a string, not necessarily null-terminated.
Definition Support.h:75