Halide
Halide::Internal::CodeGen_C Class Reference

This class emits C++ code equivalent to a halide Stmt. More...

#include <CodeGen_C.h>

Inherits Halide::Internal::IRPrinter.

Inherited by Halide::Internal::CodeGen_D3D12Compute_Dev::CodeGen_D3D12Compute_C, Halide::Internal::CodeGen_GLSLBase, Halide::Internal::CodeGen_Metal_Dev::CodeGen_Metal_C, and Halide::Internal::CodeGen_OpenCL_Dev::CodeGen_OpenCL_C.

Classes

struct  Allocation
 

Public Types

enum  OutputKind {
  CHeader, CPlusPlusHeader, CImplementation, CPlusPlusImplementation,
  CExternDecl, CPlusPlusExternDecl
}
 

Public Member Functions

 CodeGen_C (std::ostream &dest, Target target, OutputKind output_kind=CImplementation, const std::string &include_guard="")
 Initialize a C code generator pointing at a particular output stream (e.g. More...
 
 ~CodeGen_C () override
 
void compile (const Module &module)
 Emit the declarations contained in the module as C code. More...
 
const Targetget_target () const
 The target we're generating code for. More...
 
void add_common_macros (std::ostream &dest)
 Add common macros to be shared across all backends. More...
 
- Public Member Functions inherited from Halide::Internal::IRPrinter
 IRPrinter (std::ostream &)
 Construct an IRPrinter pointed at a given output stream (e.g. More...
 
void print (const Expr &)
 emit an expression on the output stream More...
 
void print_no_parens (const Expr &)
 Emit an expression on the output stream without enclosing parens. More...
 
void print (const Stmt &)
 emit a statement on the output stream More...
 
void print_list (const std::vector< Expr > &exprs)
 emit a comma delimited list of exprs, without any leading or trailing punctuation. More...
 
- Public Member Functions inherited from Halide::Internal::IRVisitor
 IRVisitor ()
 
virtual ~IRVisitor ()
 

Static Public Member Functions

static void test ()
 
- Static Public Member Functions inherited from Halide::Internal::IRPrinter
static void test ()
 

Protected Types

enum  AppendSpaceIfNeeded { DoNotAppendSpace, AppendSpace }
 

Protected Member Functions

virtual void compile (const LoweredFunc &func)
 Emit a declaration. More...
 
virtual void compile (const Buffer<> &buffer)
 
std::string print_expr (const Expr &)
 Emit an expression as an assignment, then return the id of the resulting var. More...
 
std::string print_cast_expr (const Type &, const Expr &)
 Like print_expr, but cast the Expr to the given Type. More...
 
void print_stmt (const Stmt &)
 Emit a statement. More...
 
void create_assertion (const std::string &id_cond, const Expr &message)
 
void create_assertion (const Expr &cond, const Expr &message)
 
virtual std::string print_type (Type, AppendSpaceIfNeeded space_option=DoNotAppendSpace)
 Emit the C name for a halide type. More...
 
virtual std::string print_reinterpret (Type, const Expr &)
 Emit a statement to reinterpret an expression as another type. More...
 
virtual std::string print_name (const std::string &)
 Emit a version of a string that is a valid identifier in C (. More...
 
virtual void add_vector_typedefs (const std::set< Type > &vector_types)
 Add typedefs for vector types. More...
 
virtual std::string print_extern_call (const Call *op)
 Bottleneck to allow customization of calls to generic Extern/PureExtern calls. More...
 
std::string print_scalarized_expr (const Expr &e)
 Convert a vector Expr into a series of scalar Exprs, then reassemble into vector of original type. More...
 
virtual std::string print_assignment (Type t, const std::string &rhs)
 Emit an SSA-style assignment, and set id to the freshly generated name. More...
 
void print_heap_free (const std::string &alloc_name)
 Emit free for the heap allocation. More...
 
bool is_header ()
 Return true if only generating an interface, which may be extern "C" or C++. More...
 
bool is_extern_decl ()
 Return true if only generating an interface, which may be extern "C" or C++. More...
 
bool is_header_or_extern_decl ()
 Return true if only generating an interface, which may be extern "C" or C++. More...
 
bool is_c_plus_plus_interface ()
 Return true if generating C++ linkage. More...
 
void open_scope ()
 Open a new C scope (i.e. More...
 
void close_scope (const std::string &comment)
 Close a C scope (i.e. More...
 
void forward_declare_type_if_needed (const Type &t)
 If the Type is a handle type, emit a forward-declaration for it if we haven't already. More...
 
void set_name_mangling_mode (NameMangling mode)
 
void visit (const Variable *) override
 
void visit (const IntImm *) override
 
void visit (const UIntImm *) override
 
void visit (const StringImm *) override
 
void visit (const FloatImm *) override
 
void visit (const Cast *) 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 Max *) override
 
void visit (const Min *) 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 Call *) override
 
void visit (const Select *) override
 
void visit (const Load *) override
 
void visit (const Store *) 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 Ramp *) override
 
void visit (const Broadcast *) override
 
void visit (const Provide *) override
 
void visit (const Allocate *) override
 
void visit (const Free *) override
 
void visit (const Realize *) override
 
void visit (const IfThenElse *) override
 
void visit (const Evaluate *) override
 
void visit (const Shuffle *) override
 
void visit (const Prefetch *) override
 
void visit (const Fork *) override
 
void visit (const Acquire *) override
 
void visit (const Atomic *) override
 
void visit_binop (Type t, const Expr &a, const Expr &b, const char *op)
 
void visit (const IntImm *) override
 
void visit (const UIntImm *) override
 
void visit (const FloatImm *) override
 
void visit (const StringImm *) override
 
void visit (const Cast *) 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 Acquire *) override
 
void visit (const Store *) override
 
void visit (const Provide *) override
 
void visit (const Allocate *) override
 
void visit (const Free *) override
 
void visit (const Realize *) override
 
void visit (const Block *) override
 
void visit (const Fork *) 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
 
- Protected Member Functions inherited from Halide::Internal::IRPrinter
Indentation get_indent () const
 
void open ()
 Either emits "(" or "", depending on the value of implicit_parens. More...
 
void close ()
 Either emits ")" or "", depending on the value of implicit_parens. More...
 
void print_lets (const Let *let)
 A helper for printing a chain of lets with line breaks. More...
 
void visit (const IntImm *) override
 
void visit (const UIntImm *) override
 
void visit (const FloatImm *) override
 
void visit (const StringImm *) override
 
void visit (const Cast *) 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 Acquire *) override
 
