FreeTensor
Loading...
Searching...
No Matches
Classes | Protected Types | Protected Member Functions | Protected Attributes | List of all members
freetensor::ScalarPropConst Class Reference

#include <scalar_prop_const.h>

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

Classes

struct  ScalarIndex
 
struct  ScalarIndices
 Indices to a scalar, includes a sequence of constant offsets. More...
 

Protected Types

typedef SymbolTable< ConstFoldBaseClass
 

Protected Member Functions

std::optional< ScalarIndicestryToScalar (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 VarDefdef (const std::string &name) const override
 
Ref< Bufferbuffer (const std::string &name) const override
 
bool hasLoop (const std::string &name) const override
 
const Forloop (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 SymbolTableDatasymbolTableSnapshot () 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 VarDefdef (const std::string &name) const =0
 
virtual Ref< Bufferbuffer (const std::string &name) const =0
 
virtual bool hasLoop (const std::string &name) const =0
 
virtual const Forloop (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.
 

Detailed Description

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.

Member Typedef Documentation

◆ BaseClass

Member Function Documentation

◆ gen_constant()

void freetensor::ScalarPropConst::gen_constant ( const std::string &  name,
const std::optional< ScalarIndices > &  indices,
const Expr value 
)
protected

◆ intersect_constants_with()

bool freetensor::ScalarPropConst::intersect_constants_with ( std::unordered_map< std::string, std::map< ScalarIndices, Expr > >  other)
protected

Intersect currently recorded scalar constants with provided map.

This operation removes any record not found in other from the current map.

Parameters
otherThe constants map to intersect
Returns
true The current constants are changed by this intersection
false The current constants remain unchanged in this intersection

◆ kill_constant()

void freetensor::ScalarPropConst::kill_constant ( const std::string &  name,
const std::optional< ScalarIndices > &  indices 
)
protected

◆ kill_iter()

void freetensor::ScalarPropConst::kill_iter ( const std::string &  it_var)
protected

◆ kill_iter_dep_entry()

void freetensor::ScalarPropConst::kill_iter_dep_entry ( const std::string &  name,
const ScalarIndices indices 
)
protected

◆ tryToScalar()

std::optional< ScalarPropConst::ScalarIndices > freetensor::ScalarPropConst::tryToScalar ( const std::vector< Expr > &  exprs)
protected

Try converting indices' AST nodes to constant indices.

Parameters
exprsAST nodes for indices
Returns
std::optional<ScalarIndices> Indices to the scalar, if all indices are constant

◆ visit() [1/6]

Stmt freetensor::ScalarPropConst::visit ( const For op)
overrideprotectedvirtual

For: iterate until fixed-point reached.

Reimplemented from freetensor::Mutator.

◆ visit() [2/6]

Stmt freetensor::ScalarPropConst::visit ( const If op)
overrideprotectedvirtual

If: choose single branch if constant predicate, or intersect both branches

Reimplemented from freetensor::Mutator.

◆ visit() [3/6]

Expr freetensor::ScalarPropConst::visit ( const Load load_orig)
overrideprotectedvirtual

Load: read from constants map.

Reimplemented from freetensor::Mutator.

◆ visit() [4/6]

Stmt freetensor::ScalarPropConst::visit ( const ReduceTo op)
overrideprotectedvirtual

ReduceTo: kill & gen optionally.

Reimplemented from freetensor::Mutator.

◆ visit() [5/6]

Stmt freetensor::ScalarPropConst::visit ( const Store store_orig)
overrideprotectedvirtual

Store: kill & gen optionally.

Reimplemented from freetensor::Mutator.

◆ visit() [6/6]

Stmt freetensor::ScalarPropConst::visit ( const VarDef vd)
overrideprotectedvirtual

VarDef: maintain top level of the maps.

Reimplemented from freetensor::Mutator.

Member Data Documentation

◆ constants_

std::unordered_map<std::string, std::map<ScalarIndices, Expr> > freetensor::ScalarPropConst::constants_
protected

Scalar constants records, with first level map indexing var names and second indexing indices

◆ iter_dep_constants_

std::unordered_multimap<std::string, std::pair<std::string, ScalarIndices> > freetensor::ScalarPropConst::iter_dep_constants_
protected

Constant entries dependent on each iteration variable, mapping one iteration variable to multiple (var name, indices) pairs dependent on it


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