[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / mlir / include / mlir-c / Interfaces.h
bloba5a3473eaef59646aca50057bfdc6c67e38f5c1e
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.
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"
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
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);
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);
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);
90 #ifdef __cplusplus
92 #endif
94 #endif // MLIR_C_INTERFACES_H