Halide 19.0.0
Halide compiler and libraries
Loading...
Searching...
No Matches
Halide::Internal::CodeGen_Posix Class Reference

A code generator that emits posix code from a given Halide stmt. More...

#include <CodeGen_Posix.h>

Inheritance diagram for Halide::Internal::CodeGen_Posix:
Halide::Internal::CodeGen_LLVM Halide::Internal::IRVisitor

Classes

struct  Allocation
 A struct describing heap or stack allocations. More...
 

Public Member Functions

 CodeGen_Posix (const Target &t)
 Create an posix code generator.
 
- Public Member Functions inherited from Halide::Internal::CodeGen_LLVM
virtual std::unique_ptr< llvm::Module > compile (const Module &module)
 Takes a halide Module and compiles it to an llvm Module.
 
const Targetget_target () const
 The target we're generating code for.
 
void set_context (llvm::LLVMContext &context)
 Tell the code generator which LLVM context to use.
 
size_t get_requested_alloca_total () const
 
- Public Member Functions inherited from Halide::Internal::IRVisitor
 IRVisitor ()=default
 
virtual ~IRVisitor ()=default
 

Protected Member Functions

void visit (const Allocate *) override
 Posix implementation of Allocate.
 
void visit (const Free *) override
 Generate code for a free node.
 
std::string get_allocation_name (const std::string &n) override
 Get a unique name for the actual block of memory that an allocate node uses.
 
void visit (const IntImm *) override
 Generate code for various IR nodes.
 
void visit (const UIntImm *) override
 
void visit (const FloatImm *) override
 
void visit (const StringImm *) override
 
void visit (const Cast *) override
 
void visit (const Reinterpret *) override
 
void visit (const Variable *) override
 
void visit (const Add *) override
 
void visit (const Sub *) override
 
void visit (const Mul *) override
 
void visit (const Div *) override
 
void visit (const Mod *) override
 
void visit (const Min *) override
 
void visit (const Max *) override
 
void visit (const EQ *) override
 
void visit (const NE *) override
 
void visit (const LT *) override
 
void visit (const LE *) override
 
void visit (const GT *) override
 
void visit (const GE *) override
 
void visit (const And *) override
 
void visit (const Or *) override
 
void visit (const Not *) override
 
void visit (const Select *) override
 
void visit (const Load *) override
 
void visit (const Ramp *) override
 
void visit (const Broadcast *) override
 
void visit (const Call *) override
 
void visit (const Let *) override
 
void visit (const LetStmt *) override
 
void visit (const AssertStmt *) override
 
void visit (const ProducerConsumer *) override
 
void visit (const For *) override
 
void visit (const Store *) override
 
void visit (const Block *) override
 
void visit (const IfThenElse *) override
 
void visit (const Evaluate *) override
 
void visit (const Shuffle *) override
 
void visit (const VectorReduce *) override
 
void visit (const Prefetch *) override
 
void visit (const Atomic *) override
 
void visit (const Provide *) override
 These IR nodes should have been removed during lowering.
 
void visit (const Realize *) override
 
virtual void visit (const Fork *)
 
virtual void visit (const Acquire *)
 
virtual void visit (const HoistedStorage *)
 
- Protected Member Functions inherited from Halide::Internal::CodeGen_LLVM
 CodeGen_LLVM (const Target &t)
 
virtual void compile_func (const LoweredFunc &func, const std::string &simple_name, const std::string &extern_name)
 Compile a specific halide declaration into the llvm Module.
 
virtual void compile_buffer (const Buffer<> &buffer)
 
virtual void begin_func (LinkageType linkage, const std::string &simple_name, const std::string &extern_name, const std::vector< LoweredArgument > &args)
 Helper functions for compiling Halide functions to llvm functions.
 
virtual void end_func (const std::vector< LoweredArgument > &args)
 
virtual std::string mcpu_target () const =0
 What should be passed as -mcpu (warning: implies attrs!), -mattrs, and related for compilation.
 