void visit (const Store *) override
 
void visit (const Provide *) override
 
void visit (const Allocate *) override
 
void visit (const Free *) override
 
void visit (const Realize *) override
 
void visit (const Block *) override
 
void visit (const Fork *) 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
 

Static Protected Member Functions

template<typename T >
static std::string with_sep (const std::vector< T > &v, const std::string &sep)
 
template<typename T >
static std::string with_commas (const std::vector< T > &v)
 

Protected Attributes

std::string id
 An ID for the most recently generated ssa variable. More...
 
Target target
 The target being generated for. More...
 
OutputKind output_kind
 Controls whether this instance is generating declarations or definitions and whether the interface us extern "C" or C++. More...
 
std::map< std::string, std::string > cache
 A cache of generated values in scope. More...
 
Scope< Allocationallocations
 Track the types of allocations to avoid unnecessary casts. More...
 
Scope heap_allocations
 Track which allocations actually went on the heap. More...
 
bool have_user_context
 True if there is a void * __user_context parameter in the arguments. More...
 
bool extern_c_open
 Track current calling convention scope. More...
 
bool uses_gpu_for_loops
 True if at least one gpu-based for loop is used. More...
 
std::set< const halide_handle_cplusplus_type * > forward_declared
 Track which handle types have been forward-declared already. More...
 
