brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.8 KiB · a1ecfad Raw
267 lines · c
1#ifndef ISL_SCHEDLUE_TREE_H2#define ISL_SCHEDLUE_TREE_H3 4#include <isl_schedule_band.h>5#include <isl/schedule.h>6#include <isl/set.h>7#include <isl/union_set.h>8 9struct isl_schedule_tree;10typedef struct isl_schedule_tree isl_schedule_tree;11 12ISL_DECLARE_LIST(schedule_tree)13 14/* A schedule (sub)tree.15 *16 * The leaves of a tree are not explicitly represented inside17 * the isl_schedule_tree, except when the tree consists of only a leaf.18 *19 * The "band" field is valid when type is isl_schedule_node_band.20 * The "context" field is valid when type is isl_schedule_node_context21 * and represents constraints on the flat product of the outer band nodes,22 * possibly introducing additional parameters.23 * The "domain" field is valid when type is isl_schedule_node_domain24 * and introduces the statement instances scheduled by the tree.25 *26 * The "contraction" and "expansion" fields are valid when type27 * is isl_schedule_node_expansion.28 * "expansion" expands the reaching domain elements to one or more29 * domain elements for the subtree.30 * "contraction" maps these elements back to the corresponding31 * reaching domain element.  It does not involve any domain constraints.32 *33 * The "extension" field is valid when the is isl_schedule_node_extension34 * maps outer schedule dimensions (the flat product of the outer band nodes)35 * to additional iteration domains.36 *37 * The "filter" field is valid when type is isl_schedule_node_filter38 * and represents the statement instances selected by the node.39 *40 * The "guard" field is valid when type is isl_schedule_node_guard41 * and represents constraints on the flat product of the outer band nodes42 * that need to be enforced by the outer nodes in the generated AST.43 *44 * The "mark" field is valid when type is isl_schedule_node_mark and45 * identifies the mark.46 *47 * The "children" field is valid for all types except48 * isl_schedule_node_leaf.  This field is NULL if there are49 * no children (except for the implicit leaves).50 *51 * anchored is set if the node or any of its descendants depends52 * on its position in the schedule tree.53 */54struct isl_schedule_tree {55	int ref;56	isl_ctx *ctx;57	int anchored;58	enum isl_schedule_node_type type;59	union {60		isl_schedule_band *band;61		isl_set *context;62		isl_union_set *domain;63		struct {64			isl_union_pw_multi_aff *contraction;65			isl_union_map *expansion;66		};67		isl_union_map *extension;68		isl_union_set *filter;69		isl_set *guard;70		isl_id *mark;71	};72	isl_schedule_tree_list *children;73};74 75isl_ctx *isl_schedule_tree_get_ctx(__isl_keep isl_schedule_tree *tree);76enum isl_schedule_node_type isl_schedule_tree_get_type(77	__isl_keep isl_schedule_tree *tree);78 79__isl_give isl_schedule_tree *isl_schedule_tree_leaf(isl_ctx *ctx);80int isl_schedule_tree_is_leaf(__isl_keep isl_schedule_tree *tree);81 82isl_bool isl_schedule_tree_plain_is_equal(__isl_keep isl_schedule_tree *tree1,83	__isl_keep isl_schedule_tree *tree2);84 85__isl_give isl_schedule_tree *isl_schedule_tree_copy(86	__isl_keep isl_schedule_tree *tree);87__isl_null isl_schedule_tree *isl_schedule_tree_free(88	__isl_take isl_schedule_tree *tree);89 90__isl_give isl_schedule_tree *isl_schedule_tree_from_band(91	__isl_take isl_schedule_band *band);92__isl_give isl_schedule_tree *isl_schedule_tree_from_context(93	__isl_take isl_set *context);94__isl_give isl_schedule_tree *isl_schedule_tree_from_domain(95	__isl_take isl_union_set *domain);96__isl_give isl_schedule_tree *isl_schedule_tree_from_expansion(97	__isl_take isl_union_pw_multi_aff *contraction,98	__isl_take isl_union_map *expansion);99__isl_give isl_schedule_tree *isl_schedule_tree_from_extension(100	__isl_take isl_union_map *extension);101__isl_give isl_schedule_tree *isl_schedule_tree_from_filter(102	__isl_take isl_union_set *filter);103__isl_give isl_schedule_tree *isl_schedule_tree_from_guard(104	__isl_take isl_set *guard);105__isl_give isl_schedule_tree *isl_schedule_tree_from_children(106	enum isl_schedule_node_type type,107	__isl_take isl_schedule_tree_list *list);108__isl_give isl_schedule_tree *isl_schedule_tree_from_pair(109	enum isl_schedule_node_type type, __isl_take isl_schedule_tree *tree1,110	__isl_take isl_schedule_tree *tree2);111__isl_give isl_schedule_tree *isl_schedule_tree_sequence_pair(112	__isl_take isl_schedule_tree *tree1,113	__isl_take isl_schedule_tree *tree2);114__isl_give isl_schedule_tree *isl_schedule_tree_set_pair(115	__isl_take isl_schedule_tree *tree1,116	__isl_take isl_schedule_tree *tree2);117 118isl_bool isl_schedule_tree_is_subtree_anchored(119	__isl_keep isl_schedule_tree *tree);120 121__isl_give isl_space *isl_schedule_tree_band_get_space(122	__isl_keep isl_schedule_tree *tree);123__isl_give isl_schedule_tree *isl_schedule_tree_band_intersect_domain(124	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *domain);125__isl_give isl_multi_union_pw_aff *isl_schedule_tree_band_get_partial_schedule(126	__isl_keep isl_schedule_tree *tree);127__isl_give isl_schedule_tree *isl_schedule_tree_band_set_partial_schedule(128	__isl_take isl_schedule_tree *tree,129	__isl_take isl_multi_union_pw_aff *schedule);130enum isl_ast_loop_type isl_schedule_tree_band_member_get_ast_loop_type(131	__isl_keep isl_schedule_tree *tree, int pos);132__isl_give isl_schedule_tree *isl_schedule_tree_band_member_set_ast_loop_type(133	__isl_take isl_schedule_tree *tree, int pos,134	enum isl_ast_loop_type type);135enum isl_ast_loop_type isl_schedule_tree_band_member_get_isolate_ast_loop_type(136	__isl_keep isl_schedule_tree *tree, int pos);137__isl_give isl_schedule_tree *138isl_schedule_tree_band_member_set_isolate_ast_loop_type(139	__isl_take isl_schedule_tree *tree, int pos,140	enum isl_ast_loop_type type);141__isl_give isl_union_set *isl_schedule_tree_band_get_ast_build_options(142	__isl_keep isl_schedule_tree *tree);143__isl_give isl_schedule_tree *isl_schedule_tree_band_set_ast_build_options(144	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *options);145__isl_give isl_set *isl_schedule_tree_band_get_ast_isolate_option(146	__isl_keep isl_schedule_tree *tree, int depth);147__isl_give isl_set *isl_schedule_tree_context_get_context(148	__isl_keep isl_schedule_tree *tree);149__isl_give isl_union_set *isl_schedule_tree_domain_get_domain(150	__isl_keep isl_schedule_tree *tree);151__isl_give isl_schedule_tree *isl_schedule_tree_domain_set_domain(152	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *domain);153__isl_give isl_union_pw_multi_aff *isl_schedule_tree_expansion_get_contraction(154	__isl_keep isl_schedule_tree *tree);155__isl_give isl_union_map *isl_schedule_tree_expansion_get_expansion(156	__isl_keep isl_schedule_tree *tree);157__isl_give isl_schedule_tree *158isl_schedule_tree_expansion_set_contraction_and_expansion(159	__isl_take isl_schedule_tree *tree,160	__isl_take isl_union_pw_multi_aff *contraction,161	__isl_take isl_union_map *expansion);162__isl_give isl_union_map *isl_schedule_tree_extension_get_extension(163	__isl_keep isl_schedule_tree *tree);164__isl_give isl_schedule_tree *isl_schedule_tree_extension_set_extension(165	__isl_take isl_schedule_tree *tree,166	__isl_take isl_union_map *extension);167__isl_give isl_union_set *isl_schedule_tree_filter_get_filter(168	__isl_keep isl_schedule_tree *tree);169__isl_give isl_schedule_tree *isl_schedule_tree_filter_set_filter(170	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *filter);171__isl_give isl_set *isl_schedule_tree_guard_get_guard(172	__isl_keep isl_schedule_tree *tree);173__isl_give isl_id *isl_schedule_tree_mark_get_id(174	__isl_keep isl_schedule_tree *tree);175 176__isl_give isl_schedule_tree *isl_schedule_tree_first_schedule_descendant(177	__isl_take isl_schedule_tree *tree, __isl_keep isl_schedule_tree *leaf);178__isl_give isl_union_map *isl_schedule_tree_get_subtree_schedule_union_map(179	__isl_keep isl_schedule_tree *tree);180 181isl_size isl_schedule_tree_band_n_member(__isl_keep isl_schedule_tree *tree);182 183isl_bool isl_schedule_tree_band_member_get_coincident(184	__isl_keep isl_schedule_tree *tree, int pos);185__isl_give isl_schedule_tree *isl_schedule_tree_band_member_set_coincident(186	__isl_take isl_schedule_tree *tree, int pos, int coincident);187isl_bool isl_schedule_tree_band_get_permutable(188	__isl_keep isl_schedule_tree *tree);189__isl_give isl_schedule_tree *isl_schedule_tree_band_set_permutable(190	__isl_take isl_schedule_tree *tree, int permutable);191 192int isl_schedule_tree_has_children(__isl_keep isl_schedule_tree *tree);193isl_size isl_schedule_tree_n_children(__isl_keep isl_schedule_tree *tree);194__isl_give isl_schedule_tree *isl_schedule_tree_get_child(195	__isl_keep isl_schedule_tree *tree, int pos);196 197__isl_give isl_schedule_tree *isl_schedule_tree_insert_band(198	__isl_take isl_schedule_tree *tree, __isl_take isl_schedule_band *band);199__isl_give isl_schedule_tree *isl_schedule_tree_insert_context(200	__isl_take isl_schedule_tree *tree, __isl_take isl_set *context);201__isl_give isl_schedule_tree *isl_schedule_tree_insert_domain(202	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *domain);203__isl_give isl_schedule_tree *isl_schedule_tree_insert_expansion(204	__isl_take isl_schedule_tree *tree,205	__isl_take isl_union_pw_multi_aff *contraction,206	__isl_take isl_union_map *expansion);207__isl_give isl_schedule_tree *isl_schedule_tree_insert_extension(208	__isl_take isl_schedule_tree *tree,209	__isl_take isl_union_map *extension);210__isl_give isl_schedule_tree *isl_schedule_tree_insert_filter(211	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *filter);212__isl_give isl_schedule_tree *isl_schedule_tree_children_insert_filter(213	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *filter);214__isl_give isl_schedule_tree *isl_schedule_tree_insert_guard(215	__isl_take isl_schedule_tree *tree, __isl_take isl_set *guard);216__isl_give isl_schedule_tree *isl_schedule_tree_insert_mark(217	__isl_take isl_schedule_tree *tree, __isl_take isl_id *mark);218 219__isl_give isl_schedule_tree *isl_schedule_tree_append_to_leaves(220	__isl_take isl_schedule_tree *tree1,221	__isl_take isl_schedule_tree *tree2);222 223__isl_give isl_schedule_tree *isl_schedule_tree_band_scale(224	__isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *mv);225__isl_give isl_schedule_tree *isl_schedule_tree_band_scale_down(226	__isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *mv);227__isl_give isl_schedule_tree *isl_schedule_tree_band_mod(228	__isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *mv);229__isl_give isl_schedule_tree *isl_schedule_tree_band_tile(230	__isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *sizes);231__isl_give isl_schedule_tree *isl_schedule_tree_band_shift(232	__isl_take isl_schedule_tree *tree,233	__isl_take isl_multi_union_pw_aff *shift);234__isl_give isl_schedule_tree *isl_schedule_tree_band_split(235	__isl_take isl_schedule_tree *tree, int pos, int depth);236__isl_give isl_schedule_tree *isl_schedule_tree_band_gist(237	__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *context);238 239__isl_give isl_schedule_tree *isl_schedule_tree_child(240	__isl_take isl_schedule_tree *tree, int pos);241__isl_give isl_schedule_tree *isl_schedule_tree_reset_children(242	__isl_take isl_schedule_tree *tree);243__isl_give isl_schedule_tree *isl_schedule_tree_drop_child(244	__isl_take isl_schedule_tree *tree, int pos);245__isl_give isl_schedule_tree *isl_schedule_tree_replace_child(246	__isl_take isl_schedule_tree *tree, int pos,247	__isl_take isl_schedule_tree *new_child);248__isl_give isl_schedule_tree *isl_schedule_tree_sequence_splice(249	__isl_take isl_schedule_tree *tree, int pos,250	__isl_take isl_schedule_tree *child);251 252__isl_give isl_schedule_tree *isl_schedule_tree_reset_user(253	__isl_take isl_schedule_tree *tree);254__isl_give isl_schedule_tree *isl_schedule_tree_align_params(255	__isl_take isl_schedule_tree *tree, __isl_take isl_space *space);256__isl_give isl_schedule_tree *isl_schedule_tree_pullback_union_pw_multi_aff(257	__isl_take isl_schedule_tree *tree,258	__isl_take isl_union_pw_multi_aff *upma);259 260__isl_give isl_printer *isl_printer_print_schedule_tree(261	__isl_take isl_printer *p, __isl_keep isl_schedule_tree *tree);262__isl_give isl_printer *isl_printer_print_schedule_tree_mark(263	__isl_take isl_printer *p, __isl_keep isl_schedule_tree *tree,264	int n_ancestor, int *child_pos);265 266#endif267