17 | module Compiler.MLIR.IR.Builders
19 | import Compiler.MLIR.IR.Block
20 | import Compiler.MLIR.IR.BuiltinTypes
21 | import Compiler.MLIR.IR.MLIRContext
22 | import Compiler.MLIR.IR.Operation
23 | import Compiler.MLIR.IR.Types
26 | ffi : String -> String
27 | ffi = libxla "c/mlir/IR/Builders.h"
30 | data OpBuilder = MkOpBuilder GCAnyPtr
32 | %foreign (ffi "OpBuilder_delete")
33 | prim__deleteOpBuilder : AnyPtr -> PrimIO ()
35 | %foreign (ffi "OpBuilder_atBlockEnd")
36 | prim__opBuilderAtBlockEnd : AnyPtr -> PrimIO AnyPtr
39 | atBlockEnd : HasIO io => Block -> io OpBuilder
40 | atBlockEnd (MkBlock block) = do
41 | builder <- primIO $
prim__opBuilderAtBlockEnd block
42 | builder <- onCollectAny' builder (primIO . prim__deleteOpBuilder)
43 | pure (MkOpBuilder builder)