virtual std::string mcpu_tune () const =0
 
virtual std::string mattrs () const =0
 
virtual std::string mabi () const
 
virtual bool use_soft_float_abi () const =0
 
virtual bool use_pic () const
 
virtual bool promote_indices () const
 Should indexing math be promoted to 64-bit on platforms with 64-bit pointers?
 
virtual int native_vector_bits () const =0
 What's the natural vector bit-width to use for loads, stores, etc.
 
virtual int maximum_vector_bits () const
 Used to decide whether to break a vector up into multiple smaller operations.
 
virtual int target_vscale () const
 For architectures that have vscale vectors, return the constant vscale to use.
 
virtual Type upgrade_type_for_arithmetic (const Type &) const
 Return the type in which arithmetic should be done for the given storage type.
 
virtual Type upgrade_type_for_storage (const Type &) const
 Return the type that a given Halide type should be stored/loaded from memory as.
 
virtual Type upgrade_type_for_argument_passing (const Type &) const
 Return the type that a Halide type should be passed in and out of functions as.
 
virtual void init_context ()
 Grab all the context specific internal state.
 
virtual void init_module ()
 Initialize the CodeGen_LLVM internal state to compile a fresh module.
 
void optimize_module ()
 Run all of llvm's optimization passes on the module.
 
void sym_push (const std::string &name, llvm::Value *value)
 Add an entry to the symbol table, hiding previous entries with the same name.
 
void sym_pop (const std::string &name)
 Remove an entry for the symbol table, revealing any previous entries with the same name.
 
llvm::Value * sym_get (const std::string &name, bool must_succeed=true) const
 Fetch an entry from the symbol table.
 
bool sym_exists (const std::string &name) const
 Test if an item exists in the symbol table.
 
llvm::FunctionType * signature_to_type (const ExternSignature &signature)
 Given a Halide ExternSignature, return the equivalent llvm::FunctionType.
 
llvm::Value * codegen (const Expr &)
 Emit code that evaluates an expression, and return the llvm representation of the result of the expression.
 
void codegen (const Stmt &)
 Emit code that runs a statement.
 
void scalarize (const Expr &)
 Codegen a vector Expr by codegenning each lane and combining.
 
llvm::Value * register_destructor (llvm::Function *destructor_fn, llvm::Value *obj, DestructorType when)
 
void trigger_destructor (llvm::Function *destructor_fn, llvm::Value *stack_slot)
 Call a destructor early.
 
llvm::BasicBlock * get_destructor_block ()
 Retrieves the block containing the error handling code.
 
void create_assertion (llvm::Value *condition, const Expr &message, llvm::Value *error_code=nullptr)
 Codegen an assertion.
 
void codegen_asserts (const std::vector< const AssertStmt * > &asserts)
 Codegen a block of asserts with pure conditions.
 
void return_with_error_code (llvm::Value *error_code)
 Return the the pipeline with the given error code.
 
llvm::Constant * create_string_constant (const std::string &str)
 Put a string constant in the module as a global variable and return a pointer to it.
 
llvm::Constant * create_binary_blob (const std::vector< char > &data, const std::string &name, bool constant=true)
 Put a binary blob in the module as a global variable and return a pointer to it.
 
llvm::Value * create_broadcast (llvm::Value *, int lanes)
 Widen an llvm scalar into an llvm vector with the given number of lanes.
 
llvm::Value * codegen_buffer_pointer (const std::string &buffer, Type type, llvm::Value *index)
 Generate a pointer into a named buffer at a given index, of a given type.
 
llvm::Value * codegen_buffer_pointer (const std::string &buffer, Type type, Expr index)
 
llvm::Value * codegen_buffer_pointer (llvm::Value *base_address, Type type, Expr index)
 
llvm::Value * codegen_buffer_pointer (llvm::Value *base_address, Type type, llvm::Value *index)
 
