Halide
CodeGen_Internal.h File Reference
#include <memory>
#include <string>
#include "Closure.h"
#include "Expr.h"
#include "Scope.h"
#include "Target.h"

Go to the source code of this file.

Classes

class  llvm::IRBuilder< typename, typename >
 

Namespaces

 llvm
 
 Halide
 This file defines the class FunctionDAG, which is our representation of a Halide pipeline, and contains methods to using Halide's bounds tools to query properties of it.
 
 Halide::Internal
 

Functions

llvm::StructType * Halide::Internal::build_closure_type (const Closure &closure, llvm::StructType *halide_buffer_t_type, llvm::LLVMContext *context)
 The llvm type of a struct containing all of the externally referenced state of a Closure. More...
 
void Halide::Internal::pack_closure (llvm::StructType *type, llvm::Value *dst, const Closure &closure, const Scope< llvm::Value * > &src, llvm::StructType *halide_buffer_t_type, llvm::IRBuilder< llvm::ConstantFolder, llvm::IRBuilderDefaultInserter > *builder)
 Emit code that builds a struct containing all the externally referenced state. More...
 
void Halide::Internal::unpack_closure (const Closure &closure, Scope< llvm::Value * > &dst, llvm::StructType *type, llvm::Value *src, llvm::IRBuilder< llvm::ConstantFolder, llvm::IRBuilderDefaultInserter > *builder)
 Emit code that unpacks a struct containing all the externally referenced state into a symbol table. More...
 
llvm::Type * Halide::Internal::llvm_type_of (llvm::LLVMContext *context, Halide::Type t)
 Get the llvm type equivalent to a given halide type. More...
 
int Halide::Internal::get_vector_num_elements (llvm::Type *)
 Get the number of elements in an llvm vector type, or return 1 if it's not a vector type. More...
 
llvm::Type * Halide::Internal::get_vector_element_type (llvm::Type *)
 Get the scalar type of an llvm vector type. More...
 
int Halide::Internal::element_count (int e)
 
llvm::Type * Halide::Internal::get_vector_type (llvm::Type *, int)
 
bool Halide::Internal::function_takes_user_context (const std::string &name)
 Which built-in functions require a user-context first argument? More...
 
bool Halide::Internal::can_allocation_fit_on_stack (int64_t size)
 Given a size (in bytes), return True if the allocation size can fit on the stack; otherwise, return False. More...
 
void Halide::Internal::get_target_options (const llvm::Module &module, llvm::TargetOptions &options, std::string &mcpu, std::string &mattrs)
 Given an llvm::Module, set llvm:TargetOptions, cpu and attr information. More...
 
void Halide::Internal::clone_target_options (const llvm::Module &from, llvm::Module &to)
 Given two llvm::Modules, clone target options from one to the other. More...
 
std::unique_ptr< llvm::TargetMachine > Halide::Internal::make_target_machine (const llvm::Module &module)
 Given an llvm::Module, get or create an llvm:TargetMachine. More...
 
void Halide::Internal::set_function_attributes_for_target (llvm::Function *, Target)
 Set the appropriate llvm Function attributes given a Target. More...
 
void Halide::Internal::embed_bitcode (llvm::Module *M, const std::string &halide_command)
 Save a copy of the llvm IR currently represented by the module as data in the __LLVM,__bitcode section. More...
 
Expr Halide::Internal::lower_int_uint_div (const Expr &a, const Expr &b)
 Given a Halide Euclidean division/mod operation, do constant optimizations and possibly call lower_euclidean_div/lower_euclidean_mod if necessary. More...
 
Expr Halide::Internal::lower_int_uint_mod (const Expr &a, const Expr &b)
 Given a Halide Euclidean division/mod operation, do constant optimizations and possibly call lower_euclidean_div/lower_euclidean_mod if necessary. More...
 
Expr Halide::Internal::lower_euclidean_div (Expr a, Expr b)
 Given a Halide Euclidean division/mod operation, define it in terms of div_round_to_zero or mod_round_to_zero. More...
 
Expr Halide::Internal::lower_euclidean_mod (Expr a, Expr b)
 Given a Halide Euclidean division/mod operation, define it in terms of div_round_to_zero or mod_round_to_zero. More...
 
Expr Halide::Internal::lower_signed_shift_left (const Expr &a, const Expr &b)
 Given a Halide shift operation with a signed shift amount (may be negative), define an equivalent expression using only shifts by unsigned amounts. More...
 
Expr Halide::Internal::lower_signed_shift_right (const Expr &a, const Expr &b)
 Given a Halide shift operation with a signed shift amount (may be negative), define an equivalent expression using only shifts by unsigned amounts. More...
 
Expr Halide::Internal::lower_int_uint_div (const Expr &a, const Expr &b)
 Given a Halide Euclidean division/mod operation, do constant optimizations and possibly call lower_euclidean_div/lower_euclidean_mod if necessary. More...
 
Expr Halide::Internal::lower_int_uint_mod (const Expr &a, const Expr &b)
 Given a Halide Euclidean division/mod operation, do constant optimizations and possibly call lower_euclidean_div/lower_euclidean_mod if necessary. More...
 
Expr Halide::Internal::lower_euclidean_div (Expr a, Expr b)
 Given a Halide Euclidean division/mod operation, define it in terms of div_round_to_zero or mod_round_to_zero. More...
 
Expr Halide::Internal::lower_euclidean_mod (Expr a, Expr b)
 Given a Halide Euclidean division/mod operation, define it in terms of div_round_to_zero or mod_round_to_zero. More...
 
Expr Halide::Internal::lower_signed_shift_left (const Expr &a, const Expr &b)
 Given a Halide shift operation with a signed shift amount (may be negative), define an equivalent expression using only shifts by unsigned amounts. More...
 
Expr Halide::Internal::lower_signed_shift_right (const Expr &a, const Expr &b)
 Given a Halide shift operation with a signed shift amount (may be negative), define an equivalent expression using only shifts by unsigned amounts. More...
 

Detailed Description

Defines functionality that's useful to multiple target-specific CodeGen paths, but shouldn't live in CodeGen_LLVM.h (because that's the front-end-facing interface to CodeGen).

Definition in file CodeGen_Internal.h.