|
enum | CallType {
Image
, Extern
, ExternCPlusPlus
, PureExtern
,
Halide
, Intrinsic
, PureIntrinsic
} |
|
enum | IntrinsicOp {
abs
, absd
, add_image_checks_marker
, alloca
,
bitwise_and
, bitwise_not
, bitwise_or
, bitwise_xor
,
bool_to_mask
, bundle
, call_cached_indirect_function
, cast_mask
,
concat_bits
, count_leading_zeros
, count_trailing_zeros
, debug_to_file
,
declare_box_touched
, div_round_to_zero
, dynamic_shuffle
, extract_bits
,
extract_mask_element
, get_user_context
, gpu_thread_barrier
, halving_add
,
halving_sub
, hvx_gather
, hvx_scatter
, hvx_scatter_acc
,
hvx_scatter_release
, if_then_else
, if_then_else_mask
, image_load
,
image_store
, lerp
, likely
, likely_if_innermost
,
load_typed_struct_member
, make_struct
, memoize_expr
, mod_round_to_zero
,
mul_shift_right
, mux
, popcount
, prefetch
,
profiling_enable_instance_marker
, promise_clamped
, random
, register_destructor
,
require
, require_mask
, return_second
, rewrite_buffer
,
round
, rounding_halving_add
, rounding_mul_shift_right
, rounding_shift_left
,
rounding_shift_right
, saturating_add
, saturating_sub
, saturating_cast
,
scatter_gather
, select_mask
, shift_left
, shift_right
,
signed_integer_overflow
, size_of_halide_buffer_t
, skip_stages_marker
, sliding_window_marker
,
sorted_avg
, strict_float
, stringify
, target_arch_is
,
target_bits
, target_has_feature
, target_natural_vector_size
, target_os_is
,
undef
, unreachable
, unsafe_promise_clamped
, widen_right_add
,
widen_right_mul
, widen_right_sub
, widening_add
, widening_mul
,
widening_shift_left
, widening_shift_right
, widening_sub
, get_runtime_vscale
,
IntrinsicOpCount
} |
|
typedef const char *const | ConstString |
|
|
static const char * | get_intrinsic_name (IntrinsicOp op) |
|
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()) |
|
static Expr | make (Type type, const std::string &name, const std::vector< Expr > &args, CallType call_type, FunctionPtr func=FunctionPtr(), int value_index=0, Buffer<> image=Buffer<>(), Parameter param=Parameter()) |
|
static Expr | make (const Function &func, const std::vector< Expr > &args, int idx=0) |
| Convenience constructor for calls to other halide functions.
|
|
static Expr | make (const Buffer<> &image, const std::vector< Expr > &args) |
| Convenience constructor for loads from concrete images.
|
|
static Expr | make (const Parameter ¶m, const std::vector< Expr > &args) |
| Convenience constructor for loads from images parameters.
|
|
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.
|
|
static const Call * | as_tag (const Expr &e) |
|
A function call.
This can represent a call to some extern function (like sin), but it's also our multi-dimensional version of a Load, so it can be a load from an input image, or a call to another halide function. These two types of call nodes don't survive all the way down to code generation - the lowering process converts them to Load nodes.
Definition at line 490 of file IR.h.
bool Halide::Internal::Call::is_pure |
( |
| ) |
const |
|
inline |
Check if a call node is pure within a pipeline, meaning that the same args always give the same result, and the calls can be reordered, duplicated, unified, etc without changing the meaning of anything.
Not transitive - doesn't guarantee the args themselves are pure. An example of a pure Call node is sqrt. If in doubt, don't mark a Call node as pure.
Definition at line 715 of file IR.h.
References call_type, Image, PureExtern, and PureIntrinsic.