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