diff --git a/mlir/include/mlir-c/Dialect/EmitC.h b/mlir/include/mlir-c/Dialect/EmitC.h index 82e698344bf1e..a0e3ea08a5a9f 100644 --- a/mlir/include/mlir-c/Dialect/EmitC.h +++ b/mlir/include/mlir-c/Dialect/EmitC.h @@ -19,6 +19,117 @@ extern "C" { MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(EmitC, emitc); +enum MlirEmitCCmpPredicate : uint64_t { + MLIR_EMITC_CMP_PREDICATE_EQ = 0, + MLIR_EMITC_CMP_PREDICATE_NE = 1, + MLIR_EMITC_CMP_PREDICATE_LT = 2, + MLIR_EMITC_CMP_PREDICATE_LE = 3, + MLIR_EMITC_CMP_PREDICATE_GT = 4, + MLIR_EMITC_CMP_PREDICATE_GE = 5, + MLIR_EMITC_CMP_PREDICATE_THREE_WAY = 6, +}; + +//===---------------------------------------------------------------------===// +// ArrayType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCArrayType(MlirType type); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCArrayTypeGetTypeID(void); + +MLIR_CAPI_EXPORTED MlirType mlirEmitCArrayTypeGet(intptr_t nDims, + int64_t *shape, + MlirType elementType); + +//===---------------------------------------------------------------------===// +// LValueType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCLValueType(MlirType type); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCLValueTypeGetTypeID(void); + +MLIR_CAPI_EXPORTED MlirType mlirEmitCLValueTypeGet(MlirType valueType); + +//===---------------------------------------------------------------------===// +// OpaqueType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCOpaqueType(MlirType type); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void); + +MLIR_CAPI_EXPORTED MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, + MlirStringRef value); + +//===---------------------------------------------------------------------===// +// PointerType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCPointerType(MlirType type); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCPointerTypeGetTypeID(void); + +MLIR_CAPI_EXPORTED MlirType mlirEmitCPointerTypeGet(MlirType pointee); + +//===---------------------------------------------------------------------===// +// PtrDiffTType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCPtrDiffTType(MlirType type); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void); + +MLIR_CAPI_EXPORTED MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx); + +//===---------------------------------------------------------------------===// +// SignedSizeTType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCSignedSizeTType(MlirType type); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void); + +MLIR_CAPI_EXPORTED MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx); + +//===---------------------------------------------------------------------===// +// SizeTType +//===---------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirTypeIsAEmitCSizeTType(MlirType type); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCSizeTTypeGetTypeID(void); + +MLIR_CAPI_EXPORTED MlirType mlirEmitCSizeTTypeGet(MlirContext ctx); + +//===----------------------------------------------------------------------===// +// CmpPredicate attribute. +//===----------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr); + +MLIR_CAPI_EXPORTED MlirAttribute +mlirEmitCCmpPredicateAttrGet(MlirContext ctx, enum MlirEmitCCmpPredicate val); + +MLIR_CAPI_EXPORTED enum MlirEmitCCmpPredicate +mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void); + +//===----------------------------------------------------------------------===// +// Opaque attribute. +//===----------------------------------------------------------------------===// + +MLIR_CAPI_EXPORTED bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr); + +MLIR_CAPI_EXPORTED MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, + MlirStringRef value); + +MLIR_CAPI_EXPORTED MlirStringRef +mlirEmitCOpaqueAttrGetValue(MlirAttribute attr); + +MLIR_CAPI_EXPORTED MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void); + #ifdef __cplusplus } #endif diff --git a/mlir/lib/CAPI/Dialect/EmitC.cpp b/mlir/lib/CAPI/Dialect/EmitC.cpp index 3dcb7038a5798..b6d197366f622 100644 --- a/mlir/lib/CAPI/Dialect/EmitC.cpp +++ b/mlir/lib/CAPI/Dialect/EmitC.cpp @@ -10,4 +10,180 @@ #include "mlir/CAPI/Registration.h" #include "mlir/Dialect/EmitC/IR/EmitC.h" +using namespace mlir; + MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(EmitC, emitc, mlir::emitc::EmitCDialect) + +// Ensure the C-API enums are uint64_t-castable to C++ equivalents. +static_assert(static_cast(MLIR_EMITC_CMP_PREDICATE_EQ) == + static_cast(emitc::CmpPredicate::eq) && + static_cast(MLIR_EMITC_CMP_PREDICATE_NE) == + static_cast(emitc::CmpPredicate::ne) && + static_cast(MLIR_EMITC_CMP_PREDICATE_LT) == + static_cast(emitc::CmpPredicate::lt) && + static_cast(MLIR_EMITC_CMP_PREDICATE_LE) == + static_cast(emitc::CmpPredicate::le) && + static_cast(MLIR_EMITC_CMP_PREDICATE_GT) == + static_cast(emitc::CmpPredicate::gt) && + static_cast(MLIR_EMITC_CMP_PREDICATE_GE) == + static_cast(emitc::CmpPredicate::ge) && + static_cast(MLIR_EMITC_CMP_PREDICATE_THREE_WAY) == + static_cast(emitc::CmpPredicate::three_way), + "MlirEmitCCmpPredicate (C-API) and CmpPredicate (C++) mismatch"); + +//===---------------------------------------------------------------------===// +// ArrayType +//===---------------------------------------------------------------------===// + +bool mlirTypeIsAEmitCArrayType(MlirType type) { + return isa(unwrap(type)); +} + +MlirTypeID mlirEmitCArrayTypeGetTypeID(void) { + return wrap(emitc::ArrayType::getTypeID()); +} + +MlirType mlirEmitCArrayTypeGet(intptr_t nDims, int64_t *shape, + MlirType elementType) { + return wrap( + emitc::ArrayType::get(llvm::ArrayRef(shape, nDims), unwrap(elementType))); +} + +//===---------------------------------------------------------------------===// +// LValueType +//===---------------------------------------------------------------------===// + +bool mlirTypeIsAEmitCLValueType(MlirType type) { + return isa(unwrap(type)); +} + +MlirTypeID mlirEmitCLValueTypeGetTypeID(void) { + return wrap(emitc::LValueType::getTypeID()); +} + +MlirType mlirEmitCLValueTypeGet(MlirType valueType) { + return wrap(emitc::LValueType::get(unwrap(valueType))); +} + +//===---------------------------------------------------------------------===// +// OpaqueType +//===---------------------------------------------------------------------===// + +bool mlirTypeIsAEmitCOpaqueType(MlirType type) { + return isa(unwrap(type)); +} + +MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void) { + return wrap(emitc::OpaqueType::getTypeID()); +} + +MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, MlirStringRef value) { + return wrap(emitc::OpaqueType::get(unwrap(ctx), unwrap(value))); +} + +//===---------------------------------------------------------------------===// +// PointerType +//===---------------------------------------------------------------------===// + +bool mlirTypeIsAEmitCPointerType(MlirType type) { + return isa(unwrap(type)); +} + +MlirTypeID mlirEmitCPointerTypeGetTypeID(void) { + return wrap(emitc::PointerType::getTypeID()); +} + +MlirType mlirEmitCPointerTypeGet(MlirType pointee) { + return wrap(emitc::PointerType::get(unwrap(pointee))); +} + +//===---------------------------------------------------------------------===// +// PtrDiffTType +//===---------------------------------------------------------------------===// + +bool mlirTypeIsAEmitCPtrDiffTType(MlirType type) { + return isa(unwrap(type)); +} + +MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void) { + return wrap(emitc::PtrDiffTType::getTypeID()); +} + +MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx) { + return wrap(emitc::PtrDiffTType::get(unwrap(ctx))); +} + +//===---------------------------------------------------------------------===// +// SignedSizeTType +//===---------------------------------------------------------------------===// + +bool mlirTypeIsAEmitCSignedSizeTType(MlirType type) { + return isa(unwrap(type)); +} + +MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void) { + return wrap(emitc::SignedSizeTType::getTypeID()); +} + +MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx) { + return wrap(emitc::SignedSizeTType::get(unwrap(ctx))); +} + +//===---------------------------------------------------------------------===// +// SizeTType +//===---------------------------------------------------------------------===// + +bool mlirTypeIsAEmitCSizeTType(MlirType type) { + return isa(unwrap(type)); +} + +MlirTypeID mlirEmitCSizeTTypeGetTypeID(void) { + return wrap(emitc::SizeTType::getTypeID()); +} + +MlirType mlirEmitCSizeTTypeGet(MlirContext ctx) { + return wrap(emitc::SizeTType::get(unwrap(ctx))); +} + +//===----------------------------------------------------------------------===// +// CmpPredicate attribute. +//===----------------------------------------------------------------------===// + +bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr) { + return llvm::isa(unwrap(attr)); +} + +MlirAttribute mlirEmitCCmpPredicateAttrGet(MlirContext ctx, + MlirEmitCCmpPredicate val) { + return wrap((Attribute)emitc::CmpPredicateAttr::get( + unwrap(ctx), static_cast(val))); +} + +MlirEmitCCmpPredicate mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr) { + return static_cast( + llvm::cast(unwrap(attr)).getValue()); +} + +MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void) { + return wrap(emitc::CmpPredicateAttr::getTypeID()); +} + +//===----------------------------------------------------------------------===// +// Opaque attribute. +//===----------------------------------------------------------------------===// + +bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr) { + return llvm::isa(unwrap(attr)); +} + +MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, MlirStringRef value) { + return wrap((Attribute)emitc::OpaqueAttr::get(unwrap(ctx), unwrap(value))); +} + +MlirStringRef mlirEmitCOpaqueAttrGetValue(MlirAttribute attr) { + return wrap(llvm::cast(unwrap(attr)).getValue()); +} + +MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void) { + return wrap(emitc::OpaqueAttr::getTypeID()); +}