Loading...
Searching...
No Matches
CodeGen_Internal.h File Reference

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). More...

`#include <memory>`
`#include <string>`
`#include "Closure.h"`
`#include "Expr.h"`
`#include "Scope.h"`

Go to the source code of this file.

## Namespaces

namespace | llvm
namespace | 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.
namespace | Halide::Internal

## Functions

llvm::Type * | Halide::Internal::get_vector_element_type (llvm::Type *)
| Get the scalar type of an llvm vector type.
bool | Halide::Internal::function_takes_user_context (const std::string &name)
| Which built-in functions require a user-context first argument?
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.
std::pair< Expr, Expr > | Halide::Internal::long_div_mod_round_to_zero (const Expr &a, const Expr &b, std::optional< uint64_t > max_abs=std::nullopt)
| Does a {div/mod}_round_to_zero using binary long division for int/uint.
Expr | Halide::Internal::lower_mux (const Call *mux)
| Reduce a mux intrinsic to a select tree.
Expr | Halide::Internal::lower_round_to_nearest_ties_to_even (const Expr &)
| An vectorizable implementation of Halide::round that doesn't depend on any standard library being present.
void | Halide::Internal::get_target_options (const llvm::Module &module, llvm::TargetOptions &options)
| Given an llvm::Module, set llvm:TargetOptions information.
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.
std::unique_ptr< llvm::TargetMachine > | Halide::Internal::make_target_machine (const llvm::Module &module)
| Given an llvm::Module, get or create an llvm:TargetMachine.
void | Halide::Internal::set_function_attributes_from_halide_target_options (llvm::Function &)
| Set the appropriate llvm Function attributes given the Halide Target.
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.
Expr | Halide::Internal::lower_int_uint_div (const Expr &a, const Expr &b, bool round_to_zero=false)
| Given a Halide Euclidean division/mod operation, do constant optimizations and possibly call lower_euclidean_div/lower_euclidean_mod if necessary.
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.
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.
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.
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.
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.
Expr | Halide::Internal::lower_extract_bits (const Call *c)
| Reduce bit extraction and concatenation to bit ops.
Expr | Halide::Internal::lower_concat_bits (const Call *c)
| Reduce bit extraction and concatenation to bit ops.

## 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.