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
30 | %foreign (ffi "Block_addArgument")
31 | prim__blockAddArgument : AnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
34 | addArgument : HasIO io => Block -> Type_ -> Location -> io BlockArgument
35 | addArgument (MkBlock block) (MkType_ type _) (MkLocation loc) = do
36 | arg <- primIO $
prim__blockAddArgument block type loc
37 | arg <- onCollectAny' arg (primIO . prim__deleteBlockArgument)
38 | pure (MkBlockArgument arg)
40 | %foreign (ffi "Block_getArgument")
41 | prim__blockGetArgument : AnyPtr -> Bits64 -> PrimIO AnyPtr
44 | getArgument : HasIO io => Block -> Nat -> io BlockArgument
45 | getArgument (MkBlock block) i = do
46 | arg <- primIO $
prim__blockGetArgument block (cast i)
47 | arg <- onCollectAny' arg (primIO . prim__deleteBlockArgument)
48 | pure (MkBlockArgument arg)
51 | %foreign (ffi "Block_dump")
52 | prim__blockDump : AnyPtr -> PrimIO ()
55 | dump : HasIO io => Block -> io ()
56 | dump (MkBlock block) = primIO $
prim__blockDump block