Go to the documentation of this file.
389 const std::vector<Expr> &
extents,
441 static Stmt make(
const std::vector<Stmt> &stmts);
699 bool is_intrinsic(std::initializer_list<IntrinsicOp> intrinsics)
const {
717 if (c->is_intrinsic(i)) {
828 const std::vector<int> &
indices);
signed __INT32_TYPE__ int32_t
static const IRNodeType _node_type
static Stmt make(const std::string &name, const std::vector< Type > &types, const Region &bounds, const PrefetchDirective &prefetch, Expr condition, Stmt body)
static Expr make(Type t, Expr v)
static const IRNodeType _node_type
static const IRNodeType _node_type
Allocate a scratch area called with the given name, type, and size.
@ signed_integer_overflow
The sum of two expressions.
int slice_stride() const
Check if this shuffle is a contiguous strict subset of the vector arguments, and if so,...
bool is_concat() const
Check if this shuffle is a concatenation of the vector arguments.
static const IRNodeType _node_type
static Stmt make_produce(const std::string &name, Stmt body)
static const IRNodeType _node_type
static const IRNodeType _node_type
static const IRNodeType _node_type
static Stmt make(const std::string &name, Expr value, Stmt body)
std::vector< Range > Region
A multi-dimensional box.
static Expr make(Type type, IntrinsicOp op, const std::vector< Expr > &args, CallType call_type, FunctionPtr func=FunctionPtr(), int value_index=0, const Buffer<> &image=Buffer<>(), Parameter param=Parameter())
std::vector< Expr > vectors
static Expr make_concat(const std::vector< Expr > &vectors)
Convenience constructor for making a shuffle representing a concatenation of the vectors.
static Expr make(Expr a, Expr b)
static Stmt make(const std::string &name, bool is_producer, Stmt body)
static const IRNodeType _node_type
Horizontally reduce a vector to a scalar or narrower vector using the given commutative and associati...
A reference-counted handle to a parameter to a halide pipeline.
static HALIDE_EXPORT ConstString buffer_crop
static const IRNodeType _node_type
static Expr make(Expr a, Expr b)
@ Extern
A call to an external C-ABI function, possibly with side-effects.
Is the first expression greater than or equal to the second.
IRNodeType
All our IR node types get unique IDs for the purposes of RTTI.
static Expr make(Type type, const std::string &name, Expr index, Buffer<> image, Parameter param, Expr predicate, ModulusRemainder alignment)
static Expr make(Expr a, Expr b)
static const IRNodeType _node_type
static Expr make(const Parameter ¶m, const std::vector< Expr > &args)
Convenience constructor for loads from images parameters.
const typedef char *const ConstString
bool is_broadcast() const
Check if this shuffle can be represented as a broadcast.
static const Call * as_intrinsic(const Expr &e, std::initializer_list< IntrinsicOp > intrinsics)
Returns a pointer to a call node if the expression is a call to one of the requested intrinsics.
A vector with 'lanes' elements, in which every element is 'value'.
The ratio of two expressions.
ForType
An enum describing a type of loop traversal.
static HALIDE_EXPORT ConstString buffer_set_device_dirty
We use the "curiously recurring template pattern" to avoid duplicated code in the IR Nodes.
static HALIDE_EXPORT ConstString buffer_get_type
static HALIDE_EXPORT ConstString buffer_get_host
std::vector< Type > types
static Stmt make(Expr condition, Expr message)
The statement form of a let node.
@ call_cached_indirect_function
@ rounding_mul_shift_right
static HALIDE_EXPORT ConstString buffer_set_bounds
bool is_extract_element() const
Check if this shuffle is extracting a scalar from the vector arguments.
static const IRNodeType _node_type
static HALIDE_EXPORT ConstString buffer_get_device_dirty
The actual IR nodes begin here.
Is the first expression less than or equal to the second.
static const IRNodeType _node_type
static const Call * as_tag(const Expr &e)
Is the first expression not equal to the second.
@ Halide
A call to a Func.
bool is_slice() const
Check if this shuffle is a contiguous strict subset of the vector arguments, and if so,...
static const IRNodeType _node_type
static Expr make(Expr a, Expr b)
bool is_unordered_parallel(ForType for_type)
Check if for_type executes for loop iterations in parallel and unordered.
A pair of statements executed concurrently.
static Stmt make(const std::string &name, Type type, MemoryType memory_type, const std::vector< Expr > &extents, Expr condition, Stmt body, Expr new_expr=Expr(), const std::string &free_function=std::string(), int padding=0)
static const IRNodeType _node_type
static HALIDE_EXPORT ConstString buffer_get_stride
static const IRNodeType _node_type
A reference-counted handle to a statement node.
static const IRNodeType _node_type
ReductionDomain reduction_domain
Reduction variables hang onto their domains.
static Expr make(const std::vector< Expr > &vectors, const std::vector< int > &indices)
int slice_begin() const
Check if this shuffle is a contiguous strict subset of the vector arguments, and if so,...
static Stmt make(const std::string &name, Expr min, Expr extent, ForType for_type, DeviceAPI device_api, Stmt body)
static const IRNodeType _node_type
static Expr make(Type t, Expr v)
Types in the halide type system.
bool is_unordered_parallel() const
static const IRNodeType _node_type
static Expr make(Expr value, int lanes)
static HALIDE_EXPORT ConstString buffer_get_host_dirty
@ ExternCPlusPlus
A call to an external C-ABI function, possibly with side-effects.
static HALIDE_EXPORT ConstString buffer_init
Load a value from a named symbol if predicate is true.
Free the resources associated with the given buffer.
static Expr make_slice(Expr vector, int begin, int stride, int size)
Convenience constructor for making a shuffle representing a contiguous subset of a vector.
Allocate a multi-dimensional buffer of the given type and size.
This file defines the class FunctionDAG, which is our representation of a Halide pipeline,...
Type type() const
Get the type of this parameter.
Logical or - is at least one of the expression true.
Is the first expression equal to the second.
@ Image
A load from an input image.
static Stmt make(const std::string &name)
std::vector< Expr > values
bool is_intrinsic(IntrinsicOp op) const
This defines the value of a function at a multi-dimensional location.
int broadcast_factor() const
static Expr make(Expr a, Expr b)
@ Internal
Not visible externally, similar to 'static' linkage in C.
The greater of two values.
std::string producer_name
static Stmt make(const std::string &name, const std::vector< Type > &types, MemoryType memory_type, const Region &bounds, Expr condition, Stmt body)
@ size_of_halide_buffer_t
static const IRNodeType _node_type
static HALIDE_EXPORT ConstString buffer_is_bounds_query
static HALIDE_EXPORT ConstString buffer_get_max
static Expr make(Operator op, Expr vec, int lanes)
A let expression, like you might find in a functional language.
static Expr make(Expr a, Expr b)
static const IRNodeType _node_type
static Expr make(Expr a, Expr b)
static Expr make(Expr condition, Expr true_value, Expr false_value)
static Stmt make(Stmt first, Stmt rest)
@ Intrinsic
A possibly-side-effecty compiler intrinsic, which has special handling during codegen.
static Stmt make(Expr semaphore, Expr count, Stmt body)
static Expr make(Expr a, Expr b)
static const IRNodeType _node_type
static HALIDE_EXPORT ConstString buffer_get_dimensions
PrefetchDirective prefetch
static HALIDE_EXPORT ConstString buffer_get_min
bool is_interleave() const
Check if this shuffle is an interleaving of the vector arguments.
A linear ramp vector node.
static Expr make(Expr base, Expr stride, int lanes)
static const IRNodeType _node_type
static Expr make(Expr a, Expr b)
static const IRNodeType _node_type
Evaluate and discard an expression, presumably because it has some side-effect.
Store a 'value' to the buffer called 'name' at a given 'index' if 'predicate' is true.
static Expr make(Expr a, Expr b)
The lesser of two values.
int32_t constant_allocation_size() const
static const IRNodeType _node_type
This node is a helpful annotation to do with permissions.
static Expr make(Type type, const std::string &name, const Buffer<> &image)
static const IRNodeType _node_type
bool is_pure() const
Check if a call node is pure within a pipeline, meaning that the same args always give the same resul...
static const char * get_intrinsic_name(IntrinsicOp op)
A possibly-weak pointer to a Halide function.
static const IRNodeType _node_type
static Expr make(const Buffer<> &image, const std::vector< Expr > &args)
Convenience constructor for loads from concrete images.
bool is_parallel(ForType for_type)
Returns true if for_type executes for loop iterations in parallel.
static const IRNodeType _node_type
static const IRNodeType _node_type
If the 'condition' is false, then evaluate and return the message, which should be a call to an error...
static HALIDE_EXPORT ConstString buffer_get_device
static const IRNodeType _node_type
static Stmt make_consume(const std::string &name, Stmt body)
static Expr make_broadcast(Expr vector, int factor)
Convenience constructor for making a shuffle representing a broadcast of a vector.
@ PureIntrinsic
A side-effect-free version of the above.
A reference-counted handle to Halide's internal representation of a function.
static const IRNodeType _node_type
@ PureExtern
A call to a guaranteed-side-effect-free external function.
static Expr make(Expr a, Expr b)
static HALIDE_EXPORT ConstString buffer_set_host_dirty
static Expr make_extract_element(Expr vector, int i)
Convenience constructor for making a shuffle representing extracting a single element.
std::vector< int > indices
Indices indicating which vector element to place into the result.
static const IRNodeType _node_type
const std::string & name() const
Get the name of this parameter.
const std::string & name() const
bool is_intrinsic() const
static Stmt make(Expr condition, Stmt then_case, Stmt else_case=Stmt())
static const IRNodeType _node_type
Reinterpret value as another type, without affecting any of the bits (on little-endian systems).
static HALIDE_EXPORT ConstString buffer_get_shape
ModulusRemainder alignment
static Expr make(Expr a, Expr b)
static const IRNodeType _node_type
static Stmt make(Stmt first, Stmt rest)
@ add_image_checks_marker
Parameter param
References to scalar parameters, or to the dimensions of buffer parameters hang onto those expression...
std::vector< Type > types
static Expr make(Expr a, Expr b)
static const IRNodeType _node_type
static const IRNodeType _node_type
static Expr make(Type type, const std::string &name, ReductionDomain reduction_domain)
static const IRNodeType _node_type
std::vector< Expr > extents
A fragment of Halide syntax.
Represent a multi-dimensional region of a Func or an ImageParam that needs to be prefetched.
Is the first expression greater than the second.
MemoryType
An enum describing different address spaces to be used with Func::store_in.
static const IRNodeType _node_type
Lock all the Store nodes in the body statement.
Construct a new vector by taking elements from another sequence of vectors.
static const IRNodeType _node_type
static Expr make(const std::string &name, Expr value, Expr body)
static const IRNodeType _node_type
bool is_intrinsic(std::initializer_list< IntrinsicOp > intrinsics) const
static Stmt make(const std::string &producer_name, const std::string &mutex_name, Stmt body)
static Stmt make(const std::string &name, Expr value, Expr index, Parameter param, Expr predicate, ModulusRemainder alignment)
static HALIDE_EXPORT ConstString buffer_init_from_buffer
static const IRNodeType _node_type
The result of modulus_remainder analysis.
static Expr make(Type type, const std::string &name)
std::string free_function
A reference-counted handle on a reduction domain, which is just a vector of ReductionVariable.
static HALIDE_EXPORT ConstString buffer_get_extent
static const IRNodeType _node_type
The difference of two expressions.
static Stmt make(const std::string &name, const std::vector< Expr > &values, const std::vector< Expr > &args, const Expr &predicate)
static Expr make(Type type, const std::string &name, Parameter param)
const T * as() const
Downcast this ir node to its actual type (e.g.
Logical and - are both expressions true.
static const IRNodeType _node_type
static Expr make(Expr a, Expr b)
static HALIDE_EXPORT ConstString trace
ModulusRemainder alignment
static const IRNodeType _node_type
static HALIDE_EXPORT ConstString buffer_get_device_interface
Logical not - true if the expression false.
Is the first expression less than the second.
@ load_typed_struct_member
DeviceAPI
An enum describing a type of device API.
The product of two expressions.
static Expr make(Expr a, Expr b)
Buffer image
References to properties of literal image parameters.
A sequence of statements to be executed in-order.
static Expr make_interleave(const std::vector< Expr > &vectors)
Convenience constructor for making a shuffle representing an interleaving of vectors of the same leng...