| //===-- mlir-c/Registration.h - Registration functions for MLIR ---*- C -*-===// |
| // |
| // Part of the LLVM Project, 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 |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef MLIR_C_REGISTRATION_H |
| #define MLIR_C_REGISTRATION_H |
| |
| #include "mlir-c/IR.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| //===----------------------------------------------------------------------===// |
| // Dialect registration declarations. |
| // Registration entry-points for each dialect are declared using the common |
| // MLIR_DECLARE_DIALECT_REGISTRATION_CAPI macro, which takes the dialect |
| // API name (i.e. "Standard", "Tensor", "Linalg") and namespace (i.e. "std", |
| // "tensor", "linalg"). The following declarations are produced: |
| // |
| // /// Gets the above hook methods in struct form for a dialect by namespace. |
| // /// This is intended to facilitate dynamic lookup and registration of |
| // /// dialects via a plugin facility based on shared library symbol lookup. |
| // const MlirDialectHandle *mlirGetDialectHandle__{NAMESPACE}__(); |
| // |
| // This is done via a common macro to facilitate future expansion to |
| // registration schemes. |
| //===----------------------------------------------------------------------===// |
| |
| struct MlirDialectHandle { |
| const void *ptr; |
| }; |
| typedef struct MlirDialectHandle MlirDialectHandle; |
| |
| #define MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(Name, Namespace) \ |
| MLIR_CAPI_EXPORTED MlirDialectHandle mlirGetDialectHandle__##Namespace##__() |
| |
| /// Returns the namespace associated with the provided dialect handle. |
| MLIR_CAPI_EXPORTED |
| MlirStringRef mlirDialectHandleGetNamespace(MlirDialectHandle); |
| |
| /// Registers the dialect associated with the provided dialect handle. |
| MLIR_CAPI_EXPORTED void mlirDialectHandleRegisterDialect(MlirDialectHandle, |
| MlirContext); |
| |
| /// Loads the dialect associated with the provided dialect handle. |
| MLIR_CAPI_EXPORTED MlirDialect mlirDialectHandleLoadDialect(MlirDialectHandle, |
| MlirContext); |
| |
| /// Registers all dialects known to core MLIR with the provided Context. |
| /// This is needed before creating IR for these Dialects. |
| /// TODO: Remove this function once the real registration API is finished. |
| MLIR_CAPI_EXPORTED void mlirRegisterAllDialects(MlirContext context); |
| |
| /// Register all translations to LLVM IR for dialects that can support it. |
| MLIR_CAPI_EXPORTED void mlirRegisterAllLLVMTranslations(MlirContext context); |
| |
| /// Register all compiler passes of MLIR. |
| MLIR_CAPI_EXPORTED void mlirRegisterAllPasses(); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // MLIR_C_REGISTRATION_H |