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.TypeRange
27 | import Compiler.MLIR.IR.ValueRange
30 | ffi : String -> String
31 | ffi = libxla "c/mlir/Dialect/Func/IR/FuncOps.h"
33 | %foreign (ffi "MLIRContext_loadDialect_FuncDialect")
34 | prim__loadDialectFuncDialect : AnyPtr -> PrimIO ()
37 | loadDialectFuncDialect : HasIO io => MLIRContext -> io ()
38 | loadDialectFuncDialect (MkMLIRContext ctx) = primIO $
prim__loadDialectFuncDialect ctx
41 | data CallOp = MkCallOp GCAnyPtr
43 | %foreign (ffi "CallOp_delete")
44 | prim__deleteCallOp : AnyPtr -> PrimIO ()
46 | %foreign (ffi "CallOp_create")
47 | prim__callOpCreate : GCAnyPtr -> GCAnyPtr -> String -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
51 | create : HasIO io => OpBuilder -> Location -> String -> TypeRange -> ValueRange -> io CallOp
52 | create (MkOpBuilder builder) (MkLocation location) name (MkTypeRange results) (MkValueRange operands) = do
53 | op <- primIO $
prim__callOpCreate builder location name results operands
54 | op <- onCollectAny' op (primIO . prim__deleteCallOp)
57 | %foreign (ffi "CallOp_getOperation")
58 | prim__callOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
62 | getOperation (MkCallOp op) = MkOperation <$> (primIO $
prim__callOpGetOperation op)
65 | data FuncOp = MkFuncOp GCAnyPtr
67 | %foreign (ffi "FuncOp_delete")
68 | prim__deleteFuncOp : AnyPtr -> PrimIO ()
70 | %foreign (ffi "FuncOp_create")
71 | prim__funcOpCreate : GCAnyPtr -> String -> GCAnyPtr -> PrimIO AnyPtr
75 | create : HasIO io => Location -> String -> FunctionType -> io FuncOp
76 | create (MkLocation location) name (MkFunctionType type) = do
77 | op <- primIO $
prim__funcOpCreate location name type
78 | op <- onCollectAny' op (primIO . prim__deleteFuncOp)
81 | %foreign (ffi "FuncOp_getOperation")
82 | prim__funcOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
86 | getOperation (MkFuncOp op) = MkOperation <$> (primIO $
prim__funcOpGetOperation op)
88 | %foreign (ffi "FuncOp_addEntryBlock")
89 | prim__funcOpAddEntryBlock : GCAnyPtr -> PrimIO AnyPtr
92 | addEntryBlock : HasIO io => FuncOp -> io Block
93 | addEntryBlock (MkFuncOp op) = MkBlock <$> (primIO $
prim__funcOpAddEntryBlock op)
96 | data ReturnOp = MkReturnOp GCAnyPtr
98 | %foreign (ffi "ReturnOp_delete")
99 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
101 | %foreign (ffi "ReturnOp_create")
102 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
106 | create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
107 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
108 | op <- primIO $
prim__returnOpCreate builder location results
109 | op <- onCollectAny' op (primIO . prim__deleteReturnOp)
110 | pure (MkReturnOp op)