17 | module Spidr.Compiler.Stablehlo.Dialect.StablehloOps
19 | import Spidr.Compiler.FFI
20 | import Spidr.Compiler.Array
21 | import Spidr.Compiler.MLIR.IR.BuiltinAttributes
22 | import Spidr.Compiler.MLIR.IR.Builders
23 | import Spidr.Compiler.MLIR.IR.Location
24 | import Spidr.Compiler.MLIR.IR.MLIRContext
25 | import Spidr.Compiler.MLIR.IR.OpDefinition
26 | import Spidr.Compiler.MLIR.IR.Operation
27 | import Spidr.Compiler.MLIR.IR.Region
28 | import Spidr.Compiler.MLIR.IR.Types
29 | import Spidr.Compiler.MLIR.IR.Value
30 | import Spidr.Compiler.MLIR.IR.ValueRange
31 | import Spidr.Compiler.Stablehlo.Dialect.StablehloAttrs
32 | import Spidr.Compiler.Stablehlo.Dialect.StablehloEnums
34 | ffi : String -> String
35 | ffi = libxla "c/stablehlo/dialect/StablehloOps.h"
38 | getOperationAux : HasIO io => GCAnyPtr -> (GCAnyPtr -> PrimIO AnyPtr) -> io Operation
39 | getOperationAux op f = MkOperation <$> (primIO $
f op)
41 | %foreign (ffi "MLIRContext_loadDialect_StablehloDialect")
42 | prim__loadDialectStablehloDialect : AnyPtr -> PrimIO ()
45 | loadDialectStablehloDialect : HasIO io => MLIRContext -> io ()
46 | loadDialectStablehloDialect (MkMLIRContext ctx) = primIO $
prim__loadDialectStablehloDialect ctx
48 | %foreign (ffi "ConstantOp_delete")
49 | prim__deleteConstantOp : AnyPtr -> PrimIO ()
52 | data ConstantOp = MkConstantOp GCAnyPtr
54 | %foreign (ffi "ConstantOp_create")
55 | prim__constantOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
57 | namespace ConstantOp
59 | create : HasIO io => OpBuilder -> Location -> DenseElementsAttr -> io ConstantOp
60 | create (MkOpBuilder builder) (MkLocation location) (MkDenseElementsAttr attr) = do
61 | op <- primIO $
prim__constantOpCreate builder location attr
62 | op <- onCollectAny' op (primIO . prim__deleteConstantOp)
63 | pure (MkConstantOp op)
65 | %foreign (ffi "ConstantOp_getOperation")
66 | prim__constantOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
70 | getOperation (MkConstantOp op) = getOperationAux op prim__constantOpGetOperation
72 | %foreign (ffi "IotaOp_delete")
73 | prim__deleteIotaOp : AnyPtr -> PrimIO ()
76 | data IotaOp = MkIotaOp GCAnyPtr
78 | %foreign (ffi "IotaOp_create")
79 | prim__iotaOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
83 | create : HasIO io => OpBuilder -> Location -> Type_ -> Nat -> io IotaOp
84 | create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) iotaDimension = do
85 | op <- primIO $
prim__iotaOpCreate builder location resultType (cast iotaDimension)
86 | op <- onCollectAny' op (primIO . prim__deleteIotaOp)
89 | %foreign (ffi "IotaOp_getOperation")
90 | prim__iotaOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
94 | getOperation (MkIotaOp op) = getOperationAux op prim__iotaOpGetOperation
96 | namespace UnaryElementwiseOp
99 | (GCAnyPtr -> opTy) ->
100 | (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
101 | (AnyPtr -> PrimIO ()) ->
102 | HasIO io => OpBuilder -> Location -> Value -> io opTy
107 | (MkOpBuilder builder)
108 | (MkLocation location)
109 | (MkValue operand _) = do
110 | op <- primIO $
prim__create builder location operand
111 | op <- onCollectAny' op (primIO . prim__delete)
112 | pure $
constructor_ op
114 | %foreign (ffi "AbsOp_delete")
115 | prim__deleteAbsOp : AnyPtr -> PrimIO ()
118 | data AbsOp = MkAbsOp GCAnyPtr
120 | %foreign (ffi "AbsOp_create")
121 | prim__absOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
125 | create : HasIO io => OpBuilder -> Location -> Value -> io AbsOp
126 | create = UnaryElementwiseOp.create MkAbsOp prim__absOpCreate prim__deleteAbsOp
128 | %foreign (ffi "AbsOp_getOperation")
129 | prim__absOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
133 | getOperation (MkAbsOp op) = getOperationAux op prim__absOpGetOperation
135 | %foreign (ffi "CeilOp_delete")
136 | prim__deleteCeilOp : AnyPtr -> PrimIO ()
139 | data CeilOp = MkCeilOp GCAnyPtr
141 | %foreign (ffi "CeilOp_create")
142 | prim__ceilOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
146 | create : HasIO io => OpBuilder -> Location -> Value -> io CeilOp
147 | create = UnaryElementwiseOp.create MkCeilOp prim__ceilOpCreate prim__deleteCeilOp
149 | %foreign (ffi "CeilOp_getOperation")
150 | prim__ceilOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
154 | getOperation (MkCeilOp op) = getOperationAux op prim__ceilOpGetOperation
156 | %foreign (ffi "ConvertOp_delete")
157 | prim__deleteConvertOp : AnyPtr -> PrimIO ()
160 | data ConvertOp = MkConvertOp GCAnyPtr
162 | %foreign (ffi "ConvertOp_create")
163 | prim__convertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
165 | namespace ConvertOp
167 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ConvertOp
168 | create (MkOpBuilder builder) (MkLocation location) (MkType_ result _) (MkValue operand _) = do
169 | op <- primIO $
prim__convertOpCreate builder location result operand
170 | op <- onCollectAny' op (primIO . prim__deleteConvertOp)
171 | pure $
MkConvertOp op
173 | %foreign (ffi "ConvertOp_getOperation")
174 | prim__convertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
178 | getOperation (MkConvertOp op) = getOperationAux op prim__convertOpGetOperation
180 | %foreign (ffi "CosineOp_delete")
181 | prim__deleteCosineOp : AnyPtr -> PrimIO ()
184 | data CosineOp = MkCosineOp GCAnyPtr
186 | %foreign (ffi "CosineOp_create")
187 | prim__cosineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
191 | create : HasIO io => OpBuilder -> Location -> Value -> io CosineOp
192 | create = UnaryElementwiseOp.create MkCosineOp prim__cosineOpCreate prim__deleteCosineOp
194 | %foreign (ffi "CosineOp_getOperation")
195 | prim__cosineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
199 | getOperation (MkCosineOp op) = getOperationAux op prim__cosineOpGetOperation
201 | %foreign (ffi "ExpOp_delete")
202 | prim__deleteExpOp : AnyPtr -> PrimIO ()
205 | data ExpOp = MkExpOp GCAnyPtr
207 | %foreign (ffi "ExpOp_create")
208 | prim__expOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
212 | create : HasIO io => OpBuilder -> Location -> Value -> io ExpOp
213 | create = UnaryElementwiseOp.create MkExpOp prim__expOpCreate prim__deleteExpOp
215 | %foreign (ffi "ExpOp_getOperation")
216 | prim__expOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
220 | getOperation (MkExpOp op) = getOperationAux op prim__expOpGetOperation
222 | %foreign (ffi "FloorOp_delete")
223 | prim__deleteFloorOp : AnyPtr -> PrimIO ()
226 | data FloorOp = MkFloorOp GCAnyPtr
228 | %foreign (ffi "FloorOp_create")
229 | prim__floorOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
233 | create : HasIO io => OpBuilder -> Location -> Value -> io FloorOp
234 | create = UnaryElementwiseOp.create MkFloorOp prim__floorOpCreate prim__deleteFloorOp
236 | %foreign (ffi "FloorOp_getOperation")
237 | prim__floorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
241 | getOperation (MkFloorOp op) = getOperationAux op prim__floorOpGetOperation
243 | %foreign (ffi "LogOp_delete")
244 | prim__deleteLogOp : AnyPtr -> PrimIO ()
247 | data LogOp = MkLogOp GCAnyPtr
249 | %foreign (ffi "LogOp_create")
250 | prim__logOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
254 | create : HasIO io => OpBuilder -> Location -> Value -> io LogOp
255 | create = UnaryElementwiseOp.create MkLogOp prim__logOpCreate prim__deleteLogOp
257 | %foreign (ffi "LogOp_getOperation")
258 | prim__logOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
262 | getOperation (MkLogOp op) = getOperationAux op prim__logOpGetOperation
264 | %foreign (ffi "LogisticOp_delete")
265 | prim__deleteLogisticOp : AnyPtr -> PrimIO ()
268 | data LogisticOp = MkLogisticOp GCAnyPtr
270 | %foreign (ffi "LogisticOp_create")
271 | prim__logisticOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
273 | namespace LogisticOp
275 | create : HasIO io => OpBuilder -> Location -> Value -> io LogisticOp
276 | create = UnaryElementwiseOp.create MkLogisticOp prim__logisticOpCreate prim__deleteLogisticOp
278 | %foreign (ffi "LogisticOp_getOperation")
279 | prim__logisticOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
282 | Op LogisticOp where
283 | getOperation (MkLogisticOp op) = getOperationAux op prim__logisticOpGetOperation
285 | %foreign (ffi "NotOp_delete")
286 | prim__deleteNotOp : AnyPtr -> PrimIO ()
289 | data NotOp = MkNotOp GCAnyPtr
291 | %foreign (ffi "NotOp_create")
292 | prim__notOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
296 | create : HasIO io => OpBuilder -> Location -> Value -> io NotOp
297 | create = UnaryElementwiseOp.create MkNotOp prim__notOpCreate prim__deleteNotOp
299 | %foreign (ffi "NotOp_getOperation")
300 | prim__notOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
304 | getOperation (MkNotOp op) = getOperationAux op prim__notOpGetOperation
306 | %foreign (ffi "NegOp_delete")
307 | prim__deleteNegOp : AnyPtr -> PrimIO ()
310 | data NegOp = MkNegOp GCAnyPtr
312 | %foreign (ffi "NegOp_create")
313 | prim__negOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
317 | create : HasIO io => OpBuilder -> Location -> Value -> io NegOp
318 | create = UnaryElementwiseOp.create MkNegOp prim__negOpCreate prim__deleteNegOp
320 | %foreign (ffi "NegOp_getOperation")
321 | prim__negOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
325 | getOperation (MkNegOp op) = getOperationAux op prim__negOpGetOperation
327 | %foreign (ffi "SineOp_delete")
328 | prim__deleteSineOp : AnyPtr -> PrimIO ()
331 | data SineOp = MkSineOp GCAnyPtr
333 | %foreign (ffi "SineOp_create")
334 | prim__sineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
338 | create : HasIO io => OpBuilder -> Location -> Value -> io SineOp
339 | create = UnaryElementwiseOp.create MkSineOp prim__sineOpCreate prim__deleteSineOp
341 | %foreign (ffi "SineOp_getOperation")
342 | prim__sineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
346 | getOperation (MkSineOp op) = getOperationAux op prim__sineOpGetOperation
348 | %foreign (ffi "SqrtOp_delete")
349 | prim__deleteSqrtOp : AnyPtr -> PrimIO ()
352 | data SqrtOp = MkSqrtOp GCAnyPtr
354 | %foreign (ffi "SqrtOp_create")
355 | prim__sqrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
359 | create : HasIO io => OpBuilder -> Location -> Value -> io SqrtOp
360 | create = UnaryElementwiseOp.create MkSqrtOp prim__sqrtOpCreate prim__deleteSqrtOp
362 | %foreign (ffi "SqrtOp_getOperation")
363 | prim__sqrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
367 | getOperation (MkSqrtOp op) = getOperationAux op prim__sqrtOpGetOperation
369 | %foreign (ffi "TanOp_delete")
370 | prim__deleteTanOp : AnyPtr -> PrimIO ()
373 | data TanOp = MkTanOp GCAnyPtr
375 | %foreign (ffi "TanOp_create")
376 | prim__tanOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
380 | create : HasIO io => OpBuilder -> Location -> Value -> io TanOp
381 | create = UnaryElementwiseOp.create MkTanOp prim__tanOpCreate prim__deleteTanOp
383 | %foreign (ffi "TanOp_getOperation")
384 | prim__tanOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
388 | getOperation (MkTanOp op) = getOperationAux op prim__tanOpGetOperation
390 | %foreign (ffi "TanhOp_delete")
391 | prim__deleteTanhOp : AnyPtr -> PrimIO ()
394 | data TanhOp = MkTanhOp GCAnyPtr
396 | %foreign (ffi "TanhOp_create")
397 | prim__tanhOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
401 | create : HasIO io => OpBuilder -> Location -> Value -> io TanhOp
402 | create = UnaryElementwiseOp.create MkTanhOp prim__tanhOpCreate prim__deleteTanhOp
404 | %foreign (ffi "TanhOp_getOperation")
405 | prim__tanhOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
409 | getOperation (MkTanhOp op) = getOperationAux op prim__tanhOpGetOperation
411 | namespace BinaryElementwiseOp
414 | (GCAnyPtr -> opTy) ->
415 | (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
416 | (AnyPtr -> PrimIO ()) ->
417 | HasIO io => OpBuilder -> Location -> Value -> Value -> io opTy
422 | (MkOpBuilder builder)
423 | (MkLocation location)
426 | op <- primIO $
prim__create builder location x y
427 | op <- onCollectAny' op (primIO . prim__delete)
428 | pure $
constructor_ op
430 | %foreign (ffi "AddOp_delete")
431 | prim__deleteAddOp : AnyPtr -> PrimIO ()
434 | data AddOp = MkAddOp GCAnyPtr
436 | %foreign (ffi "AddOp_create")
437 | prim__addOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
441 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AddOp
442 | create = BinaryElementwiseOp.create MkAddOp prim__addOpCreate prim__deleteAddOp
444 | %foreign (ffi "AddOp_getOperation")
445 | prim__addOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
449 | getOperation (MkAddOp op) = getOperationAux op prim__addOpGetOperation
451 | %foreign (ffi "DivOp_delete")
452 | prim__deleteDivOp : AnyPtr -> PrimIO ()
455 | data DivOp = MkDivOp GCAnyPtr
457 | %foreign (ffi "DivOp_create")
458 | prim__divOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
462 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io DivOp
463 | create = BinaryElementwiseOp.create MkDivOp prim__divOpCreate prim__deleteDivOp
465 | %foreign (ffi "DivOp_getOperation")
466 | prim__divOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
470 | getOperation (MkDivOp op) = getOperationAux op prim__divOpGetOperation
472 | %foreign (ffi "MaxOp_delete")
473 | prim__deleteMaxOp : AnyPtr -> PrimIO ()
476 | data MaxOp = MkMaxOp GCAnyPtr
478 | %foreign (ffi "MaxOp_create")
479 | prim__maxOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
483 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MaxOp
484 | create = BinaryElementwiseOp.create MkMaxOp prim__maxOpCreate prim__deleteMaxOp
486 | %foreign (ffi "MaxOp_getOperation")
487 | prim__maxOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
491 | getOperation (MkMaxOp op) = getOperationAux op prim__maxOpGetOperation
493 | %foreign (ffi "MinOp_delete")
494 | prim__deleteMinOp : AnyPtr -> PrimIO ()
497 | data MinOp = MkMinOp GCAnyPtr
499 | %foreign (ffi "MinOp_create")
500 | prim__minOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
504 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MinOp
505 | create = BinaryElementwiseOp.create MkMinOp prim__minOpCreate prim__deleteMinOp
507 | %foreign (ffi "MinOp_getOperation")
508 | prim__minOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
512 | getOperation (MkMinOp op) = getOperationAux op prim__minOpGetOperation
514 | %foreign (ffi "MulOp_delete")
515 | prim__deleteMulOp : AnyPtr -> PrimIO ()
518 | data MulOp = MkMulOp GCAnyPtr
520 | %foreign (ffi "MulOp_create")
521 | prim__mulOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
525 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MulOp
526 | create = BinaryElementwiseOp.create MkMulOp prim__mulOpCreate prim__deleteMulOp
528 | %foreign (ffi "MulOp_getOperation")
529 | prim__mulOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
533 | getOperation (MkMulOp op) = getOperationAux op prim__mulOpGetOperation
535 | %foreign (ffi "PowOp_delete")
536 | prim__deletePowOp : AnyPtr -> PrimIO ()
539 | data PowOp = MkPowOp GCAnyPtr
541 | %foreign (ffi "PowOp_create")
542 | prim__powOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
546 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io PowOp
547 | create = BinaryElementwiseOp.create MkPowOp prim__powOpCreate prim__deletePowOp
549 | %foreign (ffi "PowOp_getOperation")
550 | prim__powOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
554 | getOperation (MkPowOp op) = getOperationAux op prim__powOpGetOperation
556 | %foreign (ffi "RemOp_delete")
557 | prim__deleteRemOp : AnyPtr -> PrimIO ()
560 | data RemOp = MkRemOp GCAnyPtr
562 | %foreign (ffi "RemOp_create")
563 | prim__remOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
567 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io RemOp
568 | create = BinaryElementwiseOp.create MkRemOp prim__remOpCreate prim__deleteRemOp
570 | %foreign (ffi "RemOp_getOperation")
571 | prim__remOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
575 | getOperation (MkRemOp op) = getOperationAux op prim__remOpGetOperation
577 | %foreign (ffi "ShiftRightLogicalOp_delete")
578 | prim__deleteShiftRightLogicalOp : AnyPtr -> PrimIO ()
581 | data ShiftRightLogicalOp = MkShiftRightLogicalOp GCAnyPtr
583 | %foreign (ffi "ShiftRightLogicalOp_create")
584 | prim__shiftRightLogicalOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
586 | namespace ShiftRightLogicalOp
588 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io ShiftRightLogicalOp
589 | create = BinaryElementwiseOp.create
590 | MkShiftRightLogicalOp prim__shiftRightLogicalOpCreate prim__deleteShiftRightLogicalOp
592 | %foreign (ffi "ShiftRightLogicalOp_getOperation")
593 | prim__shiftRightLogicalOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
596 | Op ShiftRightLogicalOp where
597 | getOperation (MkShiftRightLogicalOp op) = getOperationAux op prim__shiftRightLogicalOpGetOperation
599 | %foreign (ffi "SubtractOp_delete")
600 | prim__deleteSubtractOp : AnyPtr -> PrimIO ()
603 | data SubtractOp = MkSubtractOp GCAnyPtr
605 | %foreign (ffi "SubtractOp_create")
606 | prim__subtractOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
608 | namespace SubtractOp
610 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io SubtractOp
611 | create = BinaryElementwiseOp.create MkSubtractOp prim__subtractOpCreate prim__deleteSubtractOp
613 | %foreign (ffi "SubtractOp_getOperation")
614 | prim__subtractOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
617 | Op SubtractOp where
618 | getOperation (MkSubtractOp op) = getOperationAux op prim__subtractOpGetOperation
620 | %foreign (ffi "AndOp_delete")
621 | prim__deleteAndOp : AnyPtr -> PrimIO ()
624 | data AndOp = MkAndOp GCAnyPtr
626 | %foreign (ffi "AndOp_create")
627 | prim__andOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
631 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AndOp
632 | create = BinaryElementwiseOp.create MkAndOp prim__andOpCreate prim__deleteAndOp
634 | %foreign (ffi "AndOp_getOperation")
635 | prim__andOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
639 | getOperation (MkAndOp op) = getOperationAux op prim__andOpGetOperation
641 | %foreign (ffi "OrOp_delete")
642 | prim__deleteOrOp : AnyPtr -> PrimIO ()
645 | data OrOp = MkOrOp GCAnyPtr
647 | %foreign (ffi "OrOp_create")
648 | prim__orOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
652 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io OrOp
653 | create = BinaryElementwiseOp.create MkOrOp prim__orOpCreate prim__deleteOrOp
655 | %foreign (ffi "OrOp_getOperation")
656 | prim__orOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
660 | getOperation (MkOrOp op) = getOperationAux op prim__orOpGetOperation
662 | %foreign (ffi "IfOp_delete")
663 | prim__deleteIfOp : AnyPtr -> PrimIO ()
666 | data IfOp = MkIfOp GCAnyPtr
668 | %foreign (ffi "IfOp_create")
669 | prim__ifOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
673 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io IfOp
674 | create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue pred _) = do
675 | op <- primIO $
prim__ifOpCreate builder location resultType pred
676 | op <- onCollectAny' op (primIO . prim__deleteIfOp)
679 | %foreign (ffi "IfOp_getTrueBranch")
680 | prim__ifOpGetTrueBranch : GCAnyPtr -> AnyPtr
683 | getTrueBranch : IfOp -> Region
684 | getTrueBranch (MkIfOp op) = MkRegion $
prim__ifOpGetTrueBranch op
686 | %foreign (ffi "IfOp_getFalseBranch")
687 | prim__ifOpGetFalseBranch : GCAnyPtr -> AnyPtr
690 | getFalseBranch : IfOp -> Region
691 | getFalseBranch (MkIfOp op) = MkRegion $
prim__ifOpGetFalseBranch op
693 | %foreign (ffi "IfOp_getOperation")
694 | prim__ifOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
698 | getOperation (MkIfOp op) = getOperationAux op prim__ifOpGetOperation
700 | %foreign (ffi "WhileOp_delete")
701 | prim__deleteWhileOp : AnyPtr -> PrimIO ()
704 | data WhileOp = MkWhileOp GCAnyPtr
706 | %foreign (ffi "WhileOp_create")
707 | prim__whileOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
711 | create : HasIO io => OpBuilder -> Location -> ValueRange -> io WhileOp
712 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) = do
713 | op <- primIO $
prim__whileOpCreate builder location inputs
714 | op <- onCollectAny' op (primIO . prim__deleteWhileOp)
715 | pure (MkWhileOp op)
717 | %foreign (ffi "WhileOp_getCond")
718 | prim__whileOpGetCond : GCAnyPtr -> AnyPtr
721 | getCond : WhileOp -> Region
722 | getCond (MkWhileOp op) = MkRegion $
prim__whileOpGetCond op
724 | %foreign (ffi "WhileOp_getBody")
725 | prim__whileOpGetBody : GCAnyPtr -> AnyPtr
729 | getBody : WhileOp -> Region
730 | getBody (MkWhileOp op) = MkRegion $
prim__whileOpGetBody op
732 | %foreign (ffi "WhileOp_getOperation")
733 | prim__whileOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
737 | getOperation (MkWhileOp op) = getOperationAux op prim__whileOpGetOperation
739 | %foreign (ffi "ReduceOp_delete")
740 | prim__deleteReduceOp : AnyPtr -> PrimIO ()
743 | data ReduceOp = MkReduceOp GCAnyPtr
745 | %foreign (ffi "ReduceOp_create")
746 | prim__reduceOpCreate :
747 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
751 | create : HasIO io => OpBuilder -> Location -> ValueRange -> ValueRange -> List Nat -> io ReduceOp
753 | (MkOpBuilder builder)
754 | (MkLocation location)
755 | (MkValueRange inputs)
756 | (MkValueRange inits)
758 | MkArray dimensions dimensionsLen <- fromList $
cast {to = Int64} <$> dimensions
759 | op <- primIO $
prim__reduceOpCreate builder location inputs inits dimensions dimensionsLen
760 | op <- onCollectAny' op (primIO . prim__deleteReduceOp)
761 | pure (MkReduceOp op)
763 | %foreign (ffi "ReduceOp_getBody")
764 | prim__reduceOpGetBody : GCAnyPtr -> AnyPtr
768 | getBody : ReduceOp -> Region
769 | getBody (MkReduceOp op) = MkRegion $
prim__reduceOpGetBody op
771 | %foreign (ffi "ReduceOp_getOperation")
772 | prim__reduceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
776 | getOperation (MkReduceOp op) = getOperationAux op prim__reduceOpGetOperation
778 | %foreign (ffi "CompareOp_delete")
779 | prim__deleteCompareOp : AnyPtr -> PrimIO ()
782 | data CompareOp = MkCompareOp GCAnyPtr
784 | %foreign (ffi "CompareOp_create")
785 | prim__compareOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
787 | namespace CompareOp
790 | HasIO io => OpBuilder -> Location -> Value -> Value -> ComparisonDirection -> io CompareOp
791 | create (MkOpBuilder builder) (MkLocation location) (MkValue lhs _) (MkValue rhs _) direction = do
792 | op <- primIO $
prim__compareOpCreate builder location lhs rhs (cast direction)
793 | op <- onCollectAny' op (primIO . prim__deleteCompareOp)
794 | pure (MkCompareOp op)
796 | %foreign (ffi "CompareOp_getOperation")
797 | prim__compareOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
801 | getOperation (MkCompareOp op) = getOperationAux op prim__compareOpGetOperation
803 | %foreign (ffi "SliceOp_delete")
804 | prim__deleteSliceOp : AnyPtr -> PrimIO ()
807 | data SliceOp = MkSliceOp GCAnyPtr
809 | %foreign (ffi "SliceOp_create")
810 | prim__sliceOpCreate :
814 | GCAnyPtr -> Bits64 ->
815 | GCAnyPtr -> Bits64 ->
816 | GCAnyPtr -> Bits64 ->
822 | HasIO io => OpBuilder -> Location -> Value -> List Nat -> List Nat -> List Nat -> io SliceOp
824 | (MkOpBuilder builder)
825 | (MkLocation location)
826 | (MkValue operand _)
830 | MkArray startIndices startIndicesLen <- fromList $
cast {to = Int64} <$> startIndices
831 | MkArray limitIndices limitIndicesLen <- fromList $
cast {to = Int64} <$> limitIndices
832 | MkArray strides stridesLen <- fromList $
cast {to = Int64} <$> strides
833 | op <- primIO $
prim__sliceOpCreate
837 | startIndices startIndicesLen
838 | limitIndices limitIndicesLen
840 | op <- onCollectAny' op (primIO . prim__deleteSliceOp)
841 | pure (MkSliceOp op)
843 | %foreign (ffi "SliceOp_getOperation")
844 | prim__sliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
848 | getOperation (MkSliceOp op) = getOperationAux op prim__sliceOpGetOperation
850 | %foreign (ffi "DynamicSliceOp_delete")
851 | prim__deleteDynamicSliceOp : AnyPtr -> PrimIO ()
854 | data DynamicSliceOp = MkDynamicSliceOp GCAnyPtr
856 | %foreign (ffi "DynamicSliceOp_create")
857 | prim__dynamicSliceOpCreate :
858 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
860 | namespace DynamicSliceOp
863 | HasIO io => OpBuilder -> Location -> Value -> ValueRange -> List Nat -> io DynamicSliceOp
865 | (MkOpBuilder builder)
866 | (MkLocation location)
867 | (MkValue operand _)
868 | (MkValueRange startIndices)
870 | MkArray sliceSizes sliceSizesLen <- fromList $
cast {to = Int64} <$> sliceSizes
871 | op <- primIO $
prim__dynamicSliceOpCreate
872 | builder location operand startIndices sliceSizes sliceSizesLen
873 | op <- onCollectAny' op (primIO . prim__deleteDynamicSliceOp)
874 | pure (MkDynamicSliceOp op)
876 | %foreign (ffi "DynamicSliceOp_getOperation")
877 | prim__dynamicSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
880 | Op DynamicSliceOp where
881 | getOperation (MkDynamicSliceOp op) = getOperationAux op prim__dynamicSliceOpGetOperation
883 | %foreign (ffi "DynamicUpdateSliceOp_delete")
884 | prim__deleteDynamicUpdateSliceOp : AnyPtr -> PrimIO ()
887 | data DynamicUpdateSliceOp = MkDynamicUpdateSliceOp GCAnyPtr
889 | %foreign (ffi "DynamicUpdateSliceOp_create")
890 | prim__dynamicUpdateSliceOpCreate :
891 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
893 | namespace DynamicUpdateSliceOp
896 | HasIO io => OpBuilder -> Location -> Value -> Value -> ValueRange -> io DynamicUpdateSliceOp
898 | (MkOpBuilder builder)
899 | (MkLocation location)
900 | (MkValue operand _)
902 | (MkValueRange startIndices) = do
903 | op <- primIO $
prim__dynamicUpdateSliceOpCreate builder location operand update startIndices
904 | op <- onCollectAny' op (primIO . prim__deleteDynamicUpdateSliceOp)
905 | pure (MkDynamicUpdateSliceOp op)
907 | %foreign (ffi "DynamicUpdateSliceOp_getOperation")
908 | prim__dynamicUpdateSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
911 | Op DynamicUpdateSliceOp where
912 | getOperation (MkDynamicUpdateSliceOp op) =
913 | getOperationAux op prim__dynamicUpdateSliceOpGetOperation
915 | %foreign (ffi "BitcastConvertOp_delete")
916 | prim__deleteBitcastConvertOp : AnyPtr -> PrimIO ()
919 | data BitcastConvertOp = MkBitcastConvertOp GCAnyPtr
921 | %foreign (ffi "BitcastConvertOp_create")
922 | prim__bitcastConvertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
924 | namespace BitcastConvertOp
926 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io BitcastConvertOp
927 | create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue operand _) = do
928 | op <- primIO $
prim__bitcastConvertOpCreate builder location resultType operand
929 | op <- onCollectAny' op (primIO . prim__deleteBitcastConvertOp)
930 | pure (MkBitcastConvertOp op)
932 | %foreign (ffi "BitcastConvertOp_getOperation")
933 | prim__bitcastConvertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
936 | Op BitcastConvertOp where
937 | getOperation (MkBitcastConvertOp op) = getOperationAux op prim__bitcastConvertOpGetOperation
939 | %foreign (ffi "BroadcastInDimOp_delete")
940 | prim__deleteBroadcastInDimOp : AnyPtr -> PrimIO ()
943 | data BroadcastInDimOp = MkBroadcastInDimOp GCAnyPtr
945 | %foreign (ffi "BroadcastInDimOp_create")
946 | prim__broadcastInDimOpCreate :
947 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
949 | namespace BroadcastInDimOp
951 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> List Nat -> io BroadcastInDimOp
953 | (MkOpBuilder builder)
954 | (MkLocation location)
955 | (MkType_ resultType0 _)
956 | (MkValue operand _)
958 | MkArray dimensions dimensionsLen <- fromList $
cast {to = Int64} <$> dimensions
959 | op <- primIO $
prim__broadcastInDimOpCreate
960 | builder location resultType0 operand dimensions dimensionsLen
961 | op <- onCollectAny' op (primIO . prim__deleteBroadcastInDimOp)
962 | pure (MkBroadcastInDimOp op)
964 | %foreign (ffi "BroadcastInDimOp_getOperation")
965 | prim__broadcastInDimOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
968 | Op BroadcastInDimOp where
969 | getOperation (MkBroadcastInDimOp op) = getOperationAux op prim__broadcastInDimOpGetOperation
971 | %foreign (ffi "CholeskyOp_delete")
972 | prim__deleteCholeskyOp : AnyPtr -> PrimIO ()
975 | data CholeskyOp = MkCholeskyOp GCAnyPtr
977 | %foreign (ffi "CholeskyOp_create")
978 | prim__choleskyOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
980 | namespace CholeskyOp
982 | create : HasIO io => OpBuilder -> Location -> Value -> Bool -> io CholeskyOp
983 | create (MkOpBuilder builder) (MkLocation location) (MkValue value _) lower = do
984 | op <- primIO $
prim__choleskyOpCreate builder location value (boolToCInt lower)
985 | op <- onCollectAny' op (primIO . prim__deleteCholeskyOp)
986 | pure (MkCholeskyOp op)
988 | %foreign (ffi "CholeskyOp_getOperation")
989 | prim__choleskyOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
992 | Op CholeskyOp where
993 | getOperation (MkCholeskyOp op) = getOperationAux op prim__choleskyOpGetOperation
995 | %foreign (ffi "ConcatenateOp_delete")
996 | prim__deleteConcatenateOp : AnyPtr -> PrimIO ()
999 | data ConcatenateOp = MkConcatenateOp GCAnyPtr
1001 | %foreign (ffi "ConcatenateOp_create")
1002 | prim__concatenateOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> PrimIO AnyPtr
1004 | namespace ConcatenateOp
1006 | create : HasIO io => OpBuilder -> Location -> ValueRange -> Nat -> io ConcatenateOp
1007 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) dimension = do
1008 | op <- primIO $
prim__concatenateOpCreate builder location inputs (cast dimension)
1009 | op <- onCollectAny' op (primIO . prim__deleteConcatenateOp)
1010 | pure (MkConcatenateOp op)
1012 | %foreign (ffi "ConcatenateOp_getOperation")
1013 | prim__concatenateOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1017 | getOperation (MkConcatenateOp op) = getOperationAux op prim__concatenateOpGetOperation
1019 | %foreign (ffi "DotGeneralOp_delete")
1020 | prim__deleteDotGeneralOp : AnyPtr -> PrimIO ()
1023 | data DotGeneralOp = MkDotGeneralOp GCAnyPtr
1025 | %foreign (ffi "DotGeneralOp_create")
1026 | prim__dotGeneralOpCreate :
1027 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1038 | DotDimensionNumbersAttr ->
1043 | (MkType_ resultType0 _)
1046 | (MkDotDimensionNumbersAttr ddn) = do
1047 | op <- primIO $
prim__dotGeneralOpCreate builder location resultType0 lhs rhs ddn
1048 | op <- onCollectAny' op (primIO . prim__deleteDotGeneralOp)
1049 | pure (MkDotGeneralOp op)
1051 | %foreign (ffi "DotGeneralOp_getOperation")
1052 | prim__dotGeneralOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1056 | getOperation (MkDotGeneralOp op) = getOperationAux op prim__dotGeneralOpGetOperation
1058 | %foreign (ffi "ReshapeOp_delete")
1059 | prim__deleteReshapeOp : AnyPtr -> PrimIO ()
1062 | data ReshapeOp = MkReshapeOp GCAnyPtr
1064 | %foreign (ffi "ReshapeOp_create")
1065 | prim__reshapeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1069 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ReshapeOp
1070 | create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue value _) = do
1071 | op <- primIO $
prim__reshapeOpCreate builder location resultType value
1072 | op <- onCollectAny' op (primIO . prim__deleteReshapeOp)
1075 | %foreign (ffi "ReshapeOp_getOperation")
1076 | prim__reshapeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1080 | getOperation (MkReshapeOp op) = getOperationAux op prim__reshapeOpGetOperation
1082 | %foreign (ffi "SelectOp_delete")
1083 | prim__deleteSelectOp : AnyPtr -> PrimIO ()
1086 | data SelectOp = MkSelectOp GCAnyPtr
1088 | %foreign (ffi "SelectOp_create")
1089 | prim__selectOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1093 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> Value -> io SelectOp
1099 | (MkValue onFalse _) = do
1100 | op <- primIO $
prim__selectOpCreate builder location pred onTrue onFalse
1101 | op <- onCollectAny' op (primIO . prim__deleteSelectOp)
1104 | %foreign (ffi "SelectOp_getOperation")
1105 | prim__selectOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1109 | getOperation (MkSelectOp op) = getOperationAux op prim__selectOpGetOperation
1111 | %foreign (ffi "SortOp_delete")
1112 | prim__deleteSortOp : AnyPtr -> PrimIO ()
1115 | data SortOp = MkSortOp GCAnyPtr
1117 | %foreign (ffi "SortOp_create")
1118 | prim__sortOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> Int -> PrimIO AnyPtr
1122 | create : HasIO io => OpBuilder -> Location -> Value -> Nat -> Bool -> io SortOp
1123 | create (MkOpBuilder builder) (MkLocation location) (MkValue value _) dimension isStable = do
1124 | op <- primIO $
prim__sortOpCreate builder location value (cast dimension) (boolToCInt isStable)
1125 | op <- onCollectAny' op (primIO . prim__deleteSortOp)
1128 | %foreign (ffi "SortOp_getComparator")
1129 | prim__sortOpGetComparator : GCAnyPtr -> AnyPtr
1132 | getComparator : SortOp -> Region
1133 | getComparator (MkSortOp op) = MkRegion $
prim__sortOpGetComparator op
1135 | %foreign (ffi "SortOp_getOperation")
1136 | prim__sortOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1140 | getOperation (MkSortOp op) = getOperationAux op prim__sortOpGetOperation
1142 | %foreign (ffi "ReverseOp_delete")
1143 | prim__deleteReverseOp : AnyPtr -> PrimIO ()
1146 | data ReverseOp = MkReverseOp GCAnyPtr
1148 | %foreign (ffi "ReverseOp_create")
1149 | prim__reverseOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1153 | create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io ReverseOp
1154 | create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) dimensions = do
1155 | MkArray dimensions dimensionsLen <- fromList $
cast {to = Int64} <$> dimensions
1156 | op <- primIO $
prim__reverseOpCreate builder location operand dimensions dimensionsLen
1157 | op <- onCollectAny' op (primIO . prim__deleteReverseOp)
1160 | %foreign (ffi "ReverseOp_getOperation")
1161 | prim__reverseOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1165 | getOperation (MkReverseOp op) = getOperationAux op prim__reverseOpGetOperation
1167 | %foreign (ffi "TransposeOp_delete")
1168 | prim__deleteTransposeOp : AnyPtr -> PrimIO ()
1171 | data TransposeOp = MkTransposeOp GCAnyPtr
1173 | %foreign (ffi "TransposeOp_create")
1174 | prim__transposeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1178 | create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io TransposeOp
1179 | create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) permutation = do
1180 | MkArray permutation permutationLen <- fromList $
cast {to = Int64} <$> permutation
1181 | op <- primIO $
prim__transposeOpCreate builder location operand permutation permutationLen
1182 | op <- onCollectAny' op (primIO . prim__deleteTransposeOp)
1183 | pure (MkTransposeOp op)
1185 | %foreign (ffi "TransposeOp_getOperation")
1186 | prim__transposeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1190 | getOperation (MkTransposeOp op) = getOperationAux op prim__transposeOpGetOperation
1192 | %foreign (ffi "TriangularSolveOp_delete")
1193 | prim__deleteTriangularSolveOp : AnyPtr -> PrimIO ()
1196 | data TriangularSolveOp = MkTriangularSolveOp GCAnyPtr
1198 | %foreign (ffi "TriangularSolveOp_create")
1199 | prim__triangularSolveOpCreate :
1200 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> Int -> Int -> Int -> PrimIO AnyPtr
1202 | namespace TriangularSolveOp
1224 | let leftSide = boolToCInt leftSide
1225 | lower = boolToCInt lower
1226 | unitDiagonal = boolToCInt unitDiagonal
1227 | transposeA = cast transposeA
1228 | op <- primIO $
prim__triangularSolveOpCreate
1229 | builder location a b leftSide lower unitDiagonal transposeA
1230 | op <- onCollectAny' op (primIO . prim__deleteTriangularSolveOp)
1231 | pure (MkTriangularSolveOp op)
1233 | %foreign (ffi "TriangularSolveOp_getOperation")
1234 | prim__triangularSolveOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1237 | Op TriangularSolveOp where
1238 | getOperation (MkTriangularSolveOp op) = getOperationAux op prim__triangularSolveOpGetOperation
1240 | %foreign (ffi "StableHLO_ReturnOp_delete")
1241 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
1244 | data ReturnOp = MkReturnOp GCAnyPtr
1246 | %foreign (ffi "StableHLO_ReturnOp_create")
1247 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1251 | create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
1252 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
1253 | op <- primIO $
prim__returnOpCreate builder location results
1254 | op <- onCollectAny' op (primIO . prim__deleteReturnOp)
1257 | %foreign (ffi "StableHLO_ReturnOp_getOperation")
1258 | prim__returnOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1262 | getOperation (MkReturnOp op) = getOperationAux op prim__returnOpGetOperation
1264 | %foreign (ffi "RngBitGeneratorOp_delete")
1265 | prim__deleteRngBitGeneratorOp : AnyPtr -> PrimIO ()
1268 | data RngBitGeneratorOp = MkRngBitGeneratorOp GCAnyPtr
1270 | %foreign (ffi "RngBitGeneratorOp_create")
1271 | prim__rngBitGeneratorOpCreate :
1272 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> GCAnyPtr -> PrimIO AnyPtr
1274 | namespace RngBitGeneratorOp
1288 | (MkType_ outputState _)
1292 | op <- primIO $
prim__rngBitGeneratorOpCreate
1293 | builder location outputState output (cast rngAlgorithm) state
1294 | op <- onCollectAny' op (primIO . prim__deleteRngBitGeneratorOp)
1295 | pure (MkRngBitGeneratorOp op)
1297 | %foreign (ffi "RngBitGeneratorOp_getOperation")
1298 | prim__rngBitGeneratorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1301 | Op RngBitGeneratorOp where
1302 | getOperation (MkRngBitGeneratorOp op) = getOperationAux op prim__rngBitGeneratorOpGetOperation