brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · b6d1973 Raw
190 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "mlir-c/Dialect/EmitC.h"10#include "mlir/CAPI/Registration.h"11#include "mlir/Dialect/EmitC/IR/EmitC.h"12 13using namespace mlir;14 15MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(EmitC, emitc, mlir::emitc::EmitCDialect)16 17// Ensure the C-API enums are uint64_t-castable to C++ equivalents.18static_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// ArrayType36//===---------------------------------------------------------------------===//37 38bool mlirTypeIsAEmitCArrayType(MlirType type) {39  return isa<emitc::ArrayType>(unwrap(type));40}41 42MlirTypeID mlirEmitCArrayTypeGetTypeID(void) {43  return wrap(emitc::ArrayType::getTypeID());44}45 46MlirType 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// LValueType54//===---------------------------------------------------------------------===//55 56bool mlirTypeIsAEmitCLValueType(MlirType type) {57  return isa<emitc::LValueType>(unwrap(type));58}59 60MlirTypeID mlirEmitCLValueTypeGetTypeID(void) {61  return wrap(emitc::LValueType::getTypeID());62}63 64MlirType mlirEmitCLValueTypeGet(MlirType valueType) {65  return wrap(emitc::LValueType::get(unwrap(valueType)));66}67 68//===---------------------------------------------------------------------===//69// OpaqueType70//===---------------------------------------------------------------------===//71 72bool mlirTypeIsAEmitCOpaqueType(MlirType type) {73  return isa<emitc::OpaqueType>(unwrap(type));74}75 76MlirTypeID mlirEmitCOpaqueTypeGetTypeID(void) {77  return wrap(emitc::OpaqueType::getTypeID());78}79 80MlirType mlirEmitCOpaqueTypeGet(MlirContext ctx, MlirStringRef value) {81  return wrap(emitc::OpaqueType::get(unwrap(ctx), unwrap(value)));82}83 84//===---------------------------------------------------------------------===//85// PointerType86//===---------------------------------------------------------------------===//87 88bool mlirTypeIsAEmitCPointerType(MlirType type) {89  return isa<emitc::PointerType>(unwrap(type));90}91 92MlirTypeID mlirEmitCPointerTypeGetTypeID(void) {93  return wrap(emitc::PointerType::getTypeID());94}95 96MlirType mlirEmitCPointerTypeGet(MlirType pointee) {97  return wrap(emitc::PointerType::get(unwrap(pointee)));98}99 100//===---------------------------------------------------------------------===//101// PtrDiffTType102//===---------------------------------------------------------------------===//103 104bool mlirTypeIsAEmitCPtrDiffTType(MlirType type) {105  return isa<emitc::PtrDiffTType>(unwrap(type));106}107 108MlirTypeID mlirEmitCPtrDiffTTypeGetTypeID(void) {109  return wrap(emitc::PtrDiffTType::getTypeID());110}111 112MlirType mlirEmitCPtrDiffTTypeGet(MlirContext ctx) {113  return wrap(emitc::PtrDiffTType::get(unwrap(ctx)));114}115 116//===---------------------------------------------------------------------===//117// SignedSizeTType118//===---------------------------------------------------------------------===//119 120bool mlirTypeIsAEmitCSignedSizeTType(MlirType type) {121  return isa<emitc::SignedSizeTType>(unwrap(type));122}123 124MlirTypeID mlirEmitCSignedSizeTTypeGetTypeID(void) {125  return wrap(emitc::SignedSizeTType::getTypeID());126}127 128MlirType mlirEmitCSignedSizeTTypeGet(MlirContext ctx) {129  return wrap(emitc::SignedSizeTType::get(unwrap(ctx)));130}131 132//===---------------------------------------------------------------------===//133// SizeTType134//===---------------------------------------------------------------------===//135 136bool mlirTypeIsAEmitCSizeTType(MlirType type) {137  return isa<emitc::SizeTType>(unwrap(type));138}139 140MlirTypeID mlirEmitCSizeTTypeGetTypeID(void) {141  return wrap(emitc::SizeTType::getTypeID());142}143 144MlirType mlirEmitCSizeTTypeGet(MlirContext ctx) {145  return wrap(emitc::SizeTType::get(unwrap(ctx)));146}147 148//===----------------------------------------------------------------------===//149// CmpPredicate attribute.150//===----------------------------------------------------------------------===//151 152bool mlirAttributeIsAEmitCCmpPredicate(MlirAttribute attr) {153  return llvm::isa<emitc::CmpPredicateAttr>(unwrap(attr));154}155 156MlirAttribute mlirEmitCCmpPredicateAttrGet(MlirContext ctx,157                                           MlirEmitCCmpPredicate val) {158  return wrap((Attribute)emitc::CmpPredicateAttr::get(159      unwrap(ctx), static_cast<emitc::CmpPredicate>(val)));160}161 162MlirEmitCCmpPredicate mlirEmitCCmpPredicateAttrGetValue(MlirAttribute attr) {163  return static_cast<MlirEmitCCmpPredicate>(164      llvm::cast<emitc::CmpPredicateAttr>(unwrap(attr)).getValue());165}166 167MlirTypeID mlirEmitCCmpPredicateAttrGetTypeID(void) {168  return wrap(emitc::CmpPredicateAttr::getTypeID());169}170 171//===----------------------------------------------------------------------===//172// Opaque attribute.173//===----------------------------------------------------------------------===//174 175bool mlirAttributeIsAEmitCOpaque(MlirAttribute attr) {176  return llvm::isa<emitc::OpaqueAttr>(unwrap(attr));177}178 179MlirAttribute mlirEmitCOpaqueAttrGet(MlirContext ctx, MlirStringRef value) {180  return wrap((Attribute)emitc::OpaqueAttr::get(unwrap(ctx), unwrap(value)));181}182 183MlirStringRef mlirEmitCOpaqueAttrGetValue(MlirAttribute attr) {184  return wrap(llvm::cast<emitc::OpaqueAttr>(unwrap(attr)).getValue());185}186 187MlirTypeID mlirEmitCOpaqueAttrGetTypeID(void) {188  return wrap(emitc::OpaqueAttr::getTypeID());189}190