//===-- mlir-c/Interfaces.h - C API to Core MLIR IR interfaces ----*- 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 // //===----------------------------------------------------------------------===// // // This header declares the C interface to MLIR interface classes. It is // intended to contain interfaces defined in lib/Interfaces. // //===----------------------------------------------------------------------===// #ifndef MLIR_C_INTERFACES_H #define MLIR_C_INTERFACES_H #include "mlir-c/IR.h" #include "mlir-c/Support.h" #ifdef __cplusplus extern "C" { #endif /// Returns `true` if the given operation implements an interface identified by /// its TypeID. MLIR_CAPI_EXPORTED bool mlirOperationImplementsInterface(MlirOperation operation, MlirTypeID interfaceTypeID); /// Returns `true` if the operation identified by its canonical string name /// implements the interface identified by its TypeID in the given context. /// Note that interfaces may be attached to operations in some contexts and not /// others. MLIR_CAPI_EXPORTED bool mlirOperationImplementsInterfaceStatic(MlirStringRef operationName, MlirContext context, MlirTypeID interfaceTypeID); //===----------------------------------------------------------------------===// // InferTypeOpInterface. //===----------------------------------------------------------------------===// /// Returns the interface TypeID of the InferTypeOpInterface. MLIR_CAPI_EXPORTED MlirTypeID mlirInferTypeOpInterfaceTypeID(); /// These callbacks are used to return multiple types from functions while /// transferring ownership to the caller. The first argument is the number of /// consecutive elements pointed to by the second argument. The third argument /// is an opaque pointer forwarded to the callback by the caller. MlirTypesCallback; /// Infers the return types of the operation identified by its canonical given /// the arguments that will be supplied to its generic builder. Calls `callback` /// with the types of inferred arguments, potentially several times, on success. /// Returns failure otherwise. MLIR_CAPI_EXPORTED MlirLogicalResult mlirInferTypeOpInterfaceInferReturnTypes( MlirStringRef opName, MlirContext context, MlirLocation location, intptr_t nOperands, MlirValue *operands, MlirAttribute attributes, void *properties, intptr_t nRegions, MlirRegion *regions, MlirTypesCallback callback, void *userData); //===----------------------------------------------------------------------===// // InferShapedTypeOpInterface. //===----------------------------------------------------------------------===// /// Returns the interface TypeID of the InferShapedTypeOpInterface. MLIR_CAPI_EXPORTED MlirTypeID mlirInferShapedTypeOpInterfaceTypeID(); /// These callbacks are used to return multiple shaped type components from /// functions while transferring ownership to the caller. The first argument is /// the has rank boolean followed by the the rank and a pointer to the shape /// (if applicable). The next argument is the element type, then the attribute. /// The last argument is an opaque pointer forwarded to the callback by the /// caller. This callback will be called potentially multiple times for each /// shaped type components. MlirShapedTypeComponentsCallback; /// Infers the return shaped type components of the operation. Calls `callback` /// with the types of inferred arguments on success. Returns failure otherwise. MLIR_CAPI_EXPORTED MlirLogicalResult mlirInferShapedTypeOpInterfaceInferReturnTypes( MlirStringRef opName, MlirContext context, MlirLocation location, intptr_t nOperands, MlirValue *operands, MlirAttribute attributes, void *properties, intptr_t nRegions, MlirRegion *regions, MlirShapedTypeComponentsCallback callback, void *userData); #ifdef __cplusplus } #endif #endif // MLIR_C_INTERFACES_H