1 #ifndef ISL_SCHEDLUE_NODE_PRIVATE_H 2 #define ISL_SCHEDLUE_NODE_PRIVATE_H 3 4 #include <isl/schedule_node.h> 5 #include <isl_schedule_band.h> 6 #include <isl_schedule_tree.h> 7 8 /* An isl_schedule_node points to a particular location in a schedule tree. 9 * 10 * "schedule" is the schedule that the node is pointing to. 11 * "ancestors" is a list of the n ancestors of the node 12 * that is being pointed to. 13 * The first ancestor is the root of "schedule", while the last ancestor 14 * is the parent of the specified location. 15 * "child_pos" is an array of child positions of the same length as "ancestors", 16 * where ancestor i (i > 0) appears in child_pos[i - 1] of ancestor i - 1 and 17 * "tree" appears in child_pos[n - 1] of ancestor n - 1. 18 * "tree" is the subtree at the specified location. 19 * 20 * Note that the same isl_schedule_tree object may appear several times 21 * in a schedule tree and therefore does not uniquely identify a position 22 * in the schedule tree. 23 */ 24 struct isl_schedule_node { 25 int ref; 26 27 isl_schedule *schedule; 28 isl_schedule_tree_list *ancestors; 29 int *child_pos; 30 isl_schedule_tree *tree; 31 }; 32 33 __isl_give isl_schedule_node *isl_schedule_node_alloc( 34 __isl_take isl_schedule *schedule, __isl_take isl_schedule_tree *tree, 35 __isl_take isl_schedule_tree_list *ancestors, int *child_pos); 36 __isl_give isl_schedule_node *isl_schedule_node_graft_tree( 37 __isl_take isl_schedule_node *pos, __isl_take isl_schedule_tree *tree); 38 39 __isl_give isl_schedule_tree *isl_schedule_node_get_tree( 40 __isl_keep isl_schedule_node *node); 41 42 __isl_give isl_schedule_node *isl_schedule_node_pullback_union_pw_multi_aff( 43 __isl_take isl_schedule_node *node, 44 __isl_take isl_union_pw_multi_aff *upma); 45 46 __isl_give isl_schedule_node *isl_schedule_node_expand( 47 __isl_take isl_schedule_node *node, 48 __isl_take isl_union_pw_multi_aff *contraction, 49 __isl_take isl_union_set *domain, 50 __isl_take isl_schedule_tree *tree); 51 52 __isl_give isl_schedule_node *isl_schedule_node_gist( 53 __isl_take isl_schedule_node *node, __isl_take isl_union_set *context); 54 55 __isl_give isl_schedule_node *isl_schedule_node_domain_intersect_domain( 56 __isl_take isl_schedule_node *node, __isl_take isl_union_set *domain); 57 __isl_give isl_schedule_node *isl_schedule_node_domain_gist_params( 58 __isl_take isl_schedule_node *node, __isl_take isl_set *context); 59 60 __isl_give isl_schedule_node *isl_schedule_node_insert_expansion( 61 __isl_take isl_schedule_node *node, 62 __isl_take isl_union_pw_multi_aff *contraction, 63 __isl_take isl_union_map *expansion); 64 __isl_give isl_schedule_node *isl_schedule_node_insert_extension( 65 __isl_take isl_schedule_node *node, 66 __isl_take isl_union_map *extension); 67 68 #endif 69