17 | module Compiler.MLIR.IR.ValueRange
19 | import Compiler.MLIR.IR.Value
23 | ffi : String -> String
24 | ffi = libxla "c/mlir/IR/ValueRange.h"
27 | data ValueRange = MkValueRange GCAnyPtr
29 | %foreign (ffi "ValueRange_delete")
30 | prim__deleteValueRange : AnyPtr -> PrimIO ()
32 | %foreign (ffi "ValueRange_new")
33 | prim__mkValueRange : AnyPtr -> Bits64 -> PrimIO AnyPtr
36 | mkValueRange : HasIO io => List Value -> io ValueRange
37 | mkValueRange xs = do
39 | arr <- malloc (cast len * cast sizeofValue)
40 | traverse_ (\(idx, MkValue x set) => primIO $
set arr (cast idx) x) (enumerate xs)
41 | vr <- primIO $
prim__mkValueRange arr (cast len)
42 | vr <- onCollectAny' vr (primIO . prim__deleteValueRange)
43 | pure (MkValueRange vr)