bool inside_atomic_mutex_node
 Are we inside an atomic node that uses mutex locks? This is used for detecting deadlocks from nested atomics. More...
 
bool emit_atomic_stores
 Emit atomic store instructions? More...
 
- Protected Attributes inherited from Halide::Internal::IRPrinter
std::ostream & stream
 The stream on which we're outputting. More...
 
int indent = 0
 The current indentation level, useful for pretty-printing statements. More...
 
bool implicit_parens = false
 Certain expressions do not need parens around them, e.g. More...
 
Scope known_type
 The symbols whose types can be inferred from values printed already. More...
 

Detailed Description

This class emits C++ code equivalent to a halide Stmt.

It's mostly the same as an IRPrinter, but it's wrapped in a function definition, and some things are handled differently to be valid C++.

Definition at line 24 of file CodeGen_C.h.

Member Enumeration Documentation

◆ OutputKind

Enumerator
CHeader 
CPlusPlusHeader 
CImplementation 
CPlusPlusImplementation 
CExternDecl 
CPlusPlusExternDecl 

Definition at line 26 of file CodeGen_C.h.

◆ AppendSpaceIfNeeded

Enumerator
DoNotAppendSpace 
AppendSpace 

Definition at line 89 of file CodeGen_C.h.

Constructor & Destructor Documentation

◆ CodeGen_C()

Halide::Internal::CodeGen_C::CodeGen_C ( std::ostream &  dest,
Target  target,
OutputKind  output_kind = CImplementation,
const std::string &  include_guard = "" 
)

Initialize a C code generator pointing at a particular output stream (e.g.

a file, or std::cout)

◆ ~CodeGen_C()

Halide::Internal::CodeGen_C::~CodeGen_C ( )
override

Member Function Documentation

◆ compile() [1/3]

void Halide::Internal::CodeGen_C::compile ( const Module module)

Emit the declarations contained in the module as C code.

◆ get_target()

const Target& Halide::Internal::CodeGen_C::get_target ( ) const
inline

The target we're generating code for.

Definition at line 47 of file CodeGen_C.h.

References target.

◆ test()

static void Halide::Internal::CodeGen_C::test ( )
static

◆ add_common_macros()

void Halide::Internal::CodeGen_C::add_common_macros ( std::ostream &  dest)

Add common macros to be shared across all backends.

◆ compile() [2/3]

virtual void Halide::Internal::CodeGen_C::compile ( const LoweredFunc func)
protectedvirtual

Emit a declaration.

◆ compile() [3/3]

virtual void Halide::Internal::CodeGen_C::compile ( const Buffer<> &  buffer)
protectedvirtual

◆ print_expr()

std::string Halide::Internal::CodeGen_C::print_expr ( const Expr )
protected

Emit an expression as an assignment, then return the id of the resulting var.

◆ print_cast_expr()

std::string Halide::Internal::CodeGen_C::print_cast_expr ( const Type ,
const Expr  
)
protected

Like print_expr, but cast the Expr to the given Type.

◆ print_stmt()

void Halide::Internal::CodeGen_C::print_stmt ( const Stmt )
protected

Emit a statement.

◆ create_assertion() [1/2]

void Halide::Internal::CodeGen_C::create_assertion ( const std::string &  id_cond,
const Expr message 
)
protected

◆ create_assertion() [2/2]

void Halide::Internal::CodeGen_C::create_assertion ( const Expr cond,
const Expr message 
)
protected

◆ print_type()

virtual std::string Halide::Internal::CodeGen_C::print_type ( Type  ,
AppendSpaceIfNeeded  space_option = DoNotAppendSpace 
)
protectedvirtual

Emit the C name for a halide type.

If space_option is AppendSpace, and there should be a space between the type and the next token, one is appended. (This allows both "int foo" and "Foo *foo" to be formatted correctly. Otherwise the latter is "Foo * foo".)

