MLIR  21.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 
9 #include "mlir-c/Dialect/EmitC.h"
10 #include "mlir/CAPI/Registration.h"
12 
13 using namespace mlir;
14 
15 MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(EmitC, emitc, mlir::emitc::EmitCDialect)
16 
17 // Ensure the C-API enums are uint64_t-castable to C++ equivalents.
18 static_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 
38 bool mlirTypeIsAEmitCArrayType(MlirType type) {
39  return isa<emitc::ArrayType>(unwrap(type));
40 }
41 
42 MlirTypeID mlirEmitCArrayTypeGetTypeID(void) {
43  return wrap(emitc::ArrayType::getTypeID());
44 }
45 
46 MlirType 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 
56 bool mlirTypeIsAEmitCLValueType(MlirType type) {
57  return isa<emitc::LValueType>(unwrap(type));
58 }
59 
60 MlirTypeID mlirEmitCLValueTypeGetTypeID(void) {
61  return wrap(emitc::LValueType::getTypeID());
62 }
63 
64 MlirType mlirEmitCLValueTypeGet(MlirType valueType) {
65  return wrap(emitc::LValueType::get(unwrap(valueType)));
66 }
67 
68 //===---------------------------------------------------------------------===//
69 // OpaqueType
70 //===---------------------------------------------------------------------===//
71 
72 bool mlirTypeIsAEmitCOpaqueType(MlirType type) {
73  return isa<emitc::OpaqueType>(unwrap(type));
74 }
75 
76 MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void) {
77  return wrap(emitc::OpaqueType::getTypeID());
78 }
79 
80 MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, MlirStringRef value) {
81  return wrap(emitc::OpaqueType::get(unwrap(ctx), unwrap(value)));
82 }
83 
84 //===---------------------------------------------------------------------===//
85 // PointerType
86 //===---------------------------------------------------------------------===//
87 
88 bool mlirTypeIsAEmitCPointerType(MlirType type) {
89  return isa<emitc::PointerType>(unwrap(type));
90 }
91 
93  return wrap(emitc::PointerType::getTypeID());
94 }
95 
96 MlirType mlirEmitCPointerTypeGet(MlirType pointee) {
97  return wrap(emitc::PointerType::get(unwrap(pointee)));
98 }
99 
100 //===---------------------------------------------------------------------===//
101 // PtrDiffTType
102 //===---------------------------------------------------------------------===//
103 
104 bool mlirTypeIsAEmitCPtrDiffTType(MlirType type) {
105  return isa<emitc::PtrDiffTType>(unwrap(type));
106 }
107 
109  return wrap(emitc::PtrDiffTType::getTypeID());
110 }
111 
112 MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx) {
113  return wrap(emitc::PtrDiffTType::get(unwrap(ctx)));
114 }
115 
116 //===---------------------------------------------------------------------===//
117 // SignedSizeTType
118 //===---------------------------------------------------------------------===//
119 
120 bool mlirTypeIsAEmitCSignedSizeTType(MlirType type) {
121  return isa<emitc::SignedSizeTType>(unwrap(type));
122 }
123 
125  return wrap(emitc::SignedSizeTType::getTypeID());
126 }
127 
128 MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx) {
130 }
131 
132 //===---------------------------------------------------------------------===//
133 // SizeTType
134 //===---------------------------------------------------------------------===//
135 
136 bool mlirTypeIsAEmitCSizeTType(MlirType type) {
137  return isa<emitc::SizeTType>(unwrap(type));
138 }
139 
140 MlirTypeID mlirEmitCSizeTTypeGetTypeID(void) {
141  return wrap(emitc::SizeTType::getTypeID());
142 }
143 
144 MlirType mlirEmitCSizeTTypeGet(MlirContext ctx) {
145  return wrap(emitc::SizeTType::get(unwrap(ctx)));
146 }
147 
148 //===----------------------------------------------------------------------===//
149 // CmpPredicate attribute.
150 //===----------------------------------------------------------------------===//
151 
152 bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr) {
153  return llvm::isa<emitc::CmpPredicateAttr>(unwrap(attr));
154 }
155 
156 MlirAttribute mlirEmitCCmpPredicateAttrGet(MlirContext ctx,
157  MlirEmitCCmpPredicate val) {
159  unwrap(ctx), static_cast<emitc::CmpPredicate>(val)));
160 }
161 
163  return static_cast<MlirEmitCCmpPredicate>(
164  llvm::cast<emitc::CmpPredicateAttr>(unwrap(attr)).getValue());
165 }
166 
168  return wrap(emitc::CmpPredicateAttr::getTypeID());
169 }
170 
171 //===----------------------------------------------------------------------===//
172 // Opaque attribute.
173 //===----------------------------------------------------------------------===//
174 
175 bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr) {
176  return llvm::isa<emitc::OpaqueAttr>(unwrap(attr));
177 }
178 
179 MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, MlirStringRef value) {
180  return wrap((Attribute)emitc::OpaqueAttr::get(unwrap(ctx), unwrap(value)));
181 }
182 
184  return wrap(llvm::cast<emitc::OpaqueAttr>(unwrap(attr)).getValue());
185 }
186 
188  return wrap(emitc::OpaqueAttr::getTypeID());
189 }
MlirTypeID mlirEmitCLValueTypeGetTypeID(void)
Definition: EmitC.cpp:60
bool mlirTypeIsAEmitCSizeTType(MlirType type)
Definition: EmitC.cpp:136
bool mlirTypeIsAEmitCSignedSizeTType(MlirType type)
Definition: EmitC.cpp:120
MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void)
Definition: EmitC.cpp:108
MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx)
Definition: EmitC.cpp:128
bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr)
Definition: EmitC.cpp:152
MlirType mlirEmitCArrayTypeGet(intptr_t nDims, int64_t *shape, MlirType elementType)
Definition: EmitC.cpp:46
MlirType mlirEmitCPointerTypeGet(MlirType pointee)
Definition: EmitC.cpp:96
MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, MlirStringRef value)
Definition: EmitC.cpp:179
MlirStringRef mlirEmitCOpaqueAttrGetValue(MlirAttribute attr)
Definition: EmitC.cpp:183
bool mlirTypeIsAEmitCArrayType(MlirType type)
Definition: EmitC.cpp:38
MlirType mlirEmitCSizeTTypeGet(MlirContext ctx)
Definition: EmitC.cpp:144
MlirAttribute mlirEmitCCmpPredicateAttrGet(MlirContext ctx, MlirEmitCCmpPredicate val)
Definition: EmitC.cpp:156
MlirTypeID mlirEmitCSizeTTypeGetTypeID(void)
Definition: EmitC.cpp:140
bool mlirTypeIsAEmitCLValueType(MlirType type)
Definition: EmitC.cpp:56
bool mlirTypeIsAEmitCPtrDiffTType(MlirType type)
Definition: EmitC.cpp:104
MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void)
Definition: EmitC.cpp:124
bool mlirTypeIsAEmitCOpaqueType(MlirType type)
Definition: EmitC.cpp:72
MlirEmitCCmpPredicate mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr)
Definition: EmitC.cpp:162
bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr)
Definition: EmitC.cpp:175
MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx)
Definition: EmitC.cpp:112
bool mlirTypeIsAEmitCPointerType(MlirType type)
Definition: EmitC.cpp:88
MlirTypeID mlirEmitCArrayTypeGetTypeID(void)
Definition: EmitC.cpp:42
MlirType mlirEmitCLValueTypeGet(MlirType valueType)
Definition: EmitC.cpp:64
MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void)
Definition: EmitC.cpp:76
MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void)
Definition: EmitC.cpp:167
MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, MlirStringRef value)
Definition: EmitC.cpp:80
MlirTypeID mlirEmitCPointerTypeGetTypeID(void)
Definition: EmitC.cpp:92
MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void)
Definition: EmitC.cpp:187
#define MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(Name, Namespace, ClassName)
Definition: Registration.h:36
Attributes are known-constant values of operations.
Definition: Attributes.h:25
mlir::Diagnostic & unwrap(MlirDiagnostic diagnostic)
Definition: Diagnostics.h:19
MlirDiagnostic wrap(mlir::Diagnostic &diagnostic)
Definition: Diagnostics.h:24
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
CmpPredicate
Copy of the enum from arith and index to allow the common integer range infrastructure to not depend ...
Include the generated interface declarations.
auto get(MLIRContext *context, Ts &&...params)
Helper method that injects context only if needed, this helps unify some of the attribute constructio...
A pointer to a sized fragment of a string, not necessarily null-terminated.
Definition: Support.h:73