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' <- mkInt64Array $ cast <$> dimensions
 758 |       op <- primIO $ prim__reduceOpCreate
 759 |         builder location inputs inits dimensions' (cast $ length dimensions)
 760 |       op <- onCollectAny' op (primIO . prim__deleteReduceOp)
 761 |       pure (MkReduceOp op)
 762 |
 763 | %foreign (ffi "ReduceOp_getBody")
 764 | prim__reduceOpGetBody : GCAnyPtr -> AnyPtr
 765 |
 766 | namespace ReduceOp
 767 |   export
 768 |   getBody : ReduceOp -> Region
 769 |   getBody (MkReduceOp op) = MkRegion $ prim__reduceOpGetBody op
 770 |
 771 | %foreign (ffi "ReduceOp_getOperation")
 772 | prim__reduceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 773 |
 774 | export
 775 | Op ReduceOp where
 776 |   getOperation (MkReduceOp op) = getOperationAux op prim__reduceOpGetOperation
 777 |
 778 | %foreign (ffi "CompareOp_delete")
 779 | prim__deleteCompareOp : AnyPtr -> PrimIO ()
 780 |
 781 | public export
 782 | data CompareOp = MkCompareOp GCAnyPtr
 783 |
 784 | %foreign (ffi "CompareOp_create")
 785 | prim__compareOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> PrimIO AnyPtr
 786 |
 787 | namespace CompareOp
 788 |   export
 789 |   create :
 790 |     HasIO io => OpBuilder -> Location -> Value -> Value -> ComparisonDirection -> io CompareOp
 791 |   create (MkOpBuilder builder) (MkLocation location) (MkValue lhs _) (MkValue rhs _) direction = do
 792 |     op <- primIO $ prim__compareOpCreate builder location lhs rhs (cast direction)
 793 |     op <- onCollectAny' op (primIO . prim__deleteCompareOp)
 794 |     pure (MkCompareOp op)
 795 |
 796 | %foreign (ffi "CompareOp_getOperation")
 797 | prim__compareOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 798 |
 799 | export
 800 | Op CompareOp where
 801 |   getOperation (MkCompareOp op) = getOperationAux op prim__compareOpGetOperation
 802 |
 803 | %foreign (ffi "SliceOp_delete")
 804 | prim__deleteSliceOp : AnyPtr -> PrimIO ()
 805 |
 806 | public export
 807 | data SliceOp = MkSliceOp GCAnyPtr
 808 |
 809 | %foreign (ffi "SliceOp_create")
 810 | prim__sliceOpCreate :
 811 |   GCAnyPtr ->
 812 |   GCAnyPtr ->
 813 |   GCAnyPtr ->
 814 |   GCPtr Int64 -> Bits64 ->
 815 |   GCPtr Int64 -> Bits64 ->
 816 |   GCPtr Int64 -> Bits64 ->
 817 |   PrimIO AnyPtr
 818 |
 819 | namespace SliceOp
 820 |   export
 821 |   create :
 822 |     HasIO io => OpBuilder -> Location -> Value -> List Nat -> List Nat -> List Nat -> io SliceOp
 823 |   create
 824 |     (MkOpBuilder builder)
 825 |     (MkLocation location)
 826 |     (MkValue operand _)
 827 |     startIndices
 828 |     limitIndices
 829 |     strides = do
 830 |       MkInt64Array startIndices' <- mkInt64Array $ cast <$> startIndices
 831 |       MkInt64Array limitIndices' <- mkInt64Array $ cast <$> limitIndices
 832 |       MkInt64Array strides' <- mkInt64Array $ cast <$> strides
 833 |       op <- primIO $ prim__sliceOpCreate
 834 |         builder
 835 |         location
 836 |         operand
 837 |         startIndices' (cast $ length startIndices)
 838 |         limitIndices' (cast $ length limitIndices)
 839 |         strides' (cast $ length strides)
 840 |       op <- onCollectAny' op (primIO . prim__deleteSliceOp)
 841 |       pure (MkSliceOp op)
 842 |
 843 | %foreign (ffi "SliceOp_getOperation")
 844 | prim__sliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 845 |
 846 | export
 847 | Op SliceOp where
 848 |   getOperation (MkSliceOp op) = getOperationAux op prim__sliceOpGetOperation
 849 |
 850 | %foreign (ffi "DynamicSliceOp_delete")
 851 | prim__deleteDynamicSliceOp : AnyPtr -> PrimIO ()
 852 |
 853 | public export
 854 | data DynamicSliceOp = MkDynamicSliceOp GCAnyPtr
 855 |
 856 | %foreign (ffi "DynamicSliceOp_create")
 857 | prim__dynamicSliceOpCreate :
 858 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
 859 |
 860 | namespace DynamicSliceOp
 861 |   export
 862 |   create :
 863 |     HasIO io => OpBuilder -> Location -> Value -> ValueRange -> List Nat -> io DynamicSliceOp
 864 |   create
 865 |     (MkOpBuilder builder)
 866 |     (MkLocation location)
 867 |     (MkValue operand _)
 868 |     (MkValueRange startIndices)
 869 |     sliceSizes = do
 870 |       MkInt64Array sliceSizes' <- mkInt64Array $ cast <$> sliceSizes
 871 |       op <- primIO $ prim__dynamicSliceOpCreate
 872 |         builder location operand startIndices sliceSizes' (cast $ length sliceSizes)
 873 |       op <- onCollectAny' op (primIO . prim__deleteDynamicSliceOp)
 874 |       pure (MkDynamicSliceOp op)
 875 |
 876 | %foreign (ffi "DynamicSliceOp_getOperation")
 877 | prim__dynamicSliceOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 878 |
 879 | export
 880 | Op DynamicSliceOp where
 881 |   getOperation (MkDynamicSliceOp op) = getOperationAux op prim__dynamicSliceOpGetOperation
 882 |
 883 | %foreign (ffi "BitcastConvertOp_delete")
 884 | prim__deleteBitcastConvertOp : AnyPtr -> PrimIO ()
 885 |
 886 | public export
 887 | data BitcastConvertOp = MkBitcastConvertOp GCAnyPtr
 888 |
 889 | %foreign (ffi "BitcastConvertOp_create")
 890 | prim__bitcastConvertOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
 891 |
 892 | namespace BitcastConvertOp
 893 |   export
 894 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io BitcastConvertOp
 895 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue operand _) = do
 896 |     op <- primIO $ prim__bitcastConvertOpCreate builder location resultType operand
 897 |     op <- onCollectAny' op (primIO . prim__deleteBitcastConvertOp)
 898 |     pure (MkBitcastConvertOp op)
 899 |
 900 | %foreign (ffi "BitcastConvertOp_getOperation")
 901 | prim__bitcastConvertOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 902 |
 903 | export
 904 | Op BitcastConvertOp where
 905 |   getOperation (MkBitcastConvertOp op) = getOperationAux op prim__bitcastConvertOpGetOperation
 906 |
 907 | %foreign (ffi "BroadcastInDimOp_delete")
 908 | prim__deleteBroadcastInDimOp : AnyPtr -> PrimIO ()
 909 |
 910 | public export
 911 | data BroadcastInDimOp = MkBroadcastInDimOp GCAnyPtr
 912 |
 913 | %foreign (ffi "BroadcastInDimOp_create")
 914 | prim__broadcastInDimOpCreate :
 915 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
 916 |
 917 | namespace BroadcastInDimOp
 918 |   export
 919 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> List Nat -> io BroadcastInDimOp
 920 |   create
 921 |     (MkOpBuilder builder)
 922 |     (MkLocation location)
 923 |     (MkType_ resultType0 _)
 924 |     (MkValue operand _)
 925 |     dimensions = do
 926 |       MkInt64Array dimensions' <- mkInt64Array $ cast <$> dimensions
 927 |       op <- primIO $ prim__broadcastInDimOpCreate
 928 |         builder location resultType0 operand dimensions' (cast $ length dimensions)
 929 |       op <- onCollectAny' op (primIO . prim__deleteBroadcastInDimOp)
 930 |       pure (MkBroadcastInDimOp op)
 931 |
 932 | %foreign (ffi "BroadcastInDimOp_getOperation")
 933 | prim__broadcastInDimOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 934 |
 935 | export
 936 | Op BroadcastInDimOp where
 937 |   getOperation (MkBroadcastInDimOp op) = getOperationAux op prim__broadcastInDimOpGetOperation
 938 |
 939 | %foreign (ffi "CholeskyOp_delete")
 940 | prim__deleteCholeskyOp : AnyPtr -> PrimIO ()
 941 |
 942 | public export
 943 | data CholeskyOp = MkCholeskyOp GCAnyPtr
 944 |
 945 | %foreign (ffi "CholeskyOp_create")
 946 | prim__choleskyOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> PrimIO AnyPtr
 947 |
 948 | namespace CholeskyOp
 949 |   export
 950 |   create : HasIO io => OpBuilder -> Location -> Value -> Bool -> io CholeskyOp
 951 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) lower = do
 952 |     op <- primIO $ prim__choleskyOpCreate builder location value (boolToCInt lower)
 953 |     op <- onCollectAny' op (primIO . prim__deleteCholeskyOp)
 954 |     pure (MkCholeskyOp op)
 955 |
 956 | %foreign (ffi "CholeskyOp_getOperation")
 957 | prim__choleskyOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 958 |
 959 | export
 960 | Op CholeskyOp where
 961 |   getOperation (MkCholeskyOp op) = getOperationAux op prim__choleskyOpGetOperation
 962 |
 963 | %foreign (ffi "ConcatenateOp_delete")
 964 | prim__deleteConcatenateOp : AnyPtr -> PrimIO ()
 965 |
 966 | public export
 967 | data ConcatenateOp = MkConcatenateOp GCAnyPtr
 968 |
 969 | %foreign (ffi "ConcatenateOp_create")
 970 | prim__concatenateOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> PrimIO AnyPtr
 971 |
 972 | namespace ConcatenateOp
 973 |   export
 974 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> Nat -> io ConcatenateOp
 975 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange inputs) dimension = do
 976 |     op <- primIO $ prim__concatenateOpCreate builder location inputs (cast dimension)
 977 |     op <- onCollectAny' op (primIO . prim__deleteConcatenateOp)
 978 |     pure (MkConcatenateOp op)
 979 |
 980 | %foreign (ffi "ConcatenateOp_getOperation")
 981 | prim__concatenateOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
 982 |
 983 | export
 984 | Op ConcatenateOp where
 985 |   getOperation (MkConcatenateOp op) = getOperationAux op prim__concatenateOpGetOperation
 986 |
 987 | %foreign (ffi "DotGeneralOp_delete")
 988 | prim__deleteDotGeneralOp : AnyPtr -> PrimIO ()
 989 |
 990 | public export
 991 | data DotGeneralOp = MkDotGeneralOp GCAnyPtr
 992 |
 993 | %foreign (ffi "DotGeneralOp_create")
 994 | prim__dotGeneralOpCreate :
 995 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr ->  GCAnyPtr -> PrimIO AnyPtr
 996 |
 997 | namespace DotGeneralOp
 998 |   export
 999 |   create :
