tvm
expr.h
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 
24 // Acknowledgement: Many low-level IR nodes originate from Halide.
25 #ifndef TVM_TIR_EXPR_H_
26 #define TVM_TIR_EXPR_H_
27 
28 #include <tvm/ir/expr.h>
29 #include <tvm/node/functor.h>
30 #include <tvm/node/node.h>
35 #include <tvm/runtime/data_type.h>
36 #include <tvm/tir/buffer.h>
37 #include <tvm/tir/var.h>
38 
39 #include <algorithm>
40 #include <iostream>
41 #include <limits>
42 #include <string>
43 #include <unordered_map>
44 #include <utility>
45 
46 namespace tvm {
47 namespace tir {
48 
51 
53 class StringImmNode : public PrimExprNode {
54  public:
57 
59  v->Visit("dtype", &dtype);
60  v->Visit("value", &value);
61  v->Visit("span", &span);
62  }
63 
64  bool SEqualReduce(const StringImmNode* other, SEqualReducer equal) const {
65  return equal(value, other->value);
66  }
67 
68  void SHashReduce(SHashReducer hash_reduce) const { hash_reduce(value); }
69 
70  static constexpr const char* _type_key = "tir.StringImm";
72 };
73 
78 class StringImm : public PrimExpr {
79  public:
80  TVM_DLL StringImm(String value, Span span = Span());
83 };
84 
89 class CastNode : public PrimExprNode {
90  public:
93 
95  v->Visit("dtype", &dtype);
96  v->Visit("value", &value);
97  v->Visit("span", &span);
98  }
99 
100  bool SEqualReduce(const CastNode* other, SEqualReducer equal) const {
101  return equal(dtype, other->dtype) && equal(value, other->value);
102  }
103 
104  void SHashReduce(SHashReducer hash_reduce) const {
105  hash_reduce(dtype);
106  hash_reduce(value);
107  }
108 
109  static constexpr const char* _type_key = "tir.Cast";
111 };
112 
117 class Cast : public PrimExpr {
118  public:
119  TVM_DLL Cast(DataType dtype, PrimExpr value, Span span = Span());
122 };
123 
128 template <typename T>
129 class BinaryOpNode : public PrimExprNode {
130  public:
135 
137  v->Visit("dtype", &(this->dtype));
138  v->Visit("a", &a);
139  v->Visit("b", &b);
140  v->Visit("span", &span);
141  }
142 
143  bool SEqualReduce(const T* other, SEqualReducer equal) const {
144  return equal(dtype, other->dtype) && equal(a, other->a) && equal(b, other->b);
145  }
146 
147  void SHashReduce(SHashReducer hash_reduce) const {
148  hash_reduce(dtype);
149  hash_reduce(a);
150  hash_reduce(b);
151  }
152 
154 };
155 
157 class AddNode : public BinaryOpNode<AddNode> {
158  public:
159  static constexpr const char* _type_key = "tir.Add";
160 };
161 
166 class Add : public PrimExpr {
167  public:
168  TVM_DLL Add(PrimExpr a, PrimExpr b, Span span = Span());
171 };
172 
174 class SubNode : public BinaryOpNode<SubNode> {
175  public:
176  static constexpr const char* _type_key = "tir.Sub";
177 };
178 
183 class Sub : public PrimExpr {
184  public:
185  TVM_DLL Sub(PrimExpr a, PrimExpr b, Span span = Span());
188 };
189 
191 class MulNode : public BinaryOpNode<MulNode> {
192  public:
193  static constexpr const char* _type_key = "tir.Mul";
194 };
195 
200 class Mul : public PrimExpr {
201  public:
202  TVM_DLL Mul(PrimExpr a, PrimExpr b, Span span = Span());
205 };
206 
211 class DivNode : public BinaryOpNode<DivNode> {
212  public:
213  static constexpr const char* _type_key = "tir.Div";
214 };
215 
220 class Div : public PrimExpr {
221  public:
222  TVM_DLL Div(PrimExpr a, PrimExpr b, Span span = Span());
225 };
226 
231 class ModNode : public BinaryOpNode<ModNode> {
232  public:
233  static constexpr const char* _type_key = "tir.Mod";
234 };
235 
240 class Mod : public PrimExpr {
241  public:
242  TVM_DLL Mod(PrimExpr a, PrimExpr b, Span span = Span());
245 };
246 
248 class FloorDivNode : public BinaryOpNode<FloorDivNode> {
249  public:
250  static constexpr const char* _type_key = "tir.FloorDiv";
251 };
252 
257 class FloorDiv : public PrimExpr {
258  public:
259  TVM_DLL FloorDiv(PrimExpr a, PrimExpr b, Span span = Span());
262 };
263 
265 class FloorModNode : public BinaryOpNode<FloorModNode> {
266  public:
267  static constexpr const char* _type_key = "tir.FloorMod";
268 };
269 
274 class FloorMod : public PrimExpr {
275  public:
276  TVM_DLL FloorMod(PrimExpr a, PrimExpr b, Span span = Span());
279 };
280 
282 class MinNode : public BinaryOpNode<MinNode> {
283  public:
284  static constexpr const char* _type_key = "tir.Min";
285 };
286 
291 class Min : public PrimExpr {
292  public:
293  TVM_DLL Min(PrimExpr a, PrimExpr b, Span span = Span());
296 };
297 
299 class MaxNode : public BinaryOpNode<MaxNode> {
300  public:
301  static constexpr const char* _type_key = "tir.Max";
302 };
303 
308 class Max : public PrimExpr {
309  public:
310  TVM_DLL Max(PrimExpr a, PrimExpr b, Span span = Span());
313 };
314 
319 template <typename T>
320 class CmpOpNode : public PrimExprNode {
321  public:
326 
328  v->Visit("dtype", &(this->dtype));
329  v->Visit("a", &a);
330  v->Visit("b", &b);
331  v->Visit("span", &span);
332  }
333 
334  bool SEqualReduce(const T* other, SEqualReducer equal) const {
335  return equal(dtype, other->dtype) && equal(a, other->a) && equal(b, other->b);
336  }
337 
338  void SHashReduce(SHashReducer hash_reduce) const {
339  hash_reduce(dtype);
340  hash_reduce(a);
341  hash_reduce(b);
342  }
343 
345 };
346 
348 class EQNode : public CmpOpNode<EQNode> {
349  public:
350  static constexpr const char* _type_key = "tir.EQ";
351 };
352 
357 class EQ : public PrimExpr {
358  public:
359  TVM_DLL EQ(PrimExpr a, PrimExpr b, Span span = Span());
362 };
363 
365 class NENode : public CmpOpNode<NENode> {
366  public:
367  static constexpr const char* _type_key = "tir.NE";
368 };
369 
374 class NE : public PrimExpr {
375  public:
376  TVM_DLL NE(PrimExpr a, PrimExpr b, Span span = Span());
379 };
380 
382 class LTNode : public CmpOpNode<LTNode> {
383  public:
384  static constexpr const char* _type_key = "tir.LT";
385 };
386 
391 class LT : public PrimExpr {
392  public:
393  TVM_DLL LT(PrimExpr a, PrimExpr b, Span span = Span());
396 };
397 
399 struct LENode : public CmpOpNode<LENode> {
400  public:
401  static constexpr const char* _type_key = "tir.LE";
402 };
403 
408 class LE : public PrimExpr {
409  public:
410  TVM_DLL LE(PrimExpr a, PrimExpr b, Span span = Span());
413 };
414 
416 class GTNode : public CmpOpNode<GTNode> {
417  public:
418  static constexpr const char* _type_key = "tir.GT";
419 };
420 
425 class GT : public PrimExpr {
426  public:
427  TVM_DLL GT(PrimExpr a, PrimExpr b, Span span = Span());
430 };
431 
433 class GENode : public CmpOpNode<GENode> {
434  public:
435  static constexpr const char* _type_key = "tir.GE";
436 };
437 
442 class GE : public PrimExpr {
443  public:
444  TVM_DLL GE(PrimExpr a, PrimExpr b, Span span = Span());
447 };
448 
450 class AndNode : public PrimExprNode {
451  public:
456 
458  v->Visit("dtype", &(this->dtype));
459  v->Visit("a", &a);
460  v->Visit("b", &b);
461  v->Visit("span", &span);
462  }
463 
464  bool SEqualReduce(const AndNode* other, SEqualReducer equal) const {
465  return equal(dtype, other->dtype) && equal(a, other->a) && equal(b, other->b);
466  }
467 
468  void SHashReduce(SHashReducer hash_reduce) const {
469  hash_reduce(dtype);
470  hash_reduce(a);
471  hash_reduce(b);
472  }
473 
474  static constexpr const char* _type_key = "tir.And";
476 };
477 
482 class And : public PrimExpr {
483  public:
484  TVM_DLL And(PrimExpr a, PrimExpr b, Span span = Span());
487 };
488 
490 class OrNode : public PrimExprNode {
491  public:
496 
498  v->Visit("dtype", &dtype);
499  v->Visit("a", &a);
500  v->Visit("b", &b);
501  v->Visit("span", &span);
502  }
503 
504  bool SEqualReduce(const OrNode* other, SEqualReducer equal) const {
505  return equal(dtype, other->dtype) && equal(a, other->a) && equal(b, other->b);
506  }
507 
508  void SHashReduce(SHashReducer hash_reduce) const {
509  hash_reduce(dtype);
510  hash_reduce(a);
511  hash_reduce(b);
512  }
513 
514  static constexpr const char* _type_key = "tir.Or";
516 };
517 
522 class Or : public PrimExpr {
523  public:
524  TVM_DLL Or(PrimExpr a, PrimExpr b, Span span = Span());
527 };
528 
530 class NotNode : public PrimExprNode {
531  public:
534 
536  v->Visit("dtype", &dtype);
537  v->Visit("a", &a);
538  v->Visit("span", &span);
539  }
540 
541  bool SEqualReduce(const NotNode* other, SEqualReducer equal) const {
542  return equal(dtype, other->dtype) && equal(a, other->a);
543  }
544 
545  void SHashReduce(SHashReducer hash_reduce) const {
546  hash_reduce(dtype);
547  hash_reduce(a);
548  }
549 
550  static constexpr const char* _type_key = "tir.Not";
552 };
553 
558 class Not : public PrimExpr {
559  public:
560  TVM_DLL Not(PrimExpr a, Span span = Span());
563 };
564 
572 class SelectNode : public PrimExprNode {
573  public:
580 
582  v->Visit("dtype", &dtype);
583  v->Visit("condition", &condition);
584  v->Visit("true_value", &true_value);
585  v->Visit("false_value", &false_value);
586  v->Visit("span", &span);
587  }
588 
589  bool SEqualReduce(const SelectNode* other, SEqualReducer equal) const {
590  return equal(dtype, other->dtype) && equal(condition, other->condition) &&
592  }
593 
594  void SHashReduce(SHashReducer hash_reduce) const {
595  hash_reduce(dtype);
596  hash_reduce(condition);
597  hash_reduce(true_value);
598  hash_reduce(false_value);
599  }
600 
601  static constexpr const char* _type_key = "tir.Select";
603 };
604 
609 class Select : public PrimExpr {
610  public:
611  TVM_DLL Select(PrimExpr condition, PrimExpr true_value, PrimExpr false_value, Span span = Span());
612 
615 };
616 
627 class BufferLoadNode : public PrimExprNode {
628  public:
635 
637  v->Visit("dtype", &(this->dtype));
638  v->Visit("buffer", &buffer);
639  v->Visit("indices", &indices);
640  v->Visit("predicate", &predicate);
641  v->Visit("span", &span);
642  }
643 
644  bool SEqualReduce(const BufferLoadNode* other, SEqualReducer equal) const {
645  return equal(dtype, other->dtype) && equal(buffer, other->buffer) &&
646  equal(indices, other->indices);
647  }
648 
649  void SHashReduce(SHashReducer hash_reduce) const {
650  hash_reduce(dtype);
651  hash_reduce(buffer);
652  hash_reduce(indices);
653  hash_reduce(predicate);
654  }
655 
656  static constexpr const char* _type_key = "tir.BufferLoad";
658 
659  private:
669  void LegalizeDType();
670  friend class BufferLoad;
672  friend class VectorTypeRewriter;
673  friend class Vectorizer;
674 };
675 
680 class BufferLoad : public PrimExpr {
681  public:
682  TVM_DLL explicit BufferLoad(Buffer buffer, Array<PrimExpr> indices,
683  Optional<PrimExpr> predicate = NullOpt, Span span = Span());
686 };
687 
698  public:
703 
705  v->Visit("dtype", &(this->dtype));
706  v->Visit("producer", &producer);
707  v->Visit("indices", &indices);
708  v->Visit("span", &span);
709  }
710 
711  bool SEqualReduce(const ProducerLoadNode* other, SEqualReducer equal) const {
712  return equal(dtype, other->dtype) && equal(producer, other->producer) &&
713  equal(indices, other->indices);
714  }
715 
716  void SHashReduce(SHashReducer hash_reduce) const {
717  hash_reduce(dtype);
718  hash_reduce(producer);
719  hash_reduce(indices);
720  }
721 
722  static constexpr const char* _type_key = "tir.ProducerLoad";
724 };
725 
730 class ProducerLoad : public PrimExpr {
731  public:
732  TVM_DLL explicit ProducerLoad(DataProducer producer, Array<PrimExpr> indices, Span span = Span());
733 
736 };
737 
747 class RampNode : public PrimExprNode {
748  public:
755 
757  v->Visit("dtype", &dtype);
758  v->Visit("base", &base);
759  v->Visit("stride", &stride);
760  v->Visit("lanes", &lanes);
761  v->Visit("span", &span);
762  }
763 
764  bool SEqualReduce(const RampNode* other, SEqualReducer equal) const {
765  return equal(dtype, other->dtype) && equal(base, other->base) && equal(stride, other->stride) &&
766  equal(lanes, other->lanes);
767  }
768 
769  void SHashReduce(SHashReducer hash_reduce) const {
770  hash_reduce(dtype);
771  hash_reduce(base);
772  hash_reduce(stride);
773  hash_reduce(lanes);
774  }
775 
776  static constexpr const char* _type_key = "tir.Ramp";
778 };
779 
784 class Ramp : public PrimExpr {
785  public:
786  TVM_DLL Ramp(PrimExpr base, PrimExpr stride, PrimExpr lanes, Span span = Span());
789 };
790 
792 class BroadcastNode : public PrimExprNode {
793  public:
798 
800  v->Visit("dtype", &dtype);
801  v->Visit("value", &value);
802  v->Visit("lanes", &lanes);
803  v->Visit("span", &span);
804  }
805 
806  bool SEqualReduce(const BroadcastNode* other, SEqualReducer equal) const {
807  return equal(dtype, other->dtype) && equal(value, other->value) && equal(lanes, other->lanes);
808  }
809 
810  void SHashReduce(SHashReducer hash_reduce) const {
811  hash_reduce(dtype);
812  hash_reduce(value);
813  hash_reduce(lanes);
814  }
815 
816  static constexpr const char* _type_key = "tir.Broadcast";
818 };
819 
824 class Broadcast : public PrimExpr {
825  public:
826  TVM_DLL Broadcast(PrimExpr value, PrimExpr lanes, Span span = Span());
829 };
830 
834 class LetNode : public PrimExprNode {
835  public:
842 
844  v->Visit("dtype", &dtype);
845  v->Visit("var", &var);
846  v->Visit("value", &value);
847  v->Visit("body", &body);
848  v->Visit("span", &span);
849  }
850 
851  bool SEqualReduce(const LetNode* other, SEqualReducer equal) const {
852  return equal(dtype, other->dtype) && equal.DefEqual(var, other->var) &&
853  equal(value, other->value) && equal(body, other->body);
854  }
855 
856  void SHashReduce(SHashReducer hash_reduce) const {
857  hash_reduce(dtype);
858  hash_reduce.DefHash(var);
859  hash_reduce(value);
860  hash_reduce(body);
861  }
862 
863  static constexpr const char* _type_key = "tir.Let";
865 };
866 
871 class Let : public PrimExpr {
872  public:
873  TVM_DLL Let(Var var, PrimExpr value, PrimExpr body, Span span = Span());
876 };
877 
881 class CallNode : public PrimExprNode {
882  public:
890 
894  v->Visit("dtype", &dtype);
895  v->Visit("op", &op);
896  v->Visit("args", &args);
897  v->Visit("span", &span);
898  }
899 
900  bool SEqualReduce(const CallNode* other, SEqualReducer equal) const {
901  return equal(dtype, other->dtype) && equal(op, other->op) && equal(args, other->args);
902  }
903 
904  void SHashReduce(SHashReducer hash_reduce) const {
905  hash_reduce(dtype);
906  hash_reduce(op);
907  hash_reduce(args);
908  }
909 
910  static constexpr const char* _type_key = "tir.Call";
912 };
913 
918 class Call : public PrimExpr {
919  public:
920  TVM_DLL Call(DataType dtype, RelayExpr op, Array<PrimExpr> args, Span span = Span());
923 };
924 
930 class ShuffleNode : public PrimExprNode {
931  public:
936 
938  v->Visit("dtype", &dtype);
939  v->Visit("vectors", &vectors);
940  v->Visit("indices", &indices);
941  v->Visit("span", &span);
942  }
943 
944  bool SEqualReduce(const ShuffleNode* other, SEqualReducer equal) const {
945  return equal(dtype, other->dtype) && equal(vectors, other->vectors) &&
946  equal(indices, other->indices);
947  }
948 
949  void SHashReduce(SHashReducer hash_reduce) const {
950  hash_reduce(dtype);
951  hash_reduce(vectors);
952  hash_reduce(indices);
953  }
954 
955  static constexpr const char* _type_key = "tir.Shuffle";
957 };
958 
963 class Shuffle : public PrimExpr {
964  public:
965  TVM_DLL Shuffle(Array<PrimExpr> vectors, Array<PrimExpr> indices, Span span = Span());
966  TVM_DLL static PrimExpr Concat(Array<PrimExpr> vectors, Span span = Span());
967  TVM_DLL static PrimExpr ExtractElement(PrimExpr vector, int index, Span span = Span());
968 
971 };
972 
973 // Reduce operator
978 class CommReducerNode : public Object {
979  public:
998  mutable Span span;
999 
1001  v->Visit("lhs", &lhs);
1002  v->Visit("rhs", &rhs);
1003  v->Visit("result", &result);
1004  v->Visit("identity_element", &identity_element);
1005  v->Visit("span", &span);
1006  }
1007 
1008  bool SEqualReduce(const CommReducerNode* other, SEqualReducer equal) const {
1009  return equal.DefEqual(lhs, other->lhs) && equal.DefEqual(rhs, other->rhs) &&
1011  }
1012 
1013  void SHashReduce(SHashReducer hash_reduce) const {
1014  hash_reduce.DefHash(lhs);
1015  hash_reduce.DefHash(rhs);
1016  hash_reduce(result);
1017  hash_reduce(identity_element);
1018  }
1019 
1020  static constexpr const char* _type_key = "tir.CommReducer";
1021  static constexpr const bool _type_has_method_sequal_reduce = true;
1022  static constexpr const bool _type_has_method_shash_reduce = true;
1024 };
1025 
1030 class CommReducer : public ObjectRef {
1031  public:
1033  Array<PrimExpr> identity_element, Span span = Span());
1034 
1036 };
1037 
1039 class ReduceNode : public PrimExprNode {
1040  public:
1056 
1058  v->Visit("dtype", &dtype);
1059  v->Visit("combiner", &combiner);
1060  v->Visit("source", &source);
1061  v->Visit("init", &init);
1062  v->Visit("axis", &axis);
1063  v->Visit("condition", &condition);
1064  v->Visit("value_index", &value_index);
1065  v->Visit("span", &span);
1066  }
1067 
1068  bool SEqualReduce(const ReduceNode* other, SEqualReducer equal) const {
1069  // check axis first so IterVars can define the necessary variables.
1070  return equal(dtype, other->dtype) && equal(axis, other->axis) &&
1071  equal(combiner, other->combiner) && equal(source, other->source) &&
1072  equal(init, other->init) && equal(condition, other->condition) &&
1073  equal(value_index, other->value_index);
1074  }
1075 
1076  void SHashReduce(SHashReducer hash_reduce) const {
1077  hash_reduce(dtype);
1078  hash_reduce(axis);
1079  hash_reduce(combiner);
1080  hash_reduce(source);
1081  hash_reduce(init);
1082  hash_reduce(condition);
1083  hash_reduce(value_index);
1084  }
1085 
1086  static constexpr const char* _type_key = "tir.Reduce";
1088 };
1089 
1094 class Reduce : public PrimExpr {
1095  public:
1096  TVM_DLL Reduce(CommReducer combiner, Array<PrimExpr> src, Array<IterVar> rdom, PrimExpr condition,
1097  int value_index, Array<PrimExpr> init, Span span = Span());
1098 
1101 };
1102 
1104 class AnyNode : public PrimExprNode {
1105  public:
1107  v->Visit("dtype", &dtype);
1108  v->Visit("span", &span);
1109  }
1110 
1111  bool SEqualReduce(const AnyNode* other, SEqualReducer equal) const {
1112  return equal(dtype, other->dtype);
1113  }
1114 
1115  void SHashReduce(SHashReducer hash_reduce) const {}
1116 
1118  Var ToVar() const { return Var("any_dim", DataType::Int(32)); }
1119 
1121  SizeVar ToSizeVar() const { return SizeVar("any_dim", DataType::Int(32)); }
1122 
1123  static constexpr const char* _type_key = "tir.Any";
1125 };
1126 
1131 class Any : public PrimExpr {
1132  public:
1133  TVM_DLL Any(Span span = Span());
1134 
1137 };
1138 
1139 /*
1140  * \brief Template function to convert Map to unordered_map
1141  * Sometimes useful for API gluing when internal uses unordered_map
1142  * \param dmap The container map
1143  * \return The corresponding unordered_map.
1144  * \tparam K the key of the Map.
1145  * \tparam V the value of the Map.
1146  */
1147 template <typename K, typename V>
1148 inline std::unordered_map<K, V> as_unordered_map(const Map<K, V>& dmap) {
1149  std::unordered_map<K, V> ret;
1150  for (auto kv : dmap) {
1151  ret[kv.first] = kv.second;
1152  }
1153  return ret;
1154 }
1155 } // namespace tir
1156 } // namespace tvm
1157 
1158 namespace tvm {
1159 namespace runtime {
1160 
1161 // Automatic conversion into PrimExpr, when called through the FFI.
1162 // Automatic conversions into IntImm, Integer, and Bool are registered
1163 // in "tvm/ir/expr.h", as they are currently in use outside of TIR.
1164 
1165 template <>
1167  template <typename PODSubclass>
1168  static Optional<tvm::tir::StringImm> TryFrom(const PODSubclass& val) {
1169  auto type_code = val.type_code();
1170  bool can_convert = type_code == kTVMDataType || type_code == kTVMBytes ||
1171  type_code == kTVMStr || val.template IsObjectRef<tvm::runtime::String>();
1172  if (can_convert) {
1174  } else {
1175  return NullOpt;
1176  }
1177  }
1178 
1179  template <typename PODSubclass>
1180  static tvm::tir::StringImm From(const PODSubclass& val) {
1181  if (auto opt = TryFrom(val)) {
1182  return opt.value();
1183  } else {
1184  return val.template AsObjectRef<tvm::tir::StringImm>();
1185  }
1186  }
1187 };
1188 
1189 template <>
1191  // Common rule for RetValue and ArgValue. Templated to ensure
1192  // correct delegation to `operator std::string()` for either
1193  // TVMArgValue or TVMRetValue.
1194  template <typename PODSubclass>
1195  static PrimExpr From(const PODSubclass& val) {
1196  if (auto opt = val.TryAsBool()) {
1197  // Check against val.TryAsBool directly, to avoid the
1198  // bounds-checking in PackedFuncValueConverter<Bool>::TryFrom.
1199  return tvm::Bool(opt.value());
1200  } else if (auto opt = PackedFuncValueConverter<IntImm>::TryFrom(val)) {
1201  return opt.value();
1202  } else if (auto opt = PackedFuncValueConverter<FloatImm>::TryFrom(val)) {
1203  return opt.value();
1204  } else if (auto opt = PackedFuncValueConverter<tvm::tir::StringImm>::TryFrom(val)) {
1205  return opt.value();
1206  } else {
1207  return PrimExpr::FromObject_(val.template AsObjectRef<ObjectRef>());
1208  }
1209  }
1210 };
1211 
1212 } // namespace runtime
1213 } // namespace tvm
1214 
1215 namespace std {
1216 template <>
1217 struct hash<::tvm::tir::IterVar> : public ::tvm::ObjectPtrHash {};
1218 } // namespace std
1219 #endif // TVM_TIR_EXPR_H_
Runtime Array container types.
Symbolic n-dimensional array, to represent a memory buffer.
@ kTVMBytes
Definition: c_runtime_api.h:187
@ kTVMDataType
Definition: c_runtime_api.h:180
@ kTVMStr
Definition: c_runtime_api.h:186
Visitor class to get the attributes of an AST/IR node. The content is going to be called for each fie...
Definition: reflection.h:52
Span span
Span that points to the original source code. Reserved debug information.
Definition: expr.h:56
Constant floating point literals in the program.
Definition: expr.h:548
Constant integer literals in the program.
Definition: expr.h:501
Base node of all primitive expressions.
Definition: expr.h:86
DataType dtype
The runtime data type of the primitive expression.
Definition: expr.h:102
Reference to PrimExprNode.
Definition: expr.h:115
DataType dtype() const
Definition: expr.h:129
Managed reference to RelayExprNode.
Definition: expr.h:442
A Reducer class to reduce the structural equality result of two objects.
Definition: structural_equal.h:137
A Reducer class to reduce the structural hash value.
Definition: structural_hash.h:121
void DefHash(const ObjectRef &key) const
Push hash of key to the current sequence of hash values.
Definition: structural_hash.h:198
Definition: source_map.h:120
Array, container representing a contiguous sequence of ObjectRefs.
Definition: array.h:289
Runtime primitive data type.
Definition: data_type.h:43
static DataType Int(int bits, int lanes=1)
Construct an int type.
Definition: data_type.h:219
Map container of NodeRef->NodeRef in DSL graph. Map implements copy on write semantics,...
Definition: map.h:1271
Base class of all object reference.
Definition: object.h:519
base class of all object containers.
Definition: object.h:171
Optional container that to represent to a Nullable variant of T.
Definition: optional.h:51
Reference to string objects.
Definition: string.h:98
a + b
Definition: expr.h:157
static constexpr const char * _type_key
Definition: expr.h:159
Managed reference to AddNode.
Definition: expr.h:166
TVM_DEFINE_OBJECT_REF_COW_METHOD(AddNode)
TVM_DEFINE_OBJECT_REF_METHODS(Add, PrimExpr, AddNode)
Add(PrimExpr a, PrimExpr b, Span span=Span())
a && b
Definition: expr.h:450
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:468
PrimExpr a
The left operand.
Definition: expr.h:453
bool SEqualReduce(const AndNode *other, SEqualReducer equal) const
Definition: expr.h:464
static constexpr const char * _type_key
Definition: expr.h:474
PrimExpr b
The right operand.
Definition: expr.h:455
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:457
TVM_DECLARE_FINAL_OBJECT_INFO(AndNode, PrimExprNode)
Managed reference to AndNode.
Definition: expr.h:482
TVM_DEFINE_OBJECT_REF_COW_METHOD(AndNode)
And(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(And, PrimExpr, AndNode)
Any shape.
Definition: expr.h:1104
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:1106
TVM_DECLARE_FINAL_OBJECT_INFO(AnyNode, PrimExprNode)
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:1115
SizeVar ToSizeVar() const
Convert to SizeVar.
Definition: expr.h:1121
bool SEqualReduce(const AnyNode *other, SEqualReducer equal) const
Definition: expr.h:1111
static constexpr const char * _type_key
Definition: expr.h:1123
Var ToVar() const
Convert to var.
Definition: expr.h:1118
Managed reference to AnyNode.
Definition: expr.h:1131
TVM_DEFINE_OBJECT_REF_COW_METHOD(AnyNode)
TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS(Any, PrimExpr, AnyNode)
Any(Span span=Span())
Base template to implement binary ops.
Definition: expr.h:129
PrimExpr b
The right operand.
Definition: expr.h:134
bool SEqualReduce(const T *other, SEqualReducer equal) const
Definition: expr.h:143
TVM_DECLARE_FINAL_OBJECT_INFO(T, PrimExprNode)
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:136
PrimExpr a
The left operand.
Definition: expr.h:132
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:147
Create a vector where all the elements are value.
Definition: expr.h:792
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:799
static constexpr const char * _type_key
Definition: expr.h:816
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:810
TVM_DECLARE_FINAL_OBJECT_INFO(BroadcastNode, PrimExprNode)
bool SEqualReduce(const BroadcastNode *other, SEqualReducer equal) const
Definition: expr.h:806
PrimExpr value
The base value.
Definition: expr.h:795
PrimExpr lanes
The number of lanes.
Definition: expr.h:797
Managed reference to BroadcastNode.
Definition: expr.h:824
Broadcast(PrimExpr value, PrimExpr lanes, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(Broadcast, PrimExpr, BroadcastNode)
TVM_DEFINE_OBJECT_REF_COW_METHOD(BroadcastNode)
Load value from the high dimension buffer.
Definition: expr.h:627
friend class VectorTypeRewriter
Definition: expr.h:672
friend class CustomDatatypesLowerer
Definition: expr.h:671
TVM_DECLARE_FINAL_OBJECT_INFO(BufferLoadNode, PrimExprNode)
Array< PrimExpr > indices
The indices location to be loaded.
Definition: expr.h:632
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:636
friend class Vectorizer
Definition: expr.h:673
Buffer buffer
The buffer variable.
Definition: expr.h:630
bool SEqualReduce(const BufferLoadNode *other, SEqualReducer equal) const
Definition: expr.h:644
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:649
static constexpr const char * _type_key
Definition: expr.h:656
Optional< PrimExpr > predicate
The predicate mask for loading values.
Definition: expr.h:634
Managed reference to BufferLoadNode.
Definition: expr.h:680
TVM_DEFINE_OBJECT_REF_COW_METHOD(BufferLoadNode)
TVM_DEFINE_OBJECT_REF_METHODS(BufferLoad, PrimExpr, BufferLoadNode)
BufferLoad(Buffer buffer, Array< PrimExpr > indices, Optional< PrimExpr > predicate=NullOpt, Span span=Span())
Buffer is a symbolic n-darray structure. It is a composition of primitive symbolic types,...
Definition: buffer.h:174
Call node.
Definition: expr.h:881
RelayExpr op
The operator(function) being invoked.
Definition: expr.h:889
bool SEqualReduce(const CallNode *other, SEqualReducer equal) const
Definition: expr.h:900
static constexpr const char * _type_key
Definition: expr.h:910
Array< PrimExpr > args
The arguments.
Definition: expr.h:892
TVM_DECLARE_FINAL_OBJECT_INFO(CallNode, PrimExprNode)
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:893
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:904
Managed reference to CallNode.
Definition: expr.h:918
TVM_DEFINE_OBJECT_REF_COW_METHOD(CallNode)
TVM_DEFINE_OBJECT_REF_METHODS(Call, PrimExpr, CallNode)
Call(DataType dtype, RelayExpr op, Array< PrimExpr > args, Span span=Span())
Cast value from one data type to another.
Definition: expr.h:89
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:104
PrimExpr value
Original data type.
Definition: expr.h:92
bool SEqualReduce(const CastNode *other, SEqualReducer equal) const
Definition: expr.h:100
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:94
TVM_DECLARE_FINAL_OBJECT_INFO(CastNode, PrimExprNode)
static constexpr const char * _type_key
Definition: expr.h:109
Managed reference to CastNode.
Definition: expr.h:117
TVM_DEFINE_OBJECT_REF_COW_METHOD(CastNode)
TVM_DEFINE_OBJECT_REF_METHODS(Cast, PrimExpr, CastNode)
Cast(DataType dtype, PrimExpr value, Span span=Span())
Base template to implement comparison ops.
Definition: expr.h:320
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:327
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:338
bool SEqualReduce(const T *other, SEqualReducer equal) const
Definition: expr.h:334
TVM_DECLARE_FINAL_OBJECT_INFO(T, PrimExprNode)
PrimExpr a
The left operand.
Definition: expr.h:323
PrimExpr b
The right operand.
Definition: expr.h:325
A commutative reducer node to represent a commutative binary operator with identity element.
Definition: expr.h:978
static constexpr const bool _type_has_method_shash_reduce
Definition: expr.h:1022
Array< Var > rhs
The right argument of reducer.
Definition: expr.h:983
Array< Var > lhs
The left argument of reducer.
Definition: expr.h:981
static constexpr const char * _type_key
Definition: expr.h:1020
static constexpr const bool _type_has_method_sequal_reduce
Definition: expr.h:1021
bool SEqualReduce(const CommReducerNode *other, SEqualReducer equal) const
Definition: expr.h:1008
Array< PrimExpr > operator()(Array< PrimExpr > a, Array< PrimExpr > b) const
Function call operator to combine a and b.
Array< PrimExpr > result
The result of reducer.
Definition: expr.h:985
TVM_DECLARE_FINAL_OBJECT_INFO(CommReducerNode, Object)
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:1000
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:1013
Span span
Span that points to the original source code. Reserved debug information.
Definition: expr.h:998
Array< PrimExpr > identity_element
The identity element of reducer, which leaves other elements unchanged when combined with it,...
Definition: expr.h:991
Managed reference to CommReducerNode.
Definition: expr.h:1030
CommReducer(Array< Var > lhs, Array< Var > rhs, Array< PrimExpr > result, Array< PrimExpr > identity_element, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(CommReducer, ObjectRef, CommReducerNode)
Managed reference to DataProducerNode.
Definition: buffer.h:313
a / b in the C semnatics.
Definition: expr.h:211
static constexpr const char * _type_key
Definition: expr.h:213
Managed reference to DivNode.
Definition: expr.h:220
TVM_DEFINE_OBJECT_REF_COW_METHOD(DivNode)
Div(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(Div, PrimExpr, DivNode)
a == b
Definition: expr.h:348
static constexpr const char * _type_key
Definition: expr.h:350
Managed reference to EQNode.
Definition: expr.h:357
TVM_DEFINE_OBJECT_REF_METHODS(EQ, PrimExpr, EQNode)
EQ(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(EQNode)
Floor division, floor(a/b)
Definition: expr.h:248
static constexpr const char * _type_key
Definition: expr.h:250
Managed reference to FloorDivNode.
Definition: expr.h:257
TVM_DEFINE_OBJECT_REF_METHODS(FloorDiv, PrimExpr, FloorDivNode)
FloorDiv(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(FloorDivNode)
The remainder of the floordiv.
Definition: expr.h:265
static constexpr const char * _type_key
Definition: expr.h:267
Managed reference to FloorModNode.
Definition: expr.h:274
TVM_DEFINE_OBJECT_REF_COW_METHOD(FloorModNode)
TVM_DEFINE_OBJECT_REF_METHODS(FloorMod, PrimExpr, FloorModNode)
FloorMod(PrimExpr a, PrimExpr b, Span span=Span())
a >= b
Definition: expr.h:433
static constexpr const char * _type_key
Definition: expr.h:435
Managed reference to GENode.
Definition: expr.h:442
TVM_DEFINE_OBJECT_REF_METHODS(GE, PrimExpr, GENode)
TVM_DEFINE_OBJECT_REF_COW_METHOD(GENode)
GE(PrimExpr a, PrimExpr b, Span span=Span())
a > b
Definition: expr.h:416
static constexpr const char * _type_key
Definition: expr.h:418
Managed reference to GTNode.
Definition: expr.h:425
TVM_DEFINE_OBJECT_REF_METHODS(GT, PrimExpr, GTNode)
TVM_DEFINE_OBJECT_REF_COW_METHOD(GTNode)
GT(PrimExpr a, PrimExpr b, Span span=Span())
Iteration Variable, represents an iteration over an integer interval.
Definition: var.h:315
Managed reference to LENode.
Definition: expr.h:408
LE(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(LENode)
TVM_DEFINE_OBJECT_REF_METHODS(LE, PrimExpr, LENode)
a < b
Definition: expr.h:382
static constexpr const char * _type_key
Definition: expr.h:384
Managed reference to LTNode.
Definition: expr.h:391
TVM_DEFINE_OBJECT_REF_COW_METHOD(LTNode)
LT(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(LT, PrimExpr, LTNode)
Let binding. Bind var to value then evaluate body.
Definition: expr.h:834
Var var
The variable.
Definition: expr.h:837
static constexpr const char * _type_key
Definition: expr.h:863
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:856
PrimExpr value
The value to be binded.
Definition: expr.h:839
TVM_DECLARE_FINAL_OBJECT_INFO(LetNode, PrimExprNode)
bool SEqualReduce(const LetNode *other, SEqualReducer equal) const
Definition: expr.h:851
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:843
PrimExpr body
The result expression.
Definition: expr.h:841
Managed reference to LetNode.
Definition: expr.h:871
TVM_DEFINE_OBJECT_REF_METHODS(Let, PrimExpr, LetNode)
TVM_DEFINE_OBJECT_REF_COW_METHOD(LetNode)
Let(Var var, PrimExpr value, PrimExpr body, Span span=Span())
max(a, b)
Definition: expr.h:299
static constexpr const char * _type_key
Definition: expr.h:301
Managed reference to MaxNode.
Definition: expr.h:308
TVM_DEFINE_OBJECT_REF_METHODS(Max, PrimExpr, MaxNode)
Max(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(MaxNode)
min(a, b)
Definition: expr.h:282
static constexpr const char * _type_key
Definition: expr.h:284
Managed reference to MinNode.
Definition: expr.h:291
Min(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(Min, PrimExpr, MinNode)
TVM_DEFINE_OBJECT_REF_COW_METHOD(MinNode)
a % b in the C semnatics.
Definition: expr.h:231
static constexpr const char * _type_key
Definition: expr.h:233
Managed reference to ModNode.
Definition: expr.h:240
TVM_DEFINE_OBJECT_REF_METHODS(Mod, PrimExpr, ModNode)
Mod(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(ModNode)
a * b
Definition: expr.h:191
static constexpr const char * _type_key
Definition: expr.h:193
Managed reference to MulNode.
Definition: expr.h:200
Mul(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(Mul, PrimExpr, MulNode)
TVM_DEFINE_OBJECT_REF_COW_METHOD(MulNode)
a != b
Definition: expr.h:365
static constexpr const char * _type_key
Definition: expr.h:367
Managed reference to NENode.
Definition: expr.h:374
NE(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(NENode)
TVM_DEFINE_OBJECT_REF_METHODS(NE, PrimExpr, NENode)
!a
Definition: expr.h:530
TVM_DECLARE_FINAL_OBJECT_INFO(NotNode, PrimExprNode)
PrimExpr a
The input operand.
Definition: expr.h:533
static constexpr const char * _type_key
Definition: expr.h:550
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:535
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:545
bool SEqualReduce(const NotNode *other, SEqualReducer equal) const
Definition: expr.h:541
Managed reference to NotNode.
Definition: expr.h:558
TVM_DEFINE_OBJECT_REF_COW_METHOD(NotNode)
Not(PrimExpr a, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(Not, PrimExpr, NotNode)
a || b
Definition: expr.h:490
bool SEqualReduce(const OrNode *other, SEqualReducer equal) const
Definition: expr.h:504
PrimExpr b
The right operand.
Definition: expr.h:495
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:508
PrimExpr a
The left operand.
Definition: expr.h:493
TVM_DECLARE_FINAL_OBJECT_INFO(OrNode, PrimExprNode)
static constexpr const char * _type_key
Definition: expr.h:514
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:497
Managed reference to OrNode.
Definition: expr.h:522
TVM_DEFINE_OBJECT_REF_METHODS(Or, PrimExpr, OrNode)
Or(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(OrNode)
Load value from the result produced by the producer.
Definition: expr.h:697
static constexpr const char * _type_key
Definition: expr.h:722
Array< PrimExpr > indices
The location arguments.
Definition: expr.h:702
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:704
bool SEqualReduce(const ProducerLoadNode *other, SEqualReducer equal) const
Definition: expr.h:711
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:716
DataProducer producer
The buffer producer.
Definition: expr.h:700
TVM_DECLARE_FINAL_OBJECT_INFO(ProducerLoadNode, PrimExprNode)
Managed reference to ProducerLoadNode.
Definition: expr.h:730
TVM_DEFINE_OBJECT_REF_METHODS(ProducerLoad, PrimExpr, ProducerLoadNode)
ProducerLoad(DataProducer producer, Array< PrimExpr > indices, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(ProducerLoadNode)
Construct a vector with lanes elements where its i-th element equals base + i * stride....
Definition: expr.h:747
static constexpr const char * _type_key
Definition: expr.h:776
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:756
PrimExpr stride
The stride of each step.
Definition: expr.h:752
TVM_DECLARE_FINAL_OBJECT_INFO(RampNode, PrimExprNode)
PrimExpr lanes
Total number of lanes.
Definition: expr.h:754
bool SEqualReduce(const RampNode *other, SEqualReducer equal) const
Definition: expr.h:764
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:769
PrimExpr base
The base value.
Definition: expr.h:750
Managed reference to RampNode.
Definition: expr.h:784
TVM_DEFINE_OBJECT_REF_COW_METHOD(RampNode)
TVM_DEFINE_OBJECT_REF_METHODS(Ramp, PrimExpr, RampNode)
Ramp(PrimExpr base, PrimExpr stride, PrimExpr lanes, Span span=Span())
Reduction operator.
Definition: expr.h:1039
Array< PrimExpr > init
The init operand.
Definition: expr.h:1046
int value_index
the index of this reduce node
Definition: expr.h:1055
static constexpr const char * _type_key
Definition: expr.h:1086
TVM_DECLARE_FINAL_OBJECT_INFO(ReduceNode, PrimExprNode)
Array< IterVar > axis
The reduction axis.
Definition: expr.h:1048
CommReducer combiner
The commutative combiner.
Definition: expr.h:1042
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:1057
bool SEqualReduce(const ReduceNode *other, SEqualReducer equal) const
Definition: expr.h:1068
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:1076
Array< PrimExpr > source
The source operand.
Definition: expr.h:1044
PrimExpr condition
Predicate on the reduction Only add the body to reduction if condition is true.
Definition: expr.h:1053
Managed reference to ReduceNode.
Definition: expr.h:1094
TVM_DEFINE_OBJECT_REF_COW_METHOD(ReduceNode)
TVM_DEFINE_OBJECT_REF_METHODS(Reduce, PrimExpr, ReduceNode)
Reduce(CommReducer combiner, Array< PrimExpr > src, Array< IterVar > rdom, PrimExpr condition, int value_index, Array< PrimExpr > init, Span span=Span())
return true_value if condition is true, otherwise return false_value.
Definition: expr.h:572
PrimExpr condition
The condition.
Definition: expr.h:575
PrimExpr true_value
value to be returned when condition is true.
Definition: expr.h:577
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:594
static constexpr const char * _type_key
Definition: expr.h:601
bool SEqualReduce(const SelectNode *other, SEqualReducer equal) const
Definition: expr.h:589
TVM_DECLARE_FINAL_OBJECT_INFO(SelectNode, PrimExprNode)
PrimExpr false_value
value to be returned when condition is false.
Definition: expr.h:579
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:581
Managed reference to SelectNode.
Definition: expr.h:609
TVM_DEFINE_OBJECT_REF_COW_METHOD(SelectNode)
TVM_DEFINE_OBJECT_REF_METHODS(Select, PrimExpr, SelectNode)
Select(PrimExpr condition, PrimExpr true_value, PrimExpr false_value, Span span=Span())
Shuffle instruction. vec = concat(vectors) result = (vec[indices[0]], vec[indices[1]] ....
Definition: expr.h:930
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:949
Array< PrimExpr > indices
The indices of each element.
Definition: expr.h:935
static constexpr const char * _type_key
Definition: expr.h:955
TVM_DECLARE_FINAL_OBJECT_INFO(ShuffleNode, PrimExprNode)
Array< PrimExpr > vectors
the input vectors.
Definition: expr.h:933
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:937
bool SEqualReduce(const ShuffleNode *other, SEqualReducer equal) const
Definition: expr.h:944
Managed reference to ShuffleNode.
Definition: expr.h:963
static PrimExpr Concat(Array< PrimExpr > vectors, Span span=Span())
Shuffle(Array< PrimExpr > vectors, Array< PrimExpr > indices, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(ShuffleNode)
TVM_DEFINE_OBJECT_REF_METHODS(Shuffle, PrimExpr, ShuffleNode)
static PrimExpr ExtractElement(PrimExpr vector, int index, Span span=Span())
a named variable represents a tensor index size
Definition: var.h:151
String constants, only used in asserts.
Definition: expr.h:53
String value
The constant value content.
Definition: expr.h:56
bool SEqualReduce(const StringImmNode *other, SEqualReducer equal) const
Definition: expr.h:64
void SHashReduce(SHashReducer hash_reduce) const
Definition: expr.h:68
static constexpr const char * _type_key
Definition: expr.h:70
TVM_DECLARE_FINAL_OBJECT_INFO(StringImmNode, PrimExprNode)
void VisitAttrs(AttrVisitor *v)
Definition: expr.h:58
Managed reference to StringImmNode.
Definition: expr.h:78
StringImm(String value, Span span=Span())
TVM_DEFINE_OBJECT_REF_COW_METHOD(StringImmNode)
TVM_DEFINE_OBJECT_REF_METHODS(StringImm, PrimExpr, StringImmNode)
a - b
Definition: expr.h:174
static constexpr const char * _type_key
Definition: expr.h:176
Managed reference to SubNode.
Definition: expr.h:183
Sub(PrimExpr a, PrimExpr b, Span span=Span())
TVM_DEFINE_OBJECT_REF_METHODS(Sub, PrimExpr, SubNode)
TVM_DEFINE_OBJECT_REF_COW_METHOD(SubNode)
a named variable in TIR
Definition: var.h:89
Defines the Functor data structures.
Base expr nodes in TVM.
Runtime Map container types.
tvm::Span Span
Definition: base.h:65
Box< bool > Bool
Boxed version of C++ bool.
Definition: boxed_primitive.h:121
Var var(std::string name_hint, DataType t=DataType::Int(32))
Construct a new Var expression.
std::unordered_map< K, V > as_unordered_map(const Map< K, V > &dmap)
Definition: expr.h:1148
tvm::FloatImmNode FloatImmNode
Definition: expr.h:50
tvm::IntImmNode IntImmNode
Definition: expr.h:49
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
PrimExpr ret(PrimExpr value, Span span=Span())
Return the value.
PrimExpr equal(PrimExpr a, PrimExpr b, Span span=Span())
equal
constexpr runtime::NullOptType NullOpt
Definition: optional.h:169
Definitions and helper macros for IR/AST nodes.
Runtime String container types.
ObjectRef hash functor.
Definition: object.h:655
static PrimExpr From(const PODSubclass &val)
Definition: expr.h:1195
static Optional< tvm::tir::StringImm > TryFrom(const PODSubclass &val)
Definition: expr.h:1168
static tvm::tir::StringImm From(const PODSubclass &val)
Definition: expr.h:1180
Type trait to specify special value conversion rules from TVMArgValue and TVMRetValue.
Definition: packed_func.h:1246
a <= b
Definition: expr.h:399
static constexpr const char * _type_key
Definition: expr.h:401
Variables in the TIR.