@@ -441,25 +441,34 @@ RNGOp::RNGOp(
441441 RNGOpType type,
442442 Val* out,
443443 DataType dtype,
444+ std::vector<Val*> parameters,
444445 int rng_offset,
445446 Val* philox_index)
446447 : Expr(passkey, ExprType::RNGOp),
447448 rng_op_type_(type),
448449 dtype_(dtype),
450+ parameters_(std::move(parameters)),
449451 rng_offset_(rng_offset),
450452 philox_index_(philox_index) {
451453 if (out->isA <TensorView>()) {
452454 for (auto id : out->as <TensorView>()->getRootDomain ()) {
453- addInput (id->extent ());
455+ shape_. emplace_back (id->extent ());
454456 }
455457 }
458+ for (auto v : shape_) {
459+ addInput (v);
460+ }
461+ for (auto v : parameters_) {
462+ addInput (v);
463+ }
456464 addOutput (out);
457465}
458466
459467RNGOp::RNGOp (const RNGOp* src, IrCloner* ir_cloner)
460468 : Expr(src, ir_cloner),
461469 rng_op_type_(src->rng_op_type_),
462470 dtype_(src->dtype ()),
471+ parameters_(ir_cloner->clone (src->parameters_)),
463472 rng_offset_(src->rng_offset_),
464473 philox_index_(ir_cloner->clone (src->philox_index_)) {}
465474
@@ -477,6 +486,14 @@ bool RNGOp::sameAs(const Statement* other) const {
477486 if (dtype_ != other_op->dtype_ ) {
478487 return false ;
479488 }
489+ if (parameters_.size () != other_op->parameters_ .size ()) {
490+ return false ;
491+ }
492+ for (auto i : c10::irange (parameters_.size ())) {
493+ if (!parameters_[i]->sameAs (other_op->parameters_ [i])) {
494+ return false ;
495+ }
496+ }
480497 if (getRNGOffset () != other_op->getRNGOffset ()) {
481498 return false ;
482499 }
0 commit comments