//===- Pass.cpp - C Interface for General Pass Management APIs ------------===// // // 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 // //===----------------------------------------------------------------------===// #include "mlir-c/Pass.h" #include "mlir/CAPI/IR.h" #include "mlir/CAPI/Pass.h" #include "mlir/CAPI/Support.h" #include "mlir/CAPI/Utils.h" #include "mlir/Pass/PassManager.h" using namespace mlir; //===----------------------------------------------------------------------===// // PassManager/OpPassManager APIs. //===----------------------------------------------------------------------===// MlirPassManager mlirPassManagerCreate(MlirContext ctx) { return wrap(new PassManager(unwrap(ctx))); } void mlirPassManagerDestroy(MlirPassManager passManager) { delete unwrap(passManager); } MlirOpPassManager mlirPassManagerGetAsOpPassManager(MlirPassManager passManager) { return wrap(static_cast(unwrap(passManager))); } MlirLogicalResult mlirPassManagerRun(MlirPassManager passManager, MlirModule module) { return wrap(unwrap(passManager)->run(unwrap(module))); } MlirOpPassManager mlirPassManagerGetNestedUnder(MlirPassManager passManager, MlirStringRef operationName) { return wrap(&unwrap(passManager)->nest(unwrap(operationName))); } MlirOpPassManager mlirOpPassManagerGetNestedUnder(MlirOpPassManager passManager, MlirStringRef operationName) { return wrap(&unwrap(passManager)->nest(unwrap(operationName))); } void mlirPassManagerAddOwnedPass(MlirPassManager passManager, MlirPass pass) { unwrap(passManager)->addPass(std::unique_ptr(unwrap(pass))); } void mlirOpPassManagerAddOwnedPass(MlirOpPassManager passManager, MlirPass pass) { unwrap(passManager)->addPass(std::unique_ptr(unwrap(pass))); } void mlirPrintPassPipeline(MlirOpPassManager passManager, MlirStringCallback callback, void *userData) { detail::CallbackOstream stream(callback, userData); unwrap(passManager)->printAsTextualPipeline(stream); } MlirLogicalResult mlirParsePassPipeline(MlirOpPassManager passManager, MlirStringRef pipeline) { // TODO: errors are sent to std::errs() at the moment, we should pass in a // stream and redirect to a diagnostic. return wrap(mlir::parsePassPipeline(unwrap(pipeline), *unwrap(passManager))); }