17 | module Compiler.MLIR.IR.BuiltinAttributes
19 | import Compiler.LLVM.ADT.APFloat
20 | import Compiler.LLVM.ADT.APInt
21 | import Compiler.MLIR.IR.Attributes
22 | import Compiler.MLIR.IR.BuiltinTypes
23 | import Compiler.MLIR.IR.Types
24 | import Compiler.Array
27 | ffi : String -> String
28 | ffi = libxla "c/mlir/IR/BuiltinAttributes.h"
31 | data DenseElementsAttr = MkDenseElementsAttr GCAnyPtr
34 | %foreign (ffi "DenseElementsAttr_delete")
35 | prim__deleteDenseElementsAttr : AnyPtr -> PrimIO ()
37 | namespace DenseElementsAttr
40 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_Attribute")
41 | prim__denseElementsAttrGet : GCAnyPtr -> AnyPtr -> Bits64 -> PrimIO AnyPtr
44 | get : HasIO io => RankedTensorType -> List Attribute -> io DenseElementsAttr
45 | get (MkRankedTensorType rtt) _ = do
46 | attr <- primIO $
prim__denseElementsAttrGet rtt prim__getNullAnyPtr 0
47 | attr <- onCollectAny' attr (primIO . prim__deleteDenseElementsAttr)
48 | pure (MkDenseElementsAttr attr)
51 | (GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr) ->
52 | HasIO io => RankedTensorType -> Array a -> io DenseElementsAttr
53 | getAux f (MkRankedTensorType rtt) (MkArray values len) = do
54 | attr <- primIO $
f rtt values len
55 | attr <- onCollectAny' attr (primIO . prim__deleteDenseElementsAttr)
56 | pure (MkDenseElementsAttr attr)
59 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_int32_t")
60 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
63 | get : HasIO io => RankedTensorType -> Array Int32 -> io DenseElementsAttr
64 | get = getAux prim__denseElementsAttrGet
67 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_int64_t")
68 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
71 | get : HasIO io => RankedTensorType -> Array Int64 -> io DenseElementsAttr
72 | get = getAux prim__denseElementsAttrGet
75 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_uint32_t")
76 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
79 | get : HasIO io => RankedTensorType -> Array Bits32 -> io DenseElementsAttr
80 | get = getAux prim__denseElementsAttrGet
83 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_uint64_t")
84 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
87 | get : HasIO io => RankedTensorType -> Array Bits64 -> io DenseElementsAttr
88 | get = getAux prim__denseElementsAttrGet
91 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_double")
92 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
95 | get : HasIO io => RankedTensorType -> Array Double -> io DenseElementsAttr
96 | get = getAux prim__denseElementsAttrGet
99 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_bool")
100 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
103 | get : HasIO io => RankedTensorType -> Array Bool -> io DenseElementsAttr
104 | get = getAux prim__denseElementsAttrGet
107 | %foreign (ffi "DenseElementsAttr_get_APInt")
108 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
111 | get : HasIO io => RankedTensorType -> APInt -> io DenseElementsAttr
112 | get (MkRankedTensorType rtt) (MkAPInt value) = do
113 | attr <- primIO $
prim__denseElementsAttrGet rtt value
114 | attr <- onCollectAny' attr (primIO . prim__deleteDenseElementsAttr)
115 | pure (MkDenseElementsAttr attr)
118 | %foreign (ffi "DenseElementsAttr_get_APFloat")
119 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
122 | get : HasIO io => RankedTensorType -> APFloat -> io DenseElementsAttr
123 | get (MkRankedTensorType rtt) (MkAPFloat value) = do
124 | attr <- primIO $
prim__denseElementsAttrGet rtt value
125 | attr <- onCollectAny' attr (primIO . prim__deleteDenseElementsAttr)
126 | pure (MkDenseElementsAttr attr)