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 Compiler.Stablehlo.Dialect.StablehloOps
  18 |
  19 | import Compiler.FFI
  20 | import Compiler.MLIR.IR.BuiltinAttributes
  21 | import Compiler.MLIR.IR.Builders
  22 | import Compiler.MLIR.IR.Location
  23 | import Compiler.MLIR.IR.MLIRContext
  24 | import Compiler.MLIR.IR.OpDefinition
  25 | import Compiler.MLIR.IR.Operation
  26 | import Compiler.MLIR.IR.Region
  27 | import Compiler.MLIR.IR.Types
  28 | import Compiler.MLIR.IR.Value
  29 | import Compiler.MLIR.IR.ValueRange
  30 | import Compiler.Stablehlo.Dialect.StablehloAttrs
  31 | import Compiler.Stablehlo.Dialect.StablehloEnums
  32 |
  33 | ffi : String -> String
  34 | ffi = libxla "c/stablehlo/dialect/StablehloOps.h"
  35 |
  36 | export
  37 | getOperationAux : HasIO io => GCAnyPtr -> (GCAnyPtr -> PrimIO AnyPtr) -> io Operation
  38 | getOperationAux op f = MkOperation <$> (primIO $ f op)
  39 |
  40 | %foreign (ffi "MLIRContext_loadDialect_StablehloDialect")
  41 | prim__loadDialectStablehloDialect : AnyPtr -> PrimIO ()
  42 |
  43 | export
  44 | loadDialectStablehloDialect : HasIO io => MLIRContext -> io ()
  45 | loadDialectStablehloDialect (MkMLIRContext ctx) = primIO $ prim__loadDialectStablehloDialect ctx
  46 |
  47 | %foreign (ffi "ConstantOp_delete")
  48 | prim__deleteConstantOp : AnyPtr -> PrimIO ()
  49 |
  50 | public export
  51 | data ConstantOp = MkConstantOp GCAnyPtr
  52 |
  53 | %foreign (ffi "ConstantOp_create")
  54 | prim__constantOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
  55 |
  56 | namespace ConstantOp
  57 |   export
  58 |   create : HasIO io => OpBuilder -> Location -> DenseElementsAttr -> io ConstantOp
  59 |   create (MkOpBuilder builder) (MkLocation location) (MkDenseElementsAttr attr) = do
  60 |     op <- primIO $ prim__constantOpCreate builder location attr
  61 |     op <- onCollectAny' op (primIO . prim__deleteConstantOp)
  62 |     pure (MkConstantOp op)
  63 |
  64 | %foreign (ffi "ConstantOp_getOperation")
  65 | prim__constantOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
  66 |
  67 | export
  68 | Op ConstantOp where
  69 |   getOperation (MkConstantOp op) = getOperationAux op prim__constantOpGetOperation
  70 |
  71 | %foreign (ffi "IotaOp_delete")
  72 | prim__deleteIotaOp : AnyPtr -> PrimIO ()
  73 |
  74 | public export
  75 | data IotaOp = MkIotaOp GCAnyPtr
  76 |
  77 | %foreign (ffi "IotaOp_create")
  78 | prim__iotaOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
  79 |
  80 | namespace IotaOp
  81 |   export
  82 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Nat -> io IotaOp
  83 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) iotaDimension = do
  84 |     op <- primIO $ prim__iotaOpCreate builder location resultType (cast iotaDimension)
  85 |     op <- onCollectAny' op (primIO . prim__deleteIotaOp)
  86 |     pure (MkIotaOp op)
  87 |
  88 | %foreign (ffi "IotaOp_getOperation")
  89 | prim__iotaOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
  90 |
  91 | export
  92 | Op IotaOp where
  93 |   getOperation (MkIotaOp op) = getOperationAux op prim__iotaOpGetOperation
  94 |
  95 | namespace UnaryElementwiseOp
  96 |   export
  97 |   create :
  98 |     (GCAnyPtr -> opTy) ->
  99 |     (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
 100 |     (AnyPtr -> PrimIO ()) ->
 101 |     HasIO io => OpBuilder -> Location -> Value -> io opTy
 102 |   create
 103 |     constructor_
 104 |     prim__create
 105 |     prim__delete
 106 |     (MkOpBuilder builder)
 107 |     (MkLocation location)
 108 |     (MkValue operand _) = do
 109 |       op <- primIO $ prim__create builder location operand
 110 |       op <- onCollectAny' op (primIO . prim__delete)
 111 |       pure $ constructor_ op
 112 |
 113 | %foreign (ffi "AbsOp_delete")
 114 | prim__deleteAbsOp : AnyPtr -> PrimIO ()
 115 |
 116 | public export
 117 | data AbsOp = MkAbsOp GCAnyPtr
 118 |
 119 | %foreign (ffi "AbsOp_create")
 120 | prim__absOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 121 |
 122 | namespace AbsOp
 123 |   export
 124 |   create : HasIO io => OpBuilder -> Location -> Value -> io AbsOp
 125 |   create = UnaryElementwiseOp.create MkAbsOp prim__absOpCreate prim__deleteAbsOp
 126 |
 127 | %foreign (ffi "AbsOp_getOperation")
 128 | prim__absOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 129 |
 130 | export
 131 | Op AbsOp where
 132 |   getOperation (MkAbsOp op) = getOperationAux op prim__absOpGetOperation
 133 |
 134 | %foreign (ffi "CeilOp_delete")
 135 | prim__deleteCeilOp : AnyPtr -> PrimIO ()
 136 |
 137 | public export
 138 | data CeilOp = MkCeilOp GCAnyPtr
 139 |
 140 | %foreign (ffi "CeilOp_create")
 141 | prim__ceilOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 142 |
 143 | namespace CeilOp
 144 |   export
 145 |   create : HasIO io => OpBuilder -> Location -> Value -> io CeilOp
 146 |   create = UnaryElementwiseOp.create MkCeilOp prim__ceilOpCreate prim__deleteCeilOp
 147 |
 148 | %foreign (ffi "CeilOp_getOperation")
 149 | prim__ceilOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 150 |
 151 | export
 152 | Op CeilOp where
 153 |   getOperation (MkCeilOp op) = getOperationAux op prim__ceilOpGetOperation
 154 |
 155 | %foreign (ffi "ConvertOp_delete")
 156 | prim__deleteConvertOp : AnyPtr -> PrimIO ()
 157 |
 158 | public export
 159 | data ConvertOp = MkConvertOp GCAnyPtr
 160 |
 161 | %foreign (ffi "ConvertOp_create")
 162 | prim__convertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 163 |
 164 | namespace ConvertOp
 165 |   export
 166 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ConvertOp
 167 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ result _) (MkValue operand _) = do
 168 |     op <- primIO $ prim__convertOpCreate builder location result operand
 169 |     op <- onCollectAny' op (primIO . prim__deleteConvertOp)
 170 |     pure $ MkConvertOp op
 171 |
 172 | %foreign (ffi "ConvertOp_getOperation")
 173 | prim__convertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 174 |
 175 | export
 176 | Op ConvertOp where
 177 |   getOperation (MkConvertOp op) = getOperationAux op prim__convertOpGetOperation
 178 |
 179 | %foreign (ffi "CosineOp_delete")
 180 | prim__deleteCosineOp : AnyPtr -> PrimIO ()
 181 |
 182 | public export
 183 | data CosineOp = MkCosineOp GCAnyPtr
 184 |
 185 | %foreign (ffi "CosineOp_create")
 186 | prim__cosineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 187 |
 188 | namespace CosineOp
 189 |   export
 190 |   create : HasIO io => OpBuilder -> Location -> Value -> io CosineOp
 191 |   create = UnaryElementwiseOp.create MkCosineOp prim__cosineOpCreate prim__deleteCosineOp
 192 |
 193 | %foreign (ffi "CosineOp_getOperation")
 194 | prim__cosineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 195 |
 196 | export
 197 | Op CosineOp where
 198 |   getOperation (MkCosineOp op) = getOperationAux op prim__cosineOpGetOperation
 199 |
 200 | %foreign (ffi "ExpOp_delete")
 201 | prim__deleteExpOp : AnyPtr -> PrimIO ()
 202 |
 203 | public export
 204 | data ExpOp = MkExpOp GCAnyPtr
 205 |
 206 | %foreign (ffi "ExpOp_create")
 207 | prim__expOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 208 |
 209 | namespace ExpOp
 210 |   export
 211 |   create : HasIO io => OpBuilder -> Location -> Value -> io ExpOp
 212 |   create = UnaryElementwiseOp.create MkExpOp prim__expOpCreate prim__deleteExpOp
 213 |
 214 | %foreign (ffi "ExpOp_getOperation")
 215 | prim__expOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 216 |
 217 | export
 218 | Op ExpOp where
 219 |   getOperation (MkExpOp op) = getOperationAux op prim__expOpGetOperation
 220 |
 221 | %foreign (ffi "FloorOp_delete")
 222 | prim__deleteFloorOp : AnyPtr -> PrimIO ()
 223 |
 224 | public export
 225 | data FloorOp = MkFloorOp GCAnyPtr
 226 |
 227 | %foreign (ffi "FloorOp_create")
 228 | prim__floorOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 229 |
 230 | namespace FloorOp
 231 |   export
 232 |   create : HasIO io => OpBuilder -> Location -> Value -> io FloorOp
 233 |   create = UnaryElementwiseOp.create MkFloorOp prim__floorOpCreate prim__deleteFloorOp
 234 |
 235 | %foreign (ffi "FloorOp_getOperation")
 236 | prim__floorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 237 |
 238 | export
 239 | Op FloorOp where
 240 |   getOperation (MkFloorOp op) = getOperationAux op prim__floorOpGetOperation
 241 |
 242 | %foreign (ffi "LogOp_delete")
 243 | prim__deleteLogOp : AnyPtr -> PrimIO ()
 244 |
 245 | public export
 246 | data LogOp = MkLogOp GCAnyPtr
 247 |
 248 | %foreign (ffi "LogOp_create")
 249 | prim__logOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 250 |
 251 | namespace LogOp
 252 |   export
 253 |   create : HasIO io => OpBuilder -> Location -> Value -> io LogOp
 254 |   create = UnaryElementwiseOp.create MkLogOp prim__logOpCreate prim__deleteLogOp
 255 |
 256 | %foreign (ffi "LogOp_getOperation")
 257 | prim__logOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 258 |
 259 | export
 260 | Op LogOp where
 261 |   getOperation (MkLogOp op) = getOperationAux op prim__logOpGetOperation
 262 |
 263 | %foreign (ffi "LogisticOp_delete")
 264 | prim__deleteLogisticOp : AnyPtr -> PrimIO ()
 265 |
 266 | public export
 267 | data LogisticOp = MkLogisticOp GCAnyPtr
 268 |
 269 | %foreign (ffi "LogisticOp_create")
 270 | prim__logisticOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 271 |
 272 | namespace LogisticOp
 273 |   export
 274 |   create : HasIO io => OpBuilder -> Location -> Value -> io LogisticOp
 275 |   create = UnaryElementwiseOp.create MkLogisticOp prim__logisticOpCreate prim__deleteLogisticOp
 276 |
 277 | %foreign (ffi "LogisticOp_getOperation")
 278 | prim__logisticOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 279 |
 280 | export
 281 | Op LogisticOp where
 282 |   getOperation (MkLogisticOp op) = getOperationAux op prim__logisticOpGetOperation
 283 |
 284 | %foreign (ffi "NotOp_delete")
 285 | prim__deleteNotOp : AnyPtr -> PrimIO ()
 286 |
 287 | public export
 288 | data NotOp = MkNotOp GCAnyPtr
 289 |
 290 | %foreign (ffi "NotOp_create")
 291 | prim__notOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 292 |
 293 | namespace NotOp
 294 |   export
 295 |   create : HasIO io => OpBuilder -> Location -> Value -> io NotOp
 296 |   create = UnaryElementwiseOp.create MkNotOp prim__notOpCreate prim__deleteNotOp
 297 |
 298 | %foreign (ffi "NotOp_getOperation")
 299 | prim__notOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 300 |
 301 | export
 302 | Op NotOp where
 303 |   getOperation (MkNotOp op) = getOperationAux op prim__notOpGetOperation
 304 |
 305 | %foreign (ffi "NegOp_delete")
 306 | prim__deleteNegOp : AnyPtr -> PrimIO ()
 307 |
 308 | public export
 309 | data NegOp = MkNegOp GCAnyPtr
 310 |
 311 | %foreign (ffi "NegOp_create")
 312 | prim__negOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 313 |
 314 | namespace NegOp
 315 |   export
 316 |   create : HasIO io => OpBuilder -> Location -> Value -> io NegOp
 317 |   create = UnaryElementwiseOp.create MkNegOp prim__negOpCreate prim__deleteNegOp
 318 |
 319 | %foreign (ffi "NegOp_getOperation")
 320 | prim__negOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 321 |
 322 | export
 323 | Op NegOp where
 324 |   getOperation (MkNegOp op) = getOperationAux op prim__negOpGetOperation
 325 |
 326 | %foreign (ffi "SineOp_delete")
 327 | prim__deleteSineOp : AnyPtr -> PrimIO ()
 328 |
 329 | public export
 330 | data SineOp = MkSineOp GCAnyPtr
 331 |
 332 | %foreign (ffi "SineOp_create")
 333 | prim__sineOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 334 |
 335 | namespace SineOp
 336 |   export
 337 |   create : HasIO io => OpBuilder -> Location -> Value -> io SineOp
 338 |   create = UnaryElementwiseOp.create MkSineOp prim__sineOpCreate prim__deleteSineOp
 339 |
 340 | %foreign (ffi "SineOp_getOperation")
 341 | prim__sineOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 342 |
 343 | export
 344 | Op SineOp where
 345 |   getOperation (MkSineOp op) = getOperationAux op prim__sineOpGetOperation
 346 |
 347 | %foreign (ffi "SqrtOp_delete")
 348 | prim__deleteSqrtOp : AnyPtr -> PrimIO ()
 349 |
 350 | public export
 351 | data SqrtOp = MkSqrtOp GCAnyPtr
 352 |
 353 | %foreign (ffi "SqrtOp_create")
 354 | prim__sqrtOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 355 |
 356 | namespace SqrtOp
 357 |   export
 358 |   create : HasIO io => OpBuilder -> Location -> Value -> io SqrtOp
 359 |   create = UnaryElementwiseOp.create MkSqrtOp prim__sqrtOpCreate prim__deleteSqrtOp
 360 |
 361 | %foreign (ffi "SqrtOp_getOperation")
 362 | prim__sqrtOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 363 |
 364 | export
 365 | Op SqrtOp where
 366 |   getOperation (MkSqrtOp op) = getOperationAux op prim__sqrtOpGetOperation
 367 |
 368 | %foreign (ffi "TanOp_delete")
 369 | prim__deleteTanOp : AnyPtr -> PrimIO ()
 370 |
 371 | public export
 372 | data TanOp = MkTanOp GCAnyPtr
 373 |
 374 | %foreign (ffi "TanOp_create")
 375 | prim__tanOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 376 |
 377 | namespace TanOp
 378 |   export
 379 |   create : HasIO io => OpBuilder -> Location -> Value -> io TanOp
 380 |   create = UnaryElementwiseOp.create MkTanOp prim__tanOpCreate prim__deleteTanOp
 381 |
 382 | %foreign (ffi "TanOp_getOperation")
 383 | prim__tanOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 384 |
 385 | export
 386 | Op TanOp where
 387 |   getOperation (MkTanOp op) = getOperationAux op prim__tanOpGetOperation
 388 |
 389 | %foreign (ffi "TanhOp_delete")
 390 | prim__deleteTanhOp : AnyPtr -> PrimIO ()
 391 |
 392 | public export
 393 | data TanhOp = MkTanhOp GCAnyPtr
 394 |
 395 | %foreign (ffi "TanhOp_create")
 396 | prim__tanhOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 397 |
 398 | namespace TanhOp
 399 |   export
 400 |   create : HasIO io => OpBuilder -> Location -> Value -> io TanhOp
 401 |   create = UnaryElementwiseOp.create MkTanhOp prim__tanhOpCreate prim__deleteTanhOp
 402 |
 403 | %foreign (ffi "TanhOp_getOperation")
 404 | prim__tanhOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 405 |
 406 | export
 407 | Op TanhOp where
 408 |   getOperation (MkTanhOp op) = getOperationAux op prim__tanhOpGetOperation
 409 |
 410 | namespace BinaryElementwiseOp
 411 |   export
 412 |   create :
 413 |     (GCAnyPtr -> opTy) ->
 414 |     (GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr) ->
 415 |     (AnyPtr -> PrimIO ()) ->
 416 |     HasIO io => OpBuilder -> Location -> Value -> Value -> io opTy
 417 |   create
 418 |     constructor_
 419 |     prim__create
 420 |     prim__delete
 421 |     (MkOpBuilder builder)
 422 |     (MkLocation location)
 423 |     (MkValue x _)
 424 |     (MkValue y _) = do
 425 |       op <- primIO $ prim__create builder location x y
 426 |       op <- onCollectAny' op (primIO . prim__delete)
 427 |       pure $ constructor_ op
 428 |
 429 | %foreign (ffi "AddOp_delete")
 430 | prim__deleteAddOp : AnyPtr -> PrimIO ()
 431 |
 432 | public export
 433 | data AddOp = MkAddOp GCAnyPtr
 434 |
 435 | %foreign (ffi "AddOp_create")
 436 | prim__addOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 437 |
 438 | namespace AddOp
 439 |   export
 440 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AddOp
 441 |   create = BinaryElementwiseOp.create MkAddOp prim__addOpCreate prim__deleteAddOp
 442 |
 443 | %foreign (ffi "AddOp_getOperation")
 444 | prim__addOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 445 |
 446 | export
 447 | Op AddOp where
 448 |   getOperation (MkAddOp op) = getOperationAux op prim__addOpGetOperation
 449 |
 450 | %foreign (ffi "DivOp_delete")
 451 | prim__deleteDivOp : AnyPtr -> PrimIO ()
 452 |
 453 | public export
 454 | data DivOp = MkDivOp GCAnyPtr
 455 |
 456 | %foreign (ffi "DivOp_create")
 457 | prim__divOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 458 |
 459 | namespace DivOp
 460 |   export
 461 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io DivOp
 462 |   create = BinaryElementwiseOp.create MkDivOp prim__divOpCreate prim__deleteDivOp
 463 |
 464 | %foreign (ffi "DivOp_getOperation")
 465 | prim__divOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 466 |
 467 | export
 468 | Op DivOp where
 469 |   getOperation (MkDivOp op) = getOperationAux op prim__divOpGetOperation
 470 |
 471 | %foreign (ffi "MaxOp_delete")
 472 | prim__deleteMaxOp : AnyPtr -> PrimIO ()
 473 |
 474 | public export
 475 | data MaxOp = MkMaxOp GCAnyPtr
 476 |
 477 | %foreign (ffi "MaxOp_create")
 478 | prim__maxOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 479 |
 480 | namespace MaxOp
 481 |   export
 482 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MaxOp
 483 |   create = BinaryElementwiseOp.create MkMaxOp prim__maxOpCreate prim__deleteMaxOp
 484 |
 485 | %foreign (ffi "MaxOp_getOperation")
 486 | prim__maxOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 487 |
 488 | export
 489 | Op MaxOp where
 490 |   getOperation (MkMaxOp op) = getOperationAux op prim__maxOpGetOperation
 491 |
 492 | %foreign (ffi "MinOp_delete")
 493 | prim__deleteMinOp : AnyPtr -> PrimIO ()
 494 |
 495 | public export
 496 | data MinOp = MkMinOp GCAnyPtr
 497 |
 498 | %foreign (ffi "MinOp_create")
 499 | prim__minOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 500 |
 501 | namespace MinOp
 502 |   export
 503 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MinOp
 504 |   create = BinaryElementwiseOp.create MkMinOp prim__minOpCreate prim__deleteMinOp
 505 |
 506 | %foreign (ffi "MinOp_getOperation")
 507 | prim__minOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 508 |
 509 | export
 510 | Op MinOp where
 511 |   getOperation (MkMinOp op) = getOperationAux op prim__minOpGetOperation
 512 |
 513 | %foreign (ffi "MulOp_delete")
 514 | prim__deleteMulOp : AnyPtr -> PrimIO ()
 515 |
 516 | public export
 517 | data MulOp = MkMulOp GCAnyPtr
 518 |
 519 | %foreign (ffi "MulOp_create")
 520 | prim__mulOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 521 |
 522 | namespace MulOp
 523 |   export
 524 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io MulOp
 525 |   create = BinaryElementwiseOp.create MkMulOp prim__mulOpCreate prim__deleteMulOp
 526 |
 527 | %foreign (ffi "MulOp_getOperation")
 528 | prim__mulOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 529 |
 530 | export
 531 | Op MulOp where
 532 |   getOperation (MkMulOp op) = getOperationAux op prim__mulOpGetOperation
 533 |
 534 | %foreign (ffi "PowOp_delete")
 535 | prim__deletePowOp : AnyPtr -> PrimIO ()
 536 |
 537 | public export
 538 | data PowOp = MkPowOp GCAnyPtr
 539 |
 540 | %foreign (ffi "PowOp_create")
 541 | prim__powOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 542 |
 543 | namespace PowOp
 544 |   export
 545 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io PowOp
 546 |   create = BinaryElementwiseOp.create MkPowOp prim__powOpCreate prim__deletePowOp
 547 |
 548 | %foreign (ffi "PowOp_getOperation")
 549 | prim__powOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 550 |
 551 | export
 552 | Op PowOp where
 553 |   getOperation (MkPowOp op) = getOperationAux op prim__powOpGetOperation
 554 |
 555 | %foreign (ffi "RemOp_delete")
 556 | prim__deleteRemOp : AnyPtr -> PrimIO ()
 557 |
 558 | public export
 559 | data RemOp = MkRemOp GCAnyPtr
 560 |
 561 | %foreign (ffi "RemOp_create")
 562 | prim__remOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 563 |
 564 | namespace RemOp
 565 |   export
 566 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io RemOp
 567 |   create = BinaryElementwiseOp.create MkRemOp prim__remOpCreate prim__deleteRemOp
 568 |
 569 | %foreign (ffi "RemOp_getOperation")
 570 | prim__remOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 571 |
 572 | export
 573 | Op RemOp where
 574 |   getOperation (MkRemOp op) = getOperationAux op prim__remOpGetOperation
 575 |
 576 | %foreign (ffi "ShiftRightLogicalOp_delete")
 577 | prim__deleteShiftRightLogicalOp : AnyPtr -> PrimIO ()
 578 |
 579 | public export
 580 | data ShiftRightLogicalOp = MkShiftRightLogicalOp GCAnyPtr
 581 |
 582 | %foreign (ffi "ShiftRightLogicalOp_create")
 583 | prim__shiftRightLogicalOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 584 |
 585 | namespace ShiftRightLogicalOp
 586 |   export
 587 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io ShiftRightLogicalOp
 588 |   create = BinaryElementwiseOp.create
 589 |     MkShiftRightLogicalOp prim__shiftRightLogicalOpCreate prim__deleteShiftRightLogicalOp
 590 |
 591 | %foreign (ffi "ShiftRightLogicalOp_getOperation")
 592 | prim__shiftRightLogicalOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 593 |
 594 | export
 595 | Op ShiftRightLogicalOp where
 596 |   getOperation (MkShiftRightLogicalOp op) = getOperationAux op prim__shiftRightLogicalOpGetOperation
 597 |
 598 | %foreign (ffi "SubtractOp_delete")
 599 | prim__deleteSubtractOp : AnyPtr -> PrimIO ()
 600 |
 601 | public export
 602 | data SubtractOp = MkSubtractOp GCAnyPtr
 603 |
 604 | %foreign (ffi "SubtractOp_create")
 605 | prim__subtractOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 606 |
 607 | namespace SubtractOp
 608 |   export
 609 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io SubtractOp
 610 |   create = BinaryElementwiseOp.create MkSubtractOp prim__subtractOpCreate prim__deleteSubtractOp
 611 |
 612 | %foreign (ffi "SubtractOp_getOperation")
 613 | prim__subtractOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 614 |
 615 | export
 616 | Op SubtractOp where
 617 |   getOperation (MkSubtractOp op) = getOperationAux op prim__subtractOpGetOperation
 618 |
 619 | %foreign (ffi "AndOp_delete")
 620 | prim__deleteAndOp : AnyPtr -> PrimIO ()
 621 |
 622 | public export
 623 | data AndOp = MkAndOp GCAnyPtr
 624 |
 625 | %foreign (ffi "AndOp_create")
 626 | prim__andOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 627 |
 628 | namespace AndOp
 629 |   export
 630 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io AndOp
 631 |   create = BinaryElementwiseOp.create MkAndOp prim__andOpCreate prim__deleteAndOp
 632 |
 633 | %foreign (ffi "AndOp_getOperation")
 634 | prim__andOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 635 |
 636 | export
 637 | Op AndOp where
 638 |   getOperation (MkAndOp op) = getOperationAux op prim__andOpGetOperation
 639 |
 640 | %foreign (ffi "OrOp_delete")
 641 | prim__deleteOrOp : AnyPtr -> PrimIO ()
 642 |
 643 | public export
 644 | data OrOp = MkOrOp GCAnyPtr
 645 |
 646 | %foreign (ffi "OrOp_create")
 647 | prim__orOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 648 |
 649 | namespace OrOp
 650 |   export
 651 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> io OrOp
 652 |   create = BinaryElementwiseOp.create MkOrOp prim__orOpCreate prim__deleteOrOp
 653 |
 654 | %foreign (ffi "OrOp_getOperation")
 655 | prim__orOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 656 |
 657 | export
 658 | Op OrOp where
 659 |   getOperation (MkOrOp op) = getOperationAux op prim__orOpGetOperation
 660 |
 661 | %foreign (ffi "IfOp_delete")
 662 | prim__deleteIfOp : AnyPtr -> PrimIO ()
 663 |
 664 | public export
 665 | data IfOp = MkIfOp GCAnyPtr
 666 |
 667 | %foreign (ffi "IfOp_create")
 668 | prim__ifOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 669 |
 670 | namespace IfOp
 671 |   export
 672 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io IfOp
 673 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue pred _) = do
 674 |     op <- primIO $ prim__ifOpCreate builder location resultType pred
 675 |     op <- onCollectAny' op (primIO . prim__deleteIfOp)
 676 |     pure (MkIfOp op)
 677 |
 678 | %foreign (ffi "IfOp_getTrueBranch")
 679 | prim__ifOpGetTrueBranch : GCAnyPtr -> AnyPtr
 680 |
 681 | export
 682 | getTrueBranch : IfOp -> Region
 683 | getTrueBranch (MkIfOp op) = MkRegion $ prim__ifOpGetTrueBranch op
 684 |
 685 | %foreign (ffi "IfOp_getFalseBranch")
 686 | prim__ifOpGetFalseBranch : GCAnyPtr -> AnyPtr
 687 |
 688 | export
 689 | getFalseBranch : IfOp -> Region
 690 | getFalseBranch (MkIfOp op) = MkRegion $ prim__ifOpGetFalseBranch op
 691 |
 692 | %foreign (ffi "IfOp_getOperation")
 693 | prim__ifOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 694 |
 695 | export
 696 | Op IfOp where
 697 |   getOperation (MkIfOp op) = getOperationAux op prim__ifOpGetOperation
 698 |
 699 | %foreign (ffi "WhileOp_delete")
 700 | prim__deleteWhileOp : AnyPtr -> PrimIO ()
 701 |
 702 | public export
 703 | data WhileOp = MkWhileOp GCAnyPtr
 704 |
 705 | %foreign (ffi "WhileOp_create")
 706 | prim__whileOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 707 |
 708 | namespace WhileOp
 709 |   export
 710 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> io WhileOp
 711 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) = do
 712 |     op <- primIO $ prim__whileOpCreate builder location inputs
 713 |     op <- onCollectAny' op (primIO . prim__deleteWhileOp)
 714 |     pure (MkWhileOp op)
 715 |
 716 | %foreign (ffi "WhileOp_getCond")
 717 | prim__whileOpGetCond : GCAnyPtr -> AnyPtr
 718 |
 719 | export
 720 | getCond : WhileOp -> Region
 721 | getCond (MkWhileOp op) = MkRegion $ prim__whileOpGetCond op
 722 |
 723 | %foreign (ffi "WhileOp_getBody")
 724 | prim__whileOpGetBody : GCAnyPtr -> AnyPtr
 725 |
 726 | namespace WhileOp
 727 |   export
 728 |   getBody : WhileOp -> Region
 729 |   getBody (MkWhileOp op) = MkRegion $ prim__whileOpGetBody op
 730 |
 731 | %foreign (ffi "WhileOp_getOperation")
 732 | prim__whileOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 733 |
 734 | export
 735 | Op WhileOp where
 736 |   getOperation (MkWhileOp op) = getOperationAux op prim__whileOpGetOperation
 737 |
 738 | %foreign (ffi "ReduceOp_delete")
 739 | prim__deleteReduceOp : AnyPtr -> PrimIO ()
 740 |
 741 | public export
 742 | data ReduceOp = MkReduceOp GCAnyPtr
 743 |
 744 | %foreign (ffi "ReduceOp_create")
 745 | prim__reduceOpCreate :
 746 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
 747 |
 748 | namespace ReduceOp
 749 |   export
 750 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> ValueRange -> List Nat -> io ReduceOp
 751 |   create
 752 |     (MkOpBuilder builder)
 753 |     (MkLocation location)
 754 |     (MkValueRange inputs)
 755 |     (MkValueRange inits)
 756 |     dimensions = do
 757 |       MkInt64Array dimensions dimensionsLen <- mkInt64Array $ cast <$> dimensions
 758 |       op <- primIO $ prim__reduceOpCreate builder location inputs inits dimensions dimensionsLen
 759 |       op <- onCollectAny' op (primIO . prim__deleteReduceOp)
 760 |       pure (MkReduceOp op)
 761 |
 762 | %foreign (ffi "ReduceOp_getBody")
 763 | prim__reduceOpGetBody : GCAnyPtr -> AnyPtr
 764 |
 765 | namespace ReduceOp
 766 |   export
 767 |   getBody : ReduceOp -> Region
 768 |   getBody (MkReduceOp op) = MkRegion $ prim__reduceOpGetBody op
 769 |
 770 | %foreign (ffi "ReduceOp_getOperation")
 771 | prim__reduceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 772 |
 773 | export
 774 | Op ReduceOp where
 775 |   getOperation (MkReduceOp op) = getOperationAux op prim__reduceOpGetOperation
 776 |
 777 | %foreign (ffi "CompareOp_delete")
 778 | prim__deleteCompareOp : AnyPtr -> PrimIO ()
 779 |
 780 | public export
 781 | data CompareOp = MkCompareOp GCAnyPtr
 782 |
 783 | %foreign (ffi "CompareOp_create")
 784 | prim__compareOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
 785 |
 786 | namespace CompareOp
 787 |   export
 788 |   create :
 789 |     HasIO io => OpBuilder -> Location -> Value -> Value -> ComparisonDirection -> io CompareOp
 790 |   create (MkOpBuilder builder) (MkLocation location) (MkValue lhs _) (MkValue rhs _) direction = do
 791 |     op <- primIO $ prim__compareOpCreate builder location lhs rhs (cast direction)
 792 |     op <- onCollectAny' op (primIO . prim__deleteCompareOp)
 793 |     pure (MkCompareOp op)
 794 |
 795 | %foreign (ffi "CompareOp_getOperation")
 796 | prim__compareOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 797 |
 798 | export
 799 | Op CompareOp where
 800 |   getOperation (MkCompareOp op) = getOperationAux op prim__compareOpGetOperation
 801 |
 802 | %foreign (ffi "SliceOp_delete")
 803 | prim__deleteSliceOp : AnyPtr -> PrimIO ()
 804 |
 805 | public export
 806 | data SliceOp = MkSliceOp GCAnyPtr
 807 |
 808 | %foreign (ffi "SliceOp_create")
 809 | prim__sliceOpCreate :
 810 |   GCAnyPtr ->
 811 |   GCAnyPtr ->
 812 |   GCAnyPtr ->
 813 |   GCPtr Int64 -> Bits64 ->
 814 |   GCPtr Int64 -> Bits64 ->
 815 |   GCPtr Int64 -> Bits64 ->
 816 |   PrimIO AnyPtr
 817 |
 818 | namespace SliceOp
 819 |   export
 820 |   create :
 821 |     HasIO io => OpBuilder -> Location -> Value -> List Nat -> List Nat -> List Nat -> io SliceOp
 822 |   create
 823 |     (MkOpBuilder builder)
 824 |     (MkLocation location)
 825 |     (MkValue operand _)
 826 |     startIndices
 827 |     limitIndices
 828 |     strides = do
 829 |       MkInt64Array startIndices startIndicesLen <- mkInt64Array $ cast <$> startIndices
 830 |       MkInt64Array limitIndices limitIndicesLen <- mkInt64Array $ cast <$> limitIndices
 831 |       MkInt64Array strides stridesLen <- mkInt64Array $ cast <$> strides
 832 |       op <- primIO $ prim__sliceOpCreate
 833 |         builder
 834 |         location
 835 |         operand
 836 |         startIndices startIndicesLen
 837 |         limitIndices limitIndicesLen
 838 |         strides stridesLen
 839 |       op <- onCollectAny' op (primIO . prim__deleteSliceOp)
 840 |       pure (MkSliceOp op)
 841 |
 842 | %foreign (ffi "SliceOp_getOperation")
 843 | prim__sliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 844 |
 845 | export
 846 | Op SliceOp where
 847 |   getOperation (MkSliceOp op) = getOperationAux op prim__sliceOpGetOperation
 848 |
 849 | %foreign (ffi "DynamicSliceOp_delete")
 850 | prim__deleteDynamicSliceOp : AnyPtr -> PrimIO ()
 851 |
 852 | public export
 853 | data DynamicSliceOp = MkDynamicSliceOp GCAnyPtr
 854 |
 855 | %foreign (ffi "DynamicSliceOp_create")
 856 | prim__dynamicSliceOpCreate :
 857 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
 858 |
 859 | namespace DynamicSliceOp
 860 |   export
 861 |   create :
 862 |     HasIO io => OpBuilder -> Location -> Value -> ValueRange -> List Nat -> io DynamicSliceOp
 863 |   create
 864 |     (MkOpBuilder builder)
 865 |     (MkLocation location)
 866 |     (MkValue operand _)
 867 |     (MkValueRange startIndices)
 868 |     sliceSizes = do
 869 |       MkInt64Array sliceSizes sliceSizesLen <- mkInt64Array $ cast <$> sliceSizes
 870 |       op <- primIO $ prim__dynamicSliceOpCreate
 871 |         builder location operand startIndices sliceSizes sliceSizesLen
 872 |       op <- onCollectAny' op (primIO . prim__deleteDynamicSliceOp)
 873 |       pure (MkDynamicSliceOp op)
 874 |
 875 | %foreign (ffi "DynamicSliceOp_getOperation")
 876 | prim__dynamicSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 877 |
 878 | export
 879 | Op DynamicSliceOp where
 880 |   getOperation (MkDynamicSliceOp op) = getOperationAux op prim__dynamicSliceOpGetOperation
 881 |
 882 | %foreign (ffi "BitcastConvertOp_delete")
 883 | prim__deleteBitcastConvertOp : AnyPtr -> PrimIO ()
 884 |
 885 | public export
 886 | data BitcastConvertOp = MkBitcastConvertOp GCAnyPtr
 887 |
 888 | %foreign (ffi "BitcastConvertOp_create")
 889 | prim__bitcastConvertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 890 |
 891 | namespace BitcastConvertOp
 892 |   export
 893 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io BitcastConvertOp
 894 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue operand _) = do
 895 |     op <- primIO $ prim__bitcastConvertOpCreate builder location resultType operand
 896 |     op <- onCollectAny' op (primIO . prim__deleteBitcastConvertOp)
 897 |     pure (MkBitcastConvertOp op)
 898 |
 899 | %foreign (ffi "BitcastConvertOp_getOperation")
 900 | prim__bitcastConvertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 901 |
 902 | export
 903 | Op BitcastConvertOp where
 904 |   getOperation (MkBitcastConvertOp op) = getOperationAux op prim__bitcastConvertOpGetOperation
 905 |
 906 | %foreign (ffi "BroadcastInDimOp_delete")
 907 | prim__deleteBroadcastInDimOp : AnyPtr -> PrimIO ()
 908 |
 909 | public export
 910 | data BroadcastInDimOp = MkBroadcastInDimOp GCAnyPtr
 911 |
 912 | %foreign (ffi "BroadcastInDimOp_create")
 913 | prim__broadcastInDimOpCreate :
 914 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
 915 |
 916 | namespace BroadcastInDimOp
 917 |   export
 918 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> List Nat -> io BroadcastInDimOp
 919 |   create
 920 |     (MkOpBuilder builder)
 921 |     (MkLocation location)
 922 |     (MkType_ resultType0 _)
 923 |     (MkValue operand _)
 924 |     dimensions = do
 925 |       MkInt64Array dimensions dimensionsLen <- mkInt64Array $ cast <$> dimensions
 926 |       op <- primIO $ prim__broadcastInDimOpCreate
 927 |         builder location resultType0 operand dimensions dimensionsLen
 928 |       op <- onCollectAny' op (primIO . prim__deleteBroadcastInDimOp)
 929 |       pure (MkBroadcastInDimOp op)
 930 |
 931 | %foreign (ffi "BroadcastInDimOp_getOperation")
 932 | prim__broadcastInDimOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 933 |
 934 | export
 935 | Op BroadcastInDimOp where
 936 |   getOperation (MkBroadcastInDimOp op) = getOperationAux op prim__broadcastInDimOpGetOperation
 937 |
 938 | %foreign (ffi "CholeskyOp_delete")
 939 | prim__deleteCholeskyOp : AnyPtr -> PrimIO ()
 940 |
 941 | public export
 942 | data CholeskyOp = MkCholeskyOp GCAnyPtr
 943 |
 944 | %foreign (ffi "CholeskyOp_create")
 945 | prim__choleskyOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
 946 |
 947 | namespace CholeskyOp
 948 |   export
 949 |   create : HasIO io => OpBuilder -> Location -> Value -> Bool -> io CholeskyOp
 950 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) lower = do
 951 |     op <- primIO $ prim__choleskyOpCreate builder location value (boolToCInt lower)
 952 |     op <- onCollectAny' op (primIO . prim__deleteCholeskyOp)
 953 |     pure (MkCholeskyOp op)
 954 |
 955 | %foreign (ffi "CholeskyOp_getOperation")
 956 | prim__choleskyOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 957 |
 958 | export
 959 | Op CholeskyOp where
 960 |   getOperation (MkCholeskyOp op) = getOperationAux op prim__choleskyOpGetOperation
 961 |
 962 | %foreign (ffi "ConcatenateOp_delete")
 963 | prim__deleteConcatenateOp : AnyPtr -> PrimIO ()
 964 |
 965 | public export
 966 | data ConcatenateOp = MkConcatenateOp GCAnyPtr
 967 |
 968 | %foreign (ffi "ConcatenateOp_create")
 969 | prim__concatenateOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> PrimIO AnyPtr
 970 |
 971 | namespace ConcatenateOp
 972 |   export
 973 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> Nat -> io ConcatenateOp
 974 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) dimension = do
 975 |     op <- primIO $ prim__concatenateOpCreate builder location inputs (cast dimension)
 976 |     op <- onCollectAny' op (primIO . prim__deleteConcatenateOp)
 977 |     pure (MkConcatenateOp op)
 978 |
 979 | %foreign (ffi "ConcatenateOp_getOperation")
 980 | prim__concatenateOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 981 |
 982 | export
 983 | Op ConcatenateOp where
 984 |   getOperation (MkConcatenateOp op) = getOperationAux op prim__concatenateOpGetOperation
 985 |
 986 | %foreign (ffi "DotGeneralOp_delete")
 987 | prim__deleteDotGeneralOp : AnyPtr -> PrimIO ()
 988 |
 989 | public export
 990 | data DotGeneralOp = MkDotGeneralOp GCAnyPtr
 991 |
 992 | %foreign (ffi "DotGeneralOp_create")
 993 | prim__dotGeneralOpCreate :
 994 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr ->  GCAnyPtr -> PrimIO AnyPtr
 995 |
 996 | namespace DotGeneralOp
 997 |   export
 998 |   create :
 999 |     HasIO io =>