Reimplemented in Halide::Internal::CodeGen_D3D12Compute_Dev::CodeGen_D3D12Compute_C, Halide::Internal::CodeGen_GLSLBase, Halide::Internal::CodeGen_Metal_Dev::CodeGen_Metal_C, Halide::Internal::CodeGen_OpenGLCompute_Dev::CodeGen_OpenGLCompute_C, and Halide::Internal::CodeGen_OpenCL_Dev::CodeGen_OpenCL_C.

◆ print_reinterpret()

virtual std::string Halide::Internal::CodeGen_C::print_reinterpret ( Type  ,
const Expr  
)
protectedvirtual

◆ print_name()

virtual std::string Halide::Internal::CodeGen_C::print_name ( const std::string &  )
protectedvirtual

Emit a version of a string that is a valid identifier in C (.

is replaced with _)

Reimplemented in Halide::Internal::CodeGen_GLSLBase.

◆ add_vector_typedefs()

virtual void Halide::Internal::CodeGen_C::add_vector_typedefs ( const std::set< Type > &  vector_types)
protectedvirtual

Add typedefs for vector types.

Not needed for OpenCL, might use different syntax for other C-like languages.

Reimplemented in Halide::Internal::CodeGen_OpenCL_Dev::CodeGen_OpenCL_C.

◆ print_extern_call()

virtual std::string Halide::Internal::CodeGen_C::print_extern_call ( const Call op)
protectedvirtual

◆ print_scalarized_expr()

std::string Halide::Internal::CodeGen_C::print_scalarized_expr ( const Expr e)
protected

Convert a vector Expr into a series of scalar Exprs, then reassemble into vector of original type.


◆ print_assignment()

virtual std::string Halide::Internal::CodeGen_C::print_assignment ( Type  t,
const std::string &  rhs 
)
protectedvirtual

Emit an SSA-style assignment, and set id to the freshly generated name.

Return id.

Reimplemented in Halide::Internal::CodeGen_D3D12Compute_Dev::CodeGen_D3D12Compute_C.

◆ print_heap_free()

void Halide::Internal::CodeGen_C::print_heap_free ( const std::string &  alloc_name)
protected

Emit free for the heap allocation.

◆ is_header()

bool Halide::Internal::CodeGen_C::is_header ( )
inlineprotected

Return true if only generating an interface, which may be extern "C" or C++.

Definition at line 124 of file CodeGen_C.h.

References CHeader, CPlusPlusHeader, and output_kind.

Referenced by is_header_or_extern_decl().

◆ is_extern_decl()

bool Halide::Internal::CodeGen_C::is_extern_decl ( )
inlineprotected

Return true if only generating an interface, which may be extern "C" or C++.

Definition at line 130 of file CodeGen_C.h.

References CExternDecl, CPlusPlusExternDecl, and output_kind.

Referenced by is_header_or_extern_decl().

◆ is_header_or_extern_decl()

bool Halide::Internal::CodeGen_C::is_header_or_extern_decl ( )
inlineprotected

Return true if only generating an interface, which may be extern "C" or C++.

Definition at line 136 of file CodeGen_C.h.

References is_extern_decl(), and is_header().

◆ is_c_plus_plus_interface()

bool Halide::Internal::CodeGen_C::is_c_plus_plus_interface ( )
inlineprotected

Return true if generating C++ linkage.

Definition at line 141 of file CodeGen_C.h.

References CPlusPlusExternDecl, CPlusPlusHeader, CPlusPlusImplementation, and output_kind.

◆ open_scope()

void Halide::Internal::CodeGen_C::open_scope ( )
protected

Open a new C scope (i.e.

throw in a brace, increase the indent)

◆ close_scope()

void Halide::Internal::CodeGen_C::close_scope ( const std::string &  comment)
protected

Close a C scope (i.e.

throw in an end brace, decrease the indent)

