|
FreeTensor
|
#include <replace_by_saved.h>


Public Member Functions | |
| ReplaceBySaved (const SymbolTableInterface &symbolTable, const std::unordered_map< ID, std::string > &intermediatesMap, const std::unordered_map< StmtOrExprID, Expr > &versions, const ID &rootStmtID, const std::optional< InvertFromStore > &invertFromStore=std::nullopt) | |
| auto | recomp (const auto &op) |
| auto | grad (const auto &op) |
Public Member Functions inherited from freetensor::Mutator | |
| virtual | ~Mutator () |
| virtual Stmt | operator() (const Stmt &op) final |
| virtual Expr | operator() (const Expr &op) final |
Protected Member Functions | |
| Expr | visitExpr (const Expr &expr) override |
| Expr | visit (const Load &op) override |
Protected Member Functions inherited from freetensor::Mutator | |
| virtual Expr | visitExpr (const Expr &op) |
| virtual Stmt | visitStmt (const Stmt &op) |
| virtual Stmt | visit (const Any &op) |
| virtual Stmt | visit (const StmtSeq &op) |
| virtual Stmt | visit (const VarDef &op) |
| virtual Expr | visit (const Var &op) |
| virtual Stmt | visit (const Store &op) |
| virtual Stmt | visit (const Alloc &op) |
| virtual Stmt | visit (const Free &op) |
| virtual Expr | visit (const Load &op) |
| virtual Stmt | visit (const ReduceTo &op) |
| virtual Expr | visit (const AnyExpr &op) |
| virtual Expr | visit (const IntConst &op) |
| virtual Expr | visit (const FloatConst &op) |
| virtual Expr | visit (const BoolConst &op) |
| virtual Expr | visit (const Add &op) |
| virtual Expr | visit (const Sub &op) |
| virtual Expr | visit (const Mul &op) |
| virtual Expr | visit (const RealDiv &op) |
| virtual Expr | visit (const FloorDiv &op) |
| virtual Expr | visit (const CeilDiv &op) |
| virtual Expr | visit (const RoundTowards0Div &op) |
| virtual Expr | visit (const Mod &op) |
| virtual Expr | visit (const Remainder &op) |
| virtual Expr | visit (const Min &op) |
| virtual Expr | visit (const Max &op) |
| virtual Expr | visit (const LT &op) |
| virtual Expr | visit (const LE &op) |
| virtual Expr | visit (const GT &op) |
| virtual Expr | visit (const GE &op) |
| virtual Expr | visit (const EQ &op) |
| virtual Expr | visit (const NE &op) |
| virtual Expr | visit (const LAnd &op) |
| virtual Expr | visit (const LOr &op) |
| virtual Expr | visit (const LNot &op) |
| virtual Expr | visit (const Sqrt &op) |
| virtual Expr | visit (const Exp &op) |
| virtual Expr | visit (const Ln &op) |
| virtual Expr | visit (const Square &op) |
| virtual Expr | visit (const Sigmoid &op) |
| virtual Expr | visit (const Sin &op) |
| virtual Expr | visit (const Cos &op) |
| virtual Expr | visit (const Tan &op) |
| virtual Expr | visit (const Tanh &op) |
| virtual Expr | visit (const Abs &op) |
| virtual Expr | visit (const Floor &op) |
| virtual Expr | visit (const Ceil &op) |
| virtual Expr | visit (const Unbound &op) |
| virtual Stmt | visit (const For &op) |
| virtual Stmt | visit (const If &op) |
| virtual Stmt | visit (const Assert &op) |
| virtual Stmt | visit (const Assume &op) |
| virtual Expr | visit (const IfExpr &op) |
| virtual Expr | visit (const Cast &op) |
| virtual Expr | visit (const Intrinsic &op) |
| virtual Stmt | visit (const Eval &op) |
| virtual Stmt | visit (const MatMul &op) |
| virtual Stmt | visit (const MarkVersion &op) |
| virtual Expr | visit (const LoadAtVersion &op) |
Additional Inherited Members | |
Public Types inherited from freetensor::Mutator | |
| typedef Expr | ExprRetType |
| typedef Stmt | StmtRetType |
Instead of directly using the variables from the original program, use taped or recomputed variables as replacements
(For gradient and recomputation) For each Load node, if it has a taped or recomputed counterpart, replace it with new Load node that loads the taped or recomputed version. In this case, versions of the Load node is used
(Only for gradient only) For each sub-expression that matches alreadyStored, it is re-loaded without computation. If the stored variable has a taped or recomputed counterpart, also replace it. In this case, versions of the Store node is used, which is one version later than that of a Load node. This is for gradient only, or otherwise we will "re"-load what we have not even computed
|
inline |
|
inline |
|
inline |
Reimplemented from freetensor::Mutator.
Reimplemented from freetensor::Mutator.