/*! * Copyright (c) 2017 by Contributors * \file canonical.h * \brief Internal canonicalized expression simplification engine. */ #ifndef TVM_ARITHMETIC_CANONICAL_H_ #define TVM_ARITHMETIC_CANONICAL_H_ #include <tvm/expr.h> #include <tvm/schedule.h> namespace tvm { namespace arith { /*! * \brief A stateful CanonicalEngine over SSA. * * Simplify and CSE with canonicalization expressions. * Each call's result will get cached, so next call will * simply return the cached result. */ class Canonical { public: /*! \brief constructor */ explicit Canonical(Map<Var, Range> var_range); /*! * \brief simplify expression e. * \param expr The expression to be simplified. */ Expr Simplify(Expr expr); /*! * \brief simplify stmt. * \param stmt The stmt to be simplified. */ Stmt Simplify(Stmt expr); /*! * \brief Set range and level variable * \param v The variable * \param r The range of the variable, can be undefined. * \param level The scope level of the variable, * affect the order of formula in communicative ops. */ void SetRange(Var v, Range r, int level); class Internal; private: // Internal pointer std::shared_ptr<Internal> ptr_; }; } // namespace arith } // namespace tvm #endif // TVM_ARITHMETIC_CANONICAL_H_