1 //===-- mlir-c/Interfaces.h - C API to Core MLIR IR interfaces ----*- C -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
8 //===----------------------------------------------------------------------===//
10 // This header declares the C interface to MLIR interface classes. It is
11 // intended to contain interfaces defined in lib/Interfaces.
13 //===----------------------------------------------------------------------===//
15 #ifndef MLIR_C_INTERFACES_H
16 #define MLIR_C_INTERFACES_H
18 #include "mlir-c/IR.h"
19 #include "mlir-c/Support.h"
25 /// Returns `true` if the given operation implements an interface identified by
27 MLIR_CAPI_EXPORTED
bool
28 mlirOperationImplementsInterface(MlirOperation operation
,
29 MlirTypeID interfaceTypeID
);
31 /// Returns `true` if the operation identified by its canonical string name
32 /// implements the interface identified by its TypeID in the given context.
33 /// Note that interfaces may be attached to operations in some contexts and not
35 MLIR_CAPI_EXPORTED
bool
36 mlirOperationImplementsInterfaceStatic(MlirStringRef operationName
,
38 MlirTypeID interfaceTypeID
);
40 //===----------------------------------------------------------------------===//
41 // InferTypeOpInterface.
42 //===----------------------------------------------------------------------===//
44 /// Returns the interface TypeID of the InferTypeOpInterface.
45 MLIR_CAPI_EXPORTED MlirTypeID
mlirInferTypeOpInterfaceTypeID();
47 /// These callbacks are used to return multiple types from functions while
48 /// transferring ownership to the caller. The first argument is the number of
49 /// consecutive elements pointed to by the second argument. The third argument
50 /// is an opaque pointer forwarded to the callback by the caller.
51 typedef void (*MlirTypesCallback
)(intptr_t, MlirType
*, void *);
53 /// Infers the return types of the operation identified by its canonical given
54 /// the arguments that will be supplied to its generic builder. Calls `callback`
55 /// with the types of inferred arguments, potentially several times, on success.
56 /// Returns failure otherwise.
57 MLIR_CAPI_EXPORTED MlirLogicalResult
mlirInferTypeOpInterfaceInferReturnTypes(
58 MlirStringRef opName
, MlirContext context
, MlirLocation location
,
59 intptr_t nOperands
, MlirValue
*operands
, MlirAttribute attributes
,
60 void *properties
, intptr_t nRegions
, MlirRegion
*regions
,
61 MlirTypesCallback callback
, void *userData
);
63 //===----------------------------------------------------------------------===//
64 // InferShapedTypeOpInterface.
65 //===----------------------------------------------------------------------===//
67 /// Returns the interface TypeID of the InferShapedTypeOpInterface.
68 MLIR_CAPI_EXPORTED MlirTypeID
mlirInferShapedTypeOpInterfaceTypeID();
70 /// These callbacks are used to return multiple shaped type components from
71 /// functions while transferring ownership to the caller. The first argument is
72 /// the has rank boolean followed by the the rank and a pointer to the shape
73 /// (if applicable). The next argument is the element type, then the attribute.
74 /// The last argument is an opaque pointer forwarded to the callback by the
75 /// caller. This callback will be called potentially multiple times for each
76 /// shaped type components.
77 typedef void (*MlirShapedTypeComponentsCallback
)(bool, intptr_t,
78 const int64_t *, MlirType
,
79 MlirAttribute
, void *);
81 /// Infers the return shaped type components of the operation. Calls `callback`
82 /// with the types of inferred arguments on success. Returns failure otherwise.
83 MLIR_CAPI_EXPORTED MlirLogicalResult
84 mlirInferShapedTypeOpInterfaceInferReturnTypes(
85 MlirStringRef opName
, MlirContext context
, MlirLocation location
,
86 intptr_t nOperands
, MlirValue
*operands
, MlirAttribute attributes
,
87 void *properties
, intptr_t nRegions
, MlirRegion
*regions
,
88 MlirShapedTypeComponentsCallback callback
, void *userData
);
94 #endif // MLIR_C_INTERFACES_H