std::string mangle_llvm_type (llvm::Type *type)
 Return type string for LLVM type using LLVM IR intrinsic type mangling.
 
llvm::Value * make_halide_type_t (const Type &)
 Turn a Halide Type into an llvm::Value representing a constant halide_type_t.
 
void add_tbaa_metadata (llvm::Instruction *inst, std::string buffer, const Expr &index)
 Mark a load or store with type-based-alias-analysis metadata so that llvm knows it can reorder loads and stores across different buffers.
 
void function_does_not_access_memory (llvm::Function *fn)
 Add the appropriate function attribute to tell LLVM that the function doesn't access memory.
 
virtual llvm::Type * llvm_type_of (const Type &) const
 Get the llvm type equivalent to the given halide type in the current context.
 
llvm::Type * llvm_type_of (llvm::LLVMContext *context, Halide::Type t, int effective_vscale) const
 Get the llvm type equivalent to a given halide type.
 
llvm::Value * create_alloca_at_entry (llvm::Type *type, int n, bool zero_initialize=false, const std::string &name="")
 Perform an alloca at the function entrypoint.
 
llvm::Value * get_user_context () const
 The user_context argument.
 
virtual llvm::Value * interleave_vectors (const std::vector< llvm::Value * > &)
 Implementation of the intrinsic call to interleave_vectors.
 
llvm::Function * get_llvm_intrin (const Type &ret_type, const std::string &name, const std::vector< Type > &arg_types, bool scalars_are_vectors=false)
 Get an LLVM intrinsic declaration.
 
llvm::Function * get_llvm_intrin (llvm::Type *ret_type, const std::string &name, const std::vector< llvm::Type * > &arg_types)
 
llvm::Function * declare_intrin_overload (const std::string &name, const Type &ret_type, const std::string &impl_name, std::vector< Type > arg_types, bool scalars_are_vectors=false)
 Declare an intrinsic function that participates in overload resolution.
 
void declare_intrin_overload (const std::string &name, const Type &ret_type, llvm::Function *impl, std::vector< Type > arg_types)
 
llvm::Value * call_overloaded_intrin (const Type &result_type, const std::string &name, const std::vector< Expr > &args)
 Call an overloaded intrinsic function.
 
llvm::Value * call_intrin (const Type &t, int intrin_lanes, const std::string &name, std::vector< Expr >)
 Generate a call to a vector intrinsic or runtime inlined function.
 
llvm::Value * call_intrin (const Type &t, int intrin_lanes, llvm::Function *intrin, std::vector< Expr >)
 
llvm::Value * call_intrin (const llvm::Type *t, int intrin_lanes, const std::string &name, std::vector< llvm::Value * >, bool scalable_vector_result=false, bool is_reduction=false)
 
llvm::Value * call_intrin (const llvm::Type *t, int intrin_lanes, llvm::Function *intrin, std::vector< llvm::Value * >, bool is_reduction=false)
 
virtual llvm::Value * slice_vector (llvm::Value *vec, int start, int extent)
 Take a slice of lanes out of an llvm vector.
 
virtual llvm::Value * concat_vectors (const std::vector< llvm::Value * > &)
 Concatenate a bunch of llvm vectors.
 
virtual llvm::Value * shuffle_vectors (llvm::Value *a, llvm::Value *b, const std::vector< int > &indices)
 Create an LLVM shuffle vectors instruction.
 
llvm::Value * shuffle_vectors (llvm::Value *v, const std::vector< int > &indices)
 Shorthand for shuffling a single vector.
 
std::pair< llvm::Function *, int > find_vector_runtime_function (const std::string &name, int lanes)
 Go looking for a vector version of a runtime function.
 
virtual bool supports_atomic_add (const Type &t) const
 
virtual void codegen_vector_reduce (const VectorReduce *op, const Expr &init)
 Compile a horizontal reduction that starts with an explicit initial value.
 
