module MLIR.Native.Pass where
import qualified Language.C.Inline as C
import Control.Exception (bracket)
import MLIR.Native.FFI
C.context $ C.baseCtx <> mlirCtx
C.include "mlir-c/IR.h"
C.include "mlir-c/Pass.h"
C.include "mlir-c/Conversion.h"
createPassManager :: Context -> IO PassManager
createPassManager :: Context -> IO PassManager
createPassManager Context
ctx =
[C.exp| MlirPassManager { mlirPassManagerCreate($(MlirContext ctx)) } |]
destroyPassManager :: PassManager -> IO ()
destroyPassManager :: PassManager -> IO ()
destroyPassManager PassManager
pm =
[C.exp| void { mlirPassManagerDestroy($(MlirPassManager pm)) } |]
withPassManager :: Context -> (PassManager -> IO a) -> IO a
withPassManager :: Context -> (PassManager -> IO a) -> IO a
withPassManager Context
ctx = IO PassManager
-> (PassManager -> IO ()) -> (PassManager -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Context -> IO PassManager
createPassManager Context
ctx) PassManager -> IO ()
destroyPassManager
runPasses :: PassManager -> Operation -> IO LogicalResult
runPasses :: PassManager -> Operation -> IO LogicalResult
runPasses PassManager
pm Operation
op =
[C.exp| MlirLogicalResult { mlirPassManagerRunOnOp($(MlirPassManager pm), $(MlirOperation op)) } |]
addConvertMemRefToLLVMPass :: PassManager -> IO ()
addConvertMemRefToLLVMPass :: PassManager -> IO ()
addConvertMemRefToLLVMPass PassManager
pm =
[C.exp| void {
mlirPassManagerAddOwnedPass($(MlirPassManager pm), mlirCreateConversionFinalizeMemRefToLLVMConversionPass())
} |]
addConvertArithToLLVMPass :: PassManager -> IO ()
addConvertArithToLLVMPass :: PassManager -> IO ()
addConvertArithToLLVMPass PassManager
pm =
[C.exp| void {
mlirPassManagerAddOwnedPass($(MlirPassManager pm), mlirCreateConversionArithToLLVMConversionPass())
} |]
addConvertControlFlowToLLVMPass :: PassManager -> IO ()
addConvertControlFlowToLLVMPass :: PassManager -> IO ()
addConvertControlFlowToLLVMPass PassManager
pm =
[C.exp| void {
mlirPassManagerAddOwnedPass($(MlirPassManager pm), mlirCreateConversionConvertControlFlowToLLVMPass())
} |]
addConvertFuncToLLVMPass :: PassManager -> IO ()
addConvertFuncToLLVMPass :: PassManager -> IO ()
addConvertFuncToLLVMPass PassManager
pm =
[C.exp| void {
mlirPassManagerAddOwnedPass($(MlirPassManager pm), mlirCreateConversionConvertFuncToLLVMPass())
} |]
addConvertVectorToLLVMPass :: PassManager -> IO ()
addConvertVectorToLLVMPass :: PassManager -> IO ()
addConvertVectorToLLVMPass PassManager
pm =
[C.exp| void {
mlirPassManagerAddOwnedPass($(MlirPassManager pm), mlirCreateConversionConvertVectorToLLVMPass())
} |]
addConvertReconcileUnrealizedCastsPass :: PassManager -> IO ()
addConvertReconcileUnrealizedCastsPass :: PassManager -> IO ()
addConvertReconcileUnrealizedCastsPass PassManager
pm =
[C.exp| void {
mlirPassManagerAddOwnedPass($(MlirPassManager pm), mlirCreateConversionReconcileUnrealizedCasts())
} |]