FreeTensor
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
freetensor::ReplaceBySaved Class Reference

#include <replace_by_saved.h>

Inheritance diagram for freetensor::ReplaceBySaved:
Inheritance graph
[legend]
Collaboration diagram for freetensor::ReplaceBySaved:
Collaboration graph
[legend]

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
 

Detailed Description

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

Constructor & Destructor Documentation

◆ ReplaceBySaved()

freetensor::ReplaceBySaved::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 
)
inline

Member Function Documentation

◆ grad()

auto freetensor::ReplaceBySaved::grad ( const auto &  op)
inline

◆ recomp()

auto freetensor::ReplaceBySaved::recomp ( const auto &  op)
inline

◆ visit()

Expr freetensor::ReplaceBySaved::visit ( const Load op)
overrideprotectedvirtual

Reimplemented from freetensor::Mutator.

◆ visitExpr()

Expr freetensor::ReplaceBySaved::visitExpr ( const Expr expr)
overrideprotectedvirtual

Reimplemented from freetensor::Mutator.


The documentation for this class was generated from the following files: