0 | {--
   1 | Copyright (C) 2025  Joel Berkeley
   2 |
   3 | This program is free software: you can redistribute it and/or modify
   4 | it under the terms of the GNU Affero General Public License as published
   5 | by the Free Software Foundation, either version 3 of the License, or
   6 | (at your option) any later version.
   7 |
   8 | This program is distributed in the hope that it will be useful,
   9 | but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 | GNU Affero General Public License for more details.
  12 |
  13 | You should have received a copy of the GNU Affero General Public License
  14 | along with this program.  If not, see <https://www.gnu.org/licenses/>.
  15 | --}
  16 | ||| For internal spidr use only.
  17 | module Spidr.Compiler.Stablehlo.Dialect.StablehloOps
  18 |
  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
  33 |
  34 | ffi : String -> String
  35 | ffi = libxla "c/stablehlo/dialect/StablehloOps.h"
  36 |
  37 | export
  38 | getOperationAux : HasIO io => GCAnyPtr -> (GCAnyPtr -> PrimIO AnyPtr) -> io Operation
  39 | getOperationAux op f = MkOperation <$> (primIO $ f op)
  40 |
  41 | %foreign (ffi "MLIRContext_loadDialect_StablehloDialect")
  42 | prim__loadDialectStablehloDialect : AnyPtr -> PrimIO ()
  43 |
  44 | export
  45 | loadDialectStablehloDialect : HasIO io => MLIRContext -> io ()
  46 | loadDialectStablehloDialect (MkMLIRContext ctx) = primIO $ prim__loadDialectStablehloDialect ctx
  47 |
  48 | %foreign (ffi "ConstantOp_delete")
  49 | prim__deleteConstantOp : AnyPtr -> PrimIO ()
  50 |
  51 | public export
  52 | data ConstantOp = MkConstantOp GCAnyPtr
  53 |
  54 | %foreign (ffi "ConstantOp_create")
  55 | prim__constantOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
  56 |
  57 | namespace ConstantOp
  58 |   export
  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)
  64 |
  65 | %foreign (ffi "ConstantOp_getOperation")
  66 | prim__constantOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
  67 |
  68 | export
  69 | Op ConstantOp where
  70 |   getOperation (MkConstantOp op) = getOperationAux op prim__constantOpGetOperation
  71 |
  72 | %foreign (ffi "IotaOp_delete")
  73 | prim__deleteIotaOp : AnyPtr -> PrimIO ()
  74 |
  75 | public export
  76 | data IotaOp = MkIotaOp GCAnyPtr
  77 |
  78 | %foreign (ffi "IotaOp_create")
  79 | prim__iotaOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
  80 |
  81 | namespace IotaOp
  82 |   export
  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)
  87 |     pure (MkIotaOp op)
  88 |
  89 | %foreign (ffi "IotaOp_getOperation")
  90 | prim__iotaOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
  91 |
  92 | export
  93 | Op IotaOp where
  94 |   getOperation (MkIotaOp op) = getOperationAux op prim__iotaOpGetOperation
  95 |
  96 | namespace UnaryElementwiseOp
  97 |   export
  98 |   create :
  99 |     (GCAnyPtr -> opTy) ->
 100 |     (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
 101 |     (AnyPtr -> PrimIO ()) ->
 102 |     HasIO io => OpBuilder -> Location -> Value -> io opTy
 103 |   create
 104 |     constructor_
 105 |     prim__create
 106 |     prim__delete
 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
 113 |
 114 | %foreign (ffi "AbsOp_delete")
 115 | prim__deleteAbsOp : AnyPtr -> PrimIO ()
 116 |
 117 | public export
 118 | data AbsOp = MkAbsOp GCAnyPtr
 119 |
 120 | %foreign (ffi "AbsOp_create")
 121 | prim__absOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 122 |
 123 | namespace AbsOp
 124 |   export
 125 |   create : HasIO io => OpBuilder -> Location -> Value -> io AbsOp
 126 |   create = UnaryElementwiseOp.create MkAbsOp prim__absOpCreate prim__deleteAbsOp
 127 |
 128 | %foreign (ffi "AbsOp_getOperation")
 129 | prim__absOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 130 |
 131 | export
 132 | Op AbsOp where
 133 |   getOperation (MkAbsOp op) = getOperationAux op prim__absOpGetOperation
 134 |
 135 | %foreign (ffi "CbrtOp_delete")
 136 | prim__deleteCbrtOp : AnyPtr -> PrimIO ()
 137 |
 138 | public export
 139 | data CbrtOp = MkCbrtOp GCAnyPtr
 140 |
 141 | %foreign (ffi "CbrtOp_create")
 142 | prim__cbrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 143 |
 144 | namespace CbrtOp
 145 |   export
 146 |   create : HasIO io => OpBuilder -> Location -> Value -> io CbrtOp
 147 |   create = UnaryElementwiseOp.create MkCbrtOp prim__cbrtOpCreate prim__deleteCbrtOp
 148 |
 149 | %foreign (ffi "CbrtOp_getOperation")
 150 | prim__cbrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 151 |
 152 | export
 153 | Op CbrtOp where
 154 |   getOperation (MkCbrtOp op) = getOperationAux op prim__cbrtOpGetOperation
 155 |
 156 | %foreign (ffi "CeilOp_delete")
 157 | prim__deleteCeilOp : AnyPtr -> PrimIO ()
 158 |
 159 | public export
 160 | data CeilOp = MkCeilOp GCAnyPtr
 161 |
 162 | %foreign (ffi "CeilOp_create")
 163 | prim__ceilOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 164 |
 165 | namespace CeilOp
 166 |   export
 167 |   create : HasIO io => OpBuilder -> Location -> Value -> io CeilOp
 168 |   create = UnaryElementwiseOp.create MkCeilOp prim__ceilOpCreate prim__deleteCeilOp
 169 |
 170 | %foreign (ffi "CeilOp_getOperation")
 171 | prim__ceilOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 172 |
 173 | export
 174 | Op CeilOp where
 175 |   getOperation (MkCeilOp op) = getOperationAux op prim__ceilOpGetOperation
 176 |
 177 | %foreign (ffi "ConvertOp_delete")
 178 | prim__deleteConvertOp : AnyPtr -> PrimIO ()
 179 |
 180 | public export
 181 | data ConvertOp = MkConvertOp GCAnyPtr
 182 |
 183 | %foreign (ffi "ConvertOp_create")
 184 | prim__convertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 185 |
 186 | namespace ConvertOp
 187 |   export
 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
 193 |
 194 | %foreign (ffi "ConvertOp_getOperation")
 195 | prim__convertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 196 |
 197 | export
 198 | Op ConvertOp where
 199 |   getOperation (MkConvertOp op) = getOperationAux op prim__convertOpGetOperation
 200 |
 201 | %foreign (ffi "CosineOp_delete")
 202 | prim__deleteCosineOp : AnyPtr -> PrimIO ()
 203 |
 204 | public export
 205 | data CosineOp = MkCosineOp GCAnyPtr
 206 |
 207 | %foreign (ffi "CosineOp_create")
 208 | prim__cosineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 209 |
 210 | namespace CosineOp
 211 |   export
 212 |   create : HasIO io => OpBuilder -> Location -> Value -> io CosineOp
 213 |   create = UnaryElementwiseOp.create MkCosineOp prim__cosineOpCreate prim__deleteCosineOp
 214 |
 215 | %foreign (ffi "CosineOp_getOperation")
 216 | prim__cosineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 217 |
 218 | export
 219 | Op CosineOp where
 220 |   getOperation (MkCosineOp op) = getOperationAux op prim__cosineOpGetOperation
 221 |
 222 | %foreign (ffi "ExpOp_delete")
 223 | prim__deleteExpOp : AnyPtr -> PrimIO ()
 224 |
 225 | public export
 226 | data ExpOp = MkExpOp GCAnyPtr
 227 |
 228 | %foreign (ffi "ExpOp_create")
 229 | prim__expOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 230 |
 231 | namespace ExpOp
 232 |   export
 233 |   create : HasIO io => OpBuilder -> Location -> Value -> io ExpOp
 234 |   create = UnaryElementwiseOp.create MkExpOp prim__expOpCreate prim__deleteExpOp
 235 |
 236 | %foreign (ffi "ExpOp_getOperation")
 237 | prim__expOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 238 |
 239 | export
 240 | Op ExpOp where
 241 |   getOperation (MkExpOp op) = getOperationAux op prim__expOpGetOperation
 242 |
 243 | %foreign (ffi "Expm1Op_delete")
 244 | prim__deleteExpm1Op : AnyPtr -> PrimIO ()
 245 |
 246 | public export
 247 | data Expm1Op = MkExpm1Op GCAnyPtr
 248 |
 249 | %foreign (ffi "Expm1Op_create")
 250 | prim__expm1OpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 251 |
 252 | namespace Expm1Op
 253 |   export
 254 |   create : HasIO io => OpBuilder -> Location -> Value -> io Expm1Op
 255 |   create = UnaryElementwiseOp.create MkExpm1Op prim__expm1OpCreate prim__deleteExpm1Op
 256 |
 257 | %foreign (ffi "Expm1Op_getOperation")
 258 | prim__expm1OpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 259 |
 260 | export
 261 | Op Expm1Op where
 262 |   getOperation (MkExpm1Op op) = getOperationAux op prim__expm1OpGetOperation
 263 |
 264 | %foreign (ffi "FloorOp_delete")
 265 | prim__deleteFloorOp : AnyPtr -> PrimIO ()
 266 |
 267 | public export
 268 | data FloorOp = MkFloorOp GCAnyPtr
 269 |
 270 | %foreign (ffi "FloorOp_create")
 271 | prim__floorOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 272 |
 273 | namespace FloorOp
 274 |   export
 275 |   create : HasIO io => OpBuilder -> Location -> Value -> io FloorOp
 276 |   create = UnaryElementwiseOp.create MkFloorOp prim__floorOpCreate prim__deleteFloorOp
 277 |
 278 | %foreign (ffi "FloorOp_getOperation")
 279 | prim__floorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 280 |
 281 | export
 282 | Op FloorOp where
 283 |   getOperation (MkFloorOp op) = getOperationAux op prim__floorOpGetOperation
 284 |
 285 | %foreign (ffi "IsFiniteOp_delete")
 286 | prim__deleteIsFiniteOp : AnyPtr -> PrimIO ()
 287 |
 288 | public export
 289 | data IsFiniteOp = MkIsFiniteOp GCAnyPtr
 290 |
 291 | %foreign (ffi "IsFiniteOp_create")
 292 | prim__isFiniteOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 293 |
 294 | namespace IsFiniteOp
 295 |   export
 296 |   create : HasIO io => OpBuilder -> Location -> Value -> io IsFiniteOp
 297 |   create = UnaryElementwiseOp.create MkIsFiniteOp prim__isFiniteOpCreate prim__deleteIsFiniteOp
 298 |
 299 | %foreign (ffi "IsFiniteOp_getOperation")
 300 | prim__isFiniteOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 301 |
 302 | export
 303 | Op IsFiniteOp where
 304 |   getOperation (MkIsFiniteOp op) = getOperationAux op prim__isFiniteOpGetOperation
 305 |
 306 | %foreign (ffi "LogOp_delete")
 307 | prim__deleteLogOp : AnyPtr -> PrimIO ()
 308 |
 309 | public export
 310 | data LogOp = MkLogOp GCAnyPtr
 311 |
 312 | %foreign (ffi "LogOp_create")
 313 | prim__logOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 314 |
 315 | namespace LogOp
 316 |   export
 317 |   create : HasIO io => OpBuilder -> Location -> Value -> io LogOp
 318 |   create = UnaryElementwiseOp.create MkLogOp prim__logOpCreate prim__deleteLogOp
 319 |
 320 | %foreign (ffi "LogOp_getOperation")
 321 | prim__logOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 322 |
 323 | export
 324 | Op LogOp where
 325 |   getOperation (MkLogOp op) = getOperationAux op prim__logOpGetOperation
 326 |
 327 | %foreign (ffi "Log1pOp_delete")
 328 | prim__deleteLog1pOp : AnyPtr -> PrimIO ()
 329 |
 330 | public export
 331 | data Log1pOp = MkLog1pOp GCAnyPtr
 332 |
 333 | %foreign (ffi "Log1pOp_create")
 334 | prim__log1pOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 335 |
 336 | namespace Log1pOp
 337 |   export
 338 |   create : HasIO io => OpBuilder -> Location -> Value -> io Log1pOp
 339 |   create = UnaryElementwiseOp.create MkLog1pOp prim__log1pOpCreate prim__deleteLog1pOp
 340 |
 341 | %foreign (ffi "Log1pOp_getOperation")
 342 | prim__log1pOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 343 |
 344 | export
 345 | Op Log1pOp where
 346 |   getOperation (MkLog1pOp op) = getOperationAux op prim__log1pOpGetOperation
 347 |
 348 | %foreign (ffi "LogisticOp_delete")
 349 | prim__deleteLogisticOp : AnyPtr -> PrimIO ()
 350 |
 351 | public export
 352 | data LogisticOp = MkLogisticOp GCAnyPtr
 353 |
 354 | %foreign (ffi "LogisticOp_create")
 355 | prim__logisticOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 356 |
 357 | namespace LogisticOp
 358 |   export
 359 |   create : HasIO io => OpBuilder -> Location -> Value -> io LogisticOp
 360 |   create = UnaryElementwiseOp.create MkLogisticOp prim__logisticOpCreate prim__deleteLogisticOp
 361 |
 362 | %foreign (ffi "LogisticOp_getOperation")
 363 | prim__logisticOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 364 |
 365 | export
 366 | Op LogisticOp where
 367 |   getOperation (MkLogisticOp op) = getOperationAux op prim__logisticOpGetOperation
 368 |
 369 | %foreign (ffi "NotOp_delete")
 370 | prim__deleteNotOp : AnyPtr -> PrimIO ()
 371 |
 372 | public export
 373 | data NotOp = MkNotOp GCAnyPtr
 374 |
 375 | %foreign (ffi "NotOp_create")
 376 | prim__notOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 377 |
 378 | namespace NotOp
 379 |   export
 380 |   create : HasIO io => OpBuilder -> Location -> Value -> io NotOp
 381 |   create = UnaryElementwiseOp.create MkNotOp prim__notOpCreate prim__deleteNotOp
 382 |
 383 | %foreign (ffi "NotOp_getOperation")
 384 | prim__notOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 385 |
 386 | export
 387 | Op NotOp where
 388 |   getOperation (MkNotOp op) = getOperationAux op prim__notOpGetOperation
 389 |
 390 | %foreign (ffi "NegOp_delete")
 391 | prim__deleteNegOp : AnyPtr -> PrimIO ()
 392 |
 393 | public export
 394 | data NegOp = MkNegOp GCAnyPtr
 395 |
 396 | %foreign (ffi "NegOp_create")
 397 | prim__negOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 398 |
 399 | namespace NegOp
 400 |   export
 401 |   create : HasIO io => OpBuilder -> Location -> Value -> io NegOp
 402 |   create = UnaryElementwiseOp.create MkNegOp prim__negOpCreate prim__deleteNegOp
 403 |
 404 | %foreign (ffi "NegOp_getOperation")
 405 | prim__negOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 406 |
 407 | export
 408 | Op NegOp where
 409 |   getOperation (MkNegOp op) = getOperationAux op prim__negOpGetOperation
 410 |
 411 | %foreign (ffi "RoundOp_delete")
 412 | prim__deleteRoundOp : AnyPtr -> PrimIO ()
 413 |
 414 | public export
 415 | data RoundOp = MkRoundOp GCAnyPtr
 416 |
 417 | %foreign (ffi "RoundOp_create")
 418 | prim__roundOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 419 |
 420 | namespace RoundOp
 421 |   export
 422 |   create : HasIO io => OpBuilder -> Location -> Value -> io RoundOp
 423 |   create = UnaryElementwiseOp.create MkRoundOp prim__roundOpCreate prim__deleteRoundOp
 424 |
 425 | %foreign (ffi "RoundOp_getOperation")
 426 | prim__roundOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 427 |
 428 | export
 429 | Op RoundOp where
 430 |   getOperation (MkRoundOp op) = getOperationAux op prim__roundOpGetOperation
 431 |
 432 | %foreign (ffi "RoundNearestEvenOp_delete")
 433 | prim__deleteRoundNearestEvenOp : AnyPtr -> PrimIO ()
 434 |
 435 | public export
 436 | data RoundNearestEvenOp = MkRoundNearestEvenOp GCAnyPtr
 437 |
 438 | %foreign (ffi "RoundNearestEvenOp_create")
 439 | prim__roundNearestEvenOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 440 |
 441 | namespace RoundNearestEvenOp
 442 |   export
 443 |   create : HasIO io => OpBuilder -> Location -> Value -> io RoundNearestEvenOp
 444 |   create = UnaryElementwiseOp.create
 445 |     MkRoundNearestEvenOp prim__roundNearestEvenOpCreate prim__deleteRoundNearestEvenOp
 446 |
 447 | %foreign (ffi "RoundNearestEvenOp_getOperation")
 448 | prim__roundNearestEvenOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 449 |
 450 | export
 451 | Op RoundNearestEvenOp where
 452 |   getOperation (MkRoundNearestEvenOp op) = getOperationAux op prim__roundNearestEvenOpGetOperation
 453 |
 454 | %foreign (ffi "RsqrtOp_delete")
 455 | prim__deleteRsqrtOp : AnyPtr -> PrimIO ()
 456 |
 457 | public export
 458 | data RsqrtOp = MkRsqrtOp GCAnyPtr
 459 |
 460 | %foreign (ffi "RsqrtOp_create")
 461 | prim__rsqrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 462 |
 463 | namespace RsqrtOp
 464 |   export
 465 |   create : HasIO io => OpBuilder -> Location -> Value -> io RsqrtOp
 466 |   create = UnaryElementwiseOp.create MkRsqrtOp prim__rsqrtOpCreate prim__deleteRsqrtOp
 467 |
 468 | %foreign (ffi "RsqrtOp_getOperation")
 469 | prim__rsqrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 470 |
 471 | export
 472 | Op RsqrtOp where
 473 |   getOperation (MkRsqrtOp op) = getOperationAux op prim__rsqrtOpGetOperation
 474 |
 475 | %foreign (ffi "SignOp_delete")
 476 | prim__deleteSignOp : AnyPtr -> PrimIO ()
 477 |
 478 | public export
 479 | data SignOp = MkSignOp GCAnyPtr
 480 |
 481 | %foreign (ffi "SignOp_create")
 482 | prim__signOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 483 |
 484 | namespace SignOp
 485 |   export
 486 |   create : HasIO io => OpBuilder -> Location -> Value -> io SignOp
 487 |   create = UnaryElementwiseOp.create MkSignOp prim__signOpCreate prim__deleteSignOp
 488 |
 489 | %foreign (ffi "SignOp_getOperation")
 490 | prim__signOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 491 |
 492 | export
 493 | Op SignOp where
 494 |   getOperation (MkSignOp op) = getOperationAux op prim__signOpGetOperation
 495 |
 496 | %foreign (ffi "SineOp_delete")
 497 | prim__deleteSineOp : AnyPtr -> PrimIO ()
 498 |
 499 | public export
 500 | data SineOp = MkSineOp GCAnyPtr
 501 |
 502 | %foreign (ffi "SineOp_create")
 503 | prim__sineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 504 |
 505 | namespace SineOp
 506 |   export
 507 |   create : HasIO io => OpBuilder -> Location -> Value -> io SineOp
 508 |   create = UnaryElementwiseOp.create MkSineOp prim__sineOpCreate prim__deleteSineOp
 509 |
 510 | %foreign (ffi "SineOp_getOperation")
 511 | prim__sineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 512 |
 513 | export
 514 | Op SineOp where
 515 |   getOperation (MkSineOp op) = getOperationAux op prim__sineOpGetOperation
 516 |
 517 | %foreign (ffi "SqrtOp_delete")
 518 | prim__deleteSqrtOp : AnyPtr -> PrimIO ()
 519 |
 520 | public export
 521 | data SqrtOp = MkSqrtOp GCAnyPtr
 522 |
 523 | %foreign (ffi "SqrtOp_create")
 524 | prim__sqrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 525 |
 526 | namespace SqrtOp
 527 |   export
 528 |   create : HasIO io => OpBuilder -> Location -> Value -> io SqrtOp
 529 |   create = UnaryElementwiseOp.create MkSqrtOp prim__sqrtOpCreate prim__deleteSqrtOp
 530 |
 531 | %foreign (ffi "SqrtOp_getOperation")
 532 | prim__sqrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 533 |
 534 | export
 535 | Op SqrtOp where
 536 |   getOperation (MkSqrtOp op) = getOperationAux op prim__sqrtOpGetOperation
 537 |
 538 | %foreign (ffi "TanOp_delete")
 539 | prim__deleteTanOp : AnyPtr -> PrimIO ()
 540 |
 541 | public export
 542 | data TanOp = MkTanOp GCAnyPtr
 543 |
 544 | %foreign (ffi "TanOp_create")
 545 | prim__tanOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 546 |
 547 | namespace TanOp
 548 |   export
 549 |   create : HasIO io => OpBuilder -> Location -> Value -> io TanOp
 550 |   create = UnaryElementwiseOp.create MkTanOp prim__tanOpCreate prim__deleteTanOp
 551 |
 552 | %foreign (ffi "TanOp_getOperation")
 553 | prim__tanOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 554 |
 555 | export
 556 | Op TanOp where
 557 |   getOperation (MkTanOp op) = getOperationAux op prim__tanOpGetOperation
 558 |
 559 | %foreign (ffi "TanhOp_delete")
 560 | prim__deleteTanhOp : AnyPtr -> PrimIO ()
 561 |
 562 | public export
 563 | data TanhOp = MkTanhOp GCAnyPtr
 564 |
 565 | %foreign (ffi "TanhOp_create")
 566 | prim__tanhOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 567 |
 568 | namespace TanhOp
 569 |   export
 570 |   create : HasIO io => OpBuilder -> Location -> Value -> io TanhOp
 571 |   create = UnaryElementwiseOp.create MkTanhOp prim__tanhOpCreate prim__deleteTanhOp
 572 |
 573 | %foreign (ffi "TanhOp_getOperation")
 574 | prim__tanhOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 575 |
 576 | export
 577 | Op TanhOp where
 578 |   getOperation (MkTanhOp op) = getOperationAux op prim__tanhOpGetOperation
 579 |
 580 | namespace BinaryElementwiseOp
 581 |   export
 582 |   create :
 583 |     (GCAnyPtr -> opTy) ->
 584 |     (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
 585 |     (AnyPtr -> PrimIO ()) ->
 586 |     HasIO io => OpBuilder -> Location -> Value -> Value -> io opTy
 587 |   create
 588 |     constructor_
 589 |     prim__create
 590 |     prim__delete
 591 |     (MkOpBuilder builder)
 592 |     (MkLocation location)
 593 |     (MkValue x _)
 594 |     (MkValue y _) = do
 595 |       op <- primIO $ prim__create builder location x y
 596 |       op <- onCollectAny' op (primIO . prim__delete)
 597 |       pure $ constructor_ op
 598 |
 599 | %foreign (ffi "AddOp_delete")
 600 | prim__deleteAddOp : AnyPtr -> PrimIO ()
 601 |
 602 | public export
 603 | data AddOp = MkAddOp GCAnyPtr
 604 |
 605 | %foreign (ffi "AddOp_create")
 606 | prim__addOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 607 |
 608 | namespace AddOp
 609 |   export
 610 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AddOp
 611 |   create = BinaryElementwiseOp.create MkAddOp prim__addOpCreate prim__deleteAddOp
 612 |
 613 | %foreign (ffi "AddOp_getOperation")
 614 | prim__addOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 615 |
 616 | export
 617 | Op AddOp where
 618 |   getOperation (MkAddOp op) = getOperationAux op prim__addOpGetOperation
 619 |
 620 | %foreign (ffi "Atan2Op_delete")
 621 | prim__deleteAtan2Op : AnyPtr -> PrimIO ()
 622 |
 623 | public export
 624 | data Atan2Op = MkAtan2Op GCAnyPtr
 625 |
 626 | %foreign (ffi "Atan2Op_create")
 627 | prim__atan2OpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 628 |
 629 | namespace Atan2Op
 630 |   export
 631 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io Atan2Op
 632 |   create = BinaryElementwiseOp.create MkAtan2Op prim__atan2OpCreate prim__deleteAtan2Op
 633 |
 634 | %foreign (ffi "Atan2Op_getOperation")
 635 | prim__atan2OpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 636 |
 637 | export
 638 | Op Atan2Op where
 639 |   getOperation (MkAtan2Op op) = getOperationAux op prim__atan2OpGetOperation
 640 |
 641 | %foreign (ffi "DivOp_delete")
 642 | prim__deleteDivOp : AnyPtr -> PrimIO ()
 643 |
 644 | public export
 645 | data DivOp = MkDivOp GCAnyPtr
 646 |
 647 | %foreign (ffi "DivOp_create")
 648 | prim__divOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 649 |
 650 | namespace DivOp
 651 |   export
 652 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io DivOp
 653 |   create = BinaryElementwiseOp.create MkDivOp prim__divOpCreate prim__deleteDivOp
 654 |
 655 | %foreign (ffi "DivOp_getOperation")
 656 | prim__divOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 657 |
 658 | export
 659 | Op DivOp where
 660 |   getOperation (MkDivOp op) = getOperationAux op prim__divOpGetOperation
 661 |
 662 | %foreign (ffi "MaxOp_delete")
 663 | prim__deleteMaxOp : AnyPtr -> PrimIO ()
 664 |
 665 | public export
 666 | data MaxOp = MkMaxOp GCAnyPtr
 667 |
 668 | %foreign (ffi "MaxOp_create")
 669 | prim__maxOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 670 |
 671 | namespace MaxOp
 672 |   export
 673 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MaxOp
 674 |   create = BinaryElementwiseOp.create MkMaxOp prim__maxOpCreate prim__deleteMaxOp
 675 |
 676 | %foreign (ffi "MaxOp_getOperation")
 677 | prim__maxOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 678 |
 679 | export
 680 | Op MaxOp where
 681 |   getOperation (MkMaxOp op) = getOperationAux op prim__maxOpGetOperation
 682 |
 683 | %foreign (ffi "MinOp_delete")
 684 | prim__deleteMinOp : AnyPtr -> PrimIO ()
 685 |
 686 | public export
 687 | data MinOp = MkMinOp GCAnyPtr
 688 |
 689 | %foreign (ffi "MinOp_create")
 690 | prim__minOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 691 |
 692 | namespace MinOp
 693 |   export
 694 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MinOp
 695 |   create = BinaryElementwiseOp.create MkMinOp prim__minOpCreate prim__deleteMinOp
 696 |
 697 | %foreign (ffi "MinOp_getOperation")
 698 | prim__minOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 699 |
 700 | export
 701 | Op MinOp where
 702 |   getOperation (MkMinOp op) = getOperationAux op prim__minOpGetOperation
 703 |
 704 | %foreign (ffi "MulOp_delete")
 705 | prim__deleteMulOp : AnyPtr -> PrimIO ()
 706 |
 707 | public export
 708 | data MulOp = MkMulOp GCAnyPtr
 709 |
 710 | %foreign (ffi "MulOp_create")
 711 | prim__mulOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 712 |
 713 | namespace MulOp
 714 |   export
 715 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MulOp
 716 |   create = BinaryElementwiseOp.create MkMulOp prim__mulOpCreate prim__deleteMulOp
 717 |
 718 | %foreign (ffi "MulOp_getOperation")
 719 | prim__mulOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 720 |
 721 | export
 722 | Op MulOp where
 723 |   getOperation (MkMulOp op) = getOperationAux op prim__mulOpGetOperation
 724 |
 725 | %foreign (ffi "PowOp_delete")
 726 | prim__deletePowOp : AnyPtr -> PrimIO ()
 727 |
 728 | public export
 729 | data PowOp = MkPowOp GCAnyPtr
 730 |
 731 | %foreign (ffi "PowOp_create")
 732 | prim__powOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 733 |
 734 | namespace PowOp
 735 |   export
 736 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io PowOp
 737 |   create = BinaryElementwiseOp.create MkPowOp prim__powOpCreate prim__deletePowOp
 738 |
 739 | %foreign (ffi "PowOp_getOperation")
 740 | prim__powOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 741 |
 742 | export
 743 | Op PowOp where
 744 |   getOperation (MkPowOp op) = getOperationAux op prim__powOpGetOperation
 745 |
 746 | %foreign (ffi "RemOp_delete")
 747 | prim__deleteRemOp : AnyPtr -> PrimIO ()
 748 |
 749 | public export
 750 | data RemOp = MkRemOp GCAnyPtr
 751 |
 752 | %foreign (ffi "RemOp_create")
 753 | prim__remOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 754 |
 755 | namespace RemOp
 756 |   export
 757 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io RemOp
 758 |   create = BinaryElementwiseOp.create MkRemOp prim__remOpCreate prim__deleteRemOp
 759 |
 760 | %foreign (ffi "RemOp_getOperation")
 761 | prim__remOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 762 |
 763 | export
 764 | Op RemOp where
 765 |   getOperation (MkRemOp op) = getOperationAux op prim__remOpGetOperation
 766 |
 767 | %foreign (ffi "ShiftRightLogicalOp_delete")
 768 | prim__deleteShiftRightLogicalOp : AnyPtr -> PrimIO ()
 769 |
 770 | public export
 771 | data ShiftRightLogicalOp = MkShiftRightLogicalOp GCAnyPtr
 772 |
 773 | %foreign (ffi "ShiftRightLogicalOp_create")
 774 | prim__shiftRightLogicalOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 775 |
 776 | namespace ShiftRightLogicalOp
 777 |   export
 778 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io ShiftRightLogicalOp
 779 |   create = BinaryElementwiseOp.create
 780 |     MkShiftRightLogicalOp prim__shiftRightLogicalOpCreate prim__deleteShiftRightLogicalOp
 781 |
 782 | %foreign (ffi "ShiftRightLogicalOp_getOperation")
 783 | prim__shiftRightLogicalOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 784 |
 785 | export
 786 | Op ShiftRightLogicalOp where
 787 |   getOperation (MkShiftRightLogicalOp op) = getOperationAux op prim__shiftRightLogicalOpGetOperation
 788 |
 789 | %foreign (ffi "SubtractOp_delete")
 790 | prim__deleteSubtractOp : AnyPtr -> PrimIO ()
 791 |
 792 | public export
 793 | data SubtractOp = MkSubtractOp GCAnyPtr
 794 |
 795 | %foreign (ffi "SubtractOp_create")
 796 | prim__subtractOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 797 |
 798 | namespace SubtractOp
 799 |   export
 800 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io SubtractOp
 801 |   create = BinaryElementwiseOp.create MkSubtractOp prim__subtractOpCreate prim__deleteSubtractOp
 802 |
 803 | %foreign (ffi "SubtractOp_getOperation")
 804 | prim__subtractOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 805 |
 806 | export
 807 | Op SubtractOp where
 808 |   getOperation (MkSubtractOp op) = getOperationAux op prim__subtractOpGetOperation
 809 |
 810 | %foreign (ffi "AndOp_delete")
 811 | prim__deleteAndOp : AnyPtr -> PrimIO ()
 812 |
 813 | public export
 814 | data AndOp = MkAndOp GCAnyPtr
 815 |
 816 | %foreign (ffi "AndOp_create")
 817 | prim__andOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 818 |
 819 | namespace AndOp
 820 |   export
 821 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AndOp
 822 |   create = BinaryElementwiseOp.create MkAndOp prim__andOpCreate prim__deleteAndOp
 823 |
 824 | %foreign (ffi "AndOp_getOperation")
 825 | prim__andOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 826 |
 827 | export
 828 | Op AndOp where
 829 |   getOperation (MkAndOp op) = getOperationAux op prim__andOpGetOperation
 830 |
 831 | %foreign (ffi "OrOp_delete")
 832 | prim__deleteOrOp : AnyPtr -> PrimIO ()
 833 |
 834 | public export
 835 | data OrOp = MkOrOp GCAnyPtr
 836 |
 837 | %foreign (ffi "OrOp_create")
 838 | prim__orOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 839 |
 840 | namespace OrOp
 841 |   export
 842 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io OrOp
 843 |   create = BinaryElementwiseOp.create MkOrOp prim__orOpCreate prim__deleteOrOp
 844 |
 845 | %foreign (ffi "OrOp_getOperation")
 846 | prim__orOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 847 |
 848 | export
 849 | Op OrOp where
 850 |   getOperation (MkOrOp op) = getOperationAux op prim__orOpGetOperation
 851 |
 852 | %foreign (ffi "IfOp_delete")
 853 | prim__deleteIfOp : AnyPtr -> PrimIO ()
 854 |
 855 | public export
 856 | data IfOp = MkIfOp GCAnyPtr
 857 |
 858 | %foreign (ffi "IfOp_create")
 859 | prim__ifOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 860 |
 861 | namespace IfOp
 862 |   export
 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)
 867 |     pure (MkIfOp op)
 868 |
 869 | %foreign (ffi "IfOp_getTrueBranch")
 870 | prim__ifOpGetTrueBranch : GCAnyPtr -> AnyPtr
 871 |
 872 | export
 873 | getTrueBranch : IfOp -> Region
 874 | getTrueBranch (MkIfOp op) = MkRegion $ prim__ifOpGetTrueBranch op
 875 |
 876 | %foreign (ffi "IfOp_getFalseBranch")
 877 | prim__ifOpGetFalseBranch : GCAnyPtr -> AnyPtr
 878 |
 879 | export
 880 | getFalseBranch : IfOp -> Region
 881 | getFalseBranch (MkIfOp op) = MkRegion $ prim__ifOpGetFalseBranch op
 882 |
 883 | %foreign (ffi "IfOp_getOperation")
 884 | prim__ifOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 885 |
 886 | export
 887 | Op IfOp where
 888 |   getOperation (MkIfOp op) = getOperationAux op prim__ifOpGetOperation
 889 |
 890 | %foreign (ffi "WhileOp_delete")
 891 | prim__deleteWhileOp : AnyPtr -> PrimIO ()
 892 |
 893 | public export
 894 | data WhileOp = MkWhileOp GCAnyPtr
 895 |
 896 | %foreign (ffi "WhileOp_create")
 897 | prim__whileOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 898 |
 899 | namespace WhileOp
 900 |   export
 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)
 906 |
 907 | %foreign (ffi "WhileOp_getCond")
 908 | prim__whileOpGetCond : GCAnyPtr -> AnyPtr
 909 |
 910 | export
 911 | getCond : WhileOp -> Region
 912 | getCond (MkWhileOp op) = MkRegion $ prim__whileOpGetCond op
 913 |
 914 | %foreign (ffi "WhileOp_getBody")
 915 | prim__whileOpGetBody : GCAnyPtr -> AnyPtr
 916 |
 917 | namespace WhileOp
 918 |   export
 919 |   getBody : WhileOp -> Region
 920 |   getBody (MkWhileOp op) = MkRegion $ prim__whileOpGetBody op
 921 |
 922 | %foreign (ffi "WhileOp_getOperation")
 923 | prim__whileOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 924 |
 925 | export
 926 | Op WhileOp where
 927 |   getOperation (MkWhileOp op) = getOperationAux op prim__whileOpGetOperation
 928 |
 929 | %foreign (ffi "ReduceOp_delete")
 930 | prim__deleteReduceOp : AnyPtr -> PrimIO ()
 931 |
 932 | public export
 933 | data ReduceOp = MkReduceOp GCAnyPtr
 934 |
 935 | %foreign (ffi "ReduceOp_create")
 936 | prim__reduceOpCreate :
 937 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
 938 |
 939 | namespace ReduceOp
 940 |   export
 941 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> ValueRange -> List Nat -> io ReduceOp
 942 |   create
 943 |     (MkOpBuilder builder)
 944 |     (MkLocation location)
 945 |     (MkValueRange inputs)
 946 |     (MkValueRange inits)
 947 |     dimensions = do
 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)
 952 |
 953 | %foreign (ffi "ReduceOp_getBody")
 954 | prim__reduceOpGetBody : GCAnyPtr -> AnyPtr
 955 |
 956 | namespace ReduceOp
 957 |   export
 958 |   getBody : ReduceOp -> Region
 959 |   getBody (MkReduceOp op) = MkRegion $ prim__reduceOpGetBody op
 960 |
 961 | %foreign (ffi "ReduceOp_getOperation")
 962 | prim__reduceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 963 |
 964 | export
 965 | Op ReduceOp where
 966 |   getOperation (MkReduceOp op) = getOperationAux op prim__reduceOpGetOperation
 967 |
 968 | %foreign (ffi "CompareOp_delete")
 969 | prim__deleteCompareOp : AnyPtr -> PrimIO ()
 970 |
 971 | public export
 972 | data CompareOp = MkCompareOp GCAnyPtr
 973 |
 974 | %foreign (ffi "CompareOp_create")
 975 | prim__compareOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
 976 |
 977 | namespace CompareOp
 978 |   export
 979 |   create :
 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)
 985 |
 986 | %foreign (ffi "CompareOp_getOperation")
 987 | prim__compareOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 988 |
 989 | export
 990 | Op CompareOp where
 991 |   getOperation (MkCompareOp op) = getOperationAux op prim__compareOpGetOperation
 992 |
 993 | %foreign (ffi "SliceOp_delete")
 994 | prim__deleteSliceOp : AnyPtr -> PrimIO ()
 995 |
 996 | public export
 997 | data SliceOp = MkSliceOp GCAnyPtr
 998 |
 999 | %foreign (ffi "SliceOp_create")