virtual bool supports_call_as_float16 (const Call *op) const
 Can we call this operation with float16 type? This is used to avoid "emulated" equivalent code-gen in case target has FP16 feature.
 
llvm::Value * simple_call_intrin (const std::string &intrin, const std::vector< llvm::Value * > &args, llvm::Type *result_type)
 call_intrin does far too much to be useful and generally breaks things when one has carefully set things up for a specific architecture.
 
llvm::Value * normalize_fixed_scalable_vector_type (llvm::Type *desired_type, llvm::Value *result)
 Ensure that a vector value is either fixed or vscale depending to match desired_type.
 
llvm::Value * convert_fixed_or_scalable_vector_type (llvm::Value *arg, llvm::Type *desired_type)
 Convert between two LLVM vectors of potentially different scalable/fixed and size.
 
llvm::Value * fixed_to_scalable_vector_type (llvm::Value *fixed)
 Convert an LLVM fixed vector value to the corresponding vscale vector value.
 
llvm::Value * scalable_to_fixed_vector_type (llvm::Value *scalable)
 Convert an LLVM vscale vector value to the corresponding fixed vector value.
 
int get_vector_num_elements (const llvm::Type *t)
 Get number of vector elements, taking into account scalable vectors.
 
llvm::Type * get_vector_type (llvm::Type *, int n, VectorTypeConstraint type_constraint=VectorTypeConstraint::None) const
 
llvm::Constant * get_splat (int lanes, llvm::Constant *value, VectorTypeConstraint type_constraint=VectorTypeConstraint::None) const
 
llvm::Value * match_vector_type_scalable (llvm::Value *value, VectorTypeConstraint constraint)
 Make sure a value type has the same scalable/fixed vector type as a guide.
 
llvm::Value * match_vector_type_scalable (llvm::Value *value, llvm::Type *guide)
 
llvm::Value * match_vector_type_scalable (llvm::Value *value, llvm::Value *guide)
 
bool try_vector_predication_comparison (const std::string &name, const Type &result_type, MaskVariant mask, llvm::Value *a, llvm::Value *b, const char *cmp_op)
 Generate a vector predicated comparison intrinsic call if use_llvm_vp_intrinsics is true and result_type is a vector type.
 
bool try_vector_predication_intrinsic (const std::string &name, VPResultType result_type, int32_t length, MaskVariant mask, std::vector< VPArg > args)
 Generate an intrisic call if use_llvm_vp_intrinsics is true and length is greater than 1.
 
llvm::Value * codegen_dense_vector_load (const Load *load, llvm::Value *vpred=nullptr, bool slice_to_native=true)
 Generate a basic dense vector load, with an optional predicate and control over whether or not we should slice the load into native vectors.
 
- Protected Member Functions inherited from Halide::Internal::IRVisitor

Protected Attributes

Scope< Allocationallocations
 The allocations currently in scope.
 
- Protected Attributes inherited from Halide::Internal::CodeGen_LLVM
std::unique_ptr< llvm::Module > module
 
llvm::Function * function = nullptr
 
llvm::LLVMContext * context = nullptr
 
std::unique_ptr< llvm::IRBuilder< llvm::ConstantFolder, llvm::IRBuilderDefaultInserter > > builder
 
llvm::Value * value = nullptr
 
llvm::MDNode * very_likely_branch = nullptr
 
llvm::MDNode * default_fp_math_md = nullptr
 
llvm::MDNode * strict_fp_math_md = nullptr
 
std::vector< LoweredArgumentcurrent_function_args
 
Halide::Target target
 The target we're generating code for.
 
llvm::Type * void_t = nullptr
 Some useful llvm types.
 
llvm::Type * i1_t = nullptr
 
llvm::Type * i8_t = nullptr
 
llvm::Type * i16_t = nullptr
 
llvm::Type * i32_t = nullptr
 
llvm::Type * i64_t = nullptr
 
