1 | //===-- mlir-c/Interfaces.h - C API to Core MLIR IR interfaces ----*- C -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM |
4 | // Exceptions. |
5 | // See https://llvm.org/LICENSE.txt for license information. |
6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
7 | // |
8 | //===----------------------------------------------------------------------===// |
9 | // |
10 | // This header declares the C interface to MLIR interface classes. It is |
11 | // intended to contain interfaces defined in lib/Interfaces. |
12 | // |
13 | //===----------------------------------------------------------------------===// |
14 | |
15 | #ifndef MLIR_C_INTERFACES_H |
16 | #define MLIR_C_INTERFACES_H |
17 | |
18 | #include "mlir-c/IR.h" |
19 | #include "mlir-c/Support.h" |
20 | |
21 | #ifdef __cplusplus |
22 | extern "C" { |
23 | #endif |
24 | |
25 | /// Returns `true` if the given operation implements an interface identified by |
26 | /// its TypeID. |
27 | MLIR_CAPI_EXPORTED bool |
28 | mlirOperationImplementsInterface(MlirOperation operation, |
29 | MlirTypeID interfaceTypeID); |
30 | |
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 |
34 | /// others. |
35 | MLIR_CAPI_EXPORTED bool |
36 | mlirOperationImplementsInterfaceStatic(MlirStringRef operationName, |
37 | MlirContext context, |
38 | MlirTypeID interfaceTypeID); |
39 | |
40 | //===----------------------------------------------------------------------===// |
41 | // InferTypeOpInterface. |
42 | //===----------------------------------------------------------------------===// |
43 | |
44 | /// Returns the interface TypeID of the InferTypeOpInterface. |
45 | MLIR_CAPI_EXPORTED MlirTypeID mlirInferTypeOpInterfaceTypeID(); |
46 | |
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 *); |
52 | |
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); |
62 | |
63 | //===----------------------------------------------------------------------===// |
64 | // InferShapedTypeOpInterface. |
65 | //===----------------------------------------------------------------------===// |
66 | |
67 | /// Returns the interface TypeID of the InferShapedTypeOpInterface. |
68 | MLIR_CAPI_EXPORTED MlirTypeID mlirInferShapedTypeOpInterfaceTypeID(); |
69 | |
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 *); |
80 | |
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); |
89 | |
90 | #ifdef __cplusplus |
91 | } |
92 | #endif |
93 | |
94 | #endif // MLIR_C_INTERFACES_H |
95 | |