17 | module Compiler.MLIR.IR.Value
20 | import Compiler.MLIR.IR.Types
22 | ffi : String -> String
23 | ffi = libxla "c/mlir/IR/Value.h"
26 | data Value = MkValue GCAnyPtr (AnyPtr -> Bits64 -> GCAnyPtr -> PrimIO ())
29 | %foreign (ffi "sizeof_Value")
30 | sizeofValue : Bits64
33 | %foreign (ffi "Value_getType")
34 | prim__valueGetType : GCAnyPtr -> PrimIO AnyPtr
37 | getType : HasIO io => Value -> io Type_
38 | getType (MkValue value _) = do
39 | type <- primIO $
prim__valueGetType value
40 | type <- onCollectAny' type (primIO . prim__deleteType)
41 | pure (MkType_ type prim__setArrayType)
44 | data BlockArgument = MkBlockArgument GCAnyPtr
47 | %foreign (ffi "BlockArgument_delete")
48 | prim__deleteBlockArgument : AnyPtr -> PrimIO ()
50 | %foreign (ffi "set_array_BlockArgument")
51 | prim__setArrayBlockArgument : AnyPtr -> Bits64 -> GCAnyPtr -> PrimIO ()
54 | Cast BlockArgument Value where
55 | cast (MkBlockArgument ptr) = MkValue ptr prim__setArrayBlockArgument
58 | data OpResult = MkOpResult GCAnyPtr
61 | %foreign (ffi "OpResult_delete")
62 | prim__deleteOpResult : AnyPtr -> PrimIO ()
64 | %foreign (ffi "set_array_OpResult")
65 | prim__setArrayOpResult : AnyPtr -> Bits64 -> GCAnyPtr -> PrimIO ()
68 | Cast OpResult Value where
69 | cast (MkOpResult ptr) = MkValue ptr prim__setArrayOpResult