17 | module Compiler.MLIR.Pass.PassManager
19 | import Compiler.MLIR.IR.MLIRContext
20 | import Compiler.MLIR.IR.Operation
23 | ffi : String -> String
24 | ffi = libxla "c/mlir/Pass/PassManager.h"
27 | data PassManager = MkPassManager GCAnyPtr
29 | %foreign (ffi "PassManager_new")
30 | prim__mkPassManager : AnyPtr -> PrimIO AnyPtr
32 | %foreign (ffi "PassManager_delete")
33 | prim__delete : AnyPtr -> PrimIO ()
36 | mkPassManager : HasIO io => MLIRContext -> io PassManager
37 | mkPassManager (MkMLIRContext ctx) = do
38 | manager <- primIO $
prim__mkPassManager ctx
39 | manager <- onCollectAny' manager (primIO . PassManager.prim__delete)
40 | pure (MkPassManager manager)
42 | %foreign (ffi "PassManager_dump")
43 | prim__passManagerDump : GCAnyPtr -> PrimIO ()
46 | dump : HasIO io => PassManager -> io ()
47 | dump (MkPassManager manager) = primIO $
prim__passManagerDump manager
49 | %foreign (ffi "PassManager_run")
50 | prim__passManagerRun : GCAnyPtr -> AnyPtr -> PrimIO Int
53 | run : HasIO io => PassManager -> Operation -> io Bool
54 | run (MkPassManager manager) (MkOperation op) = do
55 | ok <- primIO $
prim__passManagerRun manager op
56 | pure (cIntToBool ok)