Skip to content

Commit 43491f0

Browse files
authored
[mlir][emitc] Expose emitc dialect types (#119645)
Added C API functions for the EmitC dialect types.
1 parent 68c9826 commit 43491f0

File tree

2 files changed

+287
-0
lines changed

2 files changed

+287
-0
lines changed

mlir/include/mlir-c/Dialect/EmitC.h

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,117 @@ extern "C" {
1919

2020
MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(EmitC, emitc);
2121

22+
enum MlirEmitCCmpPredicate : uint64_t {
23+
MLIR_EMITC_CMP_PREDICATE_EQ = 0,
24+
MLIR_EMITC_CMP_PREDICATE_NE = 1,
25+
MLIR_EMITC_CMP_PREDICATE_LT = 2,
26+
MLIR_EMITC_CMP_PREDICATE_LE = 3,
27+
MLIR_EMITC_CMP_PREDICATE_GT = 4,
28+
MLIR_EMITC_CMP_PREDICATE_GE = 5,
29+
MLIR_EMITC_CMP_PREDICATE_THREE_WAY = 6,
30+
};
31+
32+
//===---------------------------------------------------------------------===//
33+
// ArrayType
34+
//===---------------------------------------------------------------------===//
35+
36+
MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCArrayType(MlirType type);
37+
38+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCArrayTypeGetTypeID(void);
39+
40+
MLIR_CAPI_EXPORTED MlirType mlirEmitCArrayTypeGet(intptr_t nDims,
41+
int64_t *shape,
42+
MlirType elementType);
43+
44+
//===---------------------------------------------------------------------===//
45+
// LValueType
46+
//===---------------------------------------------------------------------===//
47+
48+
MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCLValueType(MlirType type);
49+
50+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCLValueTypeGetTypeID(void);
51+
52+
MLIR_CAPI_EXPORTED MlirType mlirEmitCLValueTypeGet(MlirType valueType);
53+
54+
//===---------------------------------------------------------------------===//
55+
// OpaqueType
56+
//===---------------------------------------------------------------------===//
57+
58+
MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCOpaqueType(MlirType type);
59+
60+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void);
61+
62+
MLIR_CAPI_EXPORTED MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx,
63+
MlirStringRef value);
64+
65+
//===---------------------------------------------------------------------===//
66+
// PointerType
67+
//===---------------------------------------------------------------------===//
68+
69+
MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCPointerType(MlirType type);
70+
71+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCPointerTypeGetTypeID(void);
72+
73+
MLIR_CAPI_EXPORTED MlirType mlirEmitCPointerTypeGet(MlirType pointee);
74+
75+
//===---------------------------------------------------------------------===//
76+
// PtrDiffTType
77+
//===---------------------------------------------------------------------===//
78+
79+
MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCPtrDiffTType(MlirType type);
80+
81+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void);
82+
83+
MLIR_CAPI_EXPORTED MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx);
84+
85+
//===---------------------------------------------------------------------===//
86+
// SignedSizeTType
87+
//===---------------------------------------------------------------------===//
88+
89+
MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCSignedSizeTType(MlirType type);
90+
91+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void);
92+
93+
MLIR_CAPI_EXPORTED MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx);
94+
95+
//===---------------------------------------------------------------------===//
96+
// SizeTType
97+
//===---------------------------------------------------------------------===//
98+
99+
MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCSizeTType(MlirType type);
100+
101+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCSizeTTypeGetTypeID(void);
102+
103+
MLIR_CAPI_EXPORTED MlirType mlirEmitCSizeTTypeGet(MlirContext ctx);
104+
105+
//===----------------------------------------------------------------------===//
106+
// CmpPredicate attribute.
107+
//===----------------------------------------------------------------------===//
108+
109+
MLIR_CAPI_EXPORTED bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr);
110+
111+
MLIR_CAPI_EXPORTED MlirAttribute
112+
mlirEmitCCmpPredicateAttrGet(MlirContext ctx, enum MlirEmitCCmpPredicate val);
113+
114+
MLIR_CAPI_EXPORTED enum MlirEmitCCmpPredicate
115+
mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr);
116+
117+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void);
118+
119+
//===----------------------------------------------------------------------===//
120+
// Opaque attribute.
121+
//===----------------------------------------------------------------------===//
122+
123+
MLIR_CAPI_EXPORTED bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr);
124+
125+
MLIR_CAPI_EXPORTED MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx,
126+
MlirStringRef value);
127+
128+
MLIR_CAPI_EXPORTED MlirStringRef
129+
mlirEmitCOpaqueAttrGetValue(MlirAttribute attr);
130+
131+
MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void);
132+
22133
#ifdef __cplusplus
23134
}
24135
#endif

mlir/lib/CAPI/Dialect/EmitC.cpp

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,180 @@
1010
#include "mlir/CAPI/Registration.h"
1111
#include "mlir/Dialect/EmitC/IR/EmitC.h"
1212

13+
using namespace mlir;
14+
1315
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+
92+
MlirTypeID mlirEmitCPointerTypeGetTypeID(void) {
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+
108+
MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void) {
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+
124+
MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void) {
125+
return wrap(emitc::SignedSizeTType::getTypeID());
126+
}
127+
128+
MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx) {
129+
return wrap(emitc::SignedSizeTType::get(unwrap(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) {
158+
return wrap((Attribute)emitc::CmpPredicateAttr::get(
159+
unwrap(ctx), static_cast<emitc::CmpPredicate>(val)));
160+
}
161+
162+
MlirEmitCCmpPredicate mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr) {
163+
return static_cast<MlirEmitCCmpPredicate>(
164+
llvm::cast<emitc::CmpPredicateAttr>(unwrap(attr)).getValue());
165+
}
166+
167+
MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void) {
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+
183+
MlirStringRef mlirEmitCOpaqueAttrGetValue(MlirAttribute attr) {
184+
return wrap(llvm::cast<emitc::OpaqueAttr>(unwrap(attr)).getValue());
185+
}
186+
187+
MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void) {
188+
return wrap(emitc::OpaqueAttr::getTypeID());
189+
}

0 commit comments

Comments
 (0)