An alternative template-metaprogramming approach to expression matching. More...
Classes | |
| struct | bindings |
| struct | BinOp |
| struct | BroadcastOp |
| struct | CanProve |
| struct | CastOp |
| struct | CmpOp |
| struct | enable_if_pattern |
| struct | Fold |
| struct | IntLiteral |
| struct | Intrin |
| struct | IsConst |
| struct | IsFloat |
| struct | IsInt |
| struct | IsMaxValue |
| struct | IsMinValue |
| struct | IsScalar |
| struct | IsUInt |
| struct | LanesOf |
| struct | MatcherState |
| To save stack space, the matcher objects are largely stateless and immutable. More... | |
| struct | NegateOp |
| struct | NotOp |
| struct | Overflow |
| struct | Overflows |
| struct | RampOp |
| struct | Rewriter |
| struct | SelectOp |
| struct | SliceOp |
| struct | SpecificExpr |
| struct | VectorReduceOp |
| struct | Wild |
| struct | WildConst |
| struct | WildConstFloat |
| struct | WildConstInt |
| struct | WildConstUInt |
Functions | |
| HALIDE_NEVER_INLINE Expr | make_const_special_expr (halide_type_t ty) |
| HALIDE_ALWAYS_INLINE Expr | make_const_expr (halide_scalar_value_t val, halide_type_t ty) |
| bool | equal_helper (const BaseExprNode &a, const BaseExprNode &b) noexcept |
| HALIDE_ALWAYS_INLINE bool | equal (const BaseExprNode &a, const BaseExprNode &b) noexcept |
| std::ostream & | operator<< (std::ostream &s, const SpecificExpr &e) |
| template<int i> | |
| std::ostream & | operator<< (std::ostream &s, const WildConstInt< i > &c) |
| template<int i> | |
| std::ostream & | operator<< (std::ostream &s, const WildConstUInt< i > &c) |
| template<int i> | |
| std::ostream & | operator<< (std::ostream &s, const WildConstFloat< i > &c) |
| template<int i> | |
| std::ostream & | operator<< (std::ostream &s, const WildConst< i > &c) |
| template<int i> | |
| std::ostream & | operator<< (std::ostream &s, const Wild< i > &op) |
| HALIDE_ALWAYS_INLINE int64_t | unwrap (IntLiteral t) |
| template<typename T, typename = typename std::decay<T>::type::pattern_tag> | |
| HALIDE_ALWAYS_INLINE T | pattern_arg (T t) |
| HALIDE_ALWAYS_INLINE IntLiteral | pattern_arg (int64_t x) |
| template<typename T> | |
| HALIDE_ALWAYS_INLINE void | assert_is_lvalue_if_expr () |
| HALIDE_ALWAYS_INLINE SpecificExpr | pattern_arg (const Expr &e) |
| template<typename T, typename = typename std::decay<T>::type::pattern_tag, typename = typename std::enable_if<!std::is_same<typename std::decay<T>::type, SpecificExpr>::value>::type> | |
| HALIDE_ALWAYS_INLINE T | unwrap (T t) |
| HALIDE_ALWAYS_INLINE const BaseExprNode & | unwrap (const SpecificExpr &e) |
| std::ostream & | operator<< (std::ostream &s, const IntLiteral &op) |
| template<typename Op> | |
| int64_t | constant_fold_bin_op (halide_type_t &, int64_t, int64_t) noexcept |
| template<typename Op> | |
| uint64_t | constant_fold_bin_op (halide_type_t &, uint64_t, uint64_t) noexcept |
| template<typename Op> | |
| double | constant_fold_bin_op (halide_type_t &, double, double) noexcept |
| constexpr bool | commutative (IRNodeType t) |
| template<typename Op> | |
| uint64_t | constant_fold_cmp_op (int64_t, int64_t) noexcept |
| template<typename Op> | |
| uint64_t | constant_fold_cmp_op (uint64_t, uint64_t) noexcept |
| template<typename Op> | |
| uint64_t | constant_fold_cmp_op (double, double) noexcept |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Add, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Sub, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Mul, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Div, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< And, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Or, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Min, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Max, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const CmpOp< LE, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const CmpOp< LT, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const CmpOp< GE, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const CmpOp< GT, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const CmpOp< EQ, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const CmpOp< NE, A, B > &op) |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BinOp< Mod, A, B > &op) |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator+ (A &&a, B &&b) noexcept -> BinOp< Add, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | add (A &&a, B &&b) -> decltype(IRMatcher::operator+(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Add > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Add > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Add > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator- (A &&a, B &&b) noexcept -> BinOp< Sub, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | sub (A &&a, B &&b) -> decltype(IRMatcher::operator-(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Sub > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Sub > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Sub > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator* (A &&a, B &&b) noexcept -> BinOp< Mul, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | mul (A &&a, B &&b) -> decltype(IRMatcher::operator*(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Mul > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Mul > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Mul > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator/ (A &&a, B &&b) noexcept -> BinOp< Div, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | div (A &&a, B &&b) -> decltype(IRMatcher::operator/(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Div > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Div > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Div > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator% (A &&a, B &&b) noexcept -> BinOp< Mod, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | mod (A &&a, B &&b) -> decltype(IRMatcher::operator%(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Mod > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Mod > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Mod > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | min (A &&a, B &&b) noexcept -> BinOp< Min, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Min > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Min > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Min > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | max (A &&a, B &&b) noexcept -> BinOp< Max, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Max > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Max > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Max > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator< (A &&a, B &&b) noexcept -> CmpOp< LT, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | lt (A &&a, B &&b) -> decltype(IRMatcher::operator<(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< LT > (int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< LT > (uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< LT > (double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator> (A &&a, B &&b) noexcept -> CmpOp< GT, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | gt (A &&a, B &&b) -> decltype(IRMatcher::operator>(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< GT > (int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< GT > (uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< GT > (double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator<= (A &&a, B &&b) noexcept -> CmpOp< LE, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | le (A &&a, B &&b) -> decltype(IRMatcher::operator<=(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< LE > (int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< LE > (uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< LE > (double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator>= (A &&a, B &&b) noexcept -> CmpOp< GE, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | ge (A &&a, B &&b) -> decltype(IRMatcher::operator>=(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< GE > (int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< GE > (uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< GE > (double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator== (A &&a, B &&b) noexcept -> CmpOp< EQ, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | eq (A &&a, B &&b) -> decltype(IRMatcher::operator==(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< EQ > (int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< EQ > (uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< EQ > (double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator!= (A &&a, B &&b) noexcept -> CmpOp< NE, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | ne (A &&a, B &&b) -> decltype(IRMatcher::operator!=(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< NE > (int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< NE > (uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_cmp_op< NE > (double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator|| (A &&a, B &&b) noexcept -> BinOp< Or, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | or_op (A &&a, B &&b) -> decltype(IRMatcher::operator||(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< Or > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< Or > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< Or > (halide_type_t &t, double a, double b) noexcept |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | operator&& (A &&a, B &&b) noexcept -> BinOp< And, decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | and_op (A &&a, B &&b) -> decltype(IRMatcher::operator&&(a, b)) |
| template<> | |
| HALIDE_ALWAYS_INLINE int64_t | constant_fold_bin_op< And > (halide_type_t &t, int64_t a, int64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE uint64_t | constant_fold_bin_op< And > (halide_type_t &t, uint64_t a, uint64_t b) noexcept |
| template<> | |
| HALIDE_ALWAYS_INLINE double | constant_fold_bin_op< And > (halide_type_t &t, double a, double b) noexcept |
| constexpr uint32_t | bitwise_or_reduce () |
| template<typename... Args> | |
| constexpr uint32_t | bitwise_or_reduce (uint32_t first, Args... rest) |
| constexpr bool | and_reduce () |
| template<typename... Args> | |
| constexpr bool | and_reduce (bool first, Args... rest) |
| constexpr int | const_min (int a, int b) |
| template<typename... Args> | |
| std::ostream & | operator<< (std::ostream &s, const Intrin< Args... > &op) |
| template<typename... Args> | |
| HALIDE_ALWAYS_INLINE auto | intrin (Call::IntrinsicOp intrinsic_op, Args... args) noexcept -> Intrin< decltype(pattern_arg(args))... > |
| template<typename A, typename B> | |
| auto | widen_right_add (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | widen_right_mul (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | widen_right_sub (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | widening_add (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | widening_sub (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | widening_mul (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | saturating_add (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | saturating_sub (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A> | |
| auto | saturating_cast (const Type &t, A &&a) noexcept -> Intrin< decltype(pattern_arg(a))> |
| template<typename A, typename B> | |
| auto | halving_add (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | halving_sub (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | rounding_halving_add (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | shift_left (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | shift_right (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | rounding_shift_left (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B> | |
| auto | rounding_shift_right (A &&a, B &&b) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b))> |
| template<typename A, typename B, typename C> | |
| auto | mul_shift_right (A &&a, B &&b, C &&c) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b)), decltype(pattern_arg(c))> |
| template<typename A, typename B, typename C> | |
| auto | rounding_mul_shift_right (A &&a, B &&b, C &&c) noexcept -> Intrin< decltype(pattern_arg(a)), decltype(pattern_arg(b)), decltype(pattern_arg(c))> |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | operator! (A &&a) noexcept -> NotOp< decltype(pattern_arg(a))> |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | not_op (A &&a) -> decltype(IRMatcher::operator!(a)) |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const NotOp< A > &op) |
| template<typename C, typename T, typename F> | |
| std::ostream & | operator<< (std::ostream &s, const SelectOp< C, T, F > &op) |
| template<typename C, typename T, typename F> | |
| HALIDE_ALWAYS_INLINE auto | select (C &&c, T &&t, F &&f) noexcept -> SelectOp< decltype(pattern_arg(c)), decltype(pattern_arg(t)), decltype(pattern_arg(f))> |
| template<typename A, typename B> | |
| std::ostream & | operator<< (std::ostream &s, const BroadcastOp< A, B > &op) |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | broadcast (A &&a, B lanes) noexcept -> BroadcastOp< decltype(pattern_arg(a)), decltype(pattern_arg(lanes))> |
| template<typename A, typename B, typename C> | |
| std::ostream & | operator<< (std::ostream &s, const RampOp< A, B, C > &op) |
| template<typename A, typename B, typename C> | |
| HALIDE_ALWAYS_INLINE auto | ramp (A &&a, B &&b, C &&c) noexcept -> RampOp< decltype(pattern_arg(a)), decltype(pattern_arg(b)), decltype(pattern_arg(c))> |
| template<typename A, typename B, VectorReduce::Operator reduce_op> | |
| std::ostream & | operator<< (std::ostream &s, const VectorReduceOp< A, B, reduce_op > &op) |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | h_add (A &&a, B lanes) noexcept -> VectorReduceOp< decltype(pattern_arg(a)), decltype(pattern_arg(lanes)), VectorReduce::Add > |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | h_min (A &&a, B lanes) noexcept -> VectorReduceOp< decltype(pattern_arg(a)), decltype(pattern_arg(lanes)), VectorReduce::Min > |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | h_max (A &&a, B lanes) noexcept -> VectorReduceOp< decltype(pattern_arg(a)), decltype(pattern_arg(lanes)), VectorReduce::Max > |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | h_and (A &&a, B lanes) noexcept -> VectorReduceOp< decltype(pattern_arg(a)), decltype(pattern_arg(lanes)), VectorReduce::And > |
| template<typename A, typename B> | |
| HALIDE_ALWAYS_INLINE auto | h_or (A &&a, B lanes) noexcept -> VectorReduceOp< decltype(pattern_arg(a)), decltype(pattern_arg(lanes)), VectorReduce::Or > |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const NegateOp< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | operator- (A &&a) noexcept -> NegateOp< decltype(pattern_arg(a))> |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | negate (A &&a) -> decltype(IRMatcher::operator-(a)) |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const CastOp< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | cast (halide_type_t t, A &&a) noexcept -> CastOp< decltype(pattern_arg(a))> |
| template<typename Vec, typename Base, typename Stride, typename Lanes> | |
| std::ostream & | operator<< (std::ostream &s, const SliceOp< Vec, Base, Stride, Lanes > &op) |
| template<typename Vec, typename Base, typename Stride, typename Lanes> | |
| HALIDE_ALWAYS_INLINE auto | slice (Vec vec, Base base, Stride stride, Lanes lanes) noexcept -> SliceOp< decltype(pattern_arg(vec)), decltype(pattern_arg(base)), decltype(pattern_arg(stride)), decltype(pattern_arg(lanes))> |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | fold (A &&a) noexcept -> Fold< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const Fold< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | overflows (A &&a) noexcept -> Overflows< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const Overflows< A > &op) |
| std::ostream & | operator<< (std::ostream &s, const Overflow &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_const (A &&a) noexcept -> IsConst< decltype(pattern_arg(a))> |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_const (A &&a, int64_t value) noexcept -> IsConst< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const IsConst< A > &op) |
| template<typename A, typename Prover> | |
| HALIDE_ALWAYS_INLINE auto | can_prove (A &&a, Prover *p) noexcept -> CanProve< decltype(pattern_arg(a)), Prover > |
| template<typename A, typename Prover> | |
| std::ostream & | operator<< (std::ostream &s, const CanProve< A, Prover > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_float (A &&a) noexcept -> IsFloat< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const IsFloat< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_int (A &&a, int bits=0, int lanes=0) noexcept -> IsInt< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const IsInt< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_uint (A &&a, int bits=0, int lanes=0) noexcept -> IsUInt< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const IsUInt< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_scalar (A &&a) noexcept -> IsScalar< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const IsScalar< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_max_value (A &&a) noexcept -> IsMaxValue< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const IsMaxValue< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | is_min_value (A &&a) noexcept -> IsMinValue< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const IsMinValue< A > &op) |
| template<typename A> | |
| HALIDE_ALWAYS_INLINE auto | lanes_of (A &&a) noexcept -> LanesOf< decltype(pattern_arg(a))> |
| template<typename A> | |
| std::ostream & | operator<< (std::ostream &s, const LanesOf< A > &op) |
| template<typename Before, typename After, typename Predicate, typename = typename std::enable_if<std::decay<Before>::type::foldable && std::decay<After>::type::foldable>::type> | |
| HALIDE_NEVER_INLINE void | fuzz_test_rule (Before &&before, After &&after, Predicate &&pred, halide_type_t wildcard_type, halide_type_t output_type) noexcept |
| template<typename Before, typename After, typename Predicate, typename = typename std::enable_if<!(std::decay<Before>::type::foldable && std::decay<After>::type::foldable)>::type> | |
| HALIDE_ALWAYS_INLINE void | fuzz_test_rule (Before &&before, After &&after, Predicate &&pred, halide_type_t, halide_type_t, int dummy=0) noexcept |
| HALIDE_ALWAYS_INLINE bool | evaluate_predicate (bool x, MatcherState &) noexcept |
| template<typename Pattern, typename = typename enable_if_pattern<Pattern>::type> | |
| HALIDE_ALWAYS_INLINE bool | evaluate_predicate (Pattern p, MatcherState &state) |
| template<typename Instance, typename = typename enable_if_pattern<Instance>::type> | |
| HALIDE_ALWAYS_INLINE auto | rewriter (Instance instance, halide_type_t output_type, halide_type_t wildcard_type) noexcept -> Rewriter< decltype(pattern_arg(instance))> |
| Construct a rewriter for the given instance, which may be a pattern with concrete expressions as leaves, or just an expression. | |
| template<typename Instance, typename = typename enable_if_pattern<Instance>::type> | |
| HALIDE_ALWAYS_INLINE auto | rewriter (Instance instance, halide_type_t output_type) noexcept -> Rewriter< decltype(pattern_arg(instance))> |
| HALIDE_ALWAYS_INLINE auto | rewriter (const Expr &e, halide_type_t wildcard_type) noexcept -> Rewriter< decltype(pattern_arg(e))> |
| HALIDE_ALWAYS_INLINE auto | rewriter (const Expr &e) noexcept -> Rewriter< decltype(pattern_arg(e))> |
Variables | |
| constexpr int | max_wild = 6 |
An alternative template-metaprogramming approach to expression matching.
Potentially more efficient. We lift the expression pattern into a type, and then use force-inlined functions to generate efficient matching and reconstruction code for any pattern. Pattern elements are either one of the classes in the namespace IRMatcher, or are non-null Exprs (represented as BaseExprNode &).
Pattern elements that are fully specified by their pattern can be built into an expression using the make method. Some patterns, such as a broadcast that matches any number of lanes, don't have enough information to recreate an Expr.
|
inline |
Definition at line 149 of file IRMatch.h.
References HALIDE_NEVER_INLINE, halide_type_t::lanes, Halide::Internal::make_signed_integer_overflow(), Halide::Internal::IRMatcher::MatcherState::signed_integer_overflow, and Halide::Internal::IRMatcher::MatcherState::special_values_mask.
Referenced by Halide::Internal::IRMatcher::Overflow::make(), and make_const_expr().
| HALIDE_ALWAYS_INLINE Expr Halide::Internal::IRMatcher::make_const_expr | ( | halide_scalar_value_t | val, |
| halide_type_t | ty ) |
Definition at line 160 of file IRMatch.h.
References halide_type_t::code, halide_scalar_value_t::f64, halide_type_bfloat, halide_type_float, halide_type_int, halide_type_uint, halide_scalar_value_t::i64, halide_type_t::lanes, Halide::Internal::Broadcast::make(), Halide::Internal::FloatImm::make(), Halide::Internal::IntImm::make(), Halide::Internal::UIntImm::make(), make_const_special_expr(), Halide::Internal::IRMatcher::MatcherState::special_values_mask, halide_scalar_value_t::u, and halide_scalar_value_t::u64.
Referenced by fuzz_test_rule(), Halide::Internal::IRMatcher::Fold< A >::make(), Halide::Internal::IRMatcher::WildConst< i >::make(), Halide::Internal::IRMatcher::WildConstFloat< i >::make(), Halide::Internal::IRMatcher::WildConstInt< i >::make(), and Halide::Internal::IRMatcher::WildConstUInt< i >::make().
|
noexcept |
References HALIDE_ALWAYS_INLINE.
Referenced by equal().
|
noexcept |
Definition at line 195 of file IRMatch.h.
References equal_helper().
Referenced by Halide::Internal::IRMatcher::SpecificExpr::match(), and Halide::Internal::IRMatcher::Wild< i >::match().
|
inline |
Definition at line 229 of file IRMatch.h.
References Halide::Internal::IRMatcher::SpecificExpr::expr.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const WildConstInt< i > & | c ) |
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const WildConstUInt< i > & | c ) |
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const WildConstFloat< i > & | c ) |
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const WildConst< i > & | c ) |
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const Wild< i > & | op ) |
| HALIDE_ALWAYS_INLINE int64_t Halide::Internal::IRMatcher::unwrap | ( | IntLiteral | t | ) |
Definition at line 571 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and Halide::Internal::IRMatcher::IntLiteral::v.
Referenced by Halide::Internal::IRMatcher::BinOp< Op, A, B >::match(), Halide::Internal::IRMatcher::BroadcastOp< A, B >::match(), Halide::Internal::IRMatcher::CastOp< A >::match(), Halide::Internal::IRMatcher::CmpOp< Op, A, B >::match(), Halide::Internal::IRMatcher::NegateOp< A >::match(), Halide::Internal::IRMatcher::NotOp< A >::match(), Halide::Internal::IRMatcher::RampOp< A, B, C >::match(), Halide::Internal::IRMatcher::SelectOp< C, T, F >::match(), Halide::Internal::IRMatcher::VectorReduceOp< A, B, reduce_op >::match(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), and Halide::Internal::IRMatcher::Rewriter< Instance >::operator()().
| HALIDE_ALWAYS_INLINE T Halide::Internal::IRMatcher::pattern_arg | ( | T | t | ) |
Definition at line 579 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
Referenced by broadcast(), can_prove(), cast(), fold(), h_add(), h_and(), h_max(), h_min(), h_or(), halving_add(), halving_sub(), intrin(), is_const(), is_const(), is_float(), is_int(), is_max_value(), is_min_value(), is_scalar(), is_uint(), lanes_of(), max(), min(), mul_shift_right(), operator!(), operator!=(), operator%(), operator&&(), operator*(), operator+(), operator-(), operator-(), operator/(), operator<(), operator<=(), operator==(), operator>(), operator>=(), operator||(), overflows(), ramp(), rewriter(), rewriter(), rewriter(), rewriter(), rounding_halving_add(), rounding_mul_shift_right(), rounding_shift_left(), rounding_shift_right(), saturating_add(), saturating_cast(), saturating_sub(), select(), shift_left(), shift_right(), slice(), widen_right_add(), widen_right_mul(), widen_right_sub(), widening_add(), widening_mul(), and widening_sub().
| HALIDE_ALWAYS_INLINE IntLiteral Halide::Internal::IRMatcher::pattern_arg | ( | int64_t | x | ) |
| HALIDE_ALWAYS_INLINE void Halide::Internal::IRMatcher::assert_is_lvalue_if_expr | ( | ) |
Definition at line 588 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
Referenced by add(), broadcast(), can_prove(), cast(), fold(), h_add(), h_and(), h_max(), h_min(), h_or(), is_const(), is_const(), is_float(), is_int(), is_max_value(), is_min_value(), is_scalar(), is_uint(), lanes_of(), max(), min(), mod(), mul(), negate(), not_op(), operator!(), operator%(), operator*(), operator+(), operator-(), operator-(), operator/(), overflows(), ramp(), select(), and sub().
| HALIDE_ALWAYS_INLINE SpecificExpr Halide::Internal::IRMatcher::pattern_arg | ( | const Expr & | e | ) |
Definition at line 593 of file IRMatch.h.
References Halide::Expr::get(), and HALIDE_ALWAYS_INLINE.
| HALIDE_ALWAYS_INLINE T Halide::Internal::IRMatcher::unwrap | ( | T | t | ) |
Definition at line 604 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
| HALIDE_ALWAYS_INLINE const BaseExprNode & Halide::Internal::IRMatcher::unwrap | ( | const SpecificExpr & | e | ) |
Definition at line 609 of file IRMatch.h.
References Halide::Internal::IRMatcher::SpecificExpr::expr.
|
inline |
Definition at line 613 of file IRMatch.h.
References Halide::Internal::IRMatcher::IntLiteral::v.
|
noexcept |
|
noexcept |
|
noexcept |
|
constexpr |
Definition at line 627 of file IRMatch.h.
References Halide::Internal::Add, Halide::Internal::And, Halide::Internal::EQ, Halide::Internal::Max, Halide::Internal::Min, Halide::Internal::Mul, Halide::Internal::NE, and Halide::Internal::Or.
|
noexcept |
|
noexcept |
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Add, A, B > & | op ) |
Definition at line 843 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Sub, A, B > & | op ) |
Definition at line 849 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Mul, A, B > & | op ) |
Definition at line 855 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Div, A, B > & | op ) |
Definition at line 861 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< And, A, B > & | op ) |
Definition at line 867 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Or, A, B > & | op ) |
Definition at line 873 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Min, A, B > & | op ) |
Definition at line 879 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Max, A, B > & | op ) |
Definition at line 885 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CmpOp< LE, A, B > & | op ) |
Definition at line 891 of file IRMatch.h.
References Halide::Internal::IRMatcher::CmpOp< Op, A, B >::a, and Halide::Internal::IRMatcher::CmpOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CmpOp< LT, A, B > & | op ) |
Definition at line 897 of file IRMatch.h.
References Halide::Internal::IRMatcher::CmpOp< Op, A, B >::a, and Halide::Internal::IRMatcher::CmpOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CmpOp< GE, A, B > & | op ) |
Definition at line 903 of file IRMatch.h.
References Halide::Internal::IRMatcher::CmpOp< Op, A, B >::a, and Halide::Internal::IRMatcher::CmpOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CmpOp< GT, A, B > & | op ) |
Definition at line 909 of file IRMatch.h.
References Halide::Internal::IRMatcher::CmpOp< Op, A, B >::a, and Halide::Internal::IRMatcher::CmpOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CmpOp< EQ, A, B > & | op ) |
Definition at line 915 of file IRMatch.h.
References Halide::Internal::IRMatcher::CmpOp< Op, A, B >::a, and Halide::Internal::IRMatcher::CmpOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CmpOp< NE, A, B > & | op ) |
Definition at line 921 of file IRMatch.h.
References Halide::Internal::IRMatcher::CmpOp< Op, A, B >::a, and Halide::Internal::IRMatcher::CmpOp< Op, A, B >::b.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const BinOp< Mod, A, B > & | op ) |
Definition at line 927 of file IRMatch.h.
References Halide::Internal::IRMatcher::BinOp< Op, A, B >::a, and Halide::Internal::IRMatcher::BinOp< Op, A, B >::b.
|
noexcept |
Definition at line 933 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by add().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::add | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator+(a, b)) |
Definition at line 940 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and operator+().
|
noexcept |
Definition at line 947 of file IRMatch.h.
References Halide::Internal::add_would_overflow(), HALIDE_ALWAYS_INLINE, and Halide::Internal::IRMatcher::MatcherState::signed_integer_overflow.
Referenced by fuzz_test_rule().
|
noexcept |
Definition at line 955 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 961 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 966 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::sub | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator-(a, b)) |
Definition at line 973 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and operator-().
|
noexcept |
Definition at line 980 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, Halide::Internal::IRMatcher::MatcherState::signed_integer_overflow, and Halide::Internal::sub_would_overflow().
|
noexcept |
Definition at line 988 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 994 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 999 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by mul().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::mul | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator*(a, b)) |
Definition at line 1006 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and operator*().
|
noexcept |
Definition at line 1013 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, Halide::Internal::mul_would_overflow(), and Halide::Internal::IRMatcher::MatcherState::signed_integer_overflow.
|
noexcept |
Definition at line 1021 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1027 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1032 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by div().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::div | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator/(a, b)) |
Definition at line 1039 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator/().
|
noexcept |
Definition at line 1044 of file IRMatch.h.
References Halide::Internal::div_imp(), and HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1049 of file IRMatch.h.
References Halide::Internal::div_imp(), and HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1054 of file IRMatch.h.
References Halide::Internal::div_imp(), and HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1059 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by mod().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::mod | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator%(a, b)) |
Definition at line 1066 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and operator%().
|
noexcept |
Definition at line 1073 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and Halide::Internal::mod_imp().
|
noexcept |
Definition at line 1078 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and Halide::Internal::mod_imp().
|
noexcept |
Definition at line 1083 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and Halide::Internal::mod_imp().
|
noexcept |
Definition at line 1088 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 1095 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1100 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1105 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1110 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 1117 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1122 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1127 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1132 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by lt().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::lt | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator<(a, b)) |
Definition at line 1137 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator<().
|
noexcept |
Definition at line 1142 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1147 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1152 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1157 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by gt().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::gt | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator>(a, b)) |
Definition at line 1162 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator>().
|
noexcept |
Definition at line 1167 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1172 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1177 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1182 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by le().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::le | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator<=(a, b)) |
Definition at line 1187 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator<=().
|
noexcept |
Definition at line 1192 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1197 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1202 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1207 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by ge().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::ge | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator>=(a, b)) |
Definition at line 1212 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator>=().
|
noexcept |
Definition at line 1217 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1222 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1227 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1232 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by eq().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::eq | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator==(a, b)) |
Definition at line 1237 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator==().
|
noexcept |
Definition at line 1242 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1247 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1252 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1257 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by ne().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::ne | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator!=(a, b)) |
Definition at line 1262 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator!=().
|
noexcept |
Definition at line 1267 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1272 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1277 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1282 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by or_op().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::or_op | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator||(a, b)) |
Definition at line 1287 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator||().
|
noexcept |
Definition at line 1292 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1297 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1302 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1308 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by and_op().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::and_op | ( | A && | a, |
| B && | b ) -> decltype(IRMatcher::operator&&(a, b)) |
Definition at line 1313 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and operator&&().
|
noexcept |
Definition at line 1318 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1323 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
noexcept |
Definition at line 1328 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE.
|
inlineconstexpr |
Definition at line 1333 of file IRMatch.h.
Referenced by bitwise_or_reduce().
|
constexpr |
Definition at line 1338 of file IRMatch.h.
References bitwise_or_reduce().
|
inlineconstexpr |
Definition at line 1342 of file IRMatch.h.
Referenced by and_reduce().
|
constexpr |
Definition at line 1347 of file IRMatch.h.
References and_reduce().
|
constexpr |
Definition at line 1352 of file IRMatch.h.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const Intrin< Args... > & | op ) |
Definition at line 1526 of file IRMatch.h.
References Halide::Internal::IRMatcher::Intrin< Args >::intrin, and Halide::Internal::IRMatcher::Intrin< Args >::print_args().
|
noexcept |
Definition at line 1534 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 1539 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::widen_right_add.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1543 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::widen_right_mul.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1547 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::widen_right_sub.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1552 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::widening_add.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1556 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::widening_sub.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1560 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::widening_mul.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1564 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::saturating_add.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1568 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::saturating_sub.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1572 of file IRMatch.h.
References Halide::Internal::IRMatcher::Intrin< Args >::optional_type_hint, pattern_arg(), Halide::Internal::Call::saturating_cast, and Halide::Internal::Type.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1578 of file IRMatch.h.
References Halide::Internal::Call::halving_add, and pattern_arg().
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1582 of file IRMatch.h.
References Halide::Internal::Call::halving_sub, and pattern_arg().
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1586 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::rounding_halving_add.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1590 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::shift_left.
|
noexcept |
Definition at line 1594 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::shift_right.
|
noexcept |
Definition at line 1598 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::rounding_shift_left.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1602 of file IRMatch.h.
References pattern_arg(), and Halide::Internal::Call::rounding_shift_right.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1606 of file IRMatch.h.
References Halide::C, Halide::Internal::Call::mul_shift_right, and pattern_arg().
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1610 of file IRMatch.h.
References Halide::C, pattern_arg(), and Halide::Internal::Call::rounding_mul_shift_right.
Referenced by Halide::Internal::IRMatcher::Intrin< Args >::make().
|
noexcept |
Definition at line 1655 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by not_op().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::not_op | ( | A && | a | ) | -> decltype(IRMatcher::operator!(a)) |
Definition at line 1661 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and operator!().
|
inline |
Definition at line 1667 of file IRMatch.h.
References Halide::Internal::IRMatcher::NotOp< A >::a.
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const SelectOp< C, T, F > & | op ) |
Definition at line 1725 of file IRMatch.h.
References Halide::Internal::IRMatcher::SelectOp< C, T, F >::c, Halide::Internal::IRMatcher::SelectOp< C, T, F >::f, and Halide::Internal::IRMatcher::SelectOp< C, T, F >::t.
|
noexcept |
Definition at line 1731 of file IRMatch.h.
References assert_is_lvalue_if_expr(), Halide::C, HALIDE_ALWAYS_INLINE, and pattern_arg().
|
inline |
Definition at line 1798 of file IRMatch.h.
References Halide::Internal::IRMatcher::BroadcastOp< A, B >::a, and Halide::Internal::IRMatcher::BroadcastOp< A, B >::lanes.
|
noexcept |
Definition at line 1804 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const RampOp< A, B, C > & | op ) |
Definition at line 1862 of file IRMatch.h.
References Halide::Internal::IRMatcher::RampOp< A, B, C >::a, Halide::Internal::IRMatcher::RampOp< A, B, C >::b, and Halide::Internal::IRMatcher::RampOp< A, B, C >::lanes.
|
noexcept |
Definition at line 1868 of file IRMatch.h.
References assert_is_lvalue_if_expr(), Halide::C, HALIDE_ALWAYS_INLINE, and pattern_arg().
|
inline |
Definition at line 1920 of file IRMatch.h.
References Halide::Internal::IRMatcher::VectorReduceOp< A, B, reduce_op >::a, and Halide::Internal::IRMatcher::VectorReduceOp< A, B, reduce_op >::lanes.
|
noexcept |
Definition at line 1926 of file IRMatch.h.
References Halide::Internal::VectorReduce::Add, assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 1932 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, Halide::Internal::VectorReduce::Min, and pattern_arg().
|
noexcept |
Definition at line 1938 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, Halide::Internal::VectorReduce::Max, and pattern_arg().
|
noexcept |
Definition at line 1944 of file IRMatch.h.
References Halide::Internal::VectorReduce::And, assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 1950 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, Halide::Internal::VectorReduce::Or, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const NegateOp< A > & | op ) |
Definition at line 2020 of file IRMatch.h.
References Halide::Internal::IRMatcher::NegateOp< A >::a.
|
noexcept |
Definition at line 2026 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| HALIDE_ALWAYS_INLINE auto Halide::Internal::IRMatcher::negate | ( | A && | a | ) | -> decltype(IRMatcher::operator-(a)) |
Definition at line 2032 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and operator-().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CastOp< A > & | op ) |
Definition at line 2072 of file IRMatch.h.
References Halide::Internal::IRMatcher::CastOp< A >::a, and Halide::Internal::IRMatcher::CastOp< A >::t.
|
noexcept |
Definition at line 2078 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
Referenced by Halide::Internal::IRMatcher::CastOp< A >::make().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const SliceOp< Vec, Base, Stride, Lanes > & | op ) |
Definition at line 2135 of file IRMatch.h.
References Halide::Internal::IRMatcher::SliceOp< Vec, Base, Stride, Lanes >::base, Halide::Internal::IRMatcher::SliceOp< Vec, Base, Stride, Lanes >::lanes, Halide::Internal::IRMatcher::SliceOp< Vec, Base, Stride, Lanes >::stride, and Halide::Internal::IRMatcher::SliceOp< Vec, Base, Stride, Lanes >::vec.
|
noexcept |
Definition at line 2141 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 2190 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const Fold< A > & | op ) |
Definition at line 2196 of file IRMatch.h.
References Halide::Internal::IRMatcher::Fold< A >::a.
|
noexcept |
Definition at line 2227 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const Overflows< A > & | op ) |
Definition at line 2233 of file IRMatch.h.
References Halide::Internal::IRMatcher::Overflows< A >::a.
|
inline |
|
noexcept |
Definition at line 2309 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 2315 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const IsConst< A > & | op ) |
Definition at line 2321 of file IRMatch.h.
References Halide::Internal::IRMatcher::IsConst< A >::a, Halide::Internal::IRMatcher::IsConst< A >::check_v, and Halide::Internal::IRMatcher::IsConst< A >::v.
|
noexcept |
Definition at line 2357 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const CanProve< A, Prover > & | op ) |
Definition at line 2363 of file IRMatch.h.
References Halide::Internal::IRMatcher::CanProve< A, Prover >::a.
|
noexcept |
Definition at line 2394 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const IsFloat< A > & | op ) |
Definition at line 2400 of file IRMatch.h.
References Halide::Internal::IRMatcher::IsFloat< A >::a.
|
noexcept |
Definition at line 2432 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const IsInt< A > & | op ) |
Definition at line 2438 of file IRMatch.h.
References Halide::Internal::IRMatcher::IsInt< A >::a, Halide::Internal::IRMatcher::IsInt< A >::bits, and Halide::Internal::IRMatcher::IsInt< A >::lanes.
|
noexcept |
Definition at line 2477 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const IsUInt< A > & | op ) |
Definition at line 2483 of file IRMatch.h.
References Halide::Internal::IRMatcher::IsUInt< A >::a, Halide::Internal::IRMatcher::IsUInt< A >::bits, and Halide::Internal::IRMatcher::IsUInt< A >::lanes.
|
noexcept |
Definition at line 2521 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const IsScalar< A > & | op ) |
Definition at line 2527 of file IRMatch.h.
References Halide::Internal::IRMatcher::IsScalar< A >::a.
|
noexcept |
Definition at line 2562 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const IsMaxValue< A > & | op ) |
Definition at line 2568 of file IRMatch.h.
References Halide::Internal::IRMatcher::IsMaxValue< A >::a.
|
noexcept |
Definition at line 2605 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const IsMinValue< A > & | op ) |
Definition at line 2611 of file IRMatch.h.
References Halide::Internal::IRMatcher::IsMinValue< A >::a.
|
noexcept |
Definition at line 2642 of file IRMatch.h.
References assert_is_lvalue_if_expr(), HALIDE_ALWAYS_INLINE, and pattern_arg().
| std::ostream & Halide::Internal::IRMatcher::operator<< | ( | std::ostream & | s, |
| const LanesOf< A > & | op ) |
Definition at line 2648 of file IRMatch.h.
References Halide::Internal::IRMatcher::LanesOf< A >::a.
|
noexcept |
Definition at line 2659 of file IRMatch.h.
References constant_fold_bin_op< Add >(), evaluate_predicate(), halide_scalar_value_t::f64, Halide::Internal::IRMatcher::MatcherState::get_binding(), Halide::Internal::IRMatcher::MatcherState::get_bound_const(), HALIDE_NEVER_INLINE, halide_type_bfloat, halide_type_float, halide_type_int, halide_type_uint, halide_scalar_value_t::i64, internal_error, halide_type_t::lanes, Halide::Internal::make_const(), make_const_expr(), max_wild, Halide::Predicate, Halide::Internal::reinterpret_bits(), Halide::Internal::IRMatcher::MatcherState::set_binding(), Halide::Internal::IRMatcher::MatcherState::set_bound_const(), Halide::Internal::IRMatcher::MatcherState::special_values_mask, Halide::Internal::Type, halide_scalar_value_t::u, and halide_scalar_value_t::u64.
Referenced by Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), and Halide::Internal::IRMatcher::Rewriter< Instance >::operator()().
|
noexcept |
Definition at line 2784 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and Halide::Predicate.
|
noexcept |
Definition at line 2790 of file IRMatch.h.
Referenced by fuzz_test_rule(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), Halide::Internal::IRMatcher::Rewriter< Instance >::operator()(), and Halide::Internal::IRMatcher::Rewriter< Instance >::operator()().
| HALIDE_ALWAYS_INLINE bool Halide::Internal::IRMatcher::evaluate_predicate | ( | Pattern | p, |
| MatcherState & | state ) |
Definition at line 2796 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, halide_type_t::lanes, Halide::Internal::IRMatcher::MatcherState::special_values_mask, halide_scalar_value_t::u, and halide_scalar_value_t::u64.
|
noexcept |
Construct a rewriter for the given instance, which may be a pattern with concrete expressions as leaves, or just an expression.
The second optional argument (wildcard_type) is a hint as to what the type of the wildcards is likely to be. If omitted it uses the same type as the expression itself. They are not required to be this type, but the rule will only be tested for wildcards of that type when testing is enabled.
The rewriter can be used to check to see if the instance is one of some number of patterns and if so rewrite it into another form, using its operator() method. See Simplify.cpp for a bunch of example usage.
Important: Any Exprs in patterns are captured by reference, not by value, so ensure they outlive the rewriter.
Definition at line 2997 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 3003 of file IRMatch.h.
References HALIDE_ALWAYS_INLINE, and pattern_arg().
|
noexcept |
Definition at line 3008 of file IRMatch.h.
References pattern_arg().
|
noexcept |
Definition at line 3013 of file IRMatch.h.
References pattern_arg().
|
constexpr |
Definition at line 74 of file IRMatch.h.
Referenced by fuzz_test_rule(), Halide::Internal::IRMatcher::WildConst< i >::match(), Halide::Internal::IRMatcher::WildConst< i >::match(), Halide::Internal::IRMatcher::WildConstFloat< i >::match(), Halide::Internal::IRMatcher::WildConstInt< i >::match(), Halide::Internal::IRMatcher::WildConstInt< i >::match(), and Halide::Internal::IRMatcher::WildConstUInt< i >::match().