17 | module Compiler.MLIR.IR.Block
19 | import Compiler.MLIR.IR.Location
20 | import Compiler.MLIR.IR.Types
21 | import Compiler.MLIR.IR.Value
24 | ffi : String -> String
25 | ffi = libxla "c/mlir/IR/Block.h"
28 | data Block = MkBlock AnyPtr
31 | %foreign (ffi "Block_addArgument")
32 | prim__blockAddArgument : AnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
35 | addArgument : HasIO io => Block -> Type_ -> Location -> io BlockArgument
36 | addArgument (MkBlock block) (MkType_ type _) (MkLocation loc) = do
37 | arg <- primIO $
prim__blockAddArgument block type loc
38 | arg <- onCollectAny' arg (primIO . prim__deleteBlockArgument)
39 | pure (MkBlockArgument arg)
42 | %foreign (ffi "Block_getArgument")
43 | prim__blockGetArgument : AnyPtr -> Bits64 -> PrimIO AnyPtr
46 | getArgument : HasIO io => Block -> Nat -> io BlockArgument
47 | getArgument (MkBlock block) i = do
48 | arg <- primIO $
prim__blockGetArgument block (cast i)
49 | arg <- onCollectAny' arg (primIO . prim__deleteBlockArgument)
50 | pure (MkBlockArgument arg)
53 | %foreign (ffi "Block_dump")
54 | prim__blockDump : AnyPtr -> PrimIO ()
57 | dump : HasIO io => Block -> io ()
58 | dump (MkBlock block) = primIO $
prim__blockDump block