Halide 19.0.0
Halide compiler and libraries
Loading...
Searching...
No Matches
Halide::Type Struct Reference

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.
 
Typeoperator= (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_typehandle_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
 

Detailed Description

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.

Examples
tutorial/lesson_14_types.cpp.

Definition at line 283 of file Type.h.

Constructor & Destructor Documentation

◆ Type() [1/4]

Halide::Type::Type ( )
inline

Definition at line 304 of file Type.h.

Referenced by with_bits(), with_code(), and with_lanes().

◆ Type() [2/4]

Halide::Type::Type ( halide_type_code_t code,
int bits,
int lanes,
const halide_handle_cplusplus_type * handle_type = nullptr )
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.

◆ Type() [3/4]

Halide::Type::Type ( const Type & that)
default

Trivial copy constructor.

◆ Type() [4/4]

HALIDE_ALWAYS_INLINE Halide::Type::Type ( const halide_type_t & that,
const halide_handle_cplusplus_type * handle_type = nullptr )
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.

Definition at line 330 of file Type.h.

Member Function Documentation

◆ bytes()

int Halide::Type::bytes ( ) const
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().

◆ operator=()

Type & Halide::Type::operator= ( const Type & that)
default

Trivial copy assignment operator.

◆ operator halide_type_t()

HALIDE_ALWAYS_INLINE Halide::Type::operator halide_type_t ( ) const
inline

Unwrap the runtime halide_type_t for use in runtime calls, etc.

Representation is exactly equivalent.

Definition at line 337 of file Type.h.

◆ code()

HALIDE_ALWAYS_INLINE halide_type_code_t Halide::Type::code ( ) const
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().

◆ bits()

◆ lanes()

HALIDE_ALWAYS_INLINE int Halide::Type::lanes ( ) const
inline

◆ with_code()

Type Halide::Type::with_code ( halide_type_code_t new_code) const
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().

◆ with_bits()

Type Halide::Type::with_bits ( int new_bits) const
inline

Return Type with same type code and lanes, but new_bits for the number of bits.

Examples
tutorial/lesson_14_types.cpp.

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().

◆ with_lanes()

Type Halide::Type::with_lanes ( int new_lanes) const
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().

◆ widen()

Type Halide::Type::widen ( ) const
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().

◆ narrow()

Type Halide::Type::narrow ( ) const
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().

◆ is_bool()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_bool ( ) const
inline

Is this type boolean (represented as UInt(1))?

Definition at line 403 of file Type.h.

References bits(), code(), and UInt.

◆ is_vector()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_vector ( ) const
inline

◆ is_scalar()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_scalar ( ) const
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().

◆ is_float()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_float ( ) const
inline

◆ is_bfloat()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_bfloat ( ) const
inline

Is this type a floating point type (float or double).

Definition at line 429 of file Type.h.

References BFloat, and code().

◆ is_int()

◆ is_uint()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_uint ( ) const
inline

Is this type an unsigned integer type?

Definition at line 441 of file Type.h.

References code(), and UInt.

Referenced by can_overflow(), Halide::Internal::Simplify::ExprInfo::cast_to(), and Halide::Internal::IRMatcher::IsUInt< A >::make_folded_const().

◆ is_int_or_uint()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_int_or_uint ( ) const
inline

Is this type an integer type of any sort?

Definition at line 447 of file Type.h.

References code(), Int, and UInt.

Referenced by Halide::Internal::Cast::is_reinterpret().

◆ is_handle()

HALIDE_ALWAYS_INLINE bool Halide::Type::is_handle ( ) const
inline

Is this type an opaque handle type (void *)

Examples
tutorial/lesson_14_types.cpp.

Definition at line 453 of file Type.h.

References code(), and Handle.

◆ can_overflow_int()

HALIDE_ALWAYS_INLINE bool Halide::Type::can_overflow_int ( ) const
inline

Definition at line 459 of file Type.h.

References bits(), and is_int().

Referenced by can_overflow().

◆ can_overflow()

HALIDE_ALWAYS_INLINE bool Halide::Type::can_overflow ( ) const
inline

Definition at line 465 of file Type.h.

References can_overflow_int(), and is_uint().

◆ same_handle_type()

bool Halide::Type::same_handle_type ( const Type & other) const

Check that the type name of two handles matches.

Referenced by operator!=(), and operator==().

◆ operator==() [1/2]

bool Halide::Type::operator== ( const Type & other) const
inline

Compare two types for equality.

Definition at line 473 of file Type.h.

References code(), Handle, and same_handle_type().

◆ operator!=() [1/2]

bool Halide::Type::operator!= ( const Type & other) const
inline

Compare two types for inequality.

Definition at line 478 of file Type.h.

References code(), Handle, and same_handle_type().

◆ operator==() [2/2]

bool Halide::Type::operator== ( const halide_type_t & other) const
inline

Compare two types for equality.

Definition at line 483 of file Type.h.

◆ operator!=() [2/2]

bool Halide::Type::operator!= ( const halide_type_t & other) const
inline

Compare two types for inequality.

Definition at line 488 of file Type.h.

◆ operator<()

bool Halide::Type::operator< ( const Type & other) const
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.

◆ element_of()

Type Halide::Type::element_of ( ) const
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_represent() [1/5]

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().

◆ can_represent() [2/5]

bool Halide::Type::can_represent ( const Internal::ConstantInterval & in) const

Can this type represent exactly all integer values of some constant integer range?

◆ can_represent() [3/5]

bool Halide::Type::can_represent ( double x) const

Can this type represent a particular constant?

◆ can_represent() [4/5]

bool Halide::Type::can_represent ( int64_t x) const

◆ can_represent() [5/5]

bool Halide::Type::can_represent ( uint64_t x) const

◆ is_max() [1/2]

bool Halide::Type::is_max ( uint64_t ) const

Check if an integer constant value is the maximum or minimum representable value for this type.

◆ is_max() [2/2]

bool Halide::Type::is_max ( int64_t ) const

◆ is_min() [1/2]

bool Halide::Type::is_min ( uint64_t ) const

◆ is_min() [2/2]

bool Halide::Type::is_min ( int64_t ) const

◆ max()

Expr Halide::Type::max ( ) const

Return an expression which is the maximum value of this type.

Returns infinity for types which can represent it.

◆ min()

Expr Halide::Type::min ( ) const

Return an expression which is the minimum value of this type.

Returns -infinity for types which can represent it.

Member Data Documentation

◆ Int

const halide_type_code_t Halide::Type::Int = halide_type_int
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().

◆ UInt

const halide_type_code_t Halide::Type::UInt = halide_type_uint
static

Definition at line 292 of file Type.h.

Referenced by is_bool(), is_int_or_uint(), is_uint(), and Halide::UInt().

◆ Float

const halide_type_code_t Halide::Type::Float = halide_type_float
static

Definition at line 293 of file Type.h.

Referenced by Halide::Float(), and is_float().

◆ BFloat

const halide_type_code_t Halide::Type::BFloat = halide_type_bfloat
static

Definition at line 294 of file Type.h.

Referenced by Halide::BFloat(), is_bfloat(), and is_float().

◆ Handle

const halide_type_code_t Halide::Type::Handle = halide_type_handle
static

Definition at line 295 of file Type.h.

Referenced by Halide::Handle(), is_handle(), operator!=(), operator<(), and operator==().

◆ handle_type

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().


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