17 | module Spidr.Compiler.MLIR.IR.BuiltinAttributes
19 | import Spidr.Compiler.LLVM.ADT.APFloat
20 | import Spidr.Compiler.LLVM.ADT.APInt
21 | import Spidr.Compiler.MLIR.IR.Attributes
22 | import Spidr.Compiler.MLIR.IR.BuiltinTypes
23 | import Spidr.Compiler.MLIR.IR.Types
24 | import Spidr.Compiler.Array
25 | import Spidr.Compiler.FFI
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_int8_t")
60 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
63 | get : HasIO io => RankedTensorType -> Array Int8 -> io DenseElementsAttr
64 | get = getAux prim__denseElementsAttrGet
67 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_int16_t")
68 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
71 | get : HasIO io => RankedTensorType -> Array Int16 -> io DenseElementsAttr
72 | get = getAux prim__denseElementsAttrGet
75 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_int32_t")
76 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
79 | get : HasIO io => RankedTensorType -> Array Int32 -> io DenseElementsAttr
80 | get = getAux prim__denseElementsAttrGet
83 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_int64_t")
84 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
87 | get : HasIO io => RankedTensorType -> Array Int64 -> io DenseElementsAttr
88 | get = getAux prim__denseElementsAttrGet
91 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_uint8_t")
92 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
95 | get : HasIO io => RankedTensorType -> Array Bits8 -> io DenseElementsAttr
96 | get = getAux prim__denseElementsAttrGet
99 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_uint16_t")
100 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
103 | get : HasIO io => RankedTensorType -> Array Bits16 -> io DenseElementsAttr
104 | get = getAux prim__denseElementsAttrGet
107 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_uint32_t")
108 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
111 | get : HasIO io => RankedTensorType -> Array Bits32 -> io DenseElementsAttr
112 | get = getAux prim__denseElementsAttrGet
115 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_uint64_t")
116 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
119 | get : HasIO io => RankedTensorType -> Array Bits64 -> io DenseElementsAttr
120 | get = getAux prim__denseElementsAttrGet
123 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_double")
124 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
127 | get : HasIO io => RankedTensorType -> Array Double -> io DenseElementsAttr
128 | get = getAux prim__denseElementsAttrGet
131 | %foreign (ffi "DenseElementsAttr_get_ArrayRef_bool")
132 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
135 | get : HasIO io => RankedTensorType -> Array Bool -> io DenseElementsAttr
136 | get = getAux prim__denseElementsAttrGet
139 | %foreign (ffi "DenseElementsAttr_get_APInt")
140 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
143 | get : HasIO io => RankedTensorType -> APInt -> io DenseElementsAttr
144 | get (MkRankedTensorType rtt) (MkAPInt value) = do
145 | attr <- primIO $
prim__denseElementsAttrGet rtt value
146 | attr <- onCollectAny' attr (primIO . prim__deleteDenseElementsAttr)
147 | pure (MkDenseElementsAttr attr)
150 | %foreign (ffi "DenseElementsAttr_get_APFloat")
151 | prim__denseElementsAttrGet : GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
154 | get : HasIO io => RankedTensorType -> APFloat -> io DenseElementsAttr
155 | get (MkRankedTensorType rtt) (MkAPFloat value) = do
156 | attr <- primIO $
prim__denseElementsAttrGet rtt value
157 | attr <- onCollectAny' attr (primIO . prim__deleteDenseElementsAttr)
158 | pure (MkDenseElementsAttr attr)