◆ forward_declare_type_if_needed()

void Halide::Internal::CodeGen_C::forward_declare_type_if_needed ( const Type t)
protected

If the Type is a handle type, emit a forward-declaration for it if we haven't already.

◆ set_name_mangling_mode()

void Halide::Internal::CodeGen_C::set_name_mangling_mode ( NameMangling  mode)
protected

◆ visit() [1/90]

void Halide::Internal::CodeGen_C::visit ( const Variable )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [2/90]

void Halide::Internal::CodeGen_C::visit ( const IntImm )
overrideprotectedvirtual

◆ visit() [3/90]

void Halide::Internal::CodeGen_C::visit ( const UIntImm )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

Reimplemented in Halide::Internal::CodeGen_GLSLBase.

◆ visit() [4/90]

void Halide::Internal::CodeGen_C::visit ( const StringImm )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [5/90]

void Halide::Internal::CodeGen_C::visit ( const FloatImm )
overrideprotectedvirtual

◆ visit() [6/90]

◆ visit() [7/90]

void Halide::Internal::CodeGen_C::visit ( const Add )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [8/90]

void Halide::Internal::CodeGen_C::visit ( const Sub )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [9/90]

void Halide::Internal::CodeGen_C::visit ( const Mul )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [10/90]

void Halide::Internal::CodeGen_C::visit ( const Div )
overrideprotectedvirtual

◆ visit() [11/90]

void Halide::Internal::CodeGen_C::visit ( const Mod )
overrideprotectedvirtual

◆ visit() [12/90]

◆ visit() [13/90]

◆ visit() [14/90]

void Halide::Internal::CodeGen_C::visit ( const EQ )
overrideprotectedvirtual

◆ visit() [15/90]

void Halide::Internal::CodeGen_C::visit ( const NE )
overrideprotectedvirtual

◆ visit() [16/90]

void Halide::Internal::CodeGen_C::visit ( const LT )
overrideprotectedvirtual

◆ visit() [17/90]

void Halide::Internal::CodeGen_C::visit ( const LE )
overrideprotectedvirtual

◆ visit() [18/90]

void Halide::Internal::CodeGen_C::visit ( const GT )
overrideprotectedvirtual

◆ visit() [19/90]

void Halide::Internal::CodeGen_C::visit ( const GE )
overrideprotectedvirtual

◆ visit() [20/90]

void Halide::Internal::CodeGen_C::visit ( const And )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [21/90]

void Halide::Internal::CodeGen_C::visit ( const Or )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [22/90]

void Halide::Internal::CodeGen_C::visit ( const Not )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [23/90]

◆ visit() [24/90]

◆ visit() [25/90]

◆ visit() [26/90]

◆ visit() [27/90]

void Halide::Internal::CodeGen_C::visit ( const Let )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

Reimplemented in Halide::Internal::CodeGen_GLSL.

◆ visit() [28/90]

void Halide::Internal::CodeGen_C::visit ( const LetStmt )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [29/90]

void Halide::Internal::CodeGen_C::visit ( const AssertStmt )
overrideprotectedvirtual

◆ visit() [30/90]

void Halide::Internal::CodeGen_C::visit ( const ProducerConsumer )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [31/90]

◆ visit() [32/90]

◆ visit() [33/90]

◆ visit() [34/90]

void Halide::Internal::CodeGen_C::visit ( const Provide )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [35/90]

◆ visit() [36/90]

◆ visit() [37/90]

void Halide::Internal::CodeGen_C::visit ( const Realize )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [38/90]

void Halide::Internal::CodeGen_C::visit ( const IfThenElse )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [39/90]

◆ visit() [40/90]

void Halide::Internal::CodeGen_C::visit ( const Shuffle )
overrideprotectedvirtual

◆ visit() [41/90]

void Halide::Internal::CodeGen_C::visit ( const Prefetch )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [42/90]

