Halide
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. More...
 
 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. More...
 
 Type (const Type &that)=default
 Trivial copy constructor. More...
 
Typeoperator= (const Type &that)=default
 Trivial copy assignment operator. More...
 
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. More...
 
HALIDE_ALWAYS_INLINE operator halide_type_t () const
 Unwrap the runtime halide_type_t for use in runtime calls, etc. More...
 
HALIDE_ALWAYS_INLINE halide_type_code_t code () const
 Return the underlying data type of an element as an enum value. More...
 
HALIDE_ALWAYS_INLINE int bits () const
 Return the bit size of a single element of this type. More...
 
HALIDE_ALWAYS_INLINE int lanes () const
 Return the number of vector elements in this type. More...
 
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. More...
 
Type with_bits (int new_bits) const
 Return Type with same type code and lanes, but new_bits for the number of bits. More...
 
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. More...
 
HALIDE_ALWAYS_INLINE bool is_bool () const
 Is this type boolean (represented as UInt(1))? More...
 
HALIDE_ALWAYS_INLINE bool is_vector () const
 Is this type a vector type? (lanes() != 1). More...
 
HALIDE_ALWAYS_INLINE bool is_scalar () const
 Is this type a scalar type? (lanes() == 1). More...
 
HALIDE_ALWAYS_INLINE bool is_float () const
 Is this type a floating point type (float or double). More...
 
HALIDE_ALWAYS_INLINE bool is_bfloat () const
 Is this type a floating point type (float or double). More...
 
HALIDE_ALWAYS_INLINE bool is_int () const
 Is this type a signed integer type? More...
 
HALIDE_ALWAYS_INLINE bool is_uint () const
 Is this type an unsigned integer type? More...
 
HALIDE_ALWAYS_INLINE bool is_int_or_uint () const
 Is this type an integer type of any sort? More...
 
HALIDE_ALWAYS_INLINE bool is_handle () const
 Is this type an opaque handle type (void *) More...
 
bool same_handle_type (const Type &other) const
 Check that the type name of two handles matches. More...
 
bool operator== (const Type &other) const
 Compare two types for equality. More...
 
bool operator!= (const Type &other) const
 Compare two types for inequality. More...
 
bool operator< (const Type &other) const
 Compare ordering of two types so they can be used in certain containers and algorithms. More...
 
Type element_of () const
 Produce the scalar type (that of a single element) of this vector type. More...
 
bool can_represent (Type other) const
 Can this type represent all values of another type? More...
 
bool can_represent (double x) const
 Can this type represent a particular constant? More...
 
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. More...
 
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. More...
 
Expr min () const
 Return an expression which is the minimum value of this type. More...
 

Public Attributes

const halide_handle_cplusplus_typehandle_type
 Type to be printed when declaring handles of this type. More...
 

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. More...
 
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 269 of file Type.h.

Constructor & Destructor Documentation

◆ Type() [1/4]

Halide::Type::Type ( )
inline

Definition at line 290 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 298 of file Type.h.

◆ 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 312 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 285 of file Type.h.

References bits().

Referenced by Halide::Internal::HexagonAlignmentAnalyzer::is_aligned(), and Halide::Internal::Parameter::set_scalar().

◆ 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 319 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 325 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==(), Halide::Param< T >::set(), with_bits(), with_code(), and with_lanes().

◆ bits()

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

◆ lanes()

◆ 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 342 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 348 of file Type.h.

References bits(), code(), handle_type, lanes(), and Type().

Referenced by Halide::Internal::eliminated_bool_type().

◆ 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 355 of file Type.h.

References bits(), code(), handle_type, and Type().

Referenced by element_of().

◆ is_bool()

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

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

Definition at line 364 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 378 of file Type.h.

References lanes().

Referenced by 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 390 of file Type.h.

References BFloat, and code().

◆ is_int()

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

Is this type a signed integer type?

Definition at line 396 of file Type.h.

References code(), and Int.

Referenced by Halide::Internal::div_imp(), Halide::Internal::mod_imp(), and Halide::Internal::Simplify::no_overflow_int().

◆ is_uint()

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

Is this type an unsigned integer type?

Definition at line 402 of file Type.h.

References code(), and UInt.

◆ 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 408 of file Type.h.

References code(), Int, and UInt.

◆ 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 414 of file Type.h.

References code(), and Handle.

◆ 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==()

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

Compare two types for equality.

Definition at line 422 of file Type.h.

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

◆ operator!=()

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

Compare two types for inequality.

Definition at line 427 of file Type.h.

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

◆ 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 432 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 439 of file Type.h.

References with_lanes().

◆ can_represent() [1/4]

bool Halide::Type::can_represent ( Type  other) const

Can this type represent all values of another type?

◆ can_represent() [2/4]

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

Can this type represent a particular constant?

◆ can_represent() [3/4]

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

◆ can_represent() [4/4]

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 277 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 278 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 279 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 280 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 281 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

Type to be printed when declaring handles of this type.

Definition at line 360 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: