24 #ifndef TVM_ARITH_INT_SOLVER_H_ 25 #define TVM_ARITH_INT_SOLVER_H_ 31 #include <unordered_map> 66 v->Visit(
"coef", &coef);
67 v->Visit(
"lower", &lower);
68 v->Visit(
"equal", &equal);
69 v->Visit(
"upper", &upper);
73 return eq(coef, other->
coef) && eq(lower, other->
lower) && eq(equal, other->
equal) &&
74 eq(upper, other->
upper);
85 static constexpr
const char*
_type_key =
"arith.IntGroupBounds";
113 static IntGroupBounds FromRange(
const Range& r);
156 v->Visit(
"variables", &variables);
157 v->Visit(
"ranges", &ranges);
158 v->Visit(
"relations", &relations);
167 hash_reduce(variables);
169 hash_reduce(relations);
173 static constexpr
const char*
_type_key =
"arith.IntConstraints";
217 v->Visit(
"src", &src);
218 v->Visit(
"dst", &dst);
219 v->Visit(
"src_to_dst", &src_to_dst);
220 v->Visit(
"dst_to_src", &dst_to_src);
231 hash_reduce(src_to_dst);
232 hash_reduce(dst_to_src);
236 static constexpr
const char*
_type_key =
"arith.IntConstraintsTransform";
266 IntConstraintsTransform
operator+(
const IntConstraintsTransform& other)
const;
288 void SmithNormalFormDiag(std::vector<std::vector<int64_t>>* S, std::vector<std::vector<int64_t>>* V,
289 std::vector<PrimExpr>* x, std::vector<PrimExpr>* y);
365 #endif // TVM_ARITH_INT_SOLVER_H_ Array< PrimExpr > AsConditions(const Array< Var > &variables, const Map< Var, IntGroupBounds > &bounds, const Array< PrimExpr > &relations)
Combine the information into an array of (in)equalities.
void VisitAttrs(tvm::AttrVisitor *v)
Definition: int_solver.h:155
Represent integer constrains including (integer) variables, their ranges and the relations between th...
Definition: int_solver.h:143
void SmithNormalFormDiag(std::vector< std::vector< int64_t >> *S, std::vector< std::vector< int64_t >> *V, std::vector< PrimExpr > *x, std::vector< PrimExpr > *y)
Obtain Smith Normal Form of linear equation A x = y. Smith Normal Form of matrix A_{mxn} is S_{mxn} =...
A Reducer class to reduce the structural equality result of two objects.
Definition: structural_equal.h:124
runtime implementation for LibTorch/TorchScript.
Definition: analyzer.h:36
void SHashReduce(SHashReducer hash_reduce) const
Definition: int_solver.h:166
A Reducer class to reduce the structural hash value.
Definition: structural_hash.h:110
Managed reference to IntGroupBoundsNode.
Definition: int_solver.h:93
Algebra expression simplifications.
Array< PrimExpr > upper
Definition: int_solver.h:63
bool SEqualReduce(const IntGroupBoundsNode *other, SEqualReducer eq) const
Definition: int_solver.h:72
void VisitAttrs(tvm::AttrVisitor *v)
Definition: int_solver.h:65
base class of all object containers.
Definition: object.h:167
void SHashReduce(SHashReducer hash_reduce) const
Definition: int_solver.h:77
Common operators defined for Expr.
Map< Var, Range > ranges
Definition: int_solver.h:150
IndexMap Substitute(const IndexMap &index_map, std::function< Optional< PrimExpr >(const Var &var)> f_subst)
Substitute variables in an index map.
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
constexpr int kSimplifyRewriteCanonicalRewrite
Definition: int_solver.h:47
Range constainer.
Definition: expr.h:715
Managed reference to IntConstraintsNode.
Definition: int_solver.h:181
Array, container representing a contiguous sequence of ObjectRefs.
Definition: array.h:289
Array< Var > variables
Definition: int_solver.h:146
IntConstraints SolveInequalitiesToRange(const IntConstraints &system_to_solve)
Solve linear inequalities and infer the range of each variable.
PrimExpr coef
Definition: int_solver.h:60
IntConstraintsTransform SolveLinearEquations(const IntConstraints &system_to_solve)
Solve linear equations.
#define TVM_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName)
Definition: object.h:713
std::pair< Map< Var, IntGroupBounds >, Array< PrimExpr > > PartialSolvedInequalities
Definition: int_solver.h:271
bool SEqualReduce(const IntConstraintsNode *other, SEqualReducer equal) const
Definition: int_solver.h:161
Base class of all object reference.
Definition: object.h:511
PartialSolvedInequalities SolveLinearInequalities(const IntConstraints &system_to_solve)
Solve linear inequalities.
static constexpr const bool _type_has_method_sequal_reduce
Definition: int_solver.h:84
Represent integer grouped bounds which are classified into lower bounds (inclusive), upper bounds (inclusive) and equalities. It also contains coefficient as a multiplier for the bounds, i.e., coef * var >= lower coef * var == equal coef * var <= upper.
Definition: int_solver.h:58
Array< PrimExpr > lower
Definition: int_solver.h:61
static constexpr const char * _type_key
Definition: int_solver.h:85
Array< PrimExpr > equal
Definition: int_solver.h:62
Array< PrimExpr > relations
Definition: int_solver.h:153
Map container of NodeRef->NodeRef in DSL graph. Map implements copy on write semantics, which means map is mutable but copy will happen when array is referenced in more than two places.
Definition: map.h:1271
TVM_DECLARE_FINAL_OBJECT_INFO(IntGroupBoundsNode, Object)
Reference to PrimExprNode.
Definition: expr.h:114
IntConstraintsTransform SolveInequalitiesDeskewRange(const IntConstraints &system_to_solve)
Solve linear inequalities and deskew the ranges towards zero.
PrimExpr operator+(PrimExpr a, PrimExpr b)
add operator