//===- Rewrite.cpp - C API for Rewrite Patterns ---------------------------===// // // 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/Rewrite.h" #include "mlir-c/Transforms.h" #include "mlir/CAPI/IR.h" #include "mlir/CAPI/Support.h" #include "mlir/IR/PatternMatch.h" #include "mlir/Rewrite/FrozenRewritePatternSet.h" #include "mlir/Transforms/GreedyPatternRewriteDriver.h" using namespace mlir; inline mlir::RewritePatternSet &unwrap(MlirRewritePatternSet module) { assert(module.ptr && "unexpected null module"); return *(static_cast(module.ptr)); } inline MlirRewritePatternSet wrap(mlir::RewritePatternSet *module) { return {module}; } inline mlir::FrozenRewritePatternSet * unwrap(MlirFrozenRewritePatternSet module) { assert(module.ptr && "unexpected null module"); return static_cast(module.ptr); } inline MlirFrozenRewritePatternSet wrap(mlir::FrozenRewritePatternSet *module) { return {module}; } MlirFrozenRewritePatternSet mlirFreezeRewritePattern(MlirRewritePatternSet op) { auto *m = new mlir::FrozenRewritePatternSet(std::move(unwrap(op))); op.ptr = nullptr; return wrap(m); } void mlirFrozenRewritePatternSetDestroy(MlirFrozenRewritePatternSet op) { delete unwrap(op); op.ptr = nullptr; } MlirLogicalResult mlirApplyPatternsAndFoldGreedily(MlirModule op, MlirFrozenRewritePatternSet patterns, MlirGreedyRewriteDriverConfig) { return wrap( mlir::applyPatternsAndFoldGreedily(unwrap(op), *unwrap(patterns))); } #if MLIR_ENABLE_PDL_IN_PATTERNMATCH inline mlir::PDLPatternModule *unwrap(MlirPDLPatternModule module) { assert(module.ptr && "unexpected null module"); return static_cast(module.ptr); } inline MlirPDLPatternModule wrap(mlir::PDLPatternModule *module) { return {module}; } MlirPDLPatternModule mlirPDLPatternModuleFromModule(MlirModule op) { return wrap(new mlir::PDLPatternModule( mlir::OwningOpRef(unwrap(op)))); } void mlirPDLPatternModuleDestroy(MlirPDLPatternModule op) { delete unwrap(op); op.ptr = nullptr; } MlirRewritePatternSet mlirRewritePatternSetFromPDLPatternModule(MlirPDLPatternModule op) { auto *m = new mlir::RewritePatternSet(std::move(*unwrap(op))); op.ptr = nullptr; return wrap(m); } #endif // MLIR_ENABLE_PDL_IN_PATTERNMATCH