17 | module Compiler.MLIR.Dialect.Func.IR.FuncOps
19 | import Compiler.MLIR.IR.Block
20 | import Compiler.MLIR.IR.Builders
21 | import Compiler.MLIR.IR.BuiltinTypes
22 | import Compiler.MLIR.IR.Location
23 | import Compiler.MLIR.IR.MLIRContext
24 | import Compiler.MLIR.IR.OpDefinition
25 | import Compiler.MLIR.IR.Operation
26 | import Compiler.MLIR.IR.ValueRange
29 | ffi : String -> String
30 | ffi = libxla "c/mlir/Dialect/Func/IR/FuncOps.h"
32 | %foreign (ffi "MLIRContext_loadDialect_FuncDialect")
33 | prim__loadDialectFuncDialect : AnyPtr -> PrimIO ()
36 | loadDialectFuncDialect : HasIO io => MLIRContext -> io ()
37 | loadDialectFuncDialect (MkMLIRContext ctx) = primIO $
prim__loadDialectFuncDialect ctx
40 | data FuncOp = MkFuncOp GCAnyPtr
42 | %foreign (ffi "FuncOp_delete")
43 | prim__deleteFuncOp : AnyPtr -> PrimIO ()
45 | %foreign (ffi "FuncOp_create")
46 | prim__funcOpCreate : GCAnyPtr -> String -> GCAnyPtr -> PrimIO AnyPtr
50 | create : HasIO io => Location -> String -> FunctionType -> io FuncOp
51 | create (MkLocation location) name (MkFunctionType type) = do
52 | op <- primIO $
prim__funcOpCreate location name type
53 | op <- onCollectAny' op (primIO . prim__deleteFuncOp)
56 | %foreign (ffi "FuncOp_getOperation")
57 | prim__funcOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
61 | getOperation (MkFuncOp op) = MkOperation <$> (primIO $
prim__funcOpGetOperation op)
63 | %foreign (ffi "FuncOp_addEntryBlock")
64 | prim__funcOpAddEntryBlock : GCAnyPtr -> PrimIO AnyPtr
67 | addEntryBlock : HasIO io => FuncOp -> io Block
68 | addEntryBlock (MkFuncOp op) = MkBlock <$> (primIO $
prim__funcOpAddEntryBlock op)
71 | data ReturnOp = MkReturnOp GCAnyPtr
73 | %foreign (ffi "ReturnOp_delete")
74 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
76 | %foreign (ffi "ReturnOp_create")
77 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
81 | create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
82 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
83 | op <- primIO $
prim__returnOpCreate builder location results
84 | op <- onCollectAny' op (primIO . prim__deleteReturnOp)
85 | pure (MkReturnOp op)