1000 |     OpBuilder ->
1001 |     Location ->
1002 |     Type_ ->
1003 |     Value ->
1004 |     Value ->
1005 |     DotDimensionNumbersAttr ->
1006 |     io DotGeneralOp
1007 |   create
1008 |     (MkOpBuilder builder)
1009 |     (MkLocation location)
1010 |     (MkType_ resultType0 _)
1011 |     (MkValue lhs _)
1012 |     (MkValue rhs _)
1013 |     (MkDotDimensionNumbersAttr ddn) = do
1014 |       op <- primIO $ prim__dotGeneralOpCreate builder location resultType0 lhs rhs ddn
1015 |       op <- onCollectAny' op (primIO . prim__deleteDotGeneralOp)
1016 |       pure (MkDotGeneralOp op)
1017 |
1018 | %foreign (ffi "DotGeneralOp_getOperation")
1019 | prim__dotGeneralOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1020 |
1021 | export
1022 | Op DotGeneralOp where
1023 |   getOperation (MkDotGeneralOp op) = getOperationAux op prim__dotGeneralOpGetOperation
1024 |
1025 | %foreign (ffi "MapOp_delete")
1026 | prim__deleteMapOp : AnyPtr -> PrimIO ()
1027 |
1028 | public export
1029 | data MapOp = MkMapOp GCAnyPtr
1030 |
1031 | %foreign (ffi "MapOp_create")
1032 | prim__mapOpCreate :
1033 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
1034 |
1035 | namespace MapOp
1036 |   export
1037 |   create : HasIO io => OpBuilder -> Location -> Type_ -> ValueRange -> List Nat -> io MapOp
1038 |   create
1039 |     (MkOpBuilder builder)
1040 |     (MkLocation location)
1041 |     (MkType_ resultType _)
1042 |     (MkValueRange inputs)
1043 |     dimensions = do
1044 |       MkInt64Array dimensions dimensionsLen <- mkInt64Array $ cast <$> dimensions
1045 |       op <- primIO $ prim__mapOpCreate builder location resultType inputs dimensions dimensionsLen
1046 |       op <- onCollectAny' op (primIO . prim__deleteMapOp)
1047 |       pure (MkMapOp op)
1048 |
1049 | %foreign (ffi "MapOp_getComputation")
1050 | prim__mapOpGetComputation : GCAnyPtr -> AnyPtr
1051 |
1052 | export
1053 | getComputation : MapOp -> Region
1054 | getComputation (MkMapOp op) = MkRegion $ prim__mapOpGetComputation op
1055 |
1056 | %foreign (ffi "MapOp_getOperation")
1057 | prim__mapOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1058 |
1059 | export
1060 | Op MapOp where
1061 |   getOperation (MkMapOp op) = getOperationAux op prim__mapOpGetOperation
1062 |
1063 | %foreign (ffi "ReshapeOp_delete")
1064 | prim__deleteReshapeOp : AnyPtr -> PrimIO ()
1065 |
1066 | public export
1067 | data ReshapeOp = MkReshapeOp GCAnyPtr
1068 |
1069 | %foreign (ffi "ReshapeOp_create")
1070 | prim__reshapeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1071 |
1072 | namespace ReshapeOp
1073 |   export
1074 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ReshapeOp
1075 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue value _) = do
1076 |     op <- primIO $ prim__reshapeOpCreate builder location resultType value
1077 |     op <- onCollectAny' op (primIO . prim__deleteReshapeOp)
1078 |     pure (MkReshapeOp op)
1079 |
1080 | %foreign (ffi "ReshapeOp_getOperation")
1081 | prim__reshapeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1082 |
1083 | export
1084 | Op ReshapeOp where
1085 |   getOperation (MkReshapeOp op) = getOperationAux op prim__reshapeOpGetOperation
1086 |
1087 | %foreign (ffi "SelectOp_delete")
1088 | prim__deleteSelectOp : AnyPtr -> PrimIO ()
1089 |
1090 | public export
1091 | data SelectOp = MkSelectOp GCAnyPtr
1092 |
1093 | %foreign (ffi "SelectOp_create")
1094 | prim__selectOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1095 |
1096 | namespace SelectOp
1097 |   export
1098 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> Value -> io SelectOp
1099 |   create
1100 |     (MkOpBuilder builder)
1101 |     (MkLocation location)
1102 |     (MkValue pred _)
1103 |     (MkValue onTrue _)
1104 |     (MkValue onFalse _) = do
1105 |       op <- primIO $ prim__selectOpCreate builder location pred onTrue onFalse
1106 |       op <- onCollectAny' op (primIO . prim__deleteSelectOp)
1107 |       pure (MkSelectOp op)
1108 |
1109 | %foreign (ffi "SelectOp_getOperation")
1110 | prim__selectOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1111 |
1112 | export
1113 | Op SelectOp where
1114 |   getOperation (MkSelectOp op) = getOperationAux op prim__selectOpGetOperation
1115 |
1116 | %foreign (ffi "SortOp_delete")
1117 | prim__deleteSortOp : AnyPtr -> PrimIO ()
1118 |
1119 | public export
1120 | data SortOp = MkSortOp GCAnyPtr
1121 |
1122 | %foreign (ffi "SortOp_create")
1123 | prim__sortOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> Int -> PrimIO AnyPtr
1124 |
1125 | namespace SortOp
1126 |   export
1127 |   create : HasIO io => OpBuilder -> Location -> Value -> Nat -> Bool -> io SortOp
1128 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) dimension isStable = do
1129 |     op <- primIO $ prim__sortOpCreate builder location value (cast dimension) (boolToCInt isStable)
1130 |     op <- onCollectAny' op (primIO . prim__deleteSortOp)
1131 |     pure (MkSortOp op)
1132 |
1133 | %foreign (ffi "SortOp_getComparator")
1134 | prim__sortOpGetComparator : GCAnyPtr -> AnyPtr
1135 |
1136 | export
1137 | getComparator : SortOp -> Region
1138 | getComparator (MkSortOp op) = MkRegion $ prim__sortOpGetComparator op
1139 |
1140 | %foreign (ffi "SortOp_getOperation")
1141 | prim__sortOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1142 |
1143 | export
1144 | Op SortOp where
1145 |   getOperation (MkSortOp op) = getOperationAux op prim__sortOpGetOperation
1146 |
1147 | %foreign (ffi "ReverseOp_delete")
1148 | prim__deleteReverseOp : AnyPtr -> PrimIO ()
1149 |
1150 | public export
1151 | data ReverseOp = MkReverseOp GCAnyPtr
1152 |
1153 | %foreign (ffi "ReverseOp_create")
1154 | prim__reverseOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
1155 |
1156 | namespace ReverseOp
1157 |   export
1158 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io ReverseOp
1159 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) dimensions = do
1160 |     MkInt64Array dimensions dimensionsLen <- mkInt64Array $ cast <$> dimensions
1161 |     op <- primIO $ prim__reverseOpCreate builder location operand dimensions dimensionsLen
1162 |     op <- onCollectAny' op (primIO . prim__deleteReverseOp)
1163 |     pure (MkReverseOp op)
1164 |
1165 | %foreign (ffi "ReverseOp_getOperation")
1166 | prim__reverseOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1167 |
1168 | export
1169 | Op ReverseOp where
1170 |   getOperation (MkReverseOp op) = getOperationAux op prim__reverseOpGetOperation
1171 |
1172 | %foreign (ffi "TransposeOp_delete")
1173 | prim__deleteTransposeOp : AnyPtr -> PrimIO ()
1174 |
1175 | public export
1176 | data TransposeOp = MkTransposeOp GCAnyPtr
1177 |
1178 | %foreign (ffi "TransposeOp_create")
1179 | prim__transposeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
1180 |
1181 | namespace TransposeOp
1182 |   export
1183 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io TransposeOp
1184 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) permutation = do
1185 |     MkInt64Array permutation permutationLen <- mkInt64Array $ cast <$> permutation
1186 |     op <- primIO $ prim__transposeOpCreate builder location operand permutation permutationLen
1187 |     op <- onCollectAny' op (primIO . prim__deleteTransposeOp)
1188 |     pure (MkTransposeOp op)
1189 |
1190 | %foreign (ffi "TransposeOp_getOperation")
1191 | prim__transposeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1192 |
1193 | export
1194 | Op TransposeOp where
1195 |   getOperation (MkTransposeOp op) = getOperationAux op prim__transposeOpGetOperation
1196 |
1197 | %foreign (ffi "TriangularSolveOp_delete")
1198 | prim__deleteTriangularSolveOp : AnyPtr -> PrimIO ()
1199 |
1200 | public export
1201 | data TriangularSolveOp = MkTriangularSolveOp GCAnyPtr
1202 |
1203 | %foreign (ffi "TriangularSolveOp_create")
1204 | prim__triangularSolveOpCreate :
1205 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> Int -> Int -> Int -> PrimIO AnyPtr
1206 |
1207 | namespace TriangularSolveOp
1208 |   export
1209 |   create :
1210 |     HasIO io =>
1211 |     OpBuilder ->
1212 |     Location ->
1213 |     Value ->
1214 |     Value ->
1215 |     Bool ->
1216 |     Bool ->
1217 |     Bool ->
1218 |     Transpose ->
1219 |     io TriangularSolveOp
1220 |   create
1221 |     (MkOpBuilder builder)
1222 |     (MkLocation location)
1223 |     (MkValue a _)
1224 |     (MkValue b _)
1225 |     leftSide
1226 |     lower
1227 |     unitDiagonal
1228 |     transposeA = do
1229 |       let leftSide = boolToCInt leftSide
1230 |           lower = boolToCInt lower
1231 |           unitDiagonal = boolToCInt unitDiagonal
1232 |           transposeA = cast transposeA
1233 |       op <- primIO $ prim__triangularSolveOpCreate
1234 |         builder location a b leftSide lower unitDiagonal transposeA
1235 |       op <- onCollectAny' op (primIO . prim__deleteTriangularSolveOp)
1236 |       pure (MkTriangularSolveOp op)
1237 |
1238 | %foreign (ffi "TriangularSolveOp_getOperation")
1239 | prim__triangularSolveOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1240 |
1241 | export
1242 | Op TriangularSolveOp where
1243 |   getOperation (MkTriangularSolveOp op) = getOperationAux op prim__triangularSolveOpGetOperation
1244 |
1245 | %foreign (ffi "StableHLO_ReturnOp_delete")
1246 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
1247 |
1248 | public export
1249 | data ReturnOp = MkReturnOp GCAnyPtr
1250 |
1251 | %foreign (ffi "StableHLO_ReturnOp_create")
1252 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1253 |
1254 | namespace ReturnOp
1255 |   export
1256 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
1257 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
1258 |     op <- primIO $ prim__returnOpCreate builder location results
1259 |     op <- onCollectAny' op (primIO . prim__deleteReturnOp)
1260 |     pure (MkReturnOp op)
1261 |
1262 | %foreign (ffi "StableHLO_ReturnOp_getOperation")
1263 | prim__returnOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1264 |
1265 | export
1266 | Op ReturnOp where
1267 |   getOperation (MkReturnOp op) = getOperationAux op prim__returnOpGetOperation
1268 |
1269 | %foreign (ffi "RngBitGeneratorOp_delete")
1270 | prim__deleteRngBitGeneratorOp : AnyPtr -> PrimIO ()
1271 |
1272 | public export
1273 | data RngBitGeneratorOp = MkRngBitGeneratorOp GCAnyPtr
1274 |
1275 | %foreign (ffi "RngBitGeneratorOp_create")
1276 | prim__rngBitGeneratorOpCreate :
1277 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> GCAnyPtr -> PrimIO AnyPtr
1278 |
1279 | namespace RngBitGeneratorOp
1280 |   export
1281 |   create :
1282 |     HasIO io =>
1283 |     OpBuilder ->
1284 |     Location ->
1285 |     Type_ ->
1286 |     Type_ ->
1287 |     RngAlgorithm ->
1288 |     Value ->
1289 |     io RngBitGeneratorOp
1290 |   create
1291 |     (MkOpBuilder builder)
1292 |     (MkLocation location)
1293 |     (MkType_ outputState _)
1294 |     (MkType_ output _)
1295 |     rngAlgorithm
1296 |     (MkValue state _) = do
1297 |       op <- primIO $ prim__rngBitGeneratorOpCreate
1298 |         builder location outputState output (cast rngAlgorithm) state
1299 |       op <- onCollectAny' op (primIO . prim__deleteRngBitGeneratorOp)
1300 |       pure (MkRngBitGeneratorOp op)
1301 |
1302 | %foreign (ffi "RngBitGeneratorOp_getOperation")
1303 | prim__rngBitGeneratorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1304 |
1305 | export
1306 | Op RngBitGeneratorOp where
1307 |   getOperation (MkRngBitGeneratorOp op) = getOperationAux op prim__rngBitGeneratorOpGetOperation
1308 |