Loading...
Searching...
No Matches
Halide::Internal::CodeGen_GPU_C Class Reference

A base class for GPU backends that require C-like shader output. More...

`#include <CodeGen_GPU_Dev.h>`

Inheritance diagram for Halide::Internal::CodeGen_GPU_C:

## Public Types

enum class | VectorDeclarationStyle { CLikeSyntax = 0 , OpenCLSyntax = 1 , WGSLSyntax = 2 }
| OpenCL and WGSL use different syntax than C for immediate vectors. More...
Public Types inherited from Halide::Internal::CodeGen_C
enum | OutputKind { CHeader , CPlusPlusHeader , CImplementation , CPlusPlusImplementation , CExternDecl , CPlusPlusExternDecl , CPlusPlusFunctionInfoHeader }

## Public Member Functions

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

## Protected Member Functions

void | visit (const Shuffle *op) override
void | visit (const Call *op) override
std::string | print_extern_call (const Call *op) override
| Bottleneck to allow customization of calls to generic Extern/PureExtern calls.
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 Reinterpret *) 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 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 Prefetch *) override
void | visit (const Fork *) override
void | visit (const Acquire *) override
void | visit (const Atomic *) override
void | visit (const VectorReduce *) override
void | visit (const Block *) override
void | visit (const HoistedStorage *) override
Protected Member Functions inherited from Halide::Internal::CodeGen_C
void | compile (const LoweredFunc &func, const MetadataNameMap &metadata_name_map)
| Emit a declaration.
void | compile (const Buffer<> &buffer)
virtual Stmt | preprocess_function_body (const Stmt &stmt)
| This is a hook that subclasses can use to transform a function body just before it is emitted – e.g., to transform the IR to code that is easier to recognize and emit.
std::string | print_expr (const Expr &)
| Emit an expression as an assignment, then return the id of the resulting var.
std::string | print_cast_expr (const Type &, const Expr &)
| Like print_expr, but cast the Expr to the given Type.
void | print_stmt (const Stmt &)
| Emit a statement.
void | create_assertion (const std::string &id_cond, const Expr &message)
void | create_assertion (const Expr &cond, const Expr &message)
Expr | scalarize_vector_reduce (const VectorReduce *op)
virtual std::string | print_type (Type, AppendSpaceIfNeeded space_option=DoNotAppendSpace)
| Emit the C name for a halide type.
virtual std::string | print_reinterpret (Type, const Expr &)
| Emit a statement to reinterpret an expression as another type.
virtual std::string | print_name (const std::string &)
| Emit a version of a string that is a valid identifier in C (.
virtual void | add_platform_prologue ()
| Add platform specific prologue.
virtual void | add_vector_typedefs (const std::set< Type > &vector_types)
| Add typedefs for vector types.
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.
virtual std::string | print_assignment (Type t, const std::string &rhs)
| Emit an SSA-style assignment, and set id to the freshly generated name.
void | print_heap_free (const std::string &alloc_name)
| Emit free for the heap allocation.
bool | is_header ()
| Return true if only generating an interface, which may be extern "C" or C++.
bool | is_extern_decl ()
| Return true if only generating an interface, which may be extern "C" or C++.
bool | is_header_or_extern_decl ()
| Return true if only generating an interface, which may be extern "C" or C++.
bool | is_c_plus_plus_interface ()
| Return true if generating C++ linkage.
void | open_scope ()
| Open a new C scope (i.e.
void | close_scope (const std::string &comment)
| Close a C scope (i.e.
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.
void | set_name_mangling_mode (NameMangling mode)
void | visit_binop (Type t, const Expr &a, const Expr &b, const char *op)
void | visit_relop (Type t, const Expr &a, const Expr &b, const char *scalar_op, const char *vector_op)
virtual bool | is_stack_private_to_thread () const
| Some architectures have private memory for the call stack; this means a thread cannot hand pointers to stack memory to another thread.
void | emit_argv_wrapper (const std::string &function_name, const std::vector< LoweredArgument > &args)
void | emit_metadata_getter (const std::string &function_name, const std::vector< LoweredArgument > &args, const MetadataNameMap &metadata_name_map)
void | emit_constexpr_function_info (const std::string &function_name, const std::vector< LoweredArgument > &args, const MetadataNameMap &metadata_name_map)
void | emit_halide_free_helper (const std::string &alloc_name, const std::string &free_function)
Protected Member Functions inherited from Halide::Internal::IRPrinter
Indentation | get_indent () const
template<typename T>
Ansi< T > | hl (const T &t)
template<typename T>
Ansi< T > | kw (const T &t)
template<typename T>
Ansi< T > | imm_int (const T &t)
template<typename T>
Ansi< T > | imm_float (const T &t)
template<typename T>
Ansi< T > | imm_str (const T &t)
template<typename T>
Ansi< T > | var (const T &t)
template<typename T>
Ansi< T > | buf (const T &t)
template<typename T>
Ansi< T > | fn (const T &t)
template<typename T>
Ansi< T > | type (const T &t)
template<typename T>
Ansi< T > | typep (const T &t)
template<typename T>
Ansi< T > | paren (const T &t, bool bold=true, int d=-1)
void | open ()
| Either emits "(" or "", depending on the value of implicit_parens.
void | close ()
| Either emits ")" or "", depending on the value of implicit_parens.
void | openf ()
| Emits "(" always.
void | openf (const char *name)
| Emits "name(" always.
void | closef ()
| Emits ")" always.
void | print_lets (const Let *let)
| A helper for printing a chain of lets with line breaks.
void | print_braced_stmt (const Stmt &, int extra_indent=2)
| A helper for printing a braced statement.
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 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 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
void | visit (const HoistedStorage *) override

## Protected Attributes

VectorDeclarationStyle | vector_declaration_style = VectorDeclarationStyle::CLikeSyntax
bool | abs_returns_unsigned_type {false}
Protected Attributes inherited from Halide::Internal::CodeGen_C
IntegerSuffixStyle | integer_suffix_style = IntegerSuffixStyle::PlainC
| How to emit 64-bit integer constants.
std::string | id
| An ID for the most recently generated ssa variable.
Target | target
| The target being generated for.
OutputKind | output_kind
| Controls whether this instance is generating declarations or definitions and whether the interface us extern "C" or C++.
std::map< std::string, std::string > | cache
| A cache of generated values in scope.
std::unordered_map< std::string, std::string > | extern_function_name_map
Scope< Allocation > | allocations
| Track the types of allocations to avoid unnecessary casts.
Scope | heap_allocations
| Track which allocations actually went on the heap.
bool | have_user_context
| True if there is a void * __user_context parameter in the arguments.
bool | extern_c_open = false
| Track current calling convention scope.
bool | uses_gpu_for_loops
| True if at least one gpu-based for loop is used.
std::set< const halide_handle_cplusplus_type * > | forward_declared
| Track which handle types have been forward-declared already.
bool | inside_atomic_mutex_node = false
| Are we inside an atomic node that uses mutex locks?
bool | emit_atomic_stores = false
| Emit atomic store instructions?
bool | using_vector_typedefs = false
| true if add_vector_typedefs() has been called.
Protected Attributes inherited from Halide::Internal::IRPrinter
std::ostream & | stream
| The stream on which we're outputting.
int | indent = 0
| The current indentation level, useful for pretty-printing statements.
bool | implicit_parens = false
| Certain expressions do not need parens around them, e.g.
bool | is_summary = false
| Print only a summary of a statement, with sub-statements replaced by ellipses (...).
bool | ansi = false
int | paren_depth = 0
const char * | ansi_hl = ""
const char * | ansi_dim = ""
const char * | ansi_kw = ""
const char * | ansi_imm_int = ""
const char * | ansi_imm_float = ""
const char * | ansi_imm_str = ""
const char * | ansi_var = ""
const char * | ansi_buf = ""
const char * | ansi_fn = ""
const char * | ansi_type = ""
const char * | ansi_reset_col = ""
const char * | ansi_reset = ""
Scope | known_type
| The symbols whose types can be inferred from values printed already.

## Additional Inherited Members

Static Public Member Functions inherited from Halide::Internal::CodeGen_C
static void | test ()
Static Public Member Functions inherited from Halide::Internal::IRPrinter
static void | test ()
Protected Types inherited from Halide::Internal::CodeGen_C
enum class | IntegerSuffixStyle { PlainC = 0 , OpenCL = 1 , HLSL = 2 }
enum | AppendSpaceIfNeeded { DoNotAppendSpace , AppendSpace }
Static Protected Member Functions inherited from Halide::Internal::CodeGen_C
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)

## Detailed Description

A base class for GPU backends that require C-like shader output.

GPU backends derive from and specialize this class.

Definition at line 84 of file CodeGen_GPU_Dev.h.

## Member Enumeration Documentation

## VectorDeclarationStyle

enum class Halide::Internal::CodeGen_GPU_C::VectorDeclarationStyle

strong

OpenCL and WGSL use different syntax than C for immediate vectors.

This enum defines which style should be used by the backend.

Enumerator
CLikeSyntax |
OpenCLSyntax |
WGSLSyntax |

Definition at line 88 of file CodeGen_GPU_Dev.h.

## Constructor & Destructor Documentation

## CodeGen_GPU_C()

Halide::Internal::CodeGen_GPU_C::CodeGen_GPU_C | ( | std::ostream & | s,
|  | Target | t )

inline

Definition at line 94 of file CodeGen_GPU_Dev.h.

References Halide::Internal::CodeGen_C::CodeGen_C().

## Member Function Documentation

## visit() [1/48]

void Halide::Internal::CodeGen_GPU_C::visit | ( | const Shuffle * | op | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [2/48]

void Halide::Internal::CodeGen_GPU_C::visit | ( | const Call * | op | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## print_extern_call()

std::string Halide::Internal::CodeGen_GPU_C::print_extern_call | ( | const Call * | op | ) |

override protected virtual

Bottleneck to allow customization of calls to generic Extern/PureExtern calls.

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [3/48]

void Halide::Internal::CodeGen_C::visit | ( | const Variable * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [4/48]

void Halide::Internal::CodeGen_C::visit | ( | const IntImm * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [5/48]

void Halide::Internal::CodeGen_C::visit | ( | const UIntImm * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [6/48]

void Halide::Internal::CodeGen_C::visit | ( | const StringImm * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [7/48]

void Halide::Internal::CodeGen_C::visit | ( | const FloatImm * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [8/48]

void Halide::Internal::CodeGen_C::visit | ( | const Cast * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [9/48]

void Halide::Internal::CodeGen_C::visit | ( | const Reinterpret * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [10/48]

void Halide::Internal::CodeGen_C::visit | ( | const Add * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [11/48]

void Halide::Internal::CodeGen_C::visit | ( | const Sub * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [12/48]

void Halide::Internal::CodeGen_C::visit | ( | const Mul * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [13/48]

void Halide::Internal::CodeGen_C::visit | ( | const Div * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [14/48]

void Halide::Internal::CodeGen_C::visit | ( | const Mod * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [15/48]

void Halide::Internal::CodeGen_C::visit | ( | const Max * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [16/48]

void Halide::Internal::CodeGen_C::visit | ( | const Min * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [17/48]

void Halide::Internal::CodeGen_C::visit | ( | const EQ * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [18/48]

void Halide::Internal::CodeGen_C::visit | ( | const NE * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [19/48]

void Halide::Internal::CodeGen_C::visit | ( | const LT * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [20/48]

void Halide::Internal::CodeGen_C::visit | ( | const LE * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [21/48]

void Halide::Internal::CodeGen_C::visit | ( | const GT * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [22/48]

void Halide::Internal::CodeGen_C::visit | ( | const GE * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [23/48]

void Halide::Internal::CodeGen_C::visit | ( | const And * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [24/48]

void Halide::Internal::CodeGen_C::visit | ( | const Or * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [25/48]

void Halide::Internal::CodeGen_C::visit | ( | const Not * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [26/48]

void Halide::Internal::CodeGen_C::visit | ( | const Select * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [27/48]

void Halide::Internal::CodeGen_C::visit | ( | const Load * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [28/48]

void Halide::Internal::CodeGen_C::visit | ( | const Store * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [29/48]

void Halide::Internal::CodeGen_C::visit | ( | const Let * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [30/48]

void Halide::Internal::CodeGen_C::visit | ( | const LetStmt * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [31/48]

void Halide::Internal::CodeGen_C::visit | ( | const AssertStmt * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [32/48]

void Halide::Internal::CodeGen_C::visit | ( | const ProducerConsumer * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [33/48]

void Halide::Internal::CodeGen_C::visit | ( | const For * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [34/48]

void Halide::Internal::CodeGen_C::visit | ( | const Ramp * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [35/48]

void Halide::Internal::CodeGen_C::visit | ( | const Broadcast * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [36/48]

void Halide::Internal::CodeGen_C::visit | ( | const Provide * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [37/48]

void Halide::Internal::CodeGen_C::visit | ( | const Allocate * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [38/48]

void Halide::Internal::CodeGen_C::visit | ( | const Free * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [39/48]

void Halide::Internal::CodeGen_C::visit | ( | const Realize * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [40/48]

void Halide::Internal::CodeGen_C::visit | ( | const IfThenElse * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [41/48]

void Halide::Internal::CodeGen_C::visit | ( | const Evaluate * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [42/48]

void Halide::Internal::CodeGen_C::visit | ( | const Prefetch * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [43/48]

void Halide::Internal::CodeGen_C::visit | ( | const Fork * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [44/48]

void Halide::Internal::CodeGen_C::visit | ( | const Acquire * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [45/48]

void Halide::Internal::CodeGen_C::visit | ( | const Atomic * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [46/48]

void Halide::Internal::CodeGen_C::visit | ( | const VectorReduce * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [47/48]

void Halide::Internal::IRPrinter::visit | ( | const Block * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## visit() [48/48]

void Halide::Internal::IRPrinter::visit | ( | const HoistedStorage * |  | ) |

override protected virtual

Reimplemented from Halide::Internal::CodeGen_C.

## Member Data Documentation

## vector_declaration_style

VectorDeclarationStyle Halide::Internal::CodeGen_GPU_C::vector_declaration_style = VectorDeclarationStyle::CLikeSyntax

protected

Definition at line 105 of file CodeGen_GPU_Dev.h.

## abs_returns_unsigned_type

bool Halide::Internal::CodeGen_GPU_C::abs_returns_unsigned_type {false}

protected

Definition at line 106 of file CodeGen_GPU_Dev.h.

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

- src/CodeGen_GPU_Dev.h