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 "CbrtOp_delete")
136 | prim__deleteCbrtOp : AnyPtr -> PrimIO ()
139 | data CbrtOp = MkCbrtOp GCAnyPtr
141 | %foreign (ffi "CbrtOp_create")
142 | prim__cbrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
146 | create : HasIO io => OpBuilder -> Location -> Value -> io CbrtOp
147 | create = UnaryElementwiseOp.create MkCbrtOp prim__cbrtOpCreate prim__deleteCbrtOp
149 | %foreign (ffi "CbrtOp_getOperation")
150 | prim__cbrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
154 | getOperation (MkCbrtOp op) = getOperationAux op prim__cbrtOpGetOperation
156 | %foreign (ffi "CeilOp_delete")
157 | prim__deleteCeilOp : AnyPtr -> PrimIO ()
160 | data CeilOp = MkCeilOp GCAnyPtr
162 | %foreign (ffi "CeilOp_create")
163 | prim__ceilOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
167 | create : HasIO io => OpBuilder -> Location -> Value -> io CeilOp
168 | create = UnaryElementwiseOp.create MkCeilOp prim__ceilOpCreate prim__deleteCeilOp
170 | %foreign (ffi "CeilOp_getOperation")
171 | prim__ceilOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
175 | getOperation (MkCeilOp op) = getOperationAux op prim__ceilOpGetOperation
177 | %foreign (ffi "ConvertOp_delete")
178 | prim__deleteConvertOp : AnyPtr -> PrimIO ()
181 | data ConvertOp = MkConvertOp GCAnyPtr
183 | %foreign (ffi "ConvertOp_create")
184 | prim__convertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
186 | namespace ConvertOp
188 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ConvertOp
189 | create (MkOpBuilder builder) (MkLocation location) (MkType_ result _) (MkValue operand _) = do
190 | op <- primIO $
prim__convertOpCreate builder location result operand
191 | op <- onCollectAny' op (primIO . prim__deleteConvertOp)
192 | pure $
MkConvertOp op
194 | %foreign (ffi "ConvertOp_getOperation")
195 | prim__convertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
199 | getOperation (MkConvertOp op) = getOperationAux op prim__convertOpGetOperation
201 | %foreign (ffi "CosineOp_delete")
202 | prim__deleteCosineOp : AnyPtr -> PrimIO ()
205 | data CosineOp = MkCosineOp GCAnyPtr
207 | %foreign (ffi "CosineOp_create")
208 | prim__cosineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
212 | create : HasIO io => OpBuilder -> Location -> Value -> io CosineOp
213 | create = UnaryElementwiseOp.create MkCosineOp prim__cosineOpCreate prim__deleteCosineOp
215 | %foreign (ffi "CosineOp_getOperation")
216 | prim__cosineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
220 | getOperation (MkCosineOp op) = getOperationAux op prim__cosineOpGetOperation
222 | %foreign (ffi "ExpOp_delete")
223 | prim__deleteExpOp : AnyPtr -> PrimIO ()
226 | data ExpOp = MkExpOp GCAnyPtr
228 | %foreign (ffi "ExpOp_create")
229 | prim__expOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
233 | create : HasIO io => OpBuilder -> Location -> Value -> io ExpOp
234 | create = UnaryElementwiseOp.create MkExpOp prim__expOpCreate prim__deleteExpOp
236 | %foreign (ffi "ExpOp_getOperation")
237 | prim__expOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
241 | getOperation (MkExpOp op) = getOperationAux op prim__expOpGetOperation
243 | %foreign (ffi "Expm1Op_delete")
244 | prim__deleteExpm1Op : AnyPtr -> PrimIO ()
247 | data Expm1Op = MkExpm1Op GCAnyPtr
249 | %foreign (ffi "Expm1Op_create")
250 | prim__expm1OpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
254 | create : HasIO io => OpBuilder -> Location -> Value -> io Expm1Op
255 | create = UnaryElementwiseOp.create MkExpm1Op prim__expm1OpCreate prim__deleteExpm1Op
257 | %foreign (ffi "Expm1Op_getOperation")
258 | prim__expm1OpGetOperation : GCAnyPtr -> PrimIO AnyPtr
262 | getOperation (MkExpm1Op op) = getOperationAux op prim__expm1OpGetOperation
264 | %foreign (ffi "FloorOp_delete")
265 | prim__deleteFloorOp : AnyPtr -> PrimIO ()
268 | data FloorOp = MkFloorOp GCAnyPtr
270 | %foreign (ffi "FloorOp_create")
271 | prim__floorOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
275 | create : HasIO io => OpBuilder -> Location -> Value -> io FloorOp
276 | create = UnaryElementwiseOp.create MkFloorOp prim__floorOpCreate prim__deleteFloorOp
278 | %foreign (ffi "FloorOp_getOperation")
279 | prim__floorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
283 | getOperation (MkFloorOp op) = getOperationAux op prim__floorOpGetOperation
285 | %foreign (ffi "IsFiniteOp_delete")
286 | prim__deleteIsFiniteOp : AnyPtr -> PrimIO ()
289 | data IsFiniteOp = MkIsFiniteOp GCAnyPtr
291 | %foreign (ffi "IsFiniteOp_create")
292 | prim__isFiniteOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
294 | namespace IsFiniteOp
296 | create : HasIO io => OpBuilder -> Location -> Value -> io IsFiniteOp
297 | create = UnaryElementwiseOp.create MkIsFiniteOp prim__isFiniteOpCreate prim__deleteIsFiniteOp
299 | %foreign (ffi "IsFiniteOp_getOperation")
300 | prim__isFiniteOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
303 | Op IsFiniteOp where
304 | getOperation (MkIsFiniteOp op) = getOperationAux op prim__isFiniteOpGetOperation
306 | %foreign (ffi "LogOp_delete")
307 | prim__deleteLogOp : AnyPtr -> PrimIO ()
310 | data LogOp = MkLogOp GCAnyPtr
312 | %foreign (ffi "LogOp_create")
313 | prim__logOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
317 | create : HasIO io => OpBuilder -> Location -> Value -> io LogOp
318 | create = UnaryElementwiseOp.create MkLogOp prim__logOpCreate prim__deleteLogOp
320 | %foreign (ffi "LogOp_getOperation")
321 | prim__logOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
325 | getOperation (MkLogOp op) = getOperationAux op prim__logOpGetOperation
327 | %foreign (ffi "Log1pOp_delete")
328 | prim__deleteLog1pOp : AnyPtr -> PrimIO ()
331 | data Log1pOp = MkLog1pOp GCAnyPtr
333 | %foreign (ffi "Log1pOp_create")
334 | prim__log1pOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
338 | create : HasIO io => OpBuilder -> Location -> Value -> io Log1pOp
339 | create = UnaryElementwiseOp.create MkLog1pOp prim__log1pOpCreate prim__deleteLog1pOp
341 | %foreign (ffi "Log1pOp_getOperation")
342 | prim__log1pOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
346 | getOperation (MkLog1pOp op) = getOperationAux op prim__log1pOpGetOperation
348 | %foreign (ffi "LogisticOp_delete")
349 | prim__deleteLogisticOp : AnyPtr -> PrimIO ()
352 | data LogisticOp = MkLogisticOp GCAnyPtr
354 | %foreign (ffi "LogisticOp_create")
355 | prim__logisticOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
357 | namespace LogisticOp
359 | create : HasIO io => OpBuilder -> Location -> Value -> io LogisticOp
360 | create = UnaryElementwiseOp.create MkLogisticOp prim__logisticOpCreate prim__deleteLogisticOp
362 | %foreign (ffi "LogisticOp_getOperation")
363 | prim__logisticOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
366 | Op LogisticOp where
367 | getOperation (MkLogisticOp op) = getOperationAux op prim__logisticOpGetOperation
369 | %foreign (ffi "NotOp_delete")
370 | prim__deleteNotOp : AnyPtr -> PrimIO ()
373 | data NotOp = MkNotOp GCAnyPtr
375 | %foreign (ffi "NotOp_create")
376 | prim__notOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
380 | create : HasIO io => OpBuilder -> Location -> Value -> io NotOp
381 | create = UnaryElementwiseOp.create MkNotOp prim__notOpCreate prim__deleteNotOp
383 | %foreign (ffi "NotOp_getOperation")
384 | prim__notOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
388 | getOperation (MkNotOp op) = getOperationAux op prim__notOpGetOperation
390 | %foreign (ffi "NegOp_delete")
391 | prim__deleteNegOp : AnyPtr -> PrimIO ()
394 | data NegOp = MkNegOp GCAnyPtr
396 | %foreign (ffi "NegOp_create")
397 | prim__negOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
401 | create : HasIO io => OpBuilder -> Location -> Value -> io NegOp
402 | create = UnaryElementwiseOp.create MkNegOp prim__negOpCreate prim__deleteNegOp
404 | %foreign (ffi "NegOp_getOperation")
405 | prim__negOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
409 | getOperation (MkNegOp op) = getOperationAux op prim__negOpGetOperation
411 | %foreign (ffi "RoundOp_delete")
412 | prim__deleteRoundOp : AnyPtr -> PrimIO ()
415 | data RoundOp = MkRoundOp GCAnyPtr
417 | %foreign (ffi "RoundOp_create")
418 | prim__roundOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
422 | create : HasIO io => OpBuilder -> Location -> Value -> io RoundOp
423 | create = UnaryElementwiseOp.create MkRoundOp prim__roundOpCreate prim__deleteRoundOp
425 | %foreign (ffi "RoundOp_getOperation")
426 | prim__roundOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
430 | getOperation (MkRoundOp op) = getOperationAux op prim__roundOpGetOperation
432 | %foreign (ffi "RoundNearestEvenOp_delete")
433 | prim__deleteRoundNearestEvenOp : AnyPtr -> PrimIO ()
436 | data RoundNearestEvenOp = MkRoundNearestEvenOp GCAnyPtr
438 | %foreign (ffi "RoundNearestEvenOp_create")
439 | prim__roundNearestEvenOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
441 | namespace RoundNearestEvenOp
443 | create : HasIO io => OpBuilder -> Location -> Value -> io RoundNearestEvenOp
444 | create = UnaryElementwiseOp.create
445 | MkRoundNearestEvenOp prim__roundNearestEvenOpCreate prim__deleteRoundNearestEvenOp
447 | %foreign (ffi "RoundNearestEvenOp_getOperation")
448 | prim__roundNearestEvenOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
451 | Op RoundNearestEvenOp where
452 | getOperation (MkRoundNearestEvenOp op) = getOperationAux op prim__roundNearestEvenOpGetOperation
454 | %foreign (ffi "RsqrtOp_delete")
455 | prim__deleteRsqrtOp : AnyPtr -> PrimIO ()
458 | data RsqrtOp = MkRsqrtOp GCAnyPtr
460 | %foreign (ffi "RsqrtOp_create")
461 | prim__rsqrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
465 | create : HasIO io => OpBuilder -> Location -> Value -> io RsqrtOp
466 | create = UnaryElementwiseOp.create MkRsqrtOp prim__rsqrtOpCreate prim__deleteRsqrtOp
468 | %foreign (ffi "RsqrtOp_getOperation")
469 | prim__rsqrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
473 | getOperation (MkRsqrtOp op) = getOperationAux op prim__rsqrtOpGetOperation
475 | %foreign (ffi "SignOp_delete")
476 | prim__deleteSignOp : AnyPtr -> PrimIO ()
479 | data SignOp = MkSignOp GCAnyPtr
481 | %foreign (ffi "SignOp_create")
482 | prim__signOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
486 | create : HasIO io => OpBuilder -> Location -> Value -> io SignOp
487 | create = UnaryElementwiseOp.create MkSignOp prim__signOpCreate prim__deleteSignOp
489 | %foreign (ffi "SignOp_getOperation")
490 | prim__signOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
494 | getOperation (MkSignOp op) = getOperationAux op prim__signOpGetOperation
496 | %foreign (ffi "SineOp_delete")
497 | prim__deleteSineOp : AnyPtr -> PrimIO ()
500 | data SineOp = MkSineOp GCAnyPtr
502 | %foreign (ffi "SineOp_create")
503 | prim__sineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
507 | create : HasIO io => OpBuilder -> Location -> Value -> io SineOp
508 | create = UnaryElementwiseOp.create MkSineOp prim__sineOpCreate prim__deleteSineOp
510 | %foreign (ffi "SineOp_getOperation")
511 | prim__sineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
515 | getOperation (MkSineOp op) = getOperationAux op prim__sineOpGetOperation
517 | %foreign (ffi "SqrtOp_delete")
518 | prim__deleteSqrtOp : AnyPtr -> PrimIO ()
521 | data SqrtOp = MkSqrtOp GCAnyPtr
523 | %foreign (ffi "SqrtOp_create")
524 | prim__sqrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
528 | create : HasIO io => OpBuilder -> Location -> Value -> io SqrtOp
529 | create = UnaryElementwiseOp.create MkSqrtOp prim__sqrtOpCreate prim__deleteSqrtOp
531 | %foreign (ffi "SqrtOp_getOperation")
532 | prim__sqrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
536 | getOperation (MkSqrtOp op) = getOperationAux op prim__sqrtOpGetOperation
538 | %foreign (ffi "TanOp_delete")
539 | prim__deleteTanOp : AnyPtr -> PrimIO ()
542 | data TanOp = MkTanOp GCAnyPtr
544 | %foreign (ffi "TanOp_create")
545 | prim__tanOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
549 | create : HasIO io => OpBuilder -> Location -> Value -> io TanOp
550 | create = UnaryElementwiseOp.create MkTanOp prim__tanOpCreate prim__deleteTanOp
552 | %foreign (ffi "TanOp_getOperation")
553 | prim__tanOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
557 | getOperation (MkTanOp op) = getOperationAux op prim__tanOpGetOperation
559 | %foreign (ffi "TanhOp_delete")
560 | prim__deleteTanhOp : AnyPtr -> PrimIO ()
563 | data TanhOp = MkTanhOp GCAnyPtr
565 | %foreign (ffi "TanhOp_create")
566 | prim__tanhOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
570 | create : HasIO io => OpBuilder -> Location -> Value -> io TanhOp
571 | create = UnaryElementwiseOp.create MkTanhOp prim__tanhOpCreate prim__deleteTanhOp
573 | %foreign (ffi "TanhOp_getOperation")
574 | prim__tanhOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
578 | getOperation (MkTanhOp op) = getOperationAux op prim__tanhOpGetOperation
580 | namespace BinaryElementwiseOp
583 | (GCAnyPtr -> opTy) ->
584 | (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
585 | (AnyPtr -> PrimIO ()) ->
586 | HasIO io => OpBuilder -> Location -> Value -> Value -> io opTy
591 | (MkOpBuilder builder)
592 | (MkLocation location)
595 | op <- primIO $
prim__create builder location x y
596 | op <- onCollectAny' op (primIO . prim__delete)
597 | pure $
constructor_ op
599 | %foreign (ffi "AddOp_delete")
600 | prim__deleteAddOp : AnyPtr -> PrimIO ()
603 | data AddOp = MkAddOp GCAnyPtr
605 | %foreign (ffi "AddOp_create")
606 | prim__addOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
610 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AddOp
611 | create = BinaryElementwiseOp.create MkAddOp prim__addOpCreate prim__deleteAddOp
613 | %foreign (ffi "AddOp_getOperation")
614 | prim__addOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
618 | getOperation (MkAddOp op) = getOperationAux op prim__addOpGetOperation
620 | %foreign (ffi "Atan2Op_delete")
621 | prim__deleteAtan2Op : AnyPtr -> PrimIO ()
624 | data Atan2Op = MkAtan2Op GCAnyPtr
626 | %foreign (ffi "Atan2Op_create")
627 | prim__atan2OpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
631 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io Atan2Op
632 | create = BinaryElementwiseOp.create MkAtan2Op prim__atan2OpCreate prim__deleteAtan2Op
634 | %foreign (ffi "Atan2Op_getOperation")
635 | prim__atan2OpGetOperation : GCAnyPtr -> PrimIO AnyPtr
639 | getOperation (MkAtan2Op op) = getOperationAux op prim__atan2OpGetOperation
641 | %foreign (ffi "DivOp_delete")
642 | prim__deleteDivOp : AnyPtr -> PrimIO ()
645 | data DivOp = MkDivOp GCAnyPtr
647 | %foreign (ffi "DivOp_create")
648 | prim__divOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
652 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io DivOp
653 | create = BinaryElementwiseOp.create MkDivOp prim__divOpCreate prim__deleteDivOp
655 | %foreign (ffi "DivOp_getOperation")
656 | prim__divOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
660 | getOperation (MkDivOp op) = getOperationAux op prim__divOpGetOperation
662 | %foreign (ffi "MaxOp_delete")
663 | prim__deleteMaxOp : AnyPtr -> PrimIO ()
666 | data MaxOp = MkMaxOp GCAnyPtr
668 | %foreign (ffi "MaxOp_create")
669 | prim__maxOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
673 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MaxOp
674 | create = BinaryElementwiseOp.create MkMaxOp prim__maxOpCreate prim__deleteMaxOp
676 | %foreign (ffi "MaxOp_getOperation")
677 | prim__maxOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
681 | getOperation (MkMaxOp op) = getOperationAux op prim__maxOpGetOperation
683 | %foreign (ffi "MinOp_delete")
684 | prim__deleteMinOp : AnyPtr -> PrimIO ()
687 | data MinOp = MkMinOp GCAnyPtr
689 | %foreign (ffi "MinOp_create")
690 | prim__minOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
694 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MinOp
695 | create = BinaryElementwiseOp.create MkMinOp prim__minOpCreate prim__deleteMinOp
697 | %foreign (ffi "MinOp_getOperation")
698 | prim__minOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
702 | getOperation (MkMinOp op) = getOperationAux op prim__minOpGetOperation
704 | %foreign (ffi "MulOp_delete")
705 | prim__deleteMulOp : AnyPtr -> PrimIO ()
708 | data MulOp = MkMulOp GCAnyPtr
710 | %foreign (ffi "MulOp_create")
711 | prim__mulOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
715 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MulOp
716 | create = BinaryElementwiseOp.create MkMulOp prim__mulOpCreate prim__deleteMulOp
718 | %foreign (ffi "MulOp_getOperation")
719 | prim__mulOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
723 | getOperation (MkMulOp op) = getOperationAux op prim__mulOpGetOperation
725 | %foreign (ffi "PowOp_delete")
726 | prim__deletePowOp : AnyPtr -> PrimIO ()
729 | data PowOp = MkPowOp GCAnyPtr
731 | %foreign (ffi "PowOp_create")
732 | prim__powOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
736 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io PowOp
737 | create = BinaryElementwiseOp.create MkPowOp prim__powOpCreate prim__deletePowOp
739 | %foreign (ffi "PowOp_getOperation")
740 | prim__powOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
744 | getOperation (MkPowOp op) = getOperationAux op prim__powOpGetOperation
746 | %foreign (ffi "RemOp_delete")
747 | prim__deleteRemOp : AnyPtr -> PrimIO ()
750 | data RemOp = MkRemOp GCAnyPtr
752 | %foreign (ffi "RemOp_create")
753 | prim__remOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
757 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io RemOp
758 | create = BinaryElementwiseOp.create MkRemOp prim__remOpCreate prim__deleteRemOp
760 | %foreign (ffi "RemOp_getOperation")
761 | prim__remOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
765 | getOperation (MkRemOp op) = getOperationAux op prim__remOpGetOperation
767 | %foreign (ffi "ShiftRightLogicalOp_delete")
768 | prim__deleteShiftRightLogicalOp : AnyPtr -> PrimIO ()
771 | data ShiftRightLogicalOp = MkShiftRightLogicalOp GCAnyPtr
773 | %foreign (ffi "ShiftRightLogicalOp_create")
774 | prim__shiftRightLogicalOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
776 | namespace ShiftRightLogicalOp
778 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io ShiftRightLogicalOp
779 | create = BinaryElementwiseOp.create
780 | MkShiftRightLogicalOp prim__shiftRightLogicalOpCreate prim__deleteShiftRightLogicalOp
782 | %foreign (ffi "ShiftRightLogicalOp_getOperation")
783 | prim__shiftRightLogicalOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
786 | Op ShiftRightLogicalOp where
787 | getOperation (MkShiftRightLogicalOp op) = getOperationAux op prim__shiftRightLogicalOpGetOperation
789 | %foreign (ffi "SubtractOp_delete")
790 | prim__deleteSubtractOp : AnyPtr -> PrimIO ()
793 | data SubtractOp = MkSubtractOp GCAnyPtr
795 | %foreign (ffi "SubtractOp_create")
796 | prim__subtractOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
798 | namespace SubtractOp
800 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io SubtractOp
801 | create = BinaryElementwiseOp.create MkSubtractOp prim__subtractOpCreate prim__deleteSubtractOp
803 | %foreign (ffi "SubtractOp_getOperation")
804 | prim__subtractOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
807 | Op SubtractOp where
808 | getOperation (MkSubtractOp op) = getOperationAux op prim__subtractOpGetOperation
810 | %foreign (ffi "AndOp_delete")
811 | prim__deleteAndOp : AnyPtr -> PrimIO ()
814 | data AndOp = MkAndOp GCAnyPtr
816 | %foreign (ffi "AndOp_create")
817 | prim__andOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
821 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AndOp
822 | create = BinaryElementwiseOp.create MkAndOp prim__andOpCreate prim__deleteAndOp
824 | %foreign (ffi "AndOp_getOperation")
825 | prim__andOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
829 | getOperation (MkAndOp op) = getOperationAux op prim__andOpGetOperation
831 | %foreign (ffi "OrOp_delete")
832 | prim__deleteOrOp : AnyPtr -> PrimIO ()
835 | data OrOp = MkOrOp GCAnyPtr
837 | %foreign (ffi "OrOp_create")
838 | prim__orOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
842 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> io OrOp
843 | create = BinaryElementwiseOp.create MkOrOp prim__orOpCreate prim__deleteOrOp
845 | %foreign (ffi "OrOp_getOperation")
846 | prim__orOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
850 | getOperation (MkOrOp op) = getOperationAux op prim__orOpGetOperation
852 | %foreign (ffi "IfOp_delete")
853 | prim__deleteIfOp : AnyPtr -> PrimIO ()
856 | data IfOp = MkIfOp GCAnyPtr
858 | %foreign (ffi "IfOp_create")
859 | prim__ifOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
863 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io IfOp
864 | create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue pred _) = do
865 | op <- primIO $
prim__ifOpCreate builder location resultType pred
866 | op <- onCollectAny' op (primIO . prim__deleteIfOp)
869 | %foreign (ffi "IfOp_getTrueBranch")
870 | prim__ifOpGetTrueBranch : GCAnyPtr -> AnyPtr
873 | getTrueBranch : IfOp -> Region
874 | getTrueBranch (MkIfOp op) = MkRegion $
prim__ifOpGetTrueBranch op
876 | %foreign (ffi "IfOp_getFalseBranch")
877 | prim__ifOpGetFalseBranch : GCAnyPtr -> AnyPtr
880 | getFalseBranch : IfOp -> Region
881 | getFalseBranch (MkIfOp op) = MkRegion $
prim__ifOpGetFalseBranch op
883 | %foreign (ffi "IfOp_getOperation")
884 | prim__ifOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
888 | getOperation (MkIfOp op) = getOperationAux op prim__ifOpGetOperation
890 | %foreign (ffi "WhileOp_delete")
891 | prim__deleteWhileOp : AnyPtr -> PrimIO ()
894 | data WhileOp = MkWhileOp GCAnyPtr
896 | %foreign (ffi "WhileOp_create")
897 | prim__whileOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
901 | create : HasIO io => OpBuilder -> Location -> ValueRange -> io WhileOp
902 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) = do
903 | op <- primIO $
prim__whileOpCreate builder location inputs
904 | op <- onCollectAny' op (primIO . prim__deleteWhileOp)
905 | pure (MkWhileOp op)
907 | %foreign (ffi "WhileOp_getCond")
908 | prim__whileOpGetCond : GCAnyPtr -> AnyPtr
911 | getCond : WhileOp -> Region
912 | getCond (MkWhileOp op) = MkRegion $
prim__whileOpGetCond op
914 | %foreign (ffi "WhileOp_getBody")
915 | prim__whileOpGetBody : GCAnyPtr -> AnyPtr
919 | getBody : WhileOp -> Region
920 | getBody (MkWhileOp op) = MkRegion $
prim__whileOpGetBody op
922 | %foreign (ffi "WhileOp_getOperation")
923 | prim__whileOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
927 | getOperation (MkWhileOp op) = getOperationAux op prim__whileOpGetOperation
929 | %foreign (ffi "ReduceOp_delete")
930 | prim__deleteReduceOp : AnyPtr -> PrimIO ()
933 | data ReduceOp = MkReduceOp GCAnyPtr
935 | %foreign (ffi "ReduceOp_create")
936 | prim__reduceOpCreate :
937 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
941 | create : HasIO io => OpBuilder -> Location -> ValueRange -> ValueRange -> List Nat -> io ReduceOp
943 | (MkOpBuilder builder)
944 | (MkLocation location)
945 | (MkValueRange inputs)
946 | (MkValueRange inits)
948 | MkArray dimensions dimensionsLen <- fromList $
cast {to = Int64} <$> dimensions
949 | op <- primIO $
prim__reduceOpCreate builder location inputs inits dimensions dimensionsLen
950 | op <- onCollectAny' op (primIO . prim__deleteReduceOp)
951 | pure (MkReduceOp op)
953 | %foreign (ffi "ReduceOp_getBody")
954 | prim__reduceOpGetBody : GCAnyPtr -> AnyPtr
958 | getBody : ReduceOp -> Region
959 | getBody (MkReduceOp op) = MkRegion $
prim__reduceOpGetBody op
961 | %foreign (ffi "ReduceOp_getOperation")
962 | prim__reduceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
966 | getOperation (MkReduceOp op) = getOperationAux op prim__reduceOpGetOperation
968 | %foreign (ffi "CompareOp_delete")
969 | prim__deleteCompareOp : AnyPtr -> PrimIO ()
972 | data CompareOp = MkCompareOp GCAnyPtr
974 | %foreign (ffi "CompareOp_create")
975 | prim__compareOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
977 | namespace CompareOp
980 | HasIO io => OpBuilder -> Location -> Value -> Value -> ComparisonDirection -> io CompareOp
981 | create (MkOpBuilder builder) (MkLocation location) (MkValue lhs _) (MkValue rhs _) direction = do
982 | op <- primIO $
prim__compareOpCreate builder location lhs rhs (cast direction)
983 | op <- onCollectAny' op (primIO . prim__deleteCompareOp)
984 | pure (MkCompareOp op)
986 | %foreign (ffi "CompareOp_getOperation")
987 | prim__compareOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
991 | getOperation (MkCompareOp op) = getOperationAux op prim__compareOpGetOperation
993 | %foreign (ffi "SliceOp_delete")
994 | prim__deleteSliceOp : AnyPtr -> PrimIO ()
997 | data SliceOp = MkSliceOp GCAnyPtr
999 | %foreign (ffi "SliceOp_create")
1012 | HasIO io => OpBuilder -> Location -> Value -> List Nat -> List Nat -> List Nat -> io SliceOp
1020 | MkArray startIndices startIndicesLen <- fromList $
cast {to = Int64} <$> startIndices
1021 | MkArray limitIndices limitIndicesLen <- fromList $
cast {to = Int64} <$> limitIndices
1022 | MkArray strides stridesLen <- fromList $
cast {to = Int64} <$> strides
1023 | op <- primIO $
prim__sliceOpCreate
1027 | startIndices startIndicesLen
1028 | limitIndices limitIndicesLen
1030 | op <- onCollectAny' op (primIO . prim__deleteSliceOp)
1033 | %foreign (ffi "SliceOp_getOperation")
1034 | prim__sliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1038 | getOperation (MkSliceOp op) = getOperationAux op prim__sliceOpGetOperation
1040 | %foreign (ffi "DynamicSliceOp_delete")
1041 | prim__deleteDynamicSliceOp : AnyPtr -> PrimIO ()
1044 | data DynamicSliceOp = MkDynamicSliceOp GCAnyPtr
1046 | %foreign (ffi "DynamicSliceOp_create")
1047 | prim__dynamicSliceOpCreate :
1048 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1050 | namespace DynamicSliceOp
1053 | HasIO io => OpBuilder -> Location -> Value -> ValueRange -> List Nat -> io DynamicSliceOp
1058 | (MkValueRange startIndices)
1060 | MkArray sliceSizes sliceSizesLen <- fromList $
cast {to = Int64} <$> sliceSizes
1061 | op <- primIO $
prim__dynamicSliceOpCreate
1062 | builder location operand startIndices sliceSizes sliceSizesLen
1063 | op <- onCollectAny' op (primIO . prim__deleteDynamicSliceOp)
1064 | pure (MkDynamicSliceOp op)
1066 | %foreign (ffi "DynamicSliceOp_getOperation")
1067 | prim__dynamicSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1070 | Op DynamicSliceOp where
1071 | getOperation (MkDynamicSliceOp op) = getOperationAux op prim__dynamicSliceOpGetOperation
1073 | %foreign (ffi "DynamicUpdateSliceOp_delete")
1074 | prim__deleteDynamicUpdateSliceOp : AnyPtr -> PrimIO ()
1077 | data DynamicUpdateSliceOp = MkDynamicUpdateSliceOp GCAnyPtr
1079 | %foreign (ffi "DynamicUpdateSliceOp_create")
1080 | prim__dynamicUpdateSliceOpCreate :
1081 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1083 | namespace DynamicUpdateSliceOp
1086 | HasIO io => OpBuilder -> Location -> Value -> Value -> ValueRange -> io DynamicUpdateSliceOp
1092 | (MkValueRange startIndices) = do
1093 | op <- primIO $
prim__dynamicUpdateSliceOpCreate builder location operand update startIndices
1094 | op <- onCollectAny' op (primIO . prim__deleteDynamicUpdateSliceOp)
1095 | pure (MkDynamicUpdateSliceOp op)
1097 | %foreign (ffi "DynamicUpdateSliceOp_getOperation")
1098 | prim__dynamicUpdateSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1101 | Op DynamicUpdateSliceOp where
1102 | getOperation (MkDynamicUpdateSliceOp op) =
1103 | getOperationAux op prim__dynamicUpdateSliceOpGetOperation
1105 | %foreign (ffi "BitcastConvertOp_delete")
1106 | prim__deleteBitcastConvertOp : AnyPtr -> PrimIO ()
1109 | data BitcastConvertOp = MkBitcastConvertOp GCAnyPtr
1111 | %foreign (ffi "BitcastConvertOp_create")
1112 | prim__bitcastConvertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1114 | namespace BitcastConvertOp
1116 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io BitcastConvertOp
1117 | create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue operand _) = do
1118 | op <- primIO $
prim__bitcastConvertOpCreate builder location resultType operand
1119 | op <- onCollectAny' op (primIO . prim__deleteBitcastConvertOp)
1120 | pure (MkBitcastConvertOp op)
1122 | %foreign (ffi "BitcastConvertOp_getOperation")
1123 | prim__bitcastConvertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1126 | Op BitcastConvertOp where
1127 | getOperation (MkBitcastConvertOp op) = getOperationAux op prim__bitcastConvertOpGetOperation
1129 | %foreign (ffi "BroadcastInDimOp_delete")
1130 | prim__deleteBroadcastInDimOp : AnyPtr -> PrimIO ()
1133 | data BroadcastInDimOp = MkBroadcastInDimOp GCAnyPtr
1135 | %foreign (ffi "BroadcastInDimOp_create")
1136 | prim__broadcastInDimOpCreate :
1137 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1139 | namespace BroadcastInDimOp
1141 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> List Nat -> io BroadcastInDimOp
1145 | (MkType_ resultType0 _)
1148 | MkArray dimensions dimensionsLen <- fromList $
cast {to = Int64} <$> dimensions
1149 | op <- primIO $
prim__broadcastInDimOpCreate
1150 | builder location resultType0 operand dimensions dimensionsLen
1151 | op <- onCollectAny' op (primIO . prim__deleteBroadcastInDimOp)
1152 | pure (MkBroadcastInDimOp op)
1154 | %foreign (ffi "BroadcastInDimOp_getOperation")
1155 | prim__broadcastInDimOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1158 | Op BroadcastInDimOp where
1159 | getOperation (MkBroadcastInDimOp op) = getOperationAux op prim__broadcastInDimOpGetOperation
1161 | %foreign (ffi "CholeskyOp_delete")
1162 | prim__deleteCholeskyOp : AnyPtr -> PrimIO ()
1165 | data CholeskyOp = MkCholeskyOp GCAnyPtr
1167 | %foreign (ffi "CholeskyOp_create")
1168 | prim__choleskyOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
1172 | create : HasIO io => OpBuilder -> Location -> Value -> Bool -> io CholeskyOp
1173 | create (MkOpBuilder builder) (MkLocation location) (MkValue value _) lower = do
1174 | op <- primIO $
prim__choleskyOpCreate builder location value (boolToCInt lower)
1175 | op <- onCollectAny' op (primIO . prim__deleteCholeskyOp)
1178 | %foreign (ffi "CholeskyOp_getOperation")
1179 | prim__choleskyOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1183 | getOperation (MkCholeskyOp op) = getOperationAux op prim__choleskyOpGetOperation
1185 | %foreign (ffi "ConcatenateOp_delete")
1186 | prim__deleteConcatenateOp : AnyPtr -> PrimIO ()
1189 | data ConcatenateOp = MkConcatenateOp GCAnyPtr
1191 | %foreign (ffi "ConcatenateOp_create")
1192 | prim__concatenateOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> PrimIO AnyPtr
1194 | namespace ConcatenateOp
1196 | create : HasIO io => OpBuilder -> Location -> ValueRange -> Nat -> io ConcatenateOp
1197 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) dimension = do
1198 | op <- primIO $
prim__concatenateOpCreate builder location inputs (cast dimension)
1199 | op <- onCollectAny' op (primIO . prim__deleteConcatenateOp)
1200 | pure (MkConcatenateOp op)
1202 | %foreign (ffi "ConcatenateOp_getOperation")
1203 | prim__concatenateOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1207 | getOperation (MkConcatenateOp op) = getOperationAux op prim__concatenateOpGetOperation
1209 | %foreign (ffi "DotGeneralOp_delete")
1210 | prim__deleteDotGeneralOp : AnyPtr -> PrimIO ()
1213 | data DotGeneralOp = MkDotGeneralOp GCAnyPtr
1215 | %foreign (ffi "DotGeneralOp_create")
1216 | prim__dotGeneralOpCreate :
1217 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1228 | DotDimensionNumbersAttr ->
1233 | (MkType_ resultType0 _)
1236 | (MkDotDimensionNumbersAttr ddn) = do
1237 | op <- primIO $
prim__dotGeneralOpCreate builder location resultType0 lhs rhs ddn
1238 | op <- onCollectAny' op (primIO . prim__deleteDotGeneralOp)
1239 | pure (MkDotGeneralOp op)
1241 | %foreign (ffi "DotGeneralOp_getOperation")
1242 | prim__dotGeneralOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1246 | getOperation (MkDotGeneralOp op) = getOperationAux op prim__dotGeneralOpGetOperation
1248 | %foreign (ffi "ReshapeOp_delete")
1249 | prim__deleteReshapeOp : AnyPtr -> PrimIO ()
1252 | data ReshapeOp = MkReshapeOp GCAnyPtr
1254 | %foreign (ffi "ReshapeOp_create")
1255 | prim__reshapeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1259 | create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ReshapeOp
1260 | create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue value _) = do
1261 | op <- primIO $
prim__reshapeOpCreate builder location resultType value
1262 | op <- onCollectAny' op (primIO . prim__deleteReshapeOp)
1265 | %foreign (ffi "ReshapeOp_getOperation")
1266 | prim__reshapeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1270 | getOperation (MkReshapeOp op) = getOperationAux op prim__reshapeOpGetOperation
1272 | %foreign (ffi "SelectOp_delete")
1273 | prim__deleteSelectOp : AnyPtr -> PrimIO ()
1276 | data SelectOp = MkSelectOp GCAnyPtr
1278 | %foreign (ffi "SelectOp_create")
1279 | prim__selectOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1283 | create : HasIO io => OpBuilder -> Location -> Value -> Value -> Value -> io SelectOp
1289 | (MkValue onFalse _) = do
1290 | op <- primIO $
prim__selectOpCreate builder location pred onTrue onFalse
1291 | op <- onCollectAny' op (primIO . prim__deleteSelectOp)
1294 | %foreign (ffi "SelectOp_getOperation")
1295 | prim__selectOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1299 | getOperation (MkSelectOp op) = getOperationAux op prim__selectOpGetOperation
1301 | %foreign (ffi "SortOp_delete")
1302 | prim__deleteSortOp : AnyPtr -> PrimIO ()
1305 | data SortOp = MkSortOp GCAnyPtr
1307 | %foreign (ffi "SortOp_create")
1308 | prim__sortOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> Int -> PrimIO AnyPtr
1312 | create : HasIO io => OpBuilder -> Location -> Value -> Nat -> Bool -> io SortOp
1313 | create (MkOpBuilder builder) (MkLocation location) (MkValue value _) dimension isStable = do
1314 | op <- primIO $
prim__sortOpCreate builder location value (cast dimension) (boolToCInt isStable)
1315 | op <- onCollectAny' op (primIO . prim__deleteSortOp)
1318 | %foreign (ffi "SortOp_getComparator")
1319 | prim__sortOpGetComparator : GCAnyPtr -> AnyPtr
1322 | getComparator : SortOp -> Region
1323 | getComparator (MkSortOp op) = MkRegion $
prim__sortOpGetComparator op
1325 | %foreign (ffi "SortOp_getOperation")
1326 | prim__sortOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1330 | getOperation (MkSortOp op) = getOperationAux op prim__sortOpGetOperation
1332 | %foreign (ffi "ReverseOp_delete")
1333 | prim__deleteReverseOp : AnyPtr -> PrimIO ()
1336 | data ReverseOp = MkReverseOp GCAnyPtr
1338 | %foreign (ffi "ReverseOp_create")
1339 | prim__reverseOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1343 | create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io ReverseOp
1344 | create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) dimensions = do
1345 | MkArray dimensions dimensionsLen <- fromList $
cast {to = Int64} <$> dimensions
1346 | op <- primIO $
prim__reverseOpCreate builder location operand dimensions dimensionsLen
1347 | op <- onCollectAny' op (primIO . prim__deleteReverseOp)
1350 | %foreign (ffi "ReverseOp_getOperation")
1351 | prim__reverseOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1355 | getOperation (MkReverseOp op) = getOperationAux op prim__reverseOpGetOperation
1357 | %foreign (ffi "TransposeOp_delete")
1358 | prim__deleteTransposeOp : AnyPtr -> PrimIO ()
1361 | data TransposeOp = MkTransposeOp GCAnyPtr
1363 | %foreign (ffi "TransposeOp_create")
1364 | prim__transposeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1368 | create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io TransposeOp
1369 | create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) permutation = do
1370 | MkArray permutation permutationLen <- fromList $
cast {to = Int64} <$> permutation
1371 | op <- primIO $
prim__transposeOpCreate builder location operand permutation permutationLen
1372 | op <- onCollectAny' op (primIO . prim__deleteTransposeOp)
1373 | pure (MkTransposeOp op)
1375 | %foreign (ffi "TransposeOp_getOperation")
1376 | prim__transposeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1380 | getOperation (MkTransposeOp op) = getOperationAux op prim__transposeOpGetOperation
1382 | %foreign (ffi "TriangularSolveOp_delete")
1383 | prim__deleteTriangularSolveOp : AnyPtr -> PrimIO ()
1386 | data TriangularSolveOp = MkTriangularSolveOp GCAnyPtr
1388 | %foreign (ffi "TriangularSolveOp_create")
1389 | prim__triangularSolveOpCreate :
1390 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> Int -> Int -> Int -> PrimIO AnyPtr
1392 | namespace TriangularSolveOp
1414 | let leftSide = boolToCInt leftSide
1415 | lower = boolToCInt lower
1416 | unitDiagonal = boolToCInt unitDiagonal
1417 | transposeA = cast transposeA
1418 | op <- primIO $
prim__triangularSolveOpCreate
1419 | builder location a b leftSide lower unitDiagonal transposeA
1420 | op <- onCollectAny' op (primIO . prim__deleteTriangularSolveOp)
1421 | pure (MkTriangularSolveOp op)
1423 | %foreign (ffi "TriangularSolveOp_getOperation")
1424 | prim__triangularSolveOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1427 | Op TriangularSolveOp where
1428 | getOperation (MkTriangularSolveOp op) = getOperationAux op prim__triangularSolveOpGetOperation
1430 | %foreign (ffi "StableHLO_ReturnOp_delete")
1431 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
1434 | data ReturnOp = MkReturnOp GCAnyPtr
1436 | %foreign (ffi "StableHLO_ReturnOp_create")
1437 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1441 | create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
1442 | create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
1443 | op <- primIO $
prim__returnOpCreate builder location results
1444 | op <- onCollectAny' op (primIO . prim__deleteReturnOp)
1447 | %foreign (ffi "StableHLO_ReturnOp_getOperation")
1448 | prim__returnOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1452 | getOperation (MkReturnOp op) = getOperationAux op prim__returnOpGetOperation
1454 | %foreign (ffi "RngBitGeneratorOp_delete")
1455 | prim__deleteRngBitGeneratorOp : AnyPtr -> PrimIO ()
1458 | data RngBitGeneratorOp = MkRngBitGeneratorOp GCAnyPtr
1460 | %foreign (ffi "RngBitGeneratorOp_create")
1461 | prim__rngBitGeneratorOpCreate :
1462 | GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> GCAnyPtr -> PrimIO AnyPtr
1464 | namespace RngBitGeneratorOp
1478 | (MkType_ outputState _)
1482 | op <- primIO $
prim__rngBitGeneratorOpCreate
1483 | builder location outputState output (cast rngAlgorithm) state
1484 | op <- onCollectAny' op (primIO . prim__deleteRngBitGeneratorOp)
1485 | pure (MkRngBitGeneratorOp op)
1487 | %foreign (ffi "RngBitGeneratorOp_getOperation")
1488 | prim__rngBitGeneratorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1491 | Op RngBitGeneratorOp where
1492 | getOperation (MkRngBitGeneratorOp op) = getOperationAux op prim__rngBitGeneratorOpGetOperation