1000 | prim__sliceOpCreate :
1001 |   GCAnyPtr ->
1002 |   GCAnyPtr ->
1003 |   GCAnyPtr ->
1004 |   GCAnyPtr -> Bits64 ->
1005 |   GCAnyPtr -> Bits64 ->
1006 |   GCAnyPtr -> Bits64 ->
1007 |   PrimIO AnyPtr
1008 |
1009 | namespace SliceOp
1010 |   export
1011 |   create :
1012 |     HasIO io => OpBuilder -> Location -> Value -> List Nat -> List Nat -> List Nat -> io SliceOp
1013 |   create
1014 |     (MkOpBuilder builder)
1015 |     (MkLocation location)
1016 |     (MkValue operand _)
1017 |     startIndices
1018 |     limitIndices
1019 |     strides = do
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
1024 |         builder
1025 |         location
1026 |         operand
1027 |         startIndices startIndicesLen
1028 |         limitIndices limitIndicesLen
1029 |         strides stridesLen
1030 |       op <- onCollectAny' op (primIO . prim__deleteSliceOp)
1031 |       pure (MkSliceOp op)
1032 |
1033 | %foreign (ffi "SliceOp_getOperation")
1034 | prim__sliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1035 |
1036 | export
1037 | Op SliceOp where
1038 |   getOperation (MkSliceOp op) = getOperationAux op prim__sliceOpGetOperation
1039 |
1040 | %foreign (ffi "DynamicSliceOp_delete")
1041 | prim__deleteDynamicSliceOp : AnyPtr -> PrimIO ()
1042 |
1043 | public export
1044 | data DynamicSliceOp = MkDynamicSliceOp GCAnyPtr
1045 |
1046 | %foreign (ffi "DynamicSliceOp_create")
1047 | prim__dynamicSliceOpCreate :
1048 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1049 |
1050 | namespace DynamicSliceOp
1051 |   export
1052 |   create :
1053 |     HasIO io => OpBuilder -> Location -> Value -> ValueRange -> List Nat -> io DynamicSliceOp
1054 |   create
1055 |     (MkOpBuilder builder)
1056 |     (MkLocation location)
1057 |     (MkValue operand _)
1058 |     (MkValueRange startIndices)
1059 |     sliceSizes = do
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)
1065 |
1066 | %foreign (ffi "DynamicSliceOp_getOperation")
1067 | prim__dynamicSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1068 |
1069 | export
1070 | Op DynamicSliceOp where
1071 |   getOperation (MkDynamicSliceOp op) = getOperationAux op prim__dynamicSliceOpGetOperation
1072 |
1073 | %foreign (ffi "DynamicUpdateSliceOp_delete")
1074 | prim__deleteDynamicUpdateSliceOp : AnyPtr -> PrimIO ()
1075 |
1076 | public export
1077 | data DynamicUpdateSliceOp = MkDynamicUpdateSliceOp GCAnyPtr
1078 |
1079 | %foreign (ffi "DynamicUpdateSliceOp_create")
1080 | prim__dynamicUpdateSliceOpCreate :
1081 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1082 |
1083 | namespace DynamicUpdateSliceOp
1084 |   export
1085 |   create :
1086 |     HasIO io => OpBuilder -> Location -> Value -> Value -> ValueRange -> io DynamicUpdateSliceOp
1087 |   create
1088 |     (MkOpBuilder builder)
1089 |     (MkLocation location)
1090 |     (MkValue operand _)
1091 |     (MkValue update _)
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)
1096 |
1097 | %foreign (ffi "DynamicUpdateSliceOp_getOperation")
1098 | prim__dynamicUpdateSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1099 |
1100 | export
1101 | Op DynamicUpdateSliceOp where
1102 |   getOperation (MkDynamicUpdateSliceOp op) =
1103 |     getOperationAux op prim__dynamicUpdateSliceOpGetOperation
1104 |
1105 | %foreign (ffi "BitcastConvertOp_delete")
1106 | prim__deleteBitcastConvertOp : AnyPtr -> PrimIO ()
1107 |
1108 | public export
1109 | data BitcastConvertOp = MkBitcastConvertOp GCAnyPtr
1110 |
1111 | %foreign (ffi "BitcastConvertOp_create")
1112 | prim__bitcastConvertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1113 |
1114 | namespace BitcastConvertOp
1115 |   export
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)
1121 |
1122 | %foreign (ffi "BitcastConvertOp_getOperation")
1123 | prim__bitcastConvertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1124 |
1125 | export
1126 | Op BitcastConvertOp where
1127 |   getOperation (MkBitcastConvertOp op) = getOperationAux op prim__bitcastConvertOpGetOperation
1128 |
1129 | %foreign (ffi "BroadcastInDimOp_delete")
1130 | prim__deleteBroadcastInDimOp : AnyPtr -> PrimIO ()
1131 |
1132 | public export
1133 | data BroadcastInDimOp = MkBroadcastInDimOp GCAnyPtr
1134 |
1135 | %foreign (ffi "BroadcastInDimOp_create")
1136 | prim__broadcastInDimOpCreate :
1137 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1138 |
1139 | namespace BroadcastInDimOp
1140 |   export
1141 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> List Nat -> io BroadcastInDimOp
1142 |   create
1143 |     (MkOpBuilder builder)
1144 |     (MkLocation location)
1145 |     (MkType_ resultType0 _)
1146 |     (MkValue operand _)
1147 |     dimensions = do
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)
1153 |
1154 | %foreign (ffi "BroadcastInDimOp_getOperation")
1155 | prim__broadcastInDimOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1156 |
1157 | export
1158 | Op BroadcastInDimOp where
1159 |   getOperation (MkBroadcastInDimOp op) = getOperationAux op prim__broadcastInDimOpGetOperation
1160 |
1161 | %foreign (ffi "CholeskyOp_delete")
1162 | prim__deleteCholeskyOp : AnyPtr -> PrimIO ()
1163 |
1164 | public export
1165 | data CholeskyOp = MkCholeskyOp GCAnyPtr
1166 |
1167 | %foreign (ffi "CholeskyOp_create")
1168 | prim__choleskyOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
1169 |
1170 | namespace CholeskyOp
1171 |   export
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)
1176 |     pure (MkCholeskyOp op)
1177 |
1178 | %foreign (ffi "CholeskyOp_getOperation")
1179 | prim__choleskyOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1180 |
1181 | export
1182 | Op CholeskyOp where
1183 |   getOperation (MkCholeskyOp op) = getOperationAux op prim__choleskyOpGetOperation
1184 |
1185 | %foreign (ffi "ConcatenateOp_delete")
1186 | prim__deleteConcatenateOp : AnyPtr -> PrimIO ()
1187 |
1188 | public export
1189 | data ConcatenateOp = MkConcatenateOp GCAnyPtr
1190 |
1191 | %foreign (ffi "ConcatenateOp_create")
1192 | prim__concatenateOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> PrimIO AnyPtr
1193 |
1194 | namespace ConcatenateOp
1195 |   export
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)
1201 |
1202 | %foreign (ffi "ConcatenateOp_getOperation")
1203 | prim__concatenateOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1204 |
1205 | export
1206 | Op ConcatenateOp where
1207 |   getOperation (MkConcatenateOp op) = getOperationAux op prim__concatenateOpGetOperation
1208 |
1209 | %foreign (ffi "DotGeneralOp_delete")
1210 | prim__deleteDotGeneralOp : AnyPtr -> PrimIO ()
1211 |
1212 | public export
1213 | data DotGeneralOp = MkDotGeneralOp GCAnyPtr
1214 |
1215 | %foreign (ffi "DotGeneralOp_create")
1216 | prim__dotGeneralOpCreate :
1217 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr ->  GCAnyPtr -> PrimIO AnyPtr
1218 |
1219 | namespace DotGeneralOp
1220 |   export
1221 |   create :
1222 |     HasIO io =>
1223 |     OpBuilder ->
1224 |     Location ->
1225 |     Type_ ->
1226 |     Value ->
1227 |     Value ->
1228 |     DotDimensionNumbersAttr ->
1229 |     io DotGeneralOp
1230 |   create
1231 |     (MkOpBuilder builder)
1232 |     (MkLocation location)
1233 |     (MkType_ resultType0 _)
1234 |     (MkValue lhs _)
1235 |     (MkValue rhs _)
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)
1240 |
1241 | %foreign (ffi "DotGeneralOp_getOperation")
1242 | prim__dotGeneralOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1243 |
1244 | export
1245 | Op DotGeneralOp where
1246 |   getOperation (MkDotGeneralOp op) = getOperationAux op prim__dotGeneralOpGetOperation
1247 |
1248 | %foreign (ffi "ReshapeOp_delete")
1249 | prim__deleteReshapeOp : AnyPtr -> PrimIO ()
1250 |
1251 | public export
1252 | data ReshapeOp = MkReshapeOp GCAnyPtr
1253 |
1254 | %foreign (ffi "ReshapeOp_create")
1255 | prim__reshapeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1256 |
1257 | namespace ReshapeOp
1258 |   export
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)
1263 |     pure (MkReshapeOp op)
1264 |
1265 | %foreign (ffi "ReshapeOp_getOperation")
1266 | prim__reshapeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1267 |
1268 | export
1269 | Op ReshapeOp where
1270 |   getOperation (MkReshapeOp op) = getOperationAux op prim__reshapeOpGetOperation
1271 |
1272 | %foreign (ffi "SelectOp_delete")
1273 | prim__deleteSelectOp : AnyPtr -> PrimIO ()
1274 |
1275 | public export
1276 | data SelectOp = MkSelectOp GCAnyPtr
1277 |
1278 | %foreign (ffi "SelectOp_create")
1279 | prim__selectOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1280 |
1281 | namespace SelectOp
1282 |   export
1283 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> Value -> io SelectOp
1284 |   create
1285 |     (MkOpBuilder builder)
1286 |     (MkLocation location)
1287 |     (MkValue pred _)
1288 |     (MkValue onTrue _)
1289 |     (MkValue onFalse _) = do
1290 |       op <- primIO $ prim__selectOpCreate builder location pred onTrue onFalse
1291 |       op <- onCollectAny' op (primIO . prim__deleteSelectOp)
1292 |       pure (MkSelectOp op)
1293 |
1294 | %foreign (ffi "SelectOp_getOperation")
1295 | prim__selectOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1296 |
1297 | export
1298 | Op SelectOp where
1299 |   getOperation (MkSelectOp op) = getOperationAux op prim__selectOpGetOperation
1300 |
1301 | %foreign (ffi "SortOp_delete")
1302 | prim__deleteSortOp : AnyPtr -> PrimIO ()
1303 |
1304 | public export
1305 | data SortOp = MkSortOp GCAnyPtr
1306 |
1307 | %foreign (ffi "SortOp_create")
1308 | prim__sortOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> Int -> PrimIO AnyPtr
1309 |
1310 | namespace SortOp
1311 |   export
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)
1316 |     pure (MkSortOp op)
1317 |
1318 | %foreign (ffi "SortOp_getComparator")
1319 | prim__sortOpGetComparator : GCAnyPtr -> AnyPtr
1320 |
1321 | export
1322 | getComparator : SortOp -> Region
1323 | getComparator (MkSortOp op) = MkRegion $ prim__sortOpGetComparator op
1324 |
1325 | %foreign (ffi "SortOp_getOperation")
1326 | prim__sortOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1327 |
1328 | export
1329 | Op SortOp where
1330 |   getOperation (MkSortOp op) = getOperationAux op prim__sortOpGetOperation
1331 |
1332 | %foreign (ffi "ReverseOp_delete")
1333 | prim__deleteReverseOp : AnyPtr -> PrimIO ()
1334 |
1335 | public export
1336 | data ReverseOp = MkReverseOp GCAnyPtr
1337 |
1338 | %foreign (ffi "ReverseOp_create")
1339 | prim__reverseOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1340 |
1341 | namespace ReverseOp
1342 |   export
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)
1348 |     pure (MkReverseOp op)
1349 |
1350 | %foreign (ffi "ReverseOp_getOperation")
1351 | prim__reverseOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1352 |
1353 | export
1354 | Op ReverseOp where
1355 |   getOperation (MkReverseOp op) = getOperationAux op prim__reverseOpGetOperation
1356 |
1357 | %foreign (ffi "TransposeOp_delete")
1358 | prim__deleteTransposeOp : AnyPtr -> PrimIO ()
1359 |
1360 | public export
1361 | data TransposeOp = MkTransposeOp GCAnyPtr
1362 |
1363 | %foreign (ffi "TransposeOp_create")
1364 | prim__transposeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
1365 |
1366 | namespace TransposeOp
1367 |   export
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)
1374 |
1375 | %foreign (ffi "TransposeOp_getOperation")
1376 | prim__transposeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1377 |
1378 | export
1379 | Op TransposeOp where
1380 |   getOperation (MkTransposeOp op) = getOperationAux op prim__transposeOpGetOperation
1381 |
1382 | %foreign (ffi "TriangularSolveOp_delete")
1383 | prim__deleteTriangularSolveOp : AnyPtr -> PrimIO ()
1384 |
1385 | public export
1386 | data TriangularSolveOp = MkTriangularSolveOp GCAnyPtr
1387 |
1388 | %foreign (ffi "TriangularSolveOp_create")
1389 | prim__triangularSolveOpCreate :
1390 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> Int -> Int -> Int -> PrimIO AnyPtr
1391 |
1392 | namespace TriangularSolveOp
1393 |   export
1394 |   create :
1395 |     HasIO io =>
1396 |     OpBuilder ->
1397 |     Location ->
1398 |     Value ->
1399 |     Value ->
1400 |     Bool ->
1401 |     Bool ->
1402 |     Bool ->
1403 |     Transpose ->
1404 |     io TriangularSolveOp
1405 |   create
1406 |     (MkOpBuilder builder)
1407 |     (MkLocation location)
1408 |     (MkValue a _)
1409 |     (MkValue b _)
1410 |     leftSide
1411 |     lower
1412 |     unitDiagonal
1413 |     transposeA = do
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)
1422 |
1423 | %foreign (ffi "TriangularSolveOp_getOperation")
1424 | prim__triangularSolveOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1425 |
1426 | export
1427 | Op TriangularSolveOp where
1428 |   getOperation (MkTriangularSolveOp op) = getOperationAux op prim__triangularSolveOpGetOperation
1429 |
1430 | %foreign (ffi "StableHLO_ReturnOp_delete")
1431 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
1432 |
1433 | public export
1434 | data ReturnOp = MkReturnOp GCAnyPtr
1435 |
1436 | %foreign (ffi "StableHLO_ReturnOp_create")
1437 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1438 |
1439 | namespace ReturnOp
1440 |   export
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)
1445 |     pure (MkReturnOp op)
1446 |
1447 | %foreign (ffi "StableHLO_ReturnOp_getOperation")
1448 | prim__returnOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1449 |
1450 | export
1451 | Op ReturnOp where
1452 |   getOperation (MkReturnOp op) = getOperationAux op prim__returnOpGetOperation
1453 |
1454 | %foreign (ffi "RngBitGeneratorOp_delete")
1455 | prim__deleteRngBitGeneratorOp : AnyPtr -> PrimIO ()
1456 |
1457 | public export
1458 | data RngBitGeneratorOp = MkRngBitGeneratorOp GCAnyPtr
1459 |
1460 | %foreign (ffi "RngBitGeneratorOp_create")
1461 | prim__rngBitGeneratorOpCreate :
1462 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> GCAnyPtr -> PrimIO AnyPtr
1463 |
1464 | namespace RngBitGeneratorOp
1465 |   export
1466 |   create :
1467 |     HasIO io =>
1468 |     OpBuilder ->
1469 |     Location ->
1470 |     Type_ ->
1471 |     Type_ ->
1472 |     RngAlgorithm ->
1473 |     Value ->
1474 |     io RngBitGeneratorOp
1475 |   create
1476 |     (MkOpBuilder builder)
1477 |     (MkLocation location)
1478 |     (MkType_ outputState _)
1479 |     (MkType_ output _)
1480 |     rngAlgorithm
1481 |     (MkValue state _) = do
1482 |       op <- primIO $ prim__rngBitGeneratorOpCreate
1483 |         builder location outputState output (cast rngAlgorithm) state
1484 |       op <- onCollectAny' op (primIO . prim__deleteRngBitGeneratorOp)
1485 |       pure (MkRngBitGeneratorOp op)
1486 |
1487 | %foreign (ffi "RngBitGeneratorOp_getOperation")
1488 | prim__rngBitGeneratorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1489 |
1490 | export
1491 | Op RngBitGeneratorOp where
1492 |   getOperation (MkRngBitGeneratorOp op) = getOperationAux op prim__rngBitGeneratorOpGetOperation
1493 |