Halide 19.0.0
Halide compiler and libraries
|
Types in the halide type system. More...
#include <Type.h>
Public Member Functions | |
int | bytes () const |
The number of bytes required to store a single scalar value of this type. | |
Type () | |
Type (halide_type_code_t code, int bits, int lanes, const halide_handle_cplusplus_type *handle_type=nullptr) | |
Construct a runtime representation of a Halide type from: code: The fundamental type from an enum. | |
Type (const Type &that)=default | |
Trivial copy constructor. | |
Type & | operator= (const Type &that)=default |
Trivial copy assignment operator. | |
HALIDE_ALWAYS_INLINE | Type (const halide_type_t &that, const halide_handle_cplusplus_type *handle_type=nullptr) |
Type is a wrapper around halide_type_t with more methods for use inside the compiler. | |
HALIDE_ALWAYS_INLINE | operator halide_type_t () const |
Unwrap the runtime halide_type_t for use in runtime calls, etc. | |
HALIDE_ALWAYS_INLINE halide_type_code_t | code () const |
Return the underlying data type of an element as an enum value. | |
HALIDE_ALWAYS_INLINE int | bits () const |
Return the bit size of a single element of this type. | |
HALIDE_ALWAYS_INLINE int | lanes () const |
Return the number of vector elements in this type. | |
Type | with_code (halide_type_code_t new_code) const |
Return Type with same number of bits and lanes, but new_code for a type code. | |
Type | with_bits (int new_bits) const |
Return Type with same type code and lanes, but new_bits for the number of bits. | |
Type | with_lanes (int new_lanes) const |
Return Type with same type code and number of bits, but new_lanes for the number of vector lanes. | |
Type | widen () const |
Return Type with the same type code and number of lanes, but with at least twice as many bits. | |
Type | narrow () const |
Return Type with the same type code and number of lanes, but with at most half as many bits. | |
HALIDE_ALWAYS_INLINE bool | is_bool () const |
Is this type boolean (represented as UInt(1))? | |
HALIDE_ALWAYS_INLINE bool | is_vector () const |
Is this type a vector type? (lanes() != 1). | |
HALIDE_ALWAYS_INLINE bool | is_scalar () const |
Is this type a scalar type? (lanes() == 1). | |
HALIDE_ALWAYS_INLINE bool | is_float () const |
Is this type a floating point type (float or double). | |
HALIDE_ALWAYS_INLINE bool | is_bfloat () const |
Is this type a floating point type (float or double). | |
HALIDE_ALWAYS_INLINE bool | is_int () const |
Is this type a signed integer type? | |
HALIDE_ALWAYS_INLINE bool | is_uint () const |
Is this type an unsigned integer type? | |
HALIDE_ALWAYS_INLINE bool | is_int_or_uint () const |
Is this type an integer type of any sort? | |
HALIDE_ALWAYS_INLINE bool | is_handle () const |
Is this type an opaque handle type (void *) | |
HALIDE_ALWAYS_INLINE bool | can_overflow_int () const |
HALIDE_ALWAYS_INLINE bool | can_overflow () const |
bool | same_handle_type (const Type &other) const |
Check that the type name of two handles matches. | |
bool | operator== (const Type &other) const |
Compare two types for equality. | |
bool | operator!= (const Type &other) const |
Compare two types for inequality. | |
bool | operator== (const halide_type_t &other) const |
Compare two types for equality. | |
bool | operator!= (const halide_type_t &other) const |
Compare two types for inequality. | |
bool | operator< (const Type &other) const |
Compare ordering of two types so they can be used in certain containers and algorithms. | |
Type | element_of () const |
Produce the scalar type (that of a single element) of this vector type. | |
bool | can_represent (Type other) const |
Can this type represent all values of another type? | |
bool | can_represent (const Internal::ConstantInterval &in) const |
Can this type represent exactly all integer values of some constant integer range? | |
bool | can_represent (double x) const |
Can this type represent a particular constant? | |
bool | can_represent (int64_t x) const |
bool | can_represent (uint64_t x) const |
bool | is_max (uint64_t) const |
Check if an integer constant value is the maximum or minimum representable value for this type. | |
bool | is_max (int64_t) const |
bool | is_min (uint64_t) const |
bool | is_min (int64_t) const |
Expr | max () const |
Return an expression which is the maximum value of this type. | |
Expr | min () const |
Return an expression which is the minimum value of this type. | |
Public Attributes | |
const halide_handle_cplusplus_type * | handle_type = nullptr |
Type to be printed when declaring handles of this type. | |
Static Public Attributes | |
static const halide_type_code_t | Int = halide_type_int |
Aliases for halide_type_code_t values for legacy compatibility and to match the Halide internal C++ style. | |
static const halide_type_code_t | UInt = halide_type_uint |
static const halide_type_code_t | Float = halide_type_float |
static const halide_type_code_t | BFloat = halide_type_bfloat |
static const halide_type_code_t | Handle = halide_type_handle |
Types in the halide type system.
They can be ints, unsigned ints, or floats of various bit-widths (the 'bits' field). They can also be vectors of the same (by setting the 'lanes' field to something larger than one). Front-end code shouldn't use vector types. Instead vectorize a function.
|
inline |
Definition at line 304 of file Type.h.
Referenced by with_bits(), with_code(), and with_lanes().
|
inline |
Construct a runtime representation of a Halide type from: code: The fundamental type from an enum.
bits: The bit size of one element. lanes: The number of vector elements in the type.
Definition at line 312 of file Type.h.
References bits(), halide_type_t::bits, lanes(), halide_type_t::lanes, and user_assert.
|
default |
Trivial copy constructor.
|
inline |
Type is a wrapper around halide_type_t with more methods for use inside the compiler.
This simply constructs the wrapper around the runtime value.
|
inline |
The number of bytes required to store a single scalar value of this type.
Ignores vector lanes.
Definition at line 299 of file Type.h.
References bits().
Referenced by Halide::Internal::HexagonAlignmentAnalyzer::is_aligned(), and Halide::Internal::HexagonAlignmentAnalyzer::is_aligned().
|
inline |
Unwrap the runtime halide_type_t for use in runtime calls, etc.
Representation is exactly equivalent.
|
inline |
Return the underlying data type of an element as an enum value.
Definition at line 343 of file Type.h.
References halide_type_t::code.
Referenced by is_bfloat(), is_bool(), is_float(), is_handle(), is_int(), is_int_or_uint(), is_uint(), operator!=(), operator<(), operator==(), with_bits(), with_code(), and with_lanes().
|
inline |
Return the bit size of a single element of this type.
Definition at line 349 of file Type.h.
References halide_type_t::bits.
Referenced by bytes(), can_overflow_int(), Halide::Internal::Simplify::ExprInfo::cast_to(), Halide::Internal::eliminated_bool_type(), is_bool(), Halide::Internal::Cast::is_reinterpret(), Halide::Internal::IRMatcher::IsInt< A >::make_folded_const(), Halide::Internal::IRMatcher::IsUInt< A >::make_folded_const(), narrow(), Halide::Internal::Simplify::no_overflow_int(), Type(), widen(), with_bits(), with_code(), and with_lanes().
|
inline |
Return the number of vector elements in this type.
Definition at line 355 of file Type.h.
References halide_type_t::lanes.
Referenced by Halide::ConciseCasts::bf16(), Halide::ConciseCasts::f16(), Halide::ConciseCasts::f32(), Halide::ConciseCasts::f64(), Halide::ConciseCasts::i16(), Halide::ConciseCasts::i16_sat(), Halide::ConciseCasts::i32(), Halide::ConciseCasts::i32_sat(), Halide::ConciseCasts::i64(), Halide::ConciseCasts::i64_sat(), Halide::ConciseCasts::i8(), Halide::ConciseCasts::i8_sat(), is_scalar(), is_vector(), Halide::Internal::IRMatcher::CanProve< A, Prover >::make_folded_const(), Halide::Internal::IRMatcher::IsFloat< A >::make_folded_const(), Halide::Internal::IRMatcher::IsInt< A >::make_folded_const(), Halide::Internal::IRMatcher::IsScalar< A >::make_folded_const(), Halide::Internal::IRMatcher::IsUInt< A >::make_folded_const(), Halide::Internal::IRMatcher::LanesOf< A >::make_folded_const(), Halide::Internal::IRMatcher::SliceOp< Vec, Base, Stride, Lanes >::match(), Halide::Internal::IRMatcher::VectorReduceOp< A, B, reduce_op >::match(), Type(), Halide::ConciseCasts::u16(), Halide::ConciseCasts::u16_sat(), Halide::ConciseCasts::u32(), Halide::ConciseCasts::u32_sat(), Halide::ConciseCasts::u64(), Halide::ConciseCasts::u64_sat(), Halide::ConciseCasts::u8(), Halide::ConciseCasts::u8_sat(), with_bits(), and with_code().
|
inline |
Return Type with same number of bits and lanes, but new_code for a type code.
Definition at line 360 of file Type.h.
References bits(), code(), handle_type, lanes(), and Type().
Referenced by Halide::Internal::eliminated_bool_type().
|
inline |
Return Type with same type code and lanes, but new_bits for the number of bits.
Definition at line 366 of file Type.h.
References bits(), code(), handle_type, lanes(), and Type().
Referenced by Halide::Internal::eliminated_bool_type(), narrow(), and widen().
|
inline |
Return Type with same type code and number of bits, but new_lanes for the number of vector lanes.
Definition at line 373 of file Type.h.
References bits(), code(), handle_type, and Type().
Referenced by element_of().
|
inline |
Return Type with the same type code and number of lanes, but with at least twice as many bits.
Definition at line 378 of file Type.h.
References bits(), and with_bits().
Referenced by Halide::Internal::IRMatcher::WidenOp< A >::make(), and Halide::Internal::IRMatcher::WidenOp< A >::match().
|
inline |
Return Type with the same type code and number of lanes, but with at most half as many bits.
Definition at line 388 of file Type.h.
References bits(), internal_assert, and with_bits().
|
inline |
|
inline |
Is this type a vector type? (lanes() != 1).
TODO(abadams): Decide what to do for lanes() == 0.
Definition at line 410 of file Type.h.
References lanes().
Referenced by Halide::Internal::eliminated_bool_type(), and Halide::Internal::HexagonAlignmentAnalyzer::is_aligned_impl().
|
inline |
Is this type a scalar type? (lanes() == 1).
TODO(abadams): Decide what to do for lanes() == 0.
Definition at line 417 of file Type.h.
References lanes().
Referenced by Halide::Internal::IRMatcher::IsScalar< A >::make_folded_const(), and Halide::Internal::Simplify::no_overflow_scalar_int().
|
inline |
Is this type a floating point type (float or double).
Definition at line 423 of file Type.h.
References BFloat, code(), and Float.
Referenced by Halide::Internal::div_imp(), Halide::Internal::IRMatcher::IsFloat< A >::make_folded_const(), Halide::Internal::Simplify::may_simplify(), Halide::Internal::mod_imp(), and Halide::Internal::Simplify::no_overflow().
|
inline |
|
inline |
Is this type a signed integer type?
Definition at line 435 of file Type.h.
Referenced by can_overflow_int(), Halide::Internal::Simplify::ExprInfo::cast_to(), Halide::Internal::div_imp(), Halide::Internal::IRMatcher::IsInt< A >::make_folded_const(), Halide::Internal::mod_imp(), and Halide::Internal::Simplify::no_overflow_int().
|
inline |
Is this type an unsigned integer type?
Definition at line 441 of file Type.h.
Referenced by can_overflow(), Halide::Internal::Simplify::ExprInfo::cast_to(), and Halide::Internal::IRMatcher::IsUInt< A >::make_folded_const().
|
inline |
|
inline |
Is this type an opaque handle type (void *)
|
inline |
Definition at line 459 of file Type.h.
References bits(), and is_int().
Referenced by can_overflow().
|
inline |
Definition at line 465 of file Type.h.
References can_overflow_int(), and is_uint().
bool Halide::Type::same_handle_type | ( | const Type & | other | ) | const |
Check that the type name of two handles matches.
Referenced by operator!=(), and operator==().
|
inline |
Compare two types for equality.
Definition at line 473 of file Type.h.
References code(), Handle, and same_handle_type().
|
inline |
Compare two types for inequality.
Definition at line 478 of file Type.h.
References code(), Handle, and same_handle_type().
|
inline |
|
inline |
|
inline |
Compare ordering of two types so they can be used in certain containers and algorithms.
Definition at line 493 of file Type.h.
References code(), Handle, and handle_type.
|
inline |
Produce the scalar type (that of a single element) of this vector type.
Definition at line 504 of file Type.h.
References with_lanes().
bool Halide::Type::can_represent | ( | Type | other | ) | const |
Can this type represent all values of another type?
Referenced by Halide::Internal::Simplify::ExprInfo::cast_to().
bool Halide::Type::can_represent | ( | const Internal::ConstantInterval & | in | ) | const |
Can this type represent exactly all integer values of some constant integer range?
bool Halide::Type::can_represent | ( | double | x | ) | const |
Can this type represent a particular constant?
bool Halide::Type::can_represent | ( | int64_t | x | ) | const |
bool Halide::Type::can_represent | ( | uint64_t | x | ) | const |
bool Halide::Type::is_max | ( | uint64_t | ) | const |
Check if an integer constant value is the maximum or minimum representable value for this type.
bool Halide::Type::is_max | ( | int64_t | ) | const |
bool Halide::Type::is_min | ( | uint64_t | ) | const |
bool Halide::Type::is_min | ( | int64_t | ) | const |
Expr Halide::Type::max | ( | ) | const |
Return an expression which is the maximum value of this type.
Returns infinity for types which can represent it.
Expr Halide::Type::min | ( | ) | const |
Return an expression which is the minimum value of this type.
Returns -infinity for types which can represent it.
|
static |
Aliases for halide_type_code_t values for legacy compatibility and to match the Halide internal C++ style.
Definition at line 291 of file Type.h.
Referenced by Halide::Internal::eliminated_bool_type(), Halide::Int(), is_int(), and is_int_or_uint().
|
static |
Definition at line 292 of file Type.h.
Referenced by is_bool(), is_int_or_uint(), is_uint(), and Halide::UInt().
|
static |
Definition at line 293 of file Type.h.
Referenced by Halide::Float(), and is_float().
|
static |
Definition at line 294 of file Type.h.
Referenced by Halide::BFloat(), is_bfloat(), and is_float().
|
static |
Definition at line 295 of file Type.h.
Referenced by Halide::Handle(), is_handle(), operator!=(), operator<(), and operator==().
const halide_handle_cplusplus_type* Halide::Type::handle_type = nullptr |
Type to be printed when declaring handles of this type.
Definition at line 399 of file Type.h.
Referenced by operator<(), with_bits(), with_code(), and with_lanes().