Halide 18.0.0
Halide compiler and libraries
Loading...
Searching...
No Matches
Halide::Internal::Simplify Class Reference

#include <Simplify_Internal.h>

Inheritance diagram for Halide::Internal::Simplify:
Halide::Internal::VariadicVisitor< Simplify, Expr, Stmt >

Classes

struct  ExprInfo
 
struct  ScopedFact
 
struct  VarInfo
 

Public Member Functions

 Simplify (bool r, const Scope< Interval > *bi, const Scope< ModulusRemainder > *ai)
 
HALIDE_ALWAYS_INLINE void clear_expr_info (ExprInfo *b)
 
HALIDE_ALWAYS_INLINE Expr mutate (const Expr &e, ExprInfo *b)
 
Stmt mutate (const Stmt &s)
 
HALIDE_ALWAYS_INLINE bool may_simplify (const Type &t) const
 
HALIDE_ALWAYS_INLINE bool no_overflow_int (Type t)
 
HALIDE_ALWAYS_INLINE bool no_overflow_scalar_int (Type t)
 
HALIDE_ALWAYS_INLINE bool no_overflow (Type t)
 
void found_buffer_reference (const std::string &name, size_t dimensions=0)
 
bool const_float (const Expr &e, double *f)
 
bool const_int (const Expr &e, int64_t *i)
 
bool const_uint (const Expr &e, uint64_t *u)
 
HALIDE_ALWAYS_INLINE bool should_commute (const Expr &a, const Expr &b)
 
ScopedFact scoped_truth (const Expr &fact)
 
ScopedFact scoped_falsehood (const Expr &fact)
 
Stmt mutate_let_body (const Stmt &s, ExprInfo *)
 
Expr mutate_let_body (const Expr &e, ExprInfo *info)
 
template<typename T , typename Body >
Body simplify_let (const T *op, ExprInfo *info)
 
Expr visit (const IntImm *op, ExprInfo *info)
 
Expr visit (const UIntImm *op, ExprInfo *info)
 
Expr visit (const FloatImm *op, ExprInfo *info)
 
Expr visit (const StringImm *op, ExprInfo *info)
 
Expr visit (const Broadcast *op, ExprInfo *info)
 
Expr visit (const Cast *op, ExprInfo *info)
 
Expr visit (const Reinterpret *op, ExprInfo *info)
 
Expr visit (const Variable *op, ExprInfo *info)
 
Expr visit (const Add *op, ExprInfo *info)
 
Expr visit (const Sub *op, ExprInfo *info)
 
Expr visit (const Mul *op, ExprInfo *info)
 
Expr visit (const Div *op, ExprInfo *info)
 
Expr visit (const Mod *op, ExprInfo *info)
 
Expr visit (const Min *op, ExprInfo *info)
 
Expr visit (const Max *op, ExprInfo *info)
 
Expr visit (const EQ *op, ExprInfo *info)
 
Expr visit (const NE *op, ExprInfo *info)
 
Expr visit (const LT *op, ExprInfo *info)
 
Expr visit (const LE *op, ExprInfo *info)
 
Expr visit (const GT *op, ExprInfo *info)
 
Expr visit (const GE *op, ExprInfo *info)
 
Expr visit (const And *op, ExprInfo *info)
 
Expr visit (const Or *op, ExprInfo *info)
 
Expr visit (const Not *op, ExprInfo *info)
 
Expr visit (const Select *op, ExprInfo *info)
 
Expr visit (const Ramp *op, ExprInfo *info)
 
Stmt visit (const IfThenElse *op)
 
Expr visit (const Load *op, ExprInfo *info)
 
Expr visit (const Call *op, ExprInfo *info)
 
Expr visit (const Shuffle *op, ExprInfo *info)
 
Expr visit (const VectorReduce *op, ExprInfo *info)
 
Expr visit (const Let *op, ExprInfo *info)
 
Stmt visit (const LetStmt *op)
 
Stmt visit (const AssertStmt *op)
 
Stmt visit (const For *op)
 
Stmt visit (const Provide *op)
 
Stmt visit (const Store *op)
 
Stmt visit (const Allocate *op)
 
Stmt visit (const Evaluate *op)
 
Stmt visit (const ProducerConsumer *op)
 
Stmt visit (const Block *op)
 
Stmt visit (const Realize *op)
 
Stmt visit (const Prefetch *op)
 
Stmt visit (const Free *op)
 
Stmt visit (const Acquire *op)
 
Stmt visit (const Fork *op)
 
Stmt visit (const Atomic *op)
 
Stmt visit (const HoistedStorage *op)
 