1000 |     HasIO io =>
1001 |     OpBuilder ->
1002 |     Location ->
1003 |     Type_ ->
1004 |     Value ->
1005 |     Value ->
1006 |     DotDimensionNumbersAttr ->
1007 |     io DotGeneralOp
1008 |   create
1009 |     (MkOpBuilder builder)
1010 |     (MkLocation location)
1011 |     (MkType_ resultType0 _)
1012 |     (MkValue lhs _)
1013 |     (MkValue rhs _)
1014 |     (MkDotDimensionNumbersAttr ddn) = do
1015 |       op <- primIO $ prim__dotGeneralOpCreate builder location resultType0 lhs rhs ddn
1016 |       op <- onCollectAny' op (primIO . prim__deleteDotGeneralOp)
1017 |       pure (MkDotGeneralOp op)
1018 |
1019 | %foreign (ffi "DotGeneralOp_getOperation")
1020 | prim__dotGeneralOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1021 |
1022 | export
1023 | Op DotGeneralOp where
1024 |   getOperation (MkDotGeneralOp op) = getOperationAux op prim__dotGeneralOpGetOperation
1025 |
1026 | %foreign (ffi "MapOp_delete")
1027 | prim__deleteMapOp : AnyPtr -> PrimIO ()
1028 |
1029 | public export
1030 | data MapOp = MkMapOp GCAnyPtr
1031 |
1032 | %foreign (ffi "MapOp_create")
1033 | prim__mapOpCreate :
1034 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
1035 |
1036 | namespace MapOp
1037 |   export
1038 |   create : HasIO io => OpBuilder -> Location -> Type_ -> ValueRange -> List Nat -> io MapOp
1039 |   create
1040 |     (MkOpBuilder builder)
1041 |     (MkLocation location)
1042 |     (MkType_ resultType _)
1043 |     (MkValueRange inputs)
1044 |     dimensions = do
1045 |       MkInt64Array dimensions' <- mkInt64Array $ cast <$> dimensions
1046 |       op <- primIO $ prim__mapOpCreate
1047 |         builder location resultType inputs dimensions' (cast $ length dimensions)
1048 |       op <- onCollectAny' op (primIO . prim__deleteMapOp)
1049 |       pure (MkMapOp op)
1050 |
1051 | %foreign (ffi "MapOp_getComputation")
1052 | prim__mapOpGetComputation : GCAnyPtr -> AnyPtr
1053 |
1054 | export
1055 | getComputation : MapOp -> Region
1056 | getComputation (MkMapOp op) = MkRegion $ prim__mapOpGetComputation op
1057 |
1058 | %foreign (ffi "MapOp_getOperation")
1059 | prim__mapOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1060 |
1061 | export
1062 | Op MapOp where
1063 |   getOperation (MkMapOp op) = getOperationAux op prim__mapOpGetOperation
1064 |
1065 | %foreign (ffi "ReshapeOp_delete")
1066 | prim__deleteReshapeOp : AnyPtr -> PrimIO ()
1067 |
1068 | public export
1069 | data ReshapeOp = MkReshapeOp GCAnyPtr
1070 |
1071 | %foreign (ffi "ReshapeOp_create")
1072 | prim__reshapeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1073 |
1074 | namespace ReshapeOp
1075 |   export
1076 |   create : HasIO io => OpBuilder -> Location -> Type_ -> Value -> io ReshapeOp
1077 |   create (MkOpBuilder builder) (MkLocation location) (MkType_ resultType _) (MkValue value _) = do
1078 |     op <- primIO $ prim__reshapeOpCreate builder location resultType value
1079 |     op <- onCollectAny' op (primIO . prim__deleteReshapeOp)
1080 |     pure (MkReshapeOp op)
1081 |
1082 | %foreign (ffi "ReshapeOp_getOperation")
1083 | prim__reshapeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1084 |
1085 | export
1086 | Op ReshapeOp where
1087 |   getOperation (MkReshapeOp op) = getOperationAux op prim__reshapeOpGetOperation
1088 |
1089 | %foreign (ffi "SelectOp_delete")
1090 | prim__deleteSelectOp : AnyPtr -> PrimIO ()
1091 |
1092 | public export
1093 | data SelectOp = MkSelectOp GCAnyPtr
1094 |
1095 | %foreign (ffi "SelectOp_create")
1096 | prim__selectOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1097 |
1098 | namespace SelectOp
1099 |   export
1100 |   create : HasIO io => OpBuilder -> Location -> Value -> Value -> Value -> io SelectOp
1101 |   create
1102 |     (MkOpBuilder builder)
1103 |     (MkLocation location)
1104 |     (MkValue pred _)
1105 |     (MkValue onTrue _)
1106 |     (MkValue onFalse _) = do
1107 |       op <- primIO $ prim__selectOpCreate builder location pred onTrue onFalse
1108 |       op <- onCollectAny' op (primIO . prim__deleteSelectOp)
1109 |       pure (MkSelectOp op)
1110 |
1111 | %foreign (ffi "SelectOp_getOperation")
1112 | prim__selectOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1113 |
1114 | export
1115 | Op SelectOp where
1116 |   getOperation (MkSelectOp op) = getOperationAux op prim__selectOpGetOperation
1117 |
1118 | %foreign (ffi "SortOp_delete")
1119 | prim__deleteSortOp : AnyPtr -> PrimIO ()
1120 |
1121 | public export
1122 | data SortOp = MkSortOp GCAnyPtr
1123 |
1124 | %foreign (ffi "SortOp_create")
1125 | prim__sortOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int64 -> Int -> PrimIO AnyPtr
1126 |
1127 | namespace SortOp
1128 |   export
1129 |   create : HasIO io => OpBuilder -> Location -> Value -> Nat -> Bool -> io SortOp
1130 |   create (MkOpBuilder builder) (MkLocation location) (MkValue value _) dimension isStable = do
1131 |     op <- primIO $ prim__sortOpCreate builder location value (cast dimension) (boolToCInt isStable)
1132 |     op <- onCollectAny' op (primIO . prim__deleteSortOp)
1133 |     pure (MkSortOp op)
1134 |
1135 | %foreign (ffi "SortOp_getComparator")
1136 | prim__sortOpGetComparator : GCAnyPtr -> AnyPtr
1137 |
1138 | export
1139 | getComparator : SortOp -> Region
1140 | getComparator (MkSortOp op) = MkRegion $ prim__sortOpGetComparator op
1141 |
1142 | %foreign (ffi "SortOp_getOperation")
1143 | prim__sortOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1144 |
1145 | export
1146 | Op SortOp where
1147 |   getOperation (MkSortOp op) = getOperationAux op prim__sortOpGetOperation
1148 |
1149 | %foreign (ffi "ReverseOp_delete")
1150 | prim__deleteReverseOp : AnyPtr -> PrimIO ()
1151 |
1152 | public export
1153 | data ReverseOp = MkReverseOp GCAnyPtr
1154 |
1155 | %foreign (ffi "ReverseOp_create")
1156 | prim__reverseOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
1157 |
1158 | namespace ReverseOp
1159 |   export
1160 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io ReverseOp
1161 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) dimensions = do
1162 |     MkInt64Array dimensions' <- mkInt64Array $ cast <$> dimensions
1163 |     op <- primIO $ prim__reverseOpCreate
1164 |       builder location operand dimensions' (cast $ length dimensions)
1165 |     op <- onCollectAny' op (primIO . prim__deleteReverseOp)
1166 |     pure (MkReverseOp op)
1167 |
1168 | %foreign (ffi "ReverseOp_getOperation")
1169 | prim__reverseOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1170 |
1171 | export
1172 | Op ReverseOp where
1173 |   getOperation (MkReverseOp op) = getOperationAux op prim__reverseOpGetOperation
1174 |
1175 | %foreign (ffi "TransposeOp_delete")
1176 | prim__deleteTransposeOp : AnyPtr -> PrimIO ()
1177 |
1178 | public export
1179 | data TransposeOp = MkTransposeOp GCAnyPtr
1180 |
1181 | %foreign (ffi "TransposeOp_create")
1182 | prim__transposeOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCPtr Int64 -> Bits64 -> PrimIO AnyPtr
1183 |
1184 | namespace TransposeOp
1185 |   export
1186 |   create : HasIO io => OpBuilder -> Location -> Value -> List Nat -> io TransposeOp
1187 |   create (MkOpBuilder builder) (MkLocation location) (MkValue operand _) permutation = do
1188 |     MkInt64Array permutation' <- mkInt64Array $ cast <$> permutation
1189 |     op <- primIO $ prim__transposeOpCreate
1190 |       builder location operand permutation' (cast $ length permutation)
1191 |     op <- onCollectAny' op (primIO . prim__deleteTransposeOp)
1192 |     pure (MkTransposeOp op)
1193 |
1194 | %foreign (ffi "TransposeOp_getOperation")
1195 | prim__transposeOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1196 |
1197 | export
1198 | Op TransposeOp where
1199 |   getOperation (MkTransposeOp op) = getOperationAux op prim__transposeOpGetOperation
1200 |
1201 | %foreign (ffi "TriangularSolveOp_delete")
1202 | prim__deleteTriangularSolveOp : AnyPtr -> PrimIO ()
1203 |
1204 | public export
1205 | data TriangularSolveOp = MkTriangularSolveOp GCAnyPtr
1206 |
1207 | %foreign (ffi "TriangularSolveOp_create")
1208 | prim__triangularSolveOpCreate :
1209 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Int -> Int -> Int -> Bits64 -> PrimIO AnyPtr
1210 |
1211 | namespace TriangularSolveOp
1212 |   export
1213 |   create :
1214 |     HasIO io =>
1215 |     OpBuilder ->
1216 |     Location ->
1217 |     Value ->
1218 |     Value ->
1219 |     Bool ->
1220 |     Bool ->
1221 |     Bool ->
1222 |     Transpose ->
1223 |     io TriangularSolveOp
1224 |   create
1225 |     (MkOpBuilder builder)
1226 |     (MkLocation location)
1227 |     (MkValue a _)
1228 |     (MkValue b _)
1229 |     leftSide
1230 |     lower
1231 |     unitDiagonal
1232 |     transposeA = do
1233 |       let leftSide = boolToCInt leftSide
1234 |           lower = boolToCInt lower
1235 |           unitDiagonal = boolToCInt unitDiagonal
1236 |           transposeA = cast transposeA
1237 |       op <- primIO $ prim__triangularSolveOpCreate
1238 |         builder location a b leftSide lower unitDiagonal transposeA
1239 |       op <- onCollectAny' op (primIO . prim__deleteTriangularSolveOp)
1240 |       pure (MkTriangularSolveOp op)
1241 |
1242 | %foreign (ffi "TriangularSolveOp_getOperation")
1243 | prim__triangularSolveOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1244 |
1245 | export
1246 | Op TriangularSolveOp where
1247 |   getOperation (MkTriangularSolveOp op) = getOperationAux op prim__triangularSolveOpGetOperation
1248 |
1249 | %foreign (ffi "StableHLO_ReturnOp_delete")
1250 | prim__deleteReturnOp : AnyPtr -> PrimIO ()
1251 |
1252 | public export
1253 | data ReturnOp = MkReturnOp GCAnyPtr
1254 |
1255 | %foreign (ffi "StableHLO_ReturnOp_create")
1256 | prim__returnOpCreate : GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> PrimIO AnyPtr
1257 |
1258 | namespace ReturnOp
1259 |   export
1260 |   create : HasIO io => OpBuilder -> Location -> ValueRange -> io ReturnOp
1261 |   create (MkOpBuilder builder) (MkLocation location) (MkValueRange results) = do
1262 |     op <- primIO $ prim__returnOpCreate builder location results
1263 |     op <- onCollectAny' op (primIO . prim__deleteReturnOp)
1264 |     pure (MkReturnOp op)
1265 |
1266 | %foreign (ffi "StableHLO_ReturnOp_getOperation")
1267 | prim__returnOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1268 |
1269 | export
1270 | Op ReturnOp where
1271 |   getOperation (MkReturnOp op) = getOperationAux op prim__returnOpGetOperation
1272 |
1273 | %foreign (ffi "RngBitGeneratorOp_delete")
1274 | prim__deleteRngBitGeneratorOp : AnyPtr -> PrimIO ()
1275 |
1276 | public export
1277 | data RngBitGeneratorOp = MkRngBitGeneratorOp GCAnyPtr
1278 |
1279 | %foreign (ffi "RngBitGeneratorOp_create")
1280 | prim__rngBitGeneratorOpCreate :
1281 |   GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> GCAnyPtr -> Bits64 -> GCAnyPtr -> PrimIO AnyPtr
1282 |
1283 | namespace RngBitGeneratorOp
1284 |   export
1285 |   create :
1286 |     HasIO io =>
1287 |     OpBuilder ->
1288 |     Location ->
1289 |     Type_ ->
1290 |     Type_ ->
1291 |     RngAlgorithm ->
1292 |     Value ->
1293 |     io RngBitGeneratorOp
1294 |   create
1295 |     (MkOpBuilder builder)
1296 |     (MkLocation location)
1297 |     (MkType_ outputState _)
1298 |     (MkType_ output _)
1299 |     rngAlgorithm
1300 |     (MkValue state _) = do
1301 |       op <- primIO $ prim__rngBitGeneratorOpCreate
1302 |         builder location outputState output (cast rngAlgorithm) state
1303 |       op <- onCollectAny' op (primIO . prim__deleteRngBitGeneratorOp)
1304 |       pure (MkRngBitGeneratorOp op)
1305 |
1306 | %foreign (ffi "RngBitGeneratorOp_getOperation")
1307 | prim__rngBitGeneratorOpGetOperation : GCAnyPtr -> PrimIO AnyPtr
1308 |
1309 | export
1310 | Op RngBitGeneratorOp where
1311 |   getOperation (MkRngBitGeneratorOp op) = getOperationAux op prim__rngBitGeneratorOpGetOperation
1312 |