118cf1cd9SJacques Pienaar //===- Rewrite.cpp - C API for Rewrite Patterns ---------------------------===// 218cf1cd9SJacques Pienaar // 318cf1cd9SJacques Pienaar // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 418cf1cd9SJacques Pienaar // See https://llvm.org/LICENSE.txt for license information. 518cf1cd9SJacques Pienaar // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 618cf1cd9SJacques Pienaar // 718cf1cd9SJacques Pienaar //===----------------------------------------------------------------------===// 818cf1cd9SJacques Pienaar 918cf1cd9SJacques Pienaar #include "mlir-c/Rewrite.h" 105f8c46b8SFehr Mathieu 1118cf1cd9SJacques Pienaar #include "mlir-c/Transforms.h" 1218cf1cd9SJacques Pienaar #include "mlir/CAPI/IR.h" 135f8c46b8SFehr Mathieu #include "mlir/CAPI/Rewrite.h" 1418cf1cd9SJacques Pienaar #include "mlir/CAPI/Support.h" 155f8c46b8SFehr Mathieu #include "mlir/CAPI/Wrap.h" 1618cf1cd9SJacques Pienaar #include "mlir/IR/PatternMatch.h" 1718cf1cd9SJacques Pienaar #include "mlir/Rewrite/FrozenRewritePatternSet.h" 1818cf1cd9SJacques Pienaar #include "mlir/Transforms/GreedyPatternRewriteDriver.h" 1918cf1cd9SJacques Pienaar 2018cf1cd9SJacques Pienaar using namespace mlir; 2118cf1cd9SJacques Pienaar 225f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 235f8c46b8SFehr Mathieu /// RewriterBase API inherited from OpBuilder 245f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 255f8c46b8SFehr Mathieu 265f8c46b8SFehr Mathieu MlirContext mlirRewriterBaseGetContext(MlirRewriterBase rewriter) { 275f8c46b8SFehr Mathieu return wrap(unwrap(rewriter)->getContext()); 285f8c46b8SFehr Mathieu } 295f8c46b8SFehr Mathieu 305f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 315f8c46b8SFehr Mathieu /// Insertion points methods 325f8c46b8SFehr Mathieu 335f8c46b8SFehr Mathieu void mlirRewriterBaseClearInsertionPoint(MlirRewriterBase rewriter) { 345f8c46b8SFehr Mathieu unwrap(rewriter)->clearInsertionPoint(); 355f8c46b8SFehr Mathieu } 365f8c46b8SFehr Mathieu 375f8c46b8SFehr Mathieu void mlirRewriterBaseSetInsertionPointBefore(MlirRewriterBase rewriter, 385f8c46b8SFehr Mathieu MlirOperation op) { 395f8c46b8SFehr Mathieu unwrap(rewriter)->setInsertionPoint(unwrap(op)); 405f8c46b8SFehr Mathieu } 415f8c46b8SFehr Mathieu 425f8c46b8SFehr Mathieu void mlirRewriterBaseSetInsertionPointAfter(MlirRewriterBase rewriter, 435f8c46b8SFehr Mathieu MlirOperation op) { 445f8c46b8SFehr Mathieu unwrap(rewriter)->setInsertionPointAfter(unwrap(op)); 455f8c46b8SFehr Mathieu } 465f8c46b8SFehr Mathieu 475f8c46b8SFehr Mathieu void mlirRewriterBaseSetInsertionPointAfterValue(MlirRewriterBase rewriter, 485f8c46b8SFehr Mathieu MlirValue value) { 495f8c46b8SFehr Mathieu unwrap(rewriter)->setInsertionPointAfterValue(unwrap(value)); 505f8c46b8SFehr Mathieu } 515f8c46b8SFehr Mathieu 525f8c46b8SFehr Mathieu void mlirRewriterBaseSetInsertionPointToStart(MlirRewriterBase rewriter, 535f8c46b8SFehr Mathieu MlirBlock block) { 545f8c46b8SFehr Mathieu unwrap(rewriter)->setInsertionPointToStart(unwrap(block)); 555f8c46b8SFehr Mathieu } 565f8c46b8SFehr Mathieu 575f8c46b8SFehr Mathieu void mlirRewriterBaseSetInsertionPointToEnd(MlirRewriterBase rewriter, 585f8c46b8SFehr Mathieu MlirBlock block) { 595f8c46b8SFehr Mathieu unwrap(rewriter)->setInsertionPointToEnd(unwrap(block)); 605f8c46b8SFehr Mathieu } 615f8c46b8SFehr Mathieu 625f8c46b8SFehr Mathieu MlirBlock mlirRewriterBaseGetInsertionBlock(MlirRewriterBase rewriter) { 635f8c46b8SFehr Mathieu return wrap(unwrap(rewriter)->getInsertionBlock()); 645f8c46b8SFehr Mathieu } 655f8c46b8SFehr Mathieu 665f8c46b8SFehr Mathieu MlirBlock mlirRewriterBaseGetBlock(MlirRewriterBase rewriter) { 675f8c46b8SFehr Mathieu return wrap(unwrap(rewriter)->getBlock()); 685f8c46b8SFehr Mathieu } 695f8c46b8SFehr Mathieu 705f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 715f8c46b8SFehr Mathieu /// Block and operation creation/insertion/cloning 725f8c46b8SFehr Mathieu 735f8c46b8SFehr Mathieu MlirBlock mlirRewriterBaseCreateBlockBefore(MlirRewriterBase rewriter, 745f8c46b8SFehr Mathieu MlirBlock insertBefore, 755f8c46b8SFehr Mathieu intptr_t nArgTypes, 765f8c46b8SFehr Mathieu MlirType const *argTypes, 775f8c46b8SFehr Mathieu MlirLocation const *locations) { 785f8c46b8SFehr Mathieu SmallVector<Type, 4> args; 795f8c46b8SFehr Mathieu ArrayRef<Type> unwrappedArgs = unwrapList(nArgTypes, argTypes, args); 805f8c46b8SFehr Mathieu SmallVector<Location, 4> locs; 815f8c46b8SFehr Mathieu ArrayRef<Location> unwrappedLocs = unwrapList(nArgTypes, locations, locs); 825f8c46b8SFehr Mathieu return wrap(unwrap(rewriter)->createBlock(unwrap(insertBefore), unwrappedArgs, 835f8c46b8SFehr Mathieu unwrappedLocs)); 845f8c46b8SFehr Mathieu } 855f8c46b8SFehr Mathieu 865f8c46b8SFehr Mathieu MlirOperation mlirRewriterBaseInsert(MlirRewriterBase rewriter, 875f8c46b8SFehr Mathieu MlirOperation op) { 885f8c46b8SFehr Mathieu return wrap(unwrap(rewriter)->insert(unwrap(op))); 895f8c46b8SFehr Mathieu } 905f8c46b8SFehr Mathieu 915f8c46b8SFehr Mathieu // Other methods of OpBuilder 925f8c46b8SFehr Mathieu 935f8c46b8SFehr Mathieu MlirOperation mlirRewriterBaseClone(MlirRewriterBase rewriter, 945f8c46b8SFehr Mathieu MlirOperation op) { 955f8c46b8SFehr Mathieu return wrap(unwrap(rewriter)->clone(*unwrap(op))); 965f8c46b8SFehr Mathieu } 975f8c46b8SFehr Mathieu 985f8c46b8SFehr Mathieu MlirOperation mlirRewriterBaseCloneWithoutRegions(MlirRewriterBase rewriter, 995f8c46b8SFehr Mathieu MlirOperation op) { 1005f8c46b8SFehr Mathieu return wrap(unwrap(rewriter)->cloneWithoutRegions(*unwrap(op))); 1015f8c46b8SFehr Mathieu } 1025f8c46b8SFehr Mathieu 1035f8c46b8SFehr Mathieu void mlirRewriterBaseCloneRegionBefore(MlirRewriterBase rewriter, 1045f8c46b8SFehr Mathieu MlirRegion region, MlirBlock before) { 1055f8c46b8SFehr Mathieu 1065f8c46b8SFehr Mathieu unwrap(rewriter)->cloneRegionBefore(*unwrap(region), unwrap(before)); 1075f8c46b8SFehr Mathieu } 1085f8c46b8SFehr Mathieu 1095f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 1105f8c46b8SFehr Mathieu /// RewriterBase API 1115f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 1125f8c46b8SFehr Mathieu 1135f8c46b8SFehr Mathieu void mlirRewriterBaseInlineRegionBefore(MlirRewriterBase rewriter, 1145f8c46b8SFehr Mathieu MlirRegion region, MlirBlock before) { 1155f8c46b8SFehr Mathieu unwrap(rewriter)->inlineRegionBefore(*unwrap(region), unwrap(before)); 1165f8c46b8SFehr Mathieu } 1175f8c46b8SFehr Mathieu 1185f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceOpWithValues(MlirRewriterBase rewriter, 1195f8c46b8SFehr Mathieu MlirOperation op, intptr_t nValues, 1205f8c46b8SFehr Mathieu MlirValue const *values) { 1215f8c46b8SFehr Mathieu SmallVector<Value, 4> vals; 1225f8c46b8SFehr Mathieu ArrayRef<Value> unwrappedVals = unwrapList(nValues, values, vals); 1235f8c46b8SFehr Mathieu unwrap(rewriter)->replaceOp(unwrap(op), unwrappedVals); 1245f8c46b8SFehr Mathieu } 1255f8c46b8SFehr Mathieu 1265f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceOpWithOperation(MlirRewriterBase rewriter, 1275f8c46b8SFehr Mathieu MlirOperation op, 1285f8c46b8SFehr Mathieu MlirOperation newOp) { 1295f8c46b8SFehr Mathieu unwrap(rewriter)->replaceOp(unwrap(op), unwrap(newOp)); 1305f8c46b8SFehr Mathieu } 1315f8c46b8SFehr Mathieu 1325f8c46b8SFehr Mathieu void mlirRewriterBaseEraseOp(MlirRewriterBase rewriter, MlirOperation op) { 1335f8c46b8SFehr Mathieu unwrap(rewriter)->eraseOp(unwrap(op)); 1345f8c46b8SFehr Mathieu } 1355f8c46b8SFehr Mathieu 1365f8c46b8SFehr Mathieu void mlirRewriterBaseEraseBlock(MlirRewriterBase rewriter, MlirBlock block) { 1375f8c46b8SFehr Mathieu unwrap(rewriter)->eraseBlock(unwrap(block)); 1385f8c46b8SFehr Mathieu } 1395f8c46b8SFehr Mathieu 1405f8c46b8SFehr Mathieu void mlirRewriterBaseInlineBlockBefore(MlirRewriterBase rewriter, 1415f8c46b8SFehr Mathieu MlirBlock source, MlirOperation op, 1425f8c46b8SFehr Mathieu intptr_t nArgValues, 1435f8c46b8SFehr Mathieu MlirValue const *argValues) { 1445f8c46b8SFehr Mathieu SmallVector<Value, 4> vals; 1455f8c46b8SFehr Mathieu ArrayRef<Value> unwrappedVals = unwrapList(nArgValues, argValues, vals); 1465f8c46b8SFehr Mathieu 1475f8c46b8SFehr Mathieu unwrap(rewriter)->inlineBlockBefore(unwrap(source), unwrap(op), 1485f8c46b8SFehr Mathieu unwrappedVals); 1495f8c46b8SFehr Mathieu } 1505f8c46b8SFehr Mathieu 1515f8c46b8SFehr Mathieu void mlirRewriterBaseMergeBlocks(MlirRewriterBase rewriter, MlirBlock source, 1525f8c46b8SFehr Mathieu MlirBlock dest, intptr_t nArgValues, 1535f8c46b8SFehr Mathieu MlirValue const *argValues) { 1545f8c46b8SFehr Mathieu SmallVector<Value, 4> args; 1555f8c46b8SFehr Mathieu ArrayRef<Value> unwrappedArgs = unwrapList(nArgValues, argValues, args); 1565f8c46b8SFehr Mathieu unwrap(rewriter)->mergeBlocks(unwrap(source), unwrap(dest), unwrappedArgs); 1575f8c46b8SFehr Mathieu } 1585f8c46b8SFehr Mathieu 1595f8c46b8SFehr Mathieu void mlirRewriterBaseMoveOpBefore(MlirRewriterBase rewriter, MlirOperation op, 1605f8c46b8SFehr Mathieu MlirOperation existingOp) { 1615f8c46b8SFehr Mathieu unwrap(rewriter)->moveOpBefore(unwrap(op), unwrap(existingOp)); 1625f8c46b8SFehr Mathieu } 1635f8c46b8SFehr Mathieu 1645f8c46b8SFehr Mathieu void mlirRewriterBaseMoveOpAfter(MlirRewriterBase rewriter, MlirOperation op, 1655f8c46b8SFehr Mathieu MlirOperation existingOp) { 1665f8c46b8SFehr Mathieu unwrap(rewriter)->moveOpAfter(unwrap(op), unwrap(existingOp)); 1675f8c46b8SFehr Mathieu } 1685f8c46b8SFehr Mathieu 1695f8c46b8SFehr Mathieu void mlirRewriterBaseMoveBlockBefore(MlirRewriterBase rewriter, MlirBlock block, 1705f8c46b8SFehr Mathieu MlirBlock existingBlock) { 1715f8c46b8SFehr Mathieu unwrap(rewriter)->moveBlockBefore(unwrap(block), unwrap(existingBlock)); 1725f8c46b8SFehr Mathieu } 1735f8c46b8SFehr Mathieu 1745f8c46b8SFehr Mathieu void mlirRewriterBaseStartOpModification(MlirRewriterBase rewriter, 1755f8c46b8SFehr Mathieu MlirOperation op) { 1765f8c46b8SFehr Mathieu unwrap(rewriter)->startOpModification(unwrap(op)); 1775f8c46b8SFehr Mathieu } 1785f8c46b8SFehr Mathieu 1795f8c46b8SFehr Mathieu void mlirRewriterBaseFinalizeOpModification(MlirRewriterBase rewriter, 1805f8c46b8SFehr Mathieu MlirOperation op) { 1815f8c46b8SFehr Mathieu unwrap(rewriter)->finalizeOpModification(unwrap(op)); 1825f8c46b8SFehr Mathieu } 1835f8c46b8SFehr Mathieu 1845f8c46b8SFehr Mathieu void mlirRewriterBaseCancelOpModification(MlirRewriterBase rewriter, 1855f8c46b8SFehr Mathieu MlirOperation op) { 1865f8c46b8SFehr Mathieu unwrap(rewriter)->cancelOpModification(unwrap(op)); 1875f8c46b8SFehr Mathieu } 1885f8c46b8SFehr Mathieu 1895f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceAllUsesWith(MlirRewriterBase rewriter, 1905f8c46b8SFehr Mathieu MlirValue from, MlirValue to) { 1915f8c46b8SFehr Mathieu unwrap(rewriter)->replaceAllUsesWith(unwrap(from), unwrap(to)); 1925f8c46b8SFehr Mathieu } 1935f8c46b8SFehr Mathieu 1945f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceAllValueRangeUsesWith(MlirRewriterBase rewriter, 1955f8c46b8SFehr Mathieu intptr_t nValues, 1965f8c46b8SFehr Mathieu MlirValue const *from, 1975f8c46b8SFehr Mathieu MlirValue const *to) { 1985f8c46b8SFehr Mathieu SmallVector<Value, 4> fromVals; 1995f8c46b8SFehr Mathieu ArrayRef<Value> unwrappedFromVals = unwrapList(nValues, from, fromVals); 2005f8c46b8SFehr Mathieu SmallVector<Value, 4> toVals; 2015f8c46b8SFehr Mathieu ArrayRef<Value> unwrappedToVals = unwrapList(nValues, to, toVals); 2025f8c46b8SFehr Mathieu unwrap(rewriter)->replaceAllUsesWith(unwrappedFromVals, unwrappedToVals); 2035f8c46b8SFehr Mathieu } 2045f8c46b8SFehr Mathieu 2055f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceAllOpUsesWithValueRange(MlirRewriterBase rewriter, 2065f8c46b8SFehr Mathieu MlirOperation from, 2075f8c46b8SFehr Mathieu intptr_t nTo, 2085f8c46b8SFehr Mathieu MlirValue const *to) { 2095f8c46b8SFehr Mathieu SmallVector<Value, 4> toVals; 2105f8c46b8SFehr Mathieu ArrayRef<Value> unwrappedToVals = unwrapList(nTo, to, toVals); 2115f8c46b8SFehr Mathieu unwrap(rewriter)->replaceAllOpUsesWith(unwrap(from), unwrappedToVals); 2125f8c46b8SFehr Mathieu } 2135f8c46b8SFehr Mathieu 2145f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceAllOpUsesWithOperation(MlirRewriterBase rewriter, 2155f8c46b8SFehr Mathieu MlirOperation from, 2165f8c46b8SFehr Mathieu MlirOperation to) { 2175f8c46b8SFehr Mathieu unwrap(rewriter)->replaceAllOpUsesWith(unwrap(from), unwrap(to)); 2185f8c46b8SFehr Mathieu } 2195f8c46b8SFehr Mathieu 2205f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceOpUsesWithinBlock(MlirRewriterBase rewriter, 2215f8c46b8SFehr Mathieu MlirOperation op, 2225f8c46b8SFehr Mathieu intptr_t nNewValues, 2235f8c46b8SFehr Mathieu MlirValue const *newValues, 2245f8c46b8SFehr Mathieu MlirBlock block) { 2255f8c46b8SFehr Mathieu SmallVector<Value, 4> vals; 2265f8c46b8SFehr Mathieu ArrayRef<Value> unwrappedVals = unwrapList(nNewValues, newValues, vals); 2275f8c46b8SFehr Mathieu unwrap(rewriter)->replaceOpUsesWithinBlock(unwrap(op), unwrappedVals, 2285f8c46b8SFehr Mathieu unwrap(block)); 2295f8c46b8SFehr Mathieu } 2305f8c46b8SFehr Mathieu 2315f8c46b8SFehr Mathieu void mlirRewriterBaseReplaceAllUsesExcept(MlirRewriterBase rewriter, 2325f8c46b8SFehr Mathieu MlirValue from, MlirValue to, 2335f8c46b8SFehr Mathieu MlirOperation exceptedUser) { 2345f8c46b8SFehr Mathieu unwrap(rewriter)->replaceAllUsesExcept(unwrap(from), unwrap(to), 2355f8c46b8SFehr Mathieu unwrap(exceptedUser)); 2365f8c46b8SFehr Mathieu } 2375f8c46b8SFehr Mathieu 2385f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 2395f8c46b8SFehr Mathieu /// IRRewriter API 2405f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 2415f8c46b8SFehr Mathieu 2425f8c46b8SFehr Mathieu MlirRewriterBase mlirIRRewriterCreate(MlirContext context) { 2435f8c46b8SFehr Mathieu return wrap(new IRRewriter(unwrap(context))); 2445f8c46b8SFehr Mathieu } 2455f8c46b8SFehr Mathieu 2465f8c46b8SFehr Mathieu MlirRewriterBase mlirIRRewriterCreateFromOp(MlirOperation op) { 2475f8c46b8SFehr Mathieu return wrap(new IRRewriter(unwrap(op))); 2485f8c46b8SFehr Mathieu } 2495f8c46b8SFehr Mathieu 2505f8c46b8SFehr Mathieu void mlirIRRewriterDestroy(MlirRewriterBase rewriter) { 2515f8c46b8SFehr Mathieu delete static_cast<IRRewriter *>(unwrap(rewriter)); 2525f8c46b8SFehr Mathieu } 2535f8c46b8SFehr Mathieu 2545f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 2555f8c46b8SFehr Mathieu /// RewritePatternSet and FrozenRewritePatternSet API 2565f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 2575f8c46b8SFehr Mathieu 25818cf1cd9SJacques Pienaar inline mlir::RewritePatternSet &unwrap(MlirRewritePatternSet module) { 25918cf1cd9SJacques Pienaar assert(module.ptr && "unexpected null module"); 26018cf1cd9SJacques Pienaar return *(static_cast<mlir::RewritePatternSet *>(module.ptr)); 26118cf1cd9SJacques Pienaar } 26218cf1cd9SJacques Pienaar 26318cf1cd9SJacques Pienaar inline MlirRewritePatternSet wrap(mlir::RewritePatternSet *module) { 26418cf1cd9SJacques Pienaar return {module}; 26518cf1cd9SJacques Pienaar } 26618cf1cd9SJacques Pienaar 26718cf1cd9SJacques Pienaar inline mlir::FrozenRewritePatternSet * 26818cf1cd9SJacques Pienaar unwrap(MlirFrozenRewritePatternSet module) { 26918cf1cd9SJacques Pienaar assert(module.ptr && "unexpected null module"); 27018cf1cd9SJacques Pienaar return static_cast<mlir::FrozenRewritePatternSet *>(module.ptr); 27118cf1cd9SJacques Pienaar } 27218cf1cd9SJacques Pienaar 27318cf1cd9SJacques Pienaar inline MlirFrozenRewritePatternSet wrap(mlir::FrozenRewritePatternSet *module) { 27418cf1cd9SJacques Pienaar return {module}; 27518cf1cd9SJacques Pienaar } 27618cf1cd9SJacques Pienaar 27718cf1cd9SJacques Pienaar MlirFrozenRewritePatternSet mlirFreezeRewritePattern(MlirRewritePatternSet op) { 27818cf1cd9SJacques Pienaar auto *m = new mlir::FrozenRewritePatternSet(std::move(unwrap(op))); 27918cf1cd9SJacques Pienaar op.ptr = nullptr; 28018cf1cd9SJacques Pienaar return wrap(m); 28118cf1cd9SJacques Pienaar } 28218cf1cd9SJacques Pienaar 28318cf1cd9SJacques Pienaar void mlirFrozenRewritePatternSetDestroy(MlirFrozenRewritePatternSet op) { 28418cf1cd9SJacques Pienaar delete unwrap(op); 28518cf1cd9SJacques Pienaar op.ptr = nullptr; 28618cf1cd9SJacques Pienaar } 28718cf1cd9SJacques Pienaar 28818cf1cd9SJacques Pienaar MlirLogicalResult 28918cf1cd9SJacques Pienaar mlirApplyPatternsAndFoldGreedily(MlirModule op, 29018cf1cd9SJacques Pienaar MlirFrozenRewritePatternSet patterns, 29118cf1cd9SJacques Pienaar MlirGreedyRewriteDriverConfig) { 292*09dfc571SJacques Pienaar return wrap(mlir::applyPatternsGreedily(unwrap(op), *unwrap(patterns))); 29318cf1cd9SJacques Pienaar } 29418cf1cd9SJacques Pienaar 2955f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 2965f8c46b8SFehr Mathieu /// PDLPatternModule API 2975f8c46b8SFehr Mathieu //===----------------------------------------------------------------------===// 2985f8c46b8SFehr Mathieu 29918cf1cd9SJacques Pienaar #if MLIR_ENABLE_PDL_IN_PATTERNMATCH 30018cf1cd9SJacques Pienaar inline mlir::PDLPatternModule *unwrap(MlirPDLPatternModule module) { 30118cf1cd9SJacques Pienaar assert(module.ptr && "unexpected null module"); 30218cf1cd9SJacques Pienaar return static_cast<mlir::PDLPatternModule *>(module.ptr); 30318cf1cd9SJacques Pienaar } 30418cf1cd9SJacques Pienaar 30518cf1cd9SJacques Pienaar inline MlirPDLPatternModule wrap(mlir::PDLPatternModule *module) { 30618cf1cd9SJacques Pienaar return {module}; 30718cf1cd9SJacques Pienaar } 30818cf1cd9SJacques Pienaar 30918cf1cd9SJacques Pienaar MlirPDLPatternModule mlirPDLPatternModuleFromModule(MlirModule op) { 31018cf1cd9SJacques Pienaar return wrap(new mlir::PDLPatternModule( 31118cf1cd9SJacques Pienaar mlir::OwningOpRef<mlir::ModuleOp>(unwrap(op)))); 31218cf1cd9SJacques Pienaar } 31318cf1cd9SJacques Pienaar 31418cf1cd9SJacques Pienaar void mlirPDLPatternModuleDestroy(MlirPDLPatternModule op) { 31518cf1cd9SJacques Pienaar delete unwrap(op); 31618cf1cd9SJacques Pienaar op.ptr = nullptr; 31718cf1cd9SJacques Pienaar } 31818cf1cd9SJacques Pienaar 31918cf1cd9SJacques Pienaar MlirRewritePatternSet 32018cf1cd9SJacques Pienaar mlirRewritePatternSetFromPDLPatternModule(MlirPDLPatternModule op) { 32118cf1cd9SJacques Pienaar auto *m = new mlir::RewritePatternSet(std::move(*unwrap(op))); 32218cf1cd9SJacques Pienaar op.ptr = nullptr; 32318cf1cd9SJacques Pienaar return wrap(m); 32418cf1cd9SJacques Pienaar } 32518cf1cd9SJacques Pienaar #endif // MLIR_ENABLE_PDL_IN_PATTERNMATCH 326