std::pair< std::vector< Expr >, boolmutate_with_changes (const std::vector< Expr > &old_exprs)
 
- Public Member Functions inherited from Halide::Internal::VariadicVisitor< Simplify, Expr, Stmt >
HALIDE_ALWAYS_INLINE Stmt dispatch (const Stmt &s, Args &&...args)
 
HALIDE_ALWAYS_INLINE Stmt dispatch (Stmt &&s, Args &&...args)
 
HALIDE_ALWAYS_INLINE Expr dispatch (const Expr &e, Args &&...args)
 
HALIDE_ALWAYS_INLINE Expr dispatch (Expr &&e, Args &&...args)
 

Public Attributes

bool remove_dead_code
 
bool no_float_simplify = false
 
Scope< VarInfovar_info
 
Scope< ExprInfobounds_and_alignment_info
 
IRMatcher::Wild< 0 > x
 
IRMatcher::Wild< 1 > y
 
IRMatcher::Wild< 2 > z
 
IRMatcher::Wild< 3 > w
 
IRMatcher::Wild< 4 > u
 
IRMatcher::Wild< 5 > v
 
IRMatcher::WildConst< 0 > c0
 
IRMatcher::WildConst< 1 > c1
 
IRMatcher::WildConst< 2 > c2
 
IRMatcher::WildConst< 3 > c3
 
IRMatcher::WildConst< 4 > c4
 
IRMatcher::WildConst< 5 > c5
 
bool in_vector_loop = false
 
bool in_unreachable = false
 
std::set< Expr, IRDeepComparetruths
 
std::set< Expr, IRDeepComparefalsehoods
 

Detailed Description

Definition at line 33 of file Simplify_Internal.h.

Constructor & Destructor Documentation

◆ Simplify()

Halide::Internal::Simplify::Simplify ( bool  r,
const Scope< Interval > *  bi,
const Scope< ModulusRemainder > *  ai 
)

Member Function Documentation

◆ clear_expr_info()

HALIDE_ALWAYS_INLINE void Halide::Internal::Simplify::clear_expr_info ( ExprInfo b)
inline

Definition at line 131 of file Simplify_Internal.h.

◆ mutate() [1/2]

HALIDE_ALWAYS_INLINE Expr Halide::Internal::Simplify::mutate ( const Expr e,
ExprInfo b 
)
inline

◆ mutate() [2/2]

Stmt Halide::Internal::Simplify::mutate ( const Stmt s)
inline

◆ may_simplify()

HALIDE_ALWAYS_INLINE bool Halide::Internal::Simplify::may_simplify ( const Type t) const
inline

Definition at line 203 of file Simplify_Internal.h.

References Halide::Type::is_float(), and no_float_simplify.

◆ no_overflow_int()

HALIDE_ALWAYS_INLINE bool Halide::Internal::Simplify::no_overflow_int ( Type  t)
inline

Definition at line 209 of file Simplify_Internal.h.

References Halide::Type::bits(), and Halide::Type::is_int().

Referenced by no_overflow(), and no_overflow_scalar_int().

◆ no_overflow_scalar_int()

HALIDE_ALWAYS_INLINE bool Halide::Internal::Simplify::no_overflow_scalar_int ( Type  t)
inline

Definition at line 214 of file Simplify_Internal.h.

References Halide::Type::is_scalar(), and no_overflow_int().

◆ no_overflow()

HALIDE_ALWAYS_INLINE bool Halide::Internal::Simplify::no_overflow ( Type  t)
inline

◆ found_buffer_reference()

void Halide::Internal::Simplify::found_buffer_reference ( const std::string &  name,
size_t  dimensions = 0 
)

◆ const_float()

bool Halide::Internal::Simplify::const_float ( const Expr e,
double f 
)

◆ const_int()

bool Halide::Internal::Simplify::const_int ( const Expr e,
int64_t i 
)

◆ const_uint()

bool Halide::Internal::Simplify::const_uint ( const Expr e,
uint64_t u 
)

◆ should_commute()

HALIDE_ALWAYS_INLINE bool Halide::Internal::Simplify::should_commute ( const Expr a,
const Expr b 
)
inline

◆ scoped_truth()

ScopedFact Halide::Internal::Simplify::scoped_truth ( const Expr fact)
inline

◆ scoped_falsehood()

ScopedFact Halide::Internal::Simplify::scoped_falsehood ( const Expr fact)
inline

◆ mutate_let_body() [1/2]

Stmt Halide::Internal::Simplify::mutate_let_body ( const Stmt s,
ExprInfo  
)
inline

Definition at line 331 of file Simplify_Internal.h.

References Halide::cast(), and mutate().

