Tiramisu Compiler
|
A class for code generation. More...
#include <core.h>
Static Public Member Functions | |
static void | update_producer_expr_name (tiramisu::computation *comp, std::string name_to_replace, std::string replace_with) |
Traverse a tiramisu expression (current_exp ) until an expression with the specified name is found. More... | |
Static Protected Member Functions | |
static std::map< std::string, isl_ast_expr * > | compute_iterators_map (tiramisu::computation *comp, isl_ast_build *build) |
static std::vector< tiramisu::computation * > | get_computation_by_node (tiramisu::function *fct, isl_ast_node *node) |
Get the computation associated with a node. More... | |
static std::vector< tiramisu::computation * > | filter_computations_by_domain (std::vector< tiramisu::computation * > comp_vec, isl_union_set *node_domain) |
Traverse the vector of computations comp_vec and return the computations that have a domain that intersects with domain . More... | |
static void | get_rhs_accesses (const tiramisu::function *func, const tiramisu::computation *comp, std::vector< isl_map * > &accesses, bool return_buffer_accesses) |
Compute the accesses of the RHS of the computation comp and store them in the accesses vector. More... | |
static isl_constraint * | get_constraint_for_access (int access_dimension, const tiramisu::expr &access_expression, isl_map *access_relation, isl_constraint *cst, int coeff, const tiramisu::function *fct) |
Analyze the access_expression and return a set of constraints that correspond to the access pattern of the access_expression. More... | |
static Halide::Internal::Stmt | halide_stmt_from_isl_node (const tiramisu::function &fct, isl_ast_node *node, int level, std::vector< std::pair< std::string, std::string >> &tagged_stmts, bool is_a_child_block) |
Generate a Halide statement from an ISL ast node object in the ISL ast tree. More... | |
static Halide::Internal::Stmt | make_halide_block (const Halide::Internal::Stmt &first, const Halide::Internal::Stmt &second) |
static Halide::Internal::Stmt | make_buffer_alloc (buffer *b, const std::vector< Halide::Expr > &extents, Halide::Internal::Stmt &stmt) |
static Halide::Internal::Stmt | make_buffer_free (buffer *b) |
static Halide::Expr | halide_expr_from_tiramisu_expr (const tiramisu::function *fct, std::vector< isl_ast_expr * > &index_expr, const tiramisu::expr &tiramisu_expr, tiramisu::computation *comp=nullptr) |
Create a Halide expression from a Tiramisu expression. More... | |
static tiramisu::expr | replace_accesses (const tiramisu::function *func, std::vector< isl_ast_expr * > &index_expr, const tiramisu::expr &tiramisu_expr) |
static std::string | get_buffer_name (const tiramisu::computation *) |
static tiramisu::expr | comp_to_buffer (tiramisu::computation *comp, std::vector< isl_ast_expr * > &ie, const tiramisu::expr *expr=nullptr) |
static isl_ast_node * | stmt_code_generator (isl_ast_node *node, isl_ast_build *build, void *user) |
Retrieve the access function of the ISL AST leaf node (which represents a computation). More... | |
static void | traverse_expr_and_extract_accesses (const tiramisu::function *fct, const tiramisu::computation *comp, const tiramisu::expr &exp, std::vector< isl_map * > &accesses, bool return_buffer_accesses) |
Traverse a tiramisu expression (exp ) and extract the access relations from the access operation passed in exp . More... | |
static void | _update_producer_expr_name (tiramisu::expr ¤t_exp, std::string name_to_replace, std::string replace_with) |
Traverse a tiramisu expression (current_exp ) until an expression with the specified name is found. More... | |
static Halide::Expr | linearize_access (int dims, const halide_dimension_t *shape, isl_ast_expr *index_expr) |
Linearize a multidimensional access to a Halide buffer. More... | |
static Halide::Expr | linearize_access (int dims, const halide_dimension_t *shape, std::vector< tiramisu::expr > index_expr) |
Linearize a multidimensional access to a Halide buffer. More... | |
static Halide::Expr | linearize_access (int dims, std::vector< Halide::Expr > &strides, std::vector< tiramisu::expr > index_expr) |
Linearize a multidimensional access to a Halide buffer. More... | |
static Halide::Expr | linearize_access (int dims, std::vector< Halide::Expr > &strides, isl_ast_expr *index_expr) |
Linearize a multidimensional access to a Halide buffer. More... | |
static tiramisu::expr | linearize_access (int dims, std::vector< tiramisu::expr > &strides, std::vector< tiramisu::expr > index_expr) |
Linearize a multidimensional access to a Halide buffer. More... | |
static tiramisu::expr | linearize_access (int dims, std::vector< tiramisu::expr > &strides, isl_ast_expr *index_expr) |
Linearize a multidimensional access to a Halide buffer. More... | |
|
staticprotected |
Traverse a tiramisu expression (current_exp
) until an expression with the specified name is found.
Replace that name with a new name. Replaces all occurrences.
|
staticprotected |
|
staticprotected |
|
staticprotected |
Traverse the vector of computations comp_vec
and return the computations that have a domain that intersects with domain
.
|
staticprotected |
|
staticprotected |
Get the computation associated with a node.
|
staticprotected |
Analyze the access_expression
and return a set of constraints that correspond to the access pattern of the access_expression.
access_dimension: The dimension of the access. For example, the access C0(i0, i1, i2) have three access dimensions: i0, i1 and i2. access_expression: The expression of the access. This expression is parsed recursively (by calling get_constraint_for_access) and is gradually used to update the constraint. access_relation: The access relation that represents the access. cst: The constraint that defines the access and that is being constructed. Different calls to get_constraint_for_access modify this constraint gradually until the final constraint is created. Only the final constraint is added to the access_relation. coeff: The coefficient in which all the dimension coefficients of the constraint are going to be multiplied. This coefficient is used to implement o_minus, o_mul and o_sub.
|
staticprotected |
Compute the accesses of the RHS of the computation comp
and store them in the accesses vector.
If return_buffer_accesses
is set to true, this function returns access functions to buffers. Otherwise it returns access functions to computations.
|
staticprotected |
Create a Halide expression from a Tiramisu expression.
|
staticprotected |
Generate a Halide statement from an ISL ast node object in the ISL ast tree.
Level represents the level of the node in the schedule. 0 means root. It taks as input:
fct
for which we are generating code,node
,level
represents the current loop level being traversed (0 means the outer level.is_a_child_block
indicates whether the block that is ging to be generated is a child block for an other block. In such a case, allocate and let statements should not be generate. Allocate and let statements should only be generated in non-child blocks so that their scope reaches the whole block.
|
staticprotected |
Linearize a multidimensional access to a Halide buffer.
Supposing that we have buf[N1][N2][N3], transform buf[i][j][k] into buf[k + j*N3 + i*N3*N2]. Note that the first arg in index_expr is the buffer name. The other args are the indices for each dimension of the buffer.
|
staticprotected |
Linearize a multidimensional access to a Halide buffer.
Supposing that we have buf[N1][N2][N3], transform buf[i][j][k] into buf[k + j*N3 + i*N3*N2]. Note that the first arg in index_expr is the buffer name. The other args are the indices for each dimension of the buffer.
|
staticprotected |
Linearize a multidimensional access to a Halide buffer.
Supposing that we have buf[N1][N2][N3], transform buf[i][j][k] into buf[k + j*N3 + i*N3*N2]. Note that the first arg in index_expr is the buffer name. The other args are the indices for each dimension of the buffer.
|
staticprotected |
Linearize a multidimensional access to a Halide buffer.
Supposing that we have buf[N1][N2][N3], transform buf[i][j][k] into buf[k + j*N3 + i*N3*N2]. Note that the first arg in index_expr is the buffer name. The other args are the indices for each dimension of the buffer.
|
staticprotected |
Linearize a multidimensional access to a Halide buffer.
Supposing that we have buf[N1][N2][N3], transform buf[i][j][k] into buf[k + j*N3 + i*N3*N2]. Note that the first arg in index_expr is the buffer name. The other args are the indices for each dimension of the buffer.
|
staticprotected |
Linearize a multidimensional access to a Halide buffer.
Supposing that we have buf[N1][N2][N3], transform buf[i][j][k] into buf[k + j*N3 + i*N3*N2]. Note that the first arg in index_expr is the buffer name. The other args are the indices for each dimension of the buffer.
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
Retrieve the access function of the ISL AST leaf node (which represents a computation).
Store the access in computation->access.
|
staticprotected |
Traverse a tiramisu expression (exp
) and extract the access relations from the access operation passed in exp
.
The access relations are added to the vector accesses
. The access relation is from the domain of the computation comp
to the domain of the computation accessed by the access operation. If return_buffer_accesses
= true, an access to a buffer is created instead of an access to computations.
|
static |
Traverse a tiramisu expression (current_exp
) until an expression with the specified name is found.
Replace that name with a new name. Replaces all occurrences.