llvm::Type * f16_t = nullptr
 
llvm::Type * f32_t = nullptr
 
llvm::Type * f64_t = nullptr
 
llvm::StructType * halide_buffer_t_type = nullptr
 
llvm::StructType * type_t_type
 
llvm::StructType * dimension_t_type
 
llvm::StructType * metadata_t_type = nullptr
 
llvm::StructType * argument_t_type = nullptr
 
llvm::StructType * scalar_value_t_type = nullptr
 
llvm::StructType * device_interface_t_type = nullptr
 
llvm::StructType * pseudostack_slot_t_type = nullptr
 
llvm::StructType * semaphore_t_type
 
Expr wild_u1x_
 Some wildcard variables used for peephole optimizations in subclasses.
 
Expr wild_i8x_
 
Expr wild_u8x_
 
Expr wild_i16x_
 
Expr wild_u16x_
 
Expr wild_i32x_
 
Expr wild_u32x_
 
Expr wild_i64x_
 
Expr wild_u64x_
 
Expr wild_f32x_
 
Expr wild_f64x_
 
Expr wild_u1_
 
Expr wild_i8_
 
Expr wild_u8_
 
Expr wild_i16_
 
Expr wild_u16_
 
Expr wild_i32_
 
Expr wild_u32_
 
Expr wild_i64_
 
Expr wild_u64_
 
Expr wild_f32_
 
Expr wild_f64_
 
size_t requested_alloca_total = 0
 A (very) conservative guess at the size of all alloca() storage requested (including alignment padding).
 
std::map< std::string, std::vector< Intrinsic > > intrinsics
 Mapping of intrinsic functions to the various overloads implementing it.
 
bool inside_atomic_mutex_node = false
 Are we inside an atomic node that uses mutex locks? This is used for detecting deadlocks from nested atomics & illegal vectorization.
 
bool emit_atomic_stores = false
 Emit atomic store instructions?
 
bool use_llvm_vp_intrinsics = false
 Controls use of vector predicated intrinsics for vector operations.
 
std::map< WarningKind, std::string > onetime_warnings
 

Additional Inherited Members

- Static Public Member Functions inherited from Halide::Internal::CodeGen_LLVM
static std::unique_ptr< CodeGen_LLVMnew_for_target (const Target &target, llvm::LLVMContext &context)
 Create an instance of CodeGen_LLVM suitable for the target.
 
static void initialize_llvm ()
 Initialize internal llvm state for the enabled targets.
 
static std::unique_ptr< llvm::Module > compile_trampolines (const Target &target, llvm::LLVMContext &context, const std::string &suffix, const std::vector< std::pair< std::string, ExternSignature > > &externs)
 
- Protected Types inherited from Halide::Internal::CodeGen_LLVM
enum  DestructorType { Always , OnError , OnSuccess }
 Some destructors should always be called. More...
 
enum class  VectorTypeConstraint { None , Fixed , VScale }
 Interface to abstract vector code generation as LLVM is now providing multiple options to express even simple vector operations. More...
 
enum class  WarningKind { EmulatedFloat16 }
 Warning messages which we want to avoid displaying number of times. More...
 
using MaskVariant = std::variant<NoMask, AllEnabledMask, llvm::Value *>
 Predication mask using the above two types for special cases and an llvm::Value for the general one.
 

Detailed Description

A code generator that emits posix code from a given Halide stmt.

Definition at line 14 of file CodeGen_Posix.h.

Constructor & Destructor Documentation

◆ CodeGen_Posix()

Halide::Internal::CodeGen_Posix::CodeGen_Posix ( const Target & t)

Create an posix code generator.

Processor features can be enabled using the appropriate arguments

Member Function Documentation

◆ visit() [1/48]

void Halide::Internal::CodeGen_Posix::visit ( const Allocate * )
overrideprotectedvirtual

Posix implementation of Allocate.

