@@ -79,6 +79,7 @@ class StringImm : public PrimExpr {
7979 public:
8080 TVM_DLL StringImm (String value, Span span = Span());
8181 TVM_DEFINE_OBJECT_REF_METHODS (StringImm, PrimExpr, StringImmNode);
82+ TVM_DEFINE_OBJECT_REF_COW_METHOD (StringImmNode);
8283};
8384
8485/* !
@@ -117,6 +118,7 @@ class Cast : public PrimExpr {
117118 public:
118119 TVM_DLL Cast (DataType dtype, PrimExpr value, Span span = Span());
119120 TVM_DEFINE_OBJECT_REF_METHODS (Cast, PrimExpr, CastNode);
121+ TVM_DEFINE_OBJECT_REF_COW_METHOD (CastNode);
120122};
121123
122124/* !
@@ -165,6 +167,7 @@ class Add : public PrimExpr {
165167 public:
166168 TVM_DLL Add (PrimExpr a, PrimExpr b, Span span = Span());
167169 TVM_DEFINE_OBJECT_REF_METHODS (Add, PrimExpr, AddNode);
170+ TVM_DEFINE_OBJECT_REF_COW_METHOD (AddNode);
168171};
169172
170173/* ! \brief a - b */
@@ -181,6 +184,7 @@ class Sub : public PrimExpr {
181184 public:
182185 TVM_DLL Sub (PrimExpr a, PrimExpr b, Span span = Span());
183186 TVM_DEFINE_OBJECT_REF_METHODS (Sub, PrimExpr, SubNode);
187+ TVM_DEFINE_OBJECT_REF_COW_METHOD (SubNode);
184188};
185189
186190/* ! \brief a * b */
@@ -197,6 +201,7 @@ class Mul : public PrimExpr {
197201 public:
198202 TVM_DLL Mul (PrimExpr a, PrimExpr b, Span span = Span());
199203 TVM_DEFINE_OBJECT_REF_METHODS (Mul, PrimExpr, MulNode);
204+ TVM_DEFINE_OBJECT_REF_COW_METHOD (MulNode);
200205};
201206
202207/* !
@@ -216,6 +221,7 @@ class Div : public PrimExpr {
216221 public:
217222 TVM_DLL Div (PrimExpr a, PrimExpr b, Span span = Span());
218223 TVM_DEFINE_OBJECT_REF_METHODS (Div, PrimExpr, DivNode);
224+ TVM_DEFINE_OBJECT_REF_COW_METHOD (DivNode);
219225};
220226
221227/* !
@@ -235,6 +241,7 @@ class Mod : public PrimExpr {
235241 public:
236242 TVM_DLL Mod (PrimExpr a, PrimExpr b, Span span = Span());
237243 TVM_DEFINE_OBJECT_REF_METHODS (Mod, PrimExpr, ModNode);
244+ TVM_DEFINE_OBJECT_REF_COW_METHOD (ModNode);
238245};
239246
240247/* ! \brief Floor division, floor(a/b) */
@@ -251,6 +258,7 @@ class FloorDiv : public PrimExpr {
251258 public:
252259 TVM_DLL FloorDiv (PrimExpr a, PrimExpr b, Span span = Span());
253260 TVM_DEFINE_OBJECT_REF_METHODS (FloorDiv, PrimExpr, FloorDivNode);
261+ TVM_DEFINE_OBJECT_REF_COW_METHOD (FloorDivNode);
254262};
255263
256264/* ! \brief The remainder of the floordiv */
@@ -267,6 +275,7 @@ class FloorMod : public PrimExpr {
267275 public:
268276 TVM_DLL FloorMod (PrimExpr a, PrimExpr b, Span span = Span());
269277 TVM_DEFINE_OBJECT_REF_METHODS (FloorMod, PrimExpr, FloorModNode);
278+ TVM_DEFINE_OBJECT_REF_COW_METHOD (FloorModNode);
270279};
271280
272281/* ! \brief min(a, b) */
@@ -283,6 +292,7 @@ class Min : public PrimExpr {
283292 public:
284293 TVM_DLL Min (PrimExpr a, PrimExpr b, Span span = Span());
285294 TVM_DEFINE_OBJECT_REF_METHODS (Min, PrimExpr, MinNode);
295+ TVM_DEFINE_OBJECT_REF_COW_METHOD (MinNode);
286296};
287297
288298/* ! \brief max(a, b) */
@@ -299,6 +309,7 @@ class Max : public PrimExpr {
299309 public:
300310 TVM_DLL Max (PrimExpr a, PrimExpr b, Span span = Span());
301311 TVM_DEFINE_OBJECT_REF_METHODS (Max, PrimExpr, MaxNode);
312+ TVM_DEFINE_OBJECT_REF_COW_METHOD (MaxNode);
302313};
303314
304315/* !
@@ -347,6 +358,7 @@ class EQ : public PrimExpr {
347358 public:
348359 TVM_DLL EQ (PrimExpr a, PrimExpr b, Span span = Span());
349360 TVM_DEFINE_OBJECT_REF_METHODS (EQ, PrimExpr, EQNode);
361+ TVM_DEFINE_OBJECT_REF_COW_METHOD (EQNode);
350362};
351363
352364/* ! \brief a != b */
@@ -363,6 +375,7 @@ class NE : public PrimExpr {
363375 public:
364376 TVM_DLL NE (PrimExpr a, PrimExpr b, Span span = Span());
365377 TVM_DEFINE_OBJECT_REF_METHODS (NE, PrimExpr, NENode);
378+ TVM_DEFINE_OBJECT_REF_COW_METHOD (NENode);
366379};
367380
368381/* ! \brief a < b */
@@ -379,6 +392,7 @@ class LT : public PrimExpr {
379392 public:
380393 TVM_DLL LT (PrimExpr a, PrimExpr b, Span span = Span());
381394 TVM_DEFINE_OBJECT_REF_METHODS (LT, PrimExpr, LTNode);
395+ TVM_DEFINE_OBJECT_REF_COW_METHOD (LTNode);
382396};
383397
384398/* ! \brief a <= b */
@@ -395,6 +409,7 @@ class LE : public PrimExpr {
395409 public:
396410 TVM_DLL LE (PrimExpr a, PrimExpr b, Span span = Span());
397411 TVM_DEFINE_OBJECT_REF_METHODS (LE, PrimExpr, LENode);
412+ TVM_DEFINE_OBJECT_REF_COW_METHOD (LENode);
398413};
399414
400415/* ! \brief a > b */
@@ -411,6 +426,7 @@ class GT : public PrimExpr {
411426 public:
412427 TVM_DLL GT (PrimExpr a, PrimExpr b, Span span = Span());
413428 TVM_DEFINE_OBJECT_REF_METHODS (GT, PrimExpr, GTNode);
429+ TVM_DEFINE_OBJECT_REF_COW_METHOD (GTNode);
414430};
415431
416432/* ! \brief a >= b */
@@ -427,6 +443,7 @@ class GE : public PrimExpr {
427443 public:
428444 TVM_DLL GE (PrimExpr a, PrimExpr b, Span span = Span());
429445 TVM_DEFINE_OBJECT_REF_METHODS (GE, PrimExpr, GENode);
446+ TVM_DEFINE_OBJECT_REF_COW_METHOD (GENode);
430447};
431448
432449/* ! \brief a && b */
@@ -466,6 +483,7 @@ class And : public PrimExpr {
466483 public:
467484 TVM_DLL And (PrimExpr a, PrimExpr b, Span span = Span());
468485 TVM_DEFINE_OBJECT_REF_METHODS (And, PrimExpr, AndNode);
486+ TVM_DEFINE_OBJECT_REF_COW_METHOD (AndNode);
469487};
470488
471489/* ! \brief a || b */
@@ -505,6 +523,7 @@ class Or : public PrimExpr {
505523 public:
506524 TVM_DLL Or (PrimExpr a, PrimExpr b, Span span = Span());
507525 TVM_DEFINE_OBJECT_REF_METHODS (Or, PrimExpr, OrNode);
526+ TVM_DEFINE_OBJECT_REF_COW_METHOD (OrNode);
508527};
509528
510529/* ! \brief !a */
@@ -540,6 +559,7 @@ class Not : public PrimExpr {
540559 public:
541560 TVM_DLL Not (PrimExpr a, Span span = Span());
542561 TVM_DEFINE_OBJECT_REF_METHODS (Not, PrimExpr, NotNode);
562+ TVM_DEFINE_OBJECT_REF_COW_METHOD (NotNode);
543563};
544564
545565/* !
@@ -591,6 +611,7 @@ class Select : public PrimExpr {
591611 TVM_DLL Select (PrimExpr condition, PrimExpr true_value, PrimExpr false_value, Span span = Span());
592612
593613 TVM_DEFINE_OBJECT_REF_METHODS (Select, PrimExpr, SelectNode);
614+ TVM_DEFINE_OBJECT_REF_COW_METHOD (SelectNode);
594615};
595616
596617/* !
@@ -706,6 +727,7 @@ class ProducerLoad : public PrimExpr {
706727 TVM_DLL explicit ProducerLoad (DataProducer producer, Array<PrimExpr> indices, Span span = Span());
707728
708729 TVM_DEFINE_OBJECT_REF_METHODS (ProducerLoad, PrimExpr, ProducerLoadNode);
730+ TVM_DEFINE_OBJECT_REF_COW_METHOD (ProducerLoadNode);
709731};
710732
711733/* !
@@ -765,6 +787,7 @@ class Load : public PrimExpr {
765787 TVM_DLL Load (DataType dtype, Var buffer_var, PrimExpr index, PrimExpr predicate,
766788 Span span = Span());
767789 TVM_DEFINE_OBJECT_REF_METHODS (Load, PrimExpr, LoadNode);
790+ TVM_DEFINE_OBJECT_REF_COW_METHOD (LoadNode);
768791};
769792
770793/* !
@@ -817,6 +840,7 @@ class Ramp : public PrimExpr {
817840 public:
818841 TVM_DLL Ramp (PrimExpr base, PrimExpr stride, int lanes, Span span = Span());
819842 TVM_DEFINE_OBJECT_REF_METHODS (Ramp, PrimExpr, RampNode);
843+ TVM_DEFINE_OBJECT_REF_COW_METHOD (RampNode);
820844};
821845
822846/* ! \brief Create a vector where all the elements are value. */
@@ -856,6 +880,7 @@ class Broadcast : public PrimExpr {
856880 public:
857881 TVM_DLL Broadcast (PrimExpr value, int lanes, Span span = Span());
858882 TVM_DEFINE_OBJECT_REF_METHODS (Broadcast, PrimExpr, BroadcastNode);
883+ TVM_DEFINE_OBJECT_REF_COW_METHOD (BroadcastNode);
859884};
860885
861886/* !
@@ -902,6 +927,7 @@ class Let : public PrimExpr {
902927 public:
903928 TVM_DLL Let (Var var, PrimExpr value, PrimExpr body, Span span = Span());
904929 TVM_DEFINE_OBJECT_REF_METHODS (Let, PrimExpr, LetNode);
930+ TVM_DEFINE_OBJECT_REF_COW_METHOD (LetNode);
905931};
906932
907933/* !
@@ -948,6 +974,7 @@ class Call : public PrimExpr {
948974 public:
949975 TVM_DLL Call (DataType dtype, RelayExpr op, Array<PrimExpr> args, Span span = Span());
950976 TVM_DEFINE_OBJECT_REF_METHODS (Call, PrimExpr, CallNode);
977+ TVM_DEFINE_OBJECT_REF_COW_METHOD (CallNode);
951978};
952979
953980/* !
@@ -995,6 +1022,7 @@ class Shuffle : public PrimExpr {
9951022 TVM_DLL static PrimExpr ExtractElement (PrimExpr vector, int index, Span span = Span());
9961023
9971024 TVM_DEFINE_OBJECT_REF_METHODS (Shuffle, PrimExpr, ShuffleNode);
1025+ TVM_DEFINE_OBJECT_REF_COW_METHOD (ShuffleNode);
9981026};
9991027
10001028// Reduce operator
@@ -1124,6 +1152,7 @@ class Reduce : public PrimExpr {
11241152 int value_index, Array<PrimExpr> init, Span span = Span());
11251153
11261154 TVM_DEFINE_OBJECT_REF_METHODS (Reduce, PrimExpr, ReduceNode);
1155+ TVM_DEFINE_OBJECT_REF_COW_METHOD (ReduceNode);
11271156};
11281157
11291158/* ! \brief Any shape. */
@@ -1159,6 +1188,7 @@ class Any : public PrimExpr {
11591188 TVM_DLL Any (Span span = Span());
11601189
11611190 TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS (Any, PrimExpr, AnyNode);
1191+ TVM_DEFINE_OBJECT_REF_COW_METHOD (AnyNode);
11621192};
11631193
11641194/*
0 commit comments