ANSHUMAN87 commented on a change in pull request #5618:
URL: https://github.com/apache/incubatortvm/pull/5618#discussion_r446652171
##########
File path: include/tvm/arith/int_solver.h
##########
@@ 191,6 +286,56 @@ void SmithNormalFormDiag(std::vector<std::vector<int64_t>>*
S, std::vector<std::
*/
IntConstraintsTransform SolveLinearEquations(const IntConstraints& system_to_solve);
+/*!
+ * \brief Solve linear inequalities.
+ * \param system_to_solve the variables to solve, their ranges, and a list of inequalities.
+ * The inequalities are rewritten using FourierMotzkin elimination.
+ * This function takes an array of (in)equalities and an array of variables, and essentially
+ * rewrites the (in)equalities into an array of (in)equalities of the following form,
+ *
+ * x0 >= f0(x1, x2, ..., xn)
+ * x0 <= g0(x1, x2, ..., xn)
+ * x1 >= f1(x2, ..., xn)
+ * x1 <= g1(x2, ..., xn)
+ * ...
+ * xn >= fn() // just a constant
+ * xn <= gn() // just a constant
+ *
+ * \return A map of variables and their solved bounds,
+ * and constrains that cannot be solved to bounds.
+ */
+PartialSolvedInequalities SolveLinearInequalities(const IntConstraints& system_to_solve);
+
+/*!
+ * \brief Solve linear inequalities and infer the range of each variable.
+ * \param system_to_solve the variables to solve, their ranges, and a list of inequalities.
+ * \return The result ranges for each variables.
+ * The returned IntConstraints(variables, ranges, relations) contains,
+ * 1. variables  the variables that have been solved.
+ * 2. ranges  the best range of each variable.
+ * 3. relations  constraints that cannot be transformed to
+ * Range will be stored in relations.
+ */
+IntConstraints SolveInequalitiesToRange(const IntConstraints& system_to_solve);
+
+/*!
+ * \brief Solve linear inequalities and deskew the ranges towards zero.
+ * \param system_to_solve the variables to solve, their ranges, and a list of inequalities.
+ * \return A transform (src IntConstraints > dst IntConstraints)
+ * from original variables to a set of new variables.
+ * The ranges of new variables always start from zero,
+ * their extents are solved from \p system_to_solve.
+ * src IntConstraints is the same as \p system_to_solve.
+ * dst IntConstraints(variables, ranges, relations) contains,
+ * 1. variables  the variables that have been solved.
+ * 2. ranges  the best range (start from zero) of each variable.
+ * 3. relations  constraints that cannot be transformed to
+ * Range will be stored in relations.
+ * Variable mapping can be obtained from
+ * IntConstraintsTransform.src_to_dst and IntConstraintsTransform.dst_to_src.
+ */
+IntConstraintsTransform SolveInequalitiesDeskewRange(const IntConstraints& system_to_solve);
Review comment:
@yzhliu : Thanks a lot for such detail explanation. I get it clearly now!

This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
