Halide 18.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 halide_type_t::bits, bits(), halide_type_t::lanes, lanes(), and user_assert.
|
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(), 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::IsUInt< A >::make_folded_const(), Halide::Internal::IRMatcher::IsScalar< A >::make_folded_const(), Halide::Internal::IRMatcher::LanesOf< A >::make_folded_const(), Halide::Internal::IRMatcher::VectorReduceOp< A, B, reduce_op >::match(), Halide::Internal::IRMatcher::SliceOp< Vec, Base, Stride, Lanes >::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(), Halide::cast(), code(), handle_type, lanes(), and Type().
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(), Halide::cast(), code(), handle_type, lanes(), and Type().
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(), Halide::cast(), 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 |
|
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().
Check that the type name of two handles matches.
Referenced by operator!=(), and operator==().
Compare two types for equality.
Definition at line 473 of file Type.h.
References Halide::cast(), code(), Handle, and same_handle_type().
Compare two types for inequality.
Definition at line 478 of file Type.h.
References Halide::cast(), code(), Handle, and same_handle_type().
|
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 Halide::cast(), 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().
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?
Check if an integer constant value is the maximum or minimum representable value for this type.
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().