109 lines · c
1#ifndef ISL_AST_GRAFT_PRIVATE_H2#define ISL_AST_GRAFT_PRIVATE_H3 4#include <isl/ast.h>5#include <isl/ast_build.h>6#include <isl/set.h>7#include <isl/list.h>8#include <isl/printer.h>9#include <isl/stream.h>10 11struct isl_ast_graft;12typedef struct isl_ast_graft isl_ast_graft;13 14/* Representation of part of an AST ("node") with some additional polyhedral15 * information about the tree.16 *17 * "guard" contains conditions that should still be enforced by18 * some ancestor of the current tree. In particular, the already19 * generated tree assumes that these conditions hold, but may not20 * have enforced them itself.21 * The guard should not contain any unknown divs as it will be used22 * to generate an if condition.23 *24 * "enforced" expresses constraints that are already enforced by the for25 * nodes in the current tree and that therefore do not need to be enforced26 * by any ancestor.27 * The constraints only involve outer loop iterators.28 */29struct isl_ast_graft {30 int ref;31 32 isl_ast_node *node;33 34 isl_set *guard;35 isl_basic_set *enforced;36};37 38ISL_DECLARE_LIST(ast_graft)39 40#undef EL41#define EL isl_ast_graft42 43#include <isl_list_templ.h>44 45isl_ctx *isl_ast_graft_get_ctx(__isl_keep isl_ast_graft *graft);46 47__isl_give isl_ast_graft *isl_ast_graft_alloc(48 __isl_take isl_ast_node *node, __isl_keep isl_ast_build *build);49__isl_give isl_ast_graft *isl_ast_graft_alloc_from_children(50 __isl_take isl_ast_graft_list *list, __isl_take isl_set *guard,51 __isl_take isl_basic_set *enforced, __isl_keep isl_ast_build *build,52 __isl_keep isl_ast_build *sub_build);53__isl_give isl_ast_graft_list *isl_ast_graft_list_fuse(54 __isl_take isl_ast_graft_list *children,55 __isl_keep isl_ast_build *build);56__isl_give isl_ast_graft *isl_ast_graft_alloc_domain(57 __isl_take isl_map *schedule, __isl_keep isl_ast_build *build);58__isl_null isl_ast_graft *isl_ast_graft_free(__isl_take isl_ast_graft *graft);59__isl_give isl_ast_graft_list *isl_ast_graft_list_sort_guard(60 __isl_take isl_ast_graft_list *list);61 62__isl_give isl_ast_graft_list *isl_ast_graft_list_merge(63 __isl_take isl_ast_graft_list *list1,64 __isl_take isl_ast_graft_list *list2,65 __isl_keep isl_ast_build *build);66__isl_give isl_ast_graft_list *isl_ast_graft_list_group_on_guard(67 __isl_take isl_ast_graft_list *list, __isl_keep isl_ast_build *build);68 69__isl_give isl_ast_node *isl_ast_graft_get_node(70 __isl_keep isl_ast_graft *graft);71__isl_give isl_basic_set *isl_ast_graft_get_enforced(72 __isl_keep isl_ast_graft *graft);73__isl_give isl_set *isl_ast_graft_get_guard(__isl_keep isl_ast_graft *graft);74 75__isl_give isl_ast_graft *isl_ast_graft_insert_for(76 __isl_take isl_ast_graft *graft, __isl_take isl_ast_node *node);77__isl_give isl_ast_graft *isl_ast_graft_add_guard(78 __isl_take isl_ast_graft *graft,79 __isl_take isl_set *guard, __isl_keep isl_ast_build *build);80__isl_give isl_ast_graft *isl_ast_graft_enforce(81 __isl_take isl_ast_graft *graft, __isl_take isl_basic_set *enforced);82 83__isl_give isl_ast_graft *isl_ast_graft_insert_mark(84 __isl_take isl_ast_graft *graft, __isl_take isl_id *mark);85 86__isl_give isl_ast_graft_list *isl_ast_graft_list_unembed(87 __isl_take isl_ast_graft_list *list, int product);88__isl_give isl_ast_graft_list *isl_ast_graft_list_preimage_multi_aff(89 __isl_take isl_ast_graft_list *list, __isl_take isl_multi_aff *ma);90__isl_give isl_ast_graft_list *isl_ast_graft_list_insert_pending_guard_nodes(91 __isl_take isl_ast_graft_list *list, __isl_keep isl_ast_build *build);92 93__isl_give isl_ast_node *isl_ast_node_from_graft_list(94 __isl_take isl_ast_graft_list *list, __isl_keep isl_ast_build *build);95 96__isl_give isl_basic_set *isl_ast_graft_list_extract_shared_enforced(97 __isl_keep isl_ast_graft_list *list, __isl_keep isl_ast_build *build);98__isl_give isl_set *isl_ast_graft_list_extract_hoistable_guard(99 __isl_keep isl_ast_graft_list *list, __isl_keep isl_ast_build *build);100__isl_give isl_ast_graft_list *isl_ast_graft_list_gist_guards(101 __isl_take isl_ast_graft_list *list, __isl_take isl_set *context);102 103__isl_give isl_printer *isl_printer_print_ast_graft(__isl_take isl_printer *p,104 __isl_keep isl_ast_graft *graft);105 106__isl_give isl_ast_graft_list *isl_stream_read_ast_graft_list(isl_stream *s);107 108#endif109