◆ mutate_let_body() [2/2]

Expr Halide::Internal::Simplify::mutate_let_body ( const Expr e,
ExprInfo info 
)
inline

Definition at line 334 of file Simplify_Internal.h.

References Halide::cast(), and mutate().

◆ simplify_let()

template<typename T , typename Body >
Body Halide::Internal::Simplify::simplify_let ( const T *  op,
ExprInfo info 
)

◆ visit() [1/48]

Expr Halide::Internal::Simplify::visit ( const IntImm op,
ExprInfo info 
)

◆ visit() [2/48]

Expr Halide::Internal::Simplify::visit ( const UIntImm op,
ExprInfo info 
)

◆ visit() [3/48]

Expr Halide::Internal::Simplify::visit ( const FloatImm op,
ExprInfo info 
)

◆ visit() [4/48]

Expr Halide::Internal::Simplify::visit ( const StringImm op,
ExprInfo info 
)

◆ visit() [5/48]

Expr Halide::Internal::Simplify::visit ( const Broadcast op,
ExprInfo info 
)

◆ visit() [6/48]

Expr Halide::Internal::Simplify::visit ( const Cast op,
ExprInfo info 
)

◆ visit() [7/48]

Expr Halide::Internal::Simplify::visit ( const Reinterpret op,
ExprInfo info 
)

◆ visit() [8/48]

Expr Halide::Internal::Simplify::visit ( const Variable op,
ExprInfo info 
)

◆ visit() [9/48]

Expr Halide::Internal::Simplify::visit ( const Add op,
ExprInfo info 
)

◆ visit() [10/48]

Expr Halide::Internal::Simplify::visit ( const Sub op,
ExprInfo info 
)

◆ visit() [11/48]

Expr Halide::Internal::Simplify::visit ( const Mul op,
ExprInfo info 
)

◆ visit() [12/48]

Expr Halide::Internal::Simplify::visit ( const Div op,
ExprInfo info 
)

◆ visit() [13/48]

Expr Halide::Internal::Simplify::visit ( const Mod op,
ExprInfo info 
)

◆ visit() [14/48]

Expr Halide::Internal::Simplify::visit ( const Min op,
ExprInfo info 
)

◆ visit() [15/48]

Expr Halide::Internal::Simplify::visit ( const Max op,
ExprInfo info 
)

◆ visit() [16/48]

Expr Halide::Internal::Simplify::visit ( const EQ op,
ExprInfo info 
)

◆ visit() [17/48]

Expr Halide::Internal::Simplify::visit ( const NE op,
ExprInfo info 
)

◆ visit() [18/48]

Expr Halide::Internal::Simplify::visit ( const LT op,
ExprInfo info 
)

◆ visit() [19/48]

Expr Halide::Internal::Simplify::visit ( const LE op,
ExprInfo info 
)

◆ visit() [20/48]

Expr Halide::Internal::Simplify::visit ( const GT op,
ExprInfo info 
)

◆ visit() [21/48]

Expr Halide::Internal::Simplify::visit ( const GE op,
ExprInfo info 
)

◆ visit() [22/48]

Expr Halide::Internal::Simplify::visit ( const And op,
ExprInfo info 
)

◆ visit() [23/48]

Expr Halide::Internal::Simplify::visit ( const Or op,
ExprInfo info 
)

◆ visit() [24/48]

Expr Halide::Internal::Simplify::visit ( const Not op,
ExprInfo info 
)

◆ visit() [25/48]

Expr Halide::Internal::Simplify::visit ( const Select op,
ExprInfo info 
)

◆ visit() [26/48]

Expr Halide::Internal::Simplify::visit ( const Ramp op,
ExprInfo info 
)

◆ visit() [27/48]

Stmt Halide::Internal::Simplify::visit ( const IfThenElse op)

◆ visit() [28/48]

Expr Halide::Internal::Simplify::visit ( const Load op,
ExprInfo info 
)

◆ visit() [29/48]

Expr Halide::Internal::Simplify::visit ( const Call op,
ExprInfo info 
)

◆ visit() [30/48]

Expr Halide::Internal::Simplify::visit ( const Shuffle op,
ExprInfo info 
)

◆ visit() [31/48]

Expr Halide::Internal::Simplify::visit ( const VectorReduce op,
ExprInfo info 
)

◆ visit() [32/48]

Expr Halide::Internal::Simplify::visit ( const Let op,
ExprInfo info 
)

◆ visit() [33/48]

Stmt Halide::Internal::Simplify::visit ( const LetStmt op)

◆ visit() [34/48]

Stmt Halide::Internal::Simplify::visit ( const AssertStmt op)

