blob: fa320324234e8ddc627db4d6c88603bc937c9271 [file] [log] [blame]
//===-- mlir-c/Dialect/Transform/Interpreter.h --------------------*- C -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM
// Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// C interface to the transform dialect interpreter.
//
//===----------------------------------------------------------------------===//
#include "mlir-c/IR.h"
#include "mlir-c/Support.h"
#ifdef __cplusplus
extern "C" {
#endif
#define DEFINE_C_API_STRUCT(name, storage) \
struct name { \
storage *ptr; \
}; \
typedef struct name name
DEFINE_C_API_STRUCT(MlirTransformOptions, void);
#undef DEFINE_C_API_STRUCT
//----------------------------------------------------------------------------//
// MlirTransformOptions
//----------------------------------------------------------------------------//
/// Creates a default-initialized transform options object.
MLIR_CAPI_EXPORTED MlirTransformOptions mlirTransformOptionsCreate(void);
/// Enables or disables expensive checks in transform options.
MLIR_CAPI_EXPORTED void
mlirTransformOptionsEnableExpensiveChecks(MlirTransformOptions transformOptions,
bool enable);
/// Returns true if expensive checks are enabled in transform options.
MLIR_CAPI_EXPORTED bool mlirTransformOptionsGetExpensiveChecksEnabled(
MlirTransformOptions transformOptions);
/// Enables or disables the enforcement of the top-level transform op being
/// single in transform options.
MLIR_CAPI_EXPORTED void mlirTransformOptionsEnforceSingleTopLevelTransformOp(
MlirTransformOptions transformOptions, bool enable);
/// Returns true if the enforcement of the top-level transform op being single
/// is enabled in transform options.
MLIR_CAPI_EXPORTED bool mlirTransformOptionsGetEnforceSingleTopLevelTransformOp(
MlirTransformOptions transformOptions);
/// Destroys a transform options object previously created by
/// mlirTransformOptionsCreate.
MLIR_CAPI_EXPORTED void
mlirTransformOptionsDestroy(MlirTransformOptions transformOptions);
//----------------------------------------------------------------------------//
// Transform interpreter and utilities.
//----------------------------------------------------------------------------//
/// Applies the transformation script starting at the given transform root
/// operation to the given payload operation. The module containing the
/// transform root as well as the transform options should be provided. The
/// transform operation must implement TransformOpInterface and the module must
/// be a ModuleOp. Returns the status of the application.
MLIR_CAPI_EXPORTED MlirLogicalResult mlirTransformApplyNamedSequence(
MlirOperation payload, MlirOperation transformRoot,
MlirOperation transformModule, MlirTransformOptions transformOptions);
/// Merge the symbols from `other` into `target`, potentially renaming them to
/// avoid conflicts. Private symbols may be renamed during the merge, public
/// symbols must have at most one declaration. A name conflict in public symbols
/// is reported as an error before returning a failure.
///
/// Note that this clones the `other` operation unlike the C++ counterpart that
/// takes ownership.
MLIR_CAPI_EXPORTED MlirLogicalResult
mlirMergeSymbolsIntoFromClone(MlirOperation target, MlirOperation other);
#ifdef __cplusplus
}
#endif