1 #ifndef ISL_AST_GRAFT_PRIVATE_H
2 #define ISL_AST_GRAFT_PRIVATE_H
5 #include <isl/ast_build.h>
8 #include <isl/printer.h>
9 #include <isl/stream.h>
12 typedef struct isl_ast_graft isl_ast_graft
;
14 /* Representation of part of an AST ("node") with some additional polyhedral
15 * information about the tree.
17 * "guard" contains conditions that should still be enforced by
18 * some ancestor of the current tree. In particular, the already
19 * generated tree assumes that these conditions hold, but may not
20 * have enforced them itself.
21 * The guard should not contain any unknown divs as it will be used
22 * to generate an if condition.
24 * "enforced" expresses constraints that are already enforced by the for
25 * nodes in the current tree and that therefore do not need to be enforced
27 * The constraints only involve outer loop iterators.
29 struct isl_ast_graft
{
35 isl_basic_set
*enforced
;
38 ISL_DECLARE_LIST(ast_graft
)
41 #define EL isl_ast_graft
43 #include <isl_list_templ.h>
45 isl_ctx
*isl_ast_graft_get_ctx(__isl_keep isl_ast_graft
*graft
);
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
);
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
);
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
);
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
);
83 __isl_give isl_ast_graft
*isl_ast_graft_insert_mark(
84 __isl_take isl_ast_graft
*graft
, __isl_take isl_id
*mark
);
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
);
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
);
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
);
103 __isl_give isl_printer
*isl_printer_print_ast_graft(__isl_take isl_printer
*p
,
104 __isl_keep isl_ast_graft
*graft
);
106 __isl_give isl_ast_graft_list
*isl_stream_read_ast_graft_list(isl_stream
*s
);