◆ visit() [35/48]

Stmt Halide::Internal::Simplify::visit ( const For op)

◆ visit() [36/48]

Stmt Halide::Internal::Simplify::visit ( const Provide op)

◆ visit() [37/48]

Stmt Halide::Internal::Simplify::visit ( const Store op)

◆ visit() [38/48]

Stmt Halide::Internal::Simplify::visit ( const Allocate op)

◆ visit() [39/48]

Stmt Halide::Internal::Simplify::visit ( const Evaluate op)

◆ visit() [40/48]

Stmt Halide::Internal::Simplify::visit ( const ProducerConsumer op)

◆ visit() [41/48]

Stmt Halide::Internal::Simplify::visit ( const Block op)

◆ visit() [42/48]

Stmt Halide::Internal::Simplify::visit ( const Realize op)

◆ visit() [43/48]

Stmt Halide::Internal::Simplify::visit ( const Prefetch op)

◆ visit() [44/48]

Stmt Halide::Internal::Simplify::visit ( const Free op)

◆ visit() [45/48]

Stmt Halide::Internal::Simplify::visit ( const Acquire op)

◆ visit() [46/48]

Stmt Halide::Internal::Simplify::visit ( const Fork op)

◆ visit() [47/48]

Stmt Halide::Internal::Simplify::visit ( const Atomic op)

◆ visit() [48/48]

Stmt Halide::Internal::Simplify::visit ( const HoistedStorage op)

◆ mutate_with_changes()

std::pair< std::vector< Expr >, bool > Halide::Internal::Simplify::mutate_with_changes ( const std::vector< Expr > &  old_exprs)

Member Data Documentation

◆ remove_dead_code

bool Halide::Internal::Simplify::remove_dead_code

Definition at line 199 of file Simplify_Internal.h.

◆ no_float_simplify

bool Halide::Internal::Simplify::no_float_simplify = false

Definition at line 200 of file Simplify_Internal.h.

Referenced by may_simplify().

◆ var_info

Scope<VarInfo> Halide::Internal::Simplify::var_info

Definition at line 230 of file Simplify_Internal.h.

◆ bounds_and_alignment_info

Scope<ExprInfo> Halide::Internal::Simplify::bounds_and_alignment_info

Definition at line 233 of file Simplify_Internal.h.

◆ x

IRMatcher::Wild<0> Halide::Internal::Simplify::x

Definition at line 236 of file Simplify_Internal.h.

◆ y

IRMatcher::Wild<1> Halide::Internal::Simplify::y

Definition at line 237 of file Simplify_Internal.h.

◆ z

IRMatcher::Wild<2> Halide::Internal::Simplify::z

Definition at line 238 of file Simplify_Internal.h.

◆ w

IRMatcher::Wild<3> Halide::Internal::Simplify::w

Definition at line 239 of file Simplify_Internal.h.

◆ u

IRMatcher::Wild<4> Halide::Internal::Simplify::u

Definition at line 240 of file Simplify_Internal.h.

◆ v

IRMatcher::Wild<5> Halide::Internal::Simplify::v

Definition at line 241 of file Simplify_Internal.h.

◆ c0

IRMatcher::WildConst<0> Halide::Internal::Simplify::c0

Definition at line 242 of file Simplify_Internal.h.

◆ c1

IRMatcher::WildConst<1> Halide::Internal::Simplify::c1

Definition at line 243 of file Simplify_Internal.h.

◆ c2

IRMatcher::WildConst<2> Halide::Internal::Simplify::c2

Definition at line 244 of file Simplify_Internal.h.

◆ c3

IRMatcher::WildConst<3> Halide::Internal::Simplify::c3

Definition at line 245 of file Simplify_Internal.h.

◆ c4

IRMatcher::WildConst<4> Halide::Internal::Simplify::c4

Definition at line 246 of file Simplify_Internal.h.

◆ c5

IRMatcher::WildConst<5> Halide::Internal::Simplify::c5

Definition at line 247 of file Simplify_Internal.h.

◆ in_vector_loop

bool Halide::Internal::Simplify::in_vector_loop = false

Definition at line 252 of file Simplify_Internal.h.

◆ in_unreachable

bool Halide::Internal::Simplify::in_unreachable = false

Definition at line 255 of file Simplify_Internal.h.

◆ truths

std::set<Expr, IRDeepCompare> Halide::Internal::Simplify::truths

Definition at line 287 of file Simplify_Internal.h.

◆ falsehoods

std::set<Expr, IRDeepCompare> Halide::Internal::Simplify::falsehoods

Definition at line 287 of file Simplify_Internal.h.


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