| 1 | //===-- mlir-c/Dialect/Transform/Interpreter.h --------------------*- 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 | // C interface to the transform dialect interpreter. |
| 11 | // |
| 12 | //===----------------------------------------------------------------------===// |
| 13 | |
| 14 | #include "mlir-c/IR.h" |
| 15 | #include "mlir-c/Support.h" |
| 16 | |
| 17 | #ifdef __cplusplus |
| 18 | extern "C" { |
| 19 | #endif |
| 20 | |
| 21 | #define DEFINE_C_API_STRUCT(name, storage) \ |
| 22 | struct name { \ |
| 23 | storage *ptr; \ |
| 24 | }; \ |
| 25 | typedef struct name name |
| 26 | |
| 27 | DEFINE_C_API_STRUCT(MlirTransformOptions, void); |
| 28 | |
| 29 | #undef DEFINE_C_API_STRUCT |
| 30 | |
| 31 | //----------------------------------------------------------------------------// |
| 32 | // MlirTransformOptions |
| 33 | //----------------------------------------------------------------------------// |
| 34 | |
| 35 | /// Creates a default-initialized transform options object. |
| 36 | MLIR_CAPI_EXPORTED MlirTransformOptions mlirTransformOptionsCreate(void); |
| 37 | |
| 38 | /// Enables or disables expensive checks in transform options. |
| 39 | MLIR_CAPI_EXPORTED void |
| 40 | mlirTransformOptionsEnableExpensiveChecks(MlirTransformOptions transformOptions, |
| 41 | bool enable); |
| 42 | |
| 43 | /// Returns true if expensive checks are enabled in transform options. |
| 44 | MLIR_CAPI_EXPORTED bool mlirTransformOptionsGetExpensiveChecksEnabled( |
| 45 | MlirTransformOptions transformOptions); |
| 46 | |
| 47 | /// Enables or disables the enforcement of the top-level transform op being |
| 48 | /// single in transform options. |
| 49 | MLIR_CAPI_EXPORTED void mlirTransformOptionsEnforceSingleTopLevelTransformOp( |
| 50 | MlirTransformOptions transformOptions, bool enable); |
| 51 | |
| 52 | /// Returns true if the enforcement of the top-level transform op being single |
| 53 | /// is enabled in transform options. |
| 54 | MLIR_CAPI_EXPORTED bool mlirTransformOptionsGetEnforceSingleTopLevelTransformOp( |
| 55 | MlirTransformOptions transformOptions); |
| 56 | |
| 57 | /// Destroys a transform options object previously created by |
| 58 | /// mlirTransformOptionsCreate. |
| 59 | MLIR_CAPI_EXPORTED void |
| 60 | mlirTransformOptionsDestroy(MlirTransformOptions transformOptions); |
| 61 | |
| 62 | //----------------------------------------------------------------------------// |
| 63 | // Transform interpreter and utilities. |
| 64 | //----------------------------------------------------------------------------// |
| 65 | |
| 66 | /// Applies the transformation script starting at the given transform root |
| 67 | /// operation to the given payload operation. The module containing the |
| 68 | /// transform root as well as the transform options should be provided. The |
| 69 | /// transform operation must implement TransformOpInterface and the module must |
| 70 | /// be a ModuleOp. Returns the status of the application. |
| 71 | MLIR_CAPI_EXPORTED MlirLogicalResult mlirTransformApplyNamedSequence( |
| 72 | MlirOperation payload, MlirOperation transformRoot, |
| 73 | MlirOperation transformModule, MlirTransformOptions transformOptions); |
| 74 | |
| 75 | /// Merge the symbols from `other` into `target`, potentially renaming them to |
| 76 | /// avoid conflicts. Private symbols may be renamed during the merge, public |
| 77 | /// symbols must have at most one declaration. A name conflict in public symbols |
| 78 | /// is reported as an error before returning a failure. |
| 79 | /// |
| 80 | /// Note that this clones the `other` operation unlike the C++ counterpart that |
| 81 | /// takes ownership. |
| 82 | MLIR_CAPI_EXPORTED MlirLogicalResult |
| 83 | mlirMergeSymbolsIntoFromClone(MlirOperation target, MlirOperation other); |
| 84 | |
| 85 | #ifdef __cplusplus |
| 86 | } |
| 87 | #endif |
| 88 | |