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
18extern "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
27DEFINE_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.
36MLIR_CAPI_EXPORTED MlirTransformOptions mlirTransformOptionsCreate(void);
37
38/// Enables or disables expensive checks in transform options.
39MLIR_CAPI_EXPORTED void
40mlirTransformOptionsEnableExpensiveChecks(MlirTransformOptions transformOptions,
41 bool enable);
42
43/// Returns true if expensive checks are enabled in transform options.
44MLIR_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.
49MLIR_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.
54MLIR_CAPI_EXPORTED bool mlirTransformOptionsGetEnforceSingleTopLevelTransformOp(
55 MlirTransformOptions transformOptions);
56
57/// Destroys a transform options object previously created by
58/// mlirTransformOptionsCreate.
59MLIR_CAPI_EXPORTED void
60mlirTransformOptionsDestroy(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.
71MLIR_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.
82MLIR_CAPI_EXPORTED MlirLogicalResult
83mlirMergeSymbolsIntoFromClone(MlirOperation target, MlirOperation other);
84
85#ifdef __cplusplus
86}
87#endif
88

source code of mlir/include/mlir-c/Dialect/Transform/Interpreter.h