|
FreeTensor
|
#include <scalar_prop_const.h>


Classes | |
| struct | ScalarIndex |
| struct | ScalarIndices |
| Indices to a scalar, includes a sequence of constant offsets. More... | |
Protected Types | |
| typedef SymbolTable< ConstFold > | BaseClass |
Protected Member Functions | |
| std::optional< ScalarIndices > | tryToScalar (const std::vector< Expr > &exprs) |
| Try converting indices' AST nodes to constant indices. | |
| void | gen_constant (const std::string &name, const std::optional< ScalarIndices > &indices, const Expr &value) |
| void | kill_iter_dep_entry (const std::string &name, const ScalarIndices &indices) |
| void | kill_constant (const std::string &name, const std::optional< ScalarIndices > &indices) |
| void | kill_iter (const std::string &it_var) |
| bool | intersect_constants_with (std::unordered_map< std::string, std::map< ScalarIndices, Expr > > other) |
| Intersect currently recorded scalar constants with provided map. | |
| Stmt | visit (const Store &store_orig) override |
| Store: kill & gen optionally. | |
| Stmt | visit (const ReduceTo &op) override |
| ReduceTo: kill & gen optionally. | |
| Expr | visit (const Load &load_orig) override |
| Load: read from constants map. | |
| Stmt | visit (const If &op) override |
| Stmt | visit (const VarDef &vd) override |
| VarDef: maintain top level of the maps. | |
| Stmt | visit (const For &op) override |
| For: iterate until fixed-point reached. | |
Protected Member Functions inherited from freetensor::SymbolTable< ConstFold > | |
| BaseClass::StmtRetType | visit (const VarDef &op) override |
| BaseClass::StmtRetType | visit (const For &op) override |
Protected Member Functions inherited from freetensor::ConstFold | |
| Expr | visit (const Add &op) override |
| Expr | visit (const Sub &op) override |
| Expr | visit (const Mul &op) override |
| Expr | visit (const RealDiv &op) override |
| Expr | visit (const FloorDiv &op) override |
| Expr | visit (const CeilDiv &op) override |
| Expr | visit (const RoundTowards0Div &op) override |
| Expr | visit (const Mod &op) override |
| Expr | visit (const Remainder &op) override |
| Expr | visit (const Min &op) override |
| Expr | visit (const Max &op) override |
| Expr | visit (const LT &op) override |
| Expr | visit (const LE &op) override |
| Expr | visit (const GT &op) override |
| Expr | visit (const GE &op) override |
| Expr | visit (const EQ &op) override |
| Expr | visit (const NE &op) override |
| Expr | visit (const LAnd &op) override |
| Expr | visit (const LOr &op) override |
| Expr | visit (const LNot &op) override |
| Expr | visit (const Sqrt &op) override |
| Expr | visit (const Exp &op) override |
| Expr | visit (const Square &op) override |
| Expr | visit (const Sigmoid &op) override |
| Expr | visit (const Sin &op) override |
| Expr | visit (const Cos &op) override |
| Expr | visit (const Tan &op) override |
| Expr | visit (const Tanh &op) override |
| Expr | visit (const Abs &op) override |
| Expr | visit (const Floor &op) override |
| Expr | visit (const Ceil &op) override |
| Expr | visit (const Unbound &op) override |
| Expr | visit (const Cast &op) override |
| Expr | visit (const IfExpr &op) override |
| 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) |
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) |
Protected Attributes | |
| std::unordered_map< std::string, std::map< ScalarIndices, Expr > > | constants_ |
| std::unordered_multimap< std::string, std::pair< std::string, ScalarIndices > > | iter_dep_constants_ |
Additional Inherited Members | |
Public Types inherited from freetensor::Mutator | |
| typedef Expr | ExprRetType |
| typedef Stmt | StmtRetType |
Public Member Functions inherited from freetensor::SymbolTable< ConstFold > | |
| SymbolTable (T &&...args) | |
| const std::unordered_set< std::string > & | names () const override |
| const std::unordered_map< std::string, VarDef > & | defs () const override |
| const std::unordered_map< std::string, For > & | loops () const override |
| bool | hasDef (const std::string &name) const override |
| const VarDef & | def (const std::string &name) const override |
| Ref< Buffer > | buffer (const std::string &name) const override |
| bool | hasLoop (const std::string &name) const override |
| const For & | loop (const std::string &name) const override |
| void | pushDef (const VarDef &op) override |
| void | popDef (const VarDef &op) override |
| void | pushFor (const For &op) override |
| void | popFor (const For &op) override |
| const SymbolTableData & | symbolTableSnapshot () const |
Public Member Functions inherited from freetensor::Mutator | |
| virtual | ~Mutator () |
| virtual Stmt | operator() (const Stmt &op) final |
| virtual Expr | operator() (const Expr &op) final |
| virtual const std::unordered_set< std::string > & | names () const =0 |
| virtual const std::unordered_map< std::string, VarDef > & | defs () const =0 |
| virtual const std::unordered_map< std::string, For > & | loops () const =0 |
| virtual bool | hasDef (const std::string &name) const =0 |
| virtual const VarDef & | def (const std::string &name) const =0 |
| virtual Ref< Buffer > | buffer (const std::string &name) const =0 |
| virtual bool | hasLoop (const std::string &name) const =0 |
| virtual const For & | loop (const std::string &name) const =0 |
| virtual void | pushDef (const VarDef &op)=0 |
| virtual void | popDef (const VarDef &op)=0 |
| virtual void | pushFor (const For &op)=0 |
| virtual void | popFor (const For &op)=0 |
Static Protected Member Functions inherited from freetensor::ConstFold | |
| static Const | castType (DataType type, const Const &val) |
Cast the data type of a Const node. | |
Mutator for propagating scalar values that are const or depend on iteration variables only.
Scalars are values in tensors indexed with constants, i.e. this pass requires both indices and assigned value to be constants.
|
protected |
|
protected |
|
protected |
Intersect currently recorded scalar constants with provided map.
This operation removes any record not found in other from the current map.
| other | The constants map to intersect |
|
protected |
|
protected |
|
protected |
|
protected |
Try converting indices' AST nodes to constant indices.
| exprs | AST nodes for indices |
For: iterate until fixed-point reached.
Reimplemented from freetensor::Mutator.
If: choose single branch if constant predicate, or intersect both branches
Reimplemented from freetensor::Mutator.
Load: read from constants map.
Reimplemented from freetensor::Mutator.
ReduceTo: kill & gen optionally.
Reimplemented from freetensor::Mutator.
Store: kill & gen optionally.
Reimplemented from freetensor::Mutator.
VarDef: maintain top level of the maps.
Reimplemented from freetensor::Mutator.
|
protected |
Scalar constants records, with first level map indexing var names and second indexing indices
|
protected |
Constant entries dependent on each iteration variable, mapping one iteration variable to multiple (var name, indices) pairs dependent on it