Small constant-sized allocations go on the stack. The rest go on the heap by calling "halide_malloc" and "halide_free" in the standard library.

Implements Halide::Internal::CodeGen_LLVM.

◆ visit() [2/48]

void Halide::Internal::CodeGen_Posix::visit ( const Free * )
overrideprotectedvirtual

Generate code for a free node.

It has no default implementation and must be handled in an architecture-specific way.

Implements Halide::Internal::CodeGen_LLVM.

◆ get_allocation_name()

std::string Halide::Internal::CodeGen_Posix::get_allocation_name ( const std::string & n)
overrideprotectedvirtual

Get a unique name for the actual block of memory that an allocate node uses.

Used so that alias analysis understands when multiple Allocate nodes shared the same memory.

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [3/48]

void Halide::Internal::CodeGen_LLVM::visit ( const IntImm * )
overrideprotectedvirtual

Generate code for various IR nodes.

These can be overridden by architecture-specific code to perform peephole optimizations. The result of each is stored in value

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [4/48]

void Halide::Internal::CodeGen_LLVM::visit ( const UIntImm * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [5/48]

void Halide::Internal::CodeGen_LLVM::visit ( const FloatImm * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [6/48]

void Halide::Internal::CodeGen_LLVM::visit ( const StringImm * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [7/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Cast * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [8/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Reinterpret * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [9/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Variable * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [10/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Add * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [11/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Sub * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [12/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Mul * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [13/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Div * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [14/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Mod * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [15/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Min * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [16/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Max * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [17/48]

void Halide::Internal::CodeGen_LLVM::visit ( const EQ * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [18/48]

void Halide::Internal::CodeGen_LLVM::visit ( const NE * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [19/48]

void Halide::Internal::CodeGen_LLVM::visit ( const LT * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [20/48]

void Halide::Internal::CodeGen_LLVM::visit ( const LE * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [21/48]

void Halide::Internal::CodeGen_LLVM::visit ( const GT * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [22/48]

void Halide::Internal::CodeGen_LLVM::visit ( const GE * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [23/48]

void Halide::Internal::CodeGen_LLVM::visit ( const And * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [24/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Or * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [25/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Not * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [26/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Select * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [27/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Load * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [28/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Ramp * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [29/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Broadcast * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [30/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Call * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [31/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Let * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [32/48]

void Halide::Internal::CodeGen_LLVM::visit ( const LetStmt * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [33/48]

void Halide::Internal::CodeGen_LLVM::visit ( const AssertStmt * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [34/48]

void Halide::Internal::CodeGen_LLVM::visit ( const ProducerConsumer * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [35/48]

void Halide::Internal::CodeGen_LLVM::visit ( const For * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [36/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Store * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [37/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Block * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [38/48]

void Halide::Internal::CodeGen_LLVM::visit ( const IfThenElse * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [39/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Evaluate * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [40/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Shuffle * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [41/48]

void Halide::Internal::CodeGen_LLVM::visit ( const VectorReduce * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [42/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Prefetch * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [43/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Atomic * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [44/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Provide * )
overrideprotectedvirtual

These IR nodes should have been removed during lowering.

CodeGen_LLVM will error out if they are present

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [45/48]

void Halide::Internal::CodeGen_LLVM::visit ( const Realize * )
overrideprotectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [46/48]

virtual void Halide::Internal::IRVisitor::visit ( const Fork * )
protectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [47/48]

virtual void Halide::Internal::IRVisitor::visit ( const Acquire * )
protectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

◆ visit() [48/48]

virtual void Halide::Internal::IRVisitor::visit ( const HoistedStorage * )
protectedvirtual

Reimplemented from Halide::Internal::CodeGen_LLVM.

Member Data Documentation

◆ allocations

Scope<Allocation> Halide::Internal::CodeGen_Posix::allocations
protected

The allocations currently in scope.

The stack gets pushed when we enter a new function.

Definition at line 65 of file CodeGen_Posix.h.


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