| // 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" | 
 |  | 
 | //===----------------------------------------------------------------------===// | 
 | // IREEDialect | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(IREE, iree, mlir::iree::IREEDialect) | 
 |  | 
 | //===----------------------------------------------------------------------===// | 
 | // IREEPyDMDialect | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | MLIR_DEFINE_CAPI_DIALECT_REGISTRATION(IREEPyDM, iree_pydm, | 
 |                                       mlir::iree_pydm::IREEPyDMDialect) | 
 |  | 
 | 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) | 
 |  | 
 | 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)); | 
 | } | 
 |  | 
 | void mlirIREEPyDMBuildLowerToIREEPassPipeline(MlirOpPassManager passManager) { | 
 |   auto *passManagerCpp = unwrap(passManager); | 
 |   // TODO: Should be a pass pipeline, not loose passes in the C impl. | 
 |   passManagerCpp->addPass(mlir::iree_pydm::createConvertIREEPyDMToIREEPass()); | 
 | } |