void Halide::Internal::CodeGen_C::visit ( const Fork )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [43/90]

void Halide::Internal::CodeGen_C::visit ( const Acquire )
overrideprotectedvirtual

Reimplemented from Halide::Internal::IRVisitor.

◆ visit() [44/90]

◆ visit_binop()

void Halide::Internal::CodeGen_C::visit_binop ( Type  t,
const Expr a,
const Expr b,
const char *  op 
)
protected

◆ with_sep()

template<typename T >
static std::string Halide::Internal::CodeGen_C::with_sep ( const std::vector< T > &  v,
const std::string &  sep 
)
inlinestaticprotected

Definition at line 231 of file CodeGen_C.h.

◆ with_commas()

template<typename T >
static std::string Halide::Internal::CodeGen_C::with_commas ( const std::vector< T > &  v)
inlinestaticprotected

Definition at line 243 of file CodeGen_C.h.

◆ visit() [45/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [46/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [47/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [48/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [49/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [50/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [51/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [52/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [53/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [54/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [55/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [56/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [57/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [58/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [59/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [60/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [61/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [62/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [63/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [64/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [65/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [66/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [67/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [68/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [69/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [70/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [71/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [72/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [73/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [74/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [75/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [76/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [77/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [78/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [79/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [80/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [81/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [82/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [83/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [84/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [85/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [86/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [87/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [88/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [89/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

◆ visit() [90/90]

void Halide::Internal::IRPrinter::visit
overrideprotected

Member Data Documentation

◆ id

std::string Halide::Internal::CodeGen_C::id
protected

An ID for the most recently generated ssa variable.

Definition at line 64 of file CodeGen_C.h.

◆ target

Target Halide::Internal::CodeGen_C::target
protected

The target being generated for.

Definition at line 67 of file CodeGen_C.h.

Referenced by get_target().

◆ output_kind

OutputKind Halide::Internal::CodeGen_C::output_kind
protected

Controls whether this instance is generating declarations or definitions and whether the interface us extern "C" or C++.

Definition at line 71 of file CodeGen_C.h.

Referenced by is_c_plus_plus_interface(), is_extern_decl(), and is_header().

◆ cache

std::map<std::string, std::string> Halide::Internal::CodeGen_C::cache
protected

A cache of generated values in scope.

Definition at line 74 of file CodeGen_C.h.

◆ allocations

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

Track the types of allocations to avoid unnecessary casts.

Definition at line 158 of file CodeGen_C.h.

◆ heap_allocations

Scope Halide::Internal::CodeGen_C::heap_allocations
protected

Track which allocations actually went on the heap.

Definition at line 161 of file CodeGen_C.h.

◆ have_user_context

bool Halide::Internal::CodeGen_C::have_user_context
protected

True if there is a void * __user_context parameter in the arguments.

Definition at line 164 of file CodeGen_C.h.

◆ extern_c_open

bool Halide::Internal::CodeGen_C::extern_c_open
protected

Track current calling convention scope.

Definition at line 167 of file CodeGen_C.h.

◆ uses_gpu_for_loops

bool Halide::Internal::CodeGen_C::uses_gpu_for_loops
protected

True if at least one gpu-based for loop is used.

Definition at line 170 of file CodeGen_C.h.

◆ forward_declared

std::set<const halide_handle_cplusplus_type *> Halide::Internal::CodeGen_C::forward_declared
protected

Track which handle types have been forward-declared already.

Definition at line 173 of file CodeGen_C.h.

◆ inside_atomic_mutex_node

bool Halide::Internal::CodeGen_C::inside_atomic_mutex_node
protected

Are we inside an atomic node that uses mutex locks? This is used for detecting deadlocks from nested atomics.

Definition at line 249 of file CodeGen_C.h.

◆ emit_atomic_stores

bool Halide::Internal::CodeGen_C::emit_atomic_stores
protected

Emit atomic store instructions?

Definition at line 252 of file CodeGen_C.h.


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