Blame isl-0.14/isl_ast_graft_private.h

Packit fb9d21
#ifndef ISL_AST_GRAFT_PRIVATE_H
Packit fb9d21
#define ISL_AST_GRAFT_PRIVATE_H
Packit fb9d21
Packit fb9d21
#include <isl/ast.h>
Packit fb9d21
#include <isl/set.h>
Packit fb9d21
#include <isl/list.h>
Packit fb9d21
#include <isl/printer.h>
Packit fb9d21
Packit fb9d21
struct isl_ast_graft;
Packit fb9d21
typedef struct isl_ast_graft isl_ast_graft;
Packit fb9d21
Packit fb9d21
/* Representation of part of an AST ("node") with some additional polyhedral
Packit fb9d21
 * information about the tree.
Packit fb9d21
 *
Packit fb9d21
 * "guard" contains conditions that should still be enforced by
Packit fb9d21
 * some ancestor of the current tree.  In particular, the already
Packit fb9d21
 * generated tree assumes that these conditions hold, but may not
Packit fb9d21
 * have enforced them itself.
Packit fb9d21
 * The guard should not contain any unknown divs as it will be used
Packit fb9d21
 * to generate an if condition.
Packit fb9d21
 *
Packit fb9d21
 * "enforced" expresses constraints that are already enforced by the for
Packit fb9d21
 * nodes in the current tree and that therefore do not need to be enforced
Packit fb9d21
 * by any ancestor.
Packit fb9d21
 * The constraints only involve outer loop iterators.
Packit fb9d21
 */
Packit fb9d21
struct isl_ast_graft {
Packit fb9d21
	int ref;
Packit fb9d21
Packit fb9d21
	isl_ast_node *node;
Packit fb9d21
Packit fb9d21
	isl_set *guard;
Packit fb9d21
	isl_basic_set *enforced;
Packit fb9d21
};
Packit fb9d21
Packit fb9d21
ISL_DECLARE_LIST(ast_graft)
Packit fb9d21
Packit fb9d21
#undef EL
Packit fb9d21
#define EL isl_ast_graft
Packit fb9d21
Packit fb9d21
#include <isl_list_templ.h>
Packit fb9d21
Packit fb9d21
isl_ctx *isl_ast_graft_get_ctx(__isl_keep isl_ast_graft *graft);
Packit fb9d21
Packit fb9d21
__isl_give isl_ast_graft *isl_ast_graft_alloc(
Packit fb9d21
	__isl_take isl_ast_node *node, __isl_keep isl_ast_build *build);
Packit fb9d21
__isl_give isl_ast_graft *isl_ast_graft_alloc_from_children(
Packit fb9d21
	__isl_take isl_ast_graft_list *list, __isl_take isl_set *guard,
Packit fb9d21
	__isl_take isl_basic_set *enforced, __isl_keep isl_ast_build *build,
Packit fb9d21
	__isl_keep isl_ast_build *sub_build);
Packit fb9d21
__isl_give isl_ast_graft_list *isl_ast_graft_list_fuse(
Packit fb9d21
	__isl_take isl_ast_graft_list *children,
Packit fb9d21
	__isl_keep isl_ast_build *build);
Packit fb9d21
__isl_give isl_ast_graft *isl_ast_graft_alloc_domain(
Packit fb9d21
	__isl_take isl_map *schedule, __isl_keep isl_ast_build *build);
Packit fb9d21
void *isl_ast_graft_free(__isl_take isl_ast_graft *graft);
Packit fb9d21
__isl_give isl_ast_graft_list *isl_ast_graft_list_sort_guard(
Packit fb9d21
	__isl_take isl_ast_graft_list *list);
Packit fb9d21
Packit fb9d21
__isl_give isl_ast_graft_list *isl_ast_graft_list_merge(
Packit fb9d21
	__isl_take isl_ast_graft_list *list1,
Packit fb9d21
	__isl_take isl_ast_graft_list *list2,
Packit fb9d21
	__isl_keep isl_ast_build *build);
Packit fb9d21
Packit fb9d21
__isl_give isl_ast_node *isl_ast_graft_get_node(
Packit fb9d21
	__isl_keep isl_ast_graft *graft);
Packit fb9d21
__isl_give isl_basic_set *isl_ast_graft_get_enforced(
Packit fb9d21
	__isl_keep isl_ast_graft *graft);
Packit fb9d21
__isl_give isl_set *isl_ast_graft_get_guard(__isl_keep isl_ast_graft *graft);
Packit fb9d21
Packit fb9d21
__isl_give isl_ast_graft *isl_ast_graft_insert_for(
Packit fb9d21
	__isl_take isl_ast_graft *graft, __isl_take isl_ast_node *node);
Packit fb9d21
__isl_give isl_ast_graft *isl_ast_graft_add_guard(
Packit fb9d21
	__isl_take isl_ast_graft *graft,
Packit fb9d21
	__isl_take isl_set *guard, __isl_keep isl_ast_build *build);
Packit fb9d21
__isl_give isl_ast_graft *isl_ast_graft_enforce(
Packit fb9d21
	__isl_take isl_ast_graft *graft, __isl_take isl_basic_set *enforced);
Packit fb9d21
Packit fb9d21
__isl_give isl_ast_graft_list *isl_ast_graft_list_unembed(
Packit fb9d21
	__isl_take isl_ast_graft_list *list, int product);
Packit fb9d21
__isl_give isl_ast_graft_list *isl_ast_graft_list_preimage_multi_aff(
Packit fb9d21
	__isl_take isl_ast_graft_list *list, __isl_take isl_multi_aff *ma);
Packit fb9d21
Packit fb9d21
__isl_give isl_ast_node *isl_ast_node_from_graft_list(
Packit fb9d21
	__isl_take isl_ast_graft_list *list, __isl_keep isl_ast_build *build);
Packit fb9d21
Packit fb9d21
__isl_give isl_basic_set *isl_ast_graft_list_extract_shared_enforced(
Packit fb9d21
	__isl_keep isl_ast_graft_list *list, __isl_keep isl_ast_build *build);
Packit fb9d21
__isl_give isl_set *isl_ast_graft_list_extract_hoistable_guard(
Packit fb9d21
	__isl_keep isl_ast_graft_list *list, __isl_keep isl_ast_build *build);
Packit fb9d21
__isl_give isl_ast_graft_list *isl_ast_graft_list_gist_guards(
Packit fb9d21
	__isl_take isl_ast_graft_list *list, __isl_take isl_set *context);
Packit fb9d21
Packit fb9d21
__isl_give isl_printer *isl_printer_print_ast_graft(__isl_take isl_printer *p,
Packit fb9d21
	__isl_keep isl_ast_graft *graft);
Packit fb9d21
Packit fb9d21
#endif