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

#include <comp_unique_bounds_combination.h>

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

Classes

class  Bound
 

Public Member Functions

 CompUniqueBoundsCombination (const CompTransientBoundsInterface &transients)
 
Ref< CompUniqueBounds::BoundgetBound (const Expr &op) override
 
bool alwaysLT (const Expr &lhs, const Expr &rhs) override
 
bool alwaysLE (const Expr &lhs, const Expr &rhs) override
 
std::pair< Expr, ExprunionBounds (const std::vector< Ref< CompUniqueBounds::Bound > > &bounds) override
 
- Public Member Functions inherited from freetensor::CompUniqueBounds
 CompUniqueBounds (const CompTransientBoundsInterface &transients)
 
virtual ~CompUniqueBounds ()
 
virtual Ref< BoundgetBound (const Expr &op)=0
 
int64_t getIntLower (const Expr &op)
 
int64_t getIntUpper (const Expr &op)
 
std::optional< int64_t > getInt (const Expr &op)
 
virtual bool alwaysLT (const Expr &lhs, const Expr &rhs)=0
 
virtual bool alwaysLE (const Expr &lhs, const Expr &rhs)=0
 
virtual std::pair< Expr, ExprunionBounds (const std::vector< Ref< Bound > > &bounds)=0
 
- Public Member Functions inherited from freetensor::Visitor
virtual ~Visitor ()
 
virtual void operator() (const AST &op) final
 

Protected Member Functions

LowerBoundsList getLower (const Expr &op)
 
UpperBoundsList getUpper (const Expr &op)
 
template<class T >
void setLower (const Expr &op, T &&list)
 
template<class T >
void setUpper (const Expr &op, T &&list)
 
void visitExpr (const Expr &op) override
 
void visit (const Var &op) override
 
void visit (const Load &op) override
 
void visit (const Cast &op) override
 
void visit (const Intrinsic &op) override
 
void visit (const IntConst &op) override
 
void visit (const Add &op) override
 
void visit (const Sub &op) override
 
void visit (const Mul &op) override
 
void visit (const Square &op) override
 
void visit (const FloorDiv &op) override
 
void visit (const CeilDiv &op) override
 
void visit (const Mod &op) override
 
void visit (const Min &op) override
 
void visit (const Max &op) override
 
void visit (const IfExpr &op) override
 
void updLower (LowerBoundsList &list, const LowerBound &bound) const
 
void updUpper (UpperBoundsList &list, const UpperBound &bound) const
 
- Protected Member Functions inherited from freetensor::Visitor
virtual void visitExpr (const Expr &op)
 
virtual void visitStmt (const Stmt &op)
 
virtual void visit (const Any &op)
 
virtual void visit (const AnyExpr &op)
 
virtual void visit (const Func &op)
 
virtual void visit (const StmtSeq &op)
 
virtual void visit (const VarDef &op)
 
virtual void visit (const Var &op)
 
virtual void visit (const Store &op)
 
virtual void visit (const Alloc &op)
 
virtual void visit (const Free &op)
 
virtual void visit (const Load &op)
 
virtual void visit (const ReduceTo &op)
 
virtual void visit (const IntConst &op)
 
virtual void visit (const FloatConst &op)
 
virtual void visit (const BoolConst &op)
 
virtual void visit (const Add &op)
 
virtual void visit (const Sub &op)
 
virtual void visit (const Mul &op)
 
virtual void visit (const RealDiv &op)
 
virtual void visit (const FloorDiv &op)
 
virtual void visit (const CeilDiv &op)
 
virtual void visit (const RoundTowards0Div &op)
 
virtual void visit (const Mod &op)
 
virtual void visit (const Remainder &op)
 
virtual void visit (const Min &op)
 
virtual void visit (const Max &op)
 
virtual void visit (const LT &op)
 
virtual void visit (const LE &op)
 
virtual void visit (const GT &op)
 
virtual void visit (const GE &op)
 
virtual void visit (const EQ &op)
 
virtual void visit (const NE &op)
 
virtual void visit (const LAnd &op)
 
virtual void visit (const LOr &op)
 
virtual void visit (const LNot &op)
 
virtual void visit (const Sqrt &op)
 
virtual void visit (const Exp &op)
 
virtual void visit (const Ln &op)
 
virtual void visit (const Square &op)
 
virtual void visit (const Sigmoid &op)
 
virtual void visit (const Sin &op)
 
virtual void visit (const Cos &op)
 
virtual void visit (const Tan &op)
 
virtual void visit (const Tanh &op)
 
virtual void visit (const Abs &op)
 
