| // Copyright 2021 The IREE Authors |
| // |
| // Licensed under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| #include "iree-dialects-c/Dialects.h" |
| |
| #include "iree-dialects/Dialect/IREE/IREEDialect.h" |
| #include "iree-dialects/Dialect/IREEPyDM/IR/Dialect.h" |
| #include "iree-dialects/Dialect/IREEPyDM/Transforms/Passes.h" |
| #include "mlir/CAPI/IR.h" |
| #include "mlir/CAPI/Pass.h" |
| #include "mlir/CAPI/Registration.h" |
| #include "mlir/CAPI/Support.h" |
| #include "mlir/CAPI/Utils.h" |
| #include "mlir/CAPI/Wrap.h" |
| #include "mlir/Support/LLVM.h" |
| |
| using namespace mlir; |
| |
| //===----------------------------------------------------------------------===// |
| // IREEDialect |
| //===----------------------------------------------------------------------===// |
| |
| MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(IREE, iree, mlir::iree::IREEDialect) |
| |
| //===----------------------------------------------------------------------===// |
| // IREEPyDMDialect |
| //===----------------------------------------------------------------------===// |
| |
| MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(IREEPyDM, iree_pydm, |
| mlir::iree_pydm::IREEPyDMDialect) |
| |
| DEFINE_C_API_PTR_METHODS(IREEPyDMSourceBundle, mlir::iree_pydm::SourceBundle) |
| DEFINE_C_API_PTR_METHODS(IREEPyDMLoweringOptions, |
| mlir::iree_pydm::LowerToIREEOptions) |
| |
| bool mlirTypeIsAIREEPyDMPrimitiveType(MlirType type) { |
| return unwrap(type).isa<mlir::iree_pydm::PrimitiveType>(); |
| } |
| |
| #define IREEPYDM_DEFINE_NULLARY_TYPE(Name) \ |
| bool mlirTypeIsAIREEPyDM##Name(MlirType type) { \ |
| return unwrap(type).isa<mlir::iree_pydm::Name##Type>(); \ |
| } \ |
| MlirType mlirIREEPyDM##Name##TypeGet(MlirContext ctx) { \ |
| return wrap(mlir::iree_pydm::Name##Type::get(unwrap(ctx))); \ |
| } |
| |
| IREEPYDM_DEFINE_NULLARY_TYPE(Bool) |
| IREEPYDM_DEFINE_NULLARY_TYPE(Bytes) |
| IREEPYDM_DEFINE_NULLARY_TYPE(Integer) |
| IREEPYDM_DEFINE_NULLARY_TYPE(ExceptionResult) |
| IREEPYDM_DEFINE_NULLARY_TYPE(FreeVarRef) |
| IREEPYDM_DEFINE_NULLARY_TYPE(List) |
| IREEPYDM_DEFINE_NULLARY_TYPE(None) |
| IREEPYDM_DEFINE_NULLARY_TYPE(Real) |
| IREEPYDM_DEFINE_NULLARY_TYPE(Str) |
| IREEPYDM_DEFINE_NULLARY_TYPE(Tuple) |
| IREEPYDM_DEFINE_NULLARY_TYPE(Type) |
| |
| // Non-nullary Type constructors from the above. |
| MlirType mlirIREEPyDMIntegerTypeGetExplicit(MlirContext ctx, int bitWidth, |
| bool isSigned) { |
| return wrap( |
| mlir::iree_pydm::IntegerType::get(unwrap(ctx), bitWidth, isSigned)); |
| } |
| |
| // ObjectType. |
| bool mlirTypeIsAIREEPyDMObject(MlirType type) { |
| return unwrap(type).isa<mlir::iree_pydm::ObjectType>(); |
| } |
| |
| MlirType mlirIREEPyDMObjectTypeGet(MlirContext ctx, MlirType primitive) { |
| if (!primitive.ptr) { |
| return wrap(mlir::iree_pydm::ObjectType::get(unwrap(ctx), nullptr)); |
| } |
| |
| auto cppType = unwrap(primitive).cast<mlir::iree_pydm::PrimitiveType>(); |
| return wrap(mlir::iree_pydm::ObjectType::get(unwrap(ctx), cppType)); |
| } |
| |
| // LowerToIREE Pass Pipeline. |
| void mlirIREEPyDMBuildLowerToIREEPassPipeline(MlirOpPassManager passManager, |
| IREEPyDMLoweringOptions options) { |
| auto *passManagerCpp = unwrap(passManager); |
| mlir::iree_pydm::buildLowerToIREEPassPipeline(*passManagerCpp, |
| *unwrap(options)); |
| } |
| |
| // SourceBundle |
| IREEPyDMSourceBundle ireePyDMSourceBundleCreateAsm(MlirStringRef asmString) { |
| auto bundle = std::make_unique<mlir::iree_pydm::SourceBundle>(); |
| bundle->asmBlob = std::make_shared<std::string>(unwrap(asmString)); |
| return wrap(bundle.release()); |
| } |
| |
| IREEPyDMSourceBundle ireePyDMSourceBundleCreateFile(MlirStringRef filePath) { |
| auto bundle = std::make_unique<mlir::iree_pydm::SourceBundle>(); |
| bundle->asmFilePath = std::string(unwrap(filePath)); |
| return wrap(bundle.release()); |
| } |
| |
| void ireePyDMSourceBundleDestroy(IREEPyDMSourceBundle bundle) { |
| delete unwrap(bundle); |
| } |
| |
| // LoweringOptions |
| IREEPyDMLoweringOptions ireePyDMLoweringOptionsCreate() { |
| return wrap(new mlir::iree_pydm::LowerToIREEOptions); |
| } |
| |
| void ireePyDMLoweringOptionsLinkRtl(IREEPyDMLoweringOptions options, |
| IREEPyDMSourceBundle source) { |
| unwrap(options)->linkRtlSource = *unwrap(source); |
| } |
| |
| void ireePyDMLoweringOptionsDestroy(IREEPyDMLoweringOptions options) { |
| delete unwrap(options); |
| } |