virtual void visit (const Floor &op)
 
virtual void visit (const Ceil &op)
 
virtual void visit (const Unbound &op)
 
virtual void visit (const For &op)
 
virtual void visit (const If &op)
 
virtual void visit (const Assert &op)
 
virtual void visit (const Assume &op)
 
virtual void visit (const IfExpr &op)
 
virtual void visit (const Cast &op)
 
virtual void visit (const Intrinsic &op)
 
virtual void visit (const Eval &op)
 
virtual void visit (const MatMul &op)
 
virtual void visit (const MarkVersion &op)
 
virtual void visit (const LoadAtVersion &op)
 

Additional Inherited Members

- Public Types inherited from freetensor::CompUniqueBounds
enum class  BoundType { Combination , Presburger }
 
- Public Types inherited from freetensor::Visitor
typedef void ExprRetType
 
typedef void StmtRetType
 
- Protected Attributes inherited from freetensor::CompUniqueBounds
const CompTransientBoundsInterfacetransients_
 

Detailed Description

Compute bounds of each UNIQUE INTEGER (sub)expression

E.g.

if (x < 2) {
... = x;
}
... = x;

Two UNIQUE expressions x have different upper bounds

For each statements in the AST, a corresponding instance of this class should be created to deal with all (sub)expressions in the statement, so as to distinguish different x sites in the example above

This pass is not accurate. Simplifying passes using this analysis may need to run for multiple rounds

Constructor & Destructor Documentation

◆ CompUniqueBoundsCombination()

freetensor::CompUniqueBoundsCombination::CompUniqueBoundsCombination ( const CompTransientBoundsInterface transients)
inline

Member Function Documentation

◆ alwaysLE()

bool freetensor::CompUniqueBoundsCombination::alwaysLE ( const Expr lhs,
const Expr rhs 
)
overridevirtual

◆ alwaysLT()

bool freetensor::CompUniqueBoundsCombination::alwaysLT ( const Expr lhs,
const Expr rhs 
)
overridevirtual

Check wheter lhs is always less than rhs

This is a fast non-recursing function, which check the less-than relation literally, without invoking CompUniqueBounds again, but maybe imprecise. For precise comparison, please use getLower or getUpper on makeSub(lhs, rhs)

Implements freetensor::CompUniqueBounds.

◆ getBound()

Ref< CompUniqueBounds::Bound > freetensor::CompUniqueBoundsCombination::getBound ( const Expr op)
overridevirtual

◆ getLower()

LowerBoundsList freetensor::CompUniqueBoundsCombination::getLower ( const Expr op)
inlineprotected

◆ getUpper()

UpperBoundsList freetensor::CompUniqueBoundsCombination::getUpper ( const Expr op)
inlineprotected

◆ setLower()

template<class T >
void freetensor::CompUniqueBoundsCombination::setLower ( const Expr op,
T &&  list 
)
inlineprotected

◆ setUpper()

template<class T >
void freetensor::CompUniqueBoundsCombination::setUpper ( const Expr op,
T &&  list 
)
inlineprotected

◆ unionBounds()

std::pair< Expr, Expr > freetensor::CompUniqueBoundsCombination::unionBounds ( const std::vector< Ref< CompUniqueBounds::Bound > > &  bounds)
overridevirtual

◆ updLower()

void freetensor::CompUniqueBoundsCombination::updLower ( LowerBoundsList &  list,
const LowerBound bound 
) const
protected

Insert a new bound to a list of bounds. But if the new bound is a trivial deduction of existing bounds in the list, it will not be inserted

◆ updUpper()

void freetensor::CompUniqueBoundsCombination::updUpper ( UpperBoundsList &  list,
const UpperBound bound 
) const
protected

◆ visit() [1/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Add op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [2/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Cast op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [3/15]

void freetensor::CompUniqueBoundsCombination::visit ( const CeilDiv op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [4/15]

void freetensor::CompUniqueBoundsCombination::visit ( const FloorDiv op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [5/15]

void freetensor::CompUniqueBoundsCombination::visit ( const IfExpr op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [6/15]

void freetensor::CompUniqueBoundsCombination::visit ( const IntConst op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [7/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Intrinsic op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [8/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Load op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [9/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Max op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [10/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Min op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [11/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Mod op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [12/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Mul op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [13/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Square op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [14/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Sub op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visit() [15/15]

void freetensor::CompUniqueBoundsCombination::visit ( const Var op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.

◆ visitExpr()

void freetensor::CompUniqueBoundsCombination::visitExpr ( const Expr op)
overrideprotectedvirtual

Reimplemented from freetensor::Visitor.


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