11fa7b972STobias Grosser #ifndef ISL_SCHEDLUE_NODE_PRIVATE_H 21fa7b972STobias Grosser #define ISL_SCHEDLUE_NODE_PRIVATE_H 31fa7b972STobias Grosser 41fa7b972STobias Grosser #include <isl/schedule_node.h> 51fa7b972STobias Grosser #include <isl_schedule_band.h> 6959a8dc3SMichael Kruse #include <isl_schedule_tree.h> 71fa7b972STobias Grosser 81fa7b972STobias Grosser /* An isl_schedule_node points to a particular location in a schedule tree. 91fa7b972STobias Grosser * 101fa7b972STobias Grosser * "schedule" is the schedule that the node is pointing to. 111fa7b972STobias Grosser * "ancestors" is a list of the n ancestors of the node 121fa7b972STobias Grosser * that is being pointed to. 131fa7b972STobias Grosser * The first ancestor is the root of "schedule", while the last ancestor 141fa7b972STobias Grosser * is the parent of the specified location. 151fa7b972STobias Grosser * "child_pos" is an array of child positions of the same length as "ancestors", 161fa7b972STobias Grosser * where ancestor i (i > 0) appears in child_pos[i - 1] of ancestor i - 1 and 171fa7b972STobias Grosser * "tree" appears in child_pos[n - 1] of ancestor n - 1. 181fa7b972STobias Grosser * "tree" is the subtree at the specified location. 191fa7b972STobias Grosser * 201fa7b972STobias Grosser * Note that the same isl_schedule_tree object may appear several times 211fa7b972STobias Grosser * in a schedule tree and therefore does not uniquely identify a position 221fa7b972STobias Grosser * in the schedule tree. 231fa7b972STobias Grosser */ 241fa7b972STobias Grosser struct isl_schedule_node { 251fa7b972STobias Grosser int ref; 261fa7b972STobias Grosser 271fa7b972STobias Grosser isl_schedule *schedule; 281fa7b972STobias Grosser isl_schedule_tree_list *ancestors; 291fa7b972STobias Grosser int *child_pos; 301fa7b972STobias Grosser isl_schedule_tree *tree; 311fa7b972STobias Grosser }; 321fa7b972STobias Grosser 331fa7b972STobias Grosser __isl_give isl_schedule_node *isl_schedule_node_alloc( 341fa7b972STobias Grosser __isl_take isl_schedule *schedule, __isl_take isl_schedule_tree *tree, 351fa7b972STobias Grosser __isl_take isl_schedule_tree_list *ancestors, int *child_pos); 361fa7b972STobias Grosser __isl_give isl_schedule_node *isl_schedule_node_graft_tree( 371fa7b972STobias Grosser __isl_take isl_schedule_node *pos, __isl_take isl_schedule_tree *tree); 381fa7b972STobias Grosser 391fa7b972STobias Grosser __isl_give isl_schedule_tree *isl_schedule_node_get_tree( 401fa7b972STobias Grosser __isl_keep isl_schedule_node *node); 411fa7b972STobias Grosser 42e395da79STobias Grosser __isl_give isl_schedule_node *isl_schedule_node_pullback_union_pw_multi_aff( 43e395da79STobias Grosser __isl_take isl_schedule_node *node, 44e395da79STobias Grosser __isl_take isl_union_pw_multi_aff *upma); 45e395da79STobias Grosser 46*e0b34f36SMichael Kruse __isl_give isl_schedule_node *isl_schedule_node_expand( 47*e0b34f36SMichael Kruse __isl_take isl_schedule_node *node, 48*e0b34f36SMichael Kruse __isl_take isl_union_pw_multi_aff *contraction, 49*e0b34f36SMichael Kruse __isl_take isl_union_set *domain, 50*e0b34f36SMichael Kruse __isl_take isl_schedule_tree *tree); 51*e0b34f36SMichael Kruse 52959a8dc3SMichael Kruse __isl_give isl_schedule_node *isl_schedule_node_gist( 53959a8dc3SMichael Kruse __isl_take isl_schedule_node *node, __isl_take isl_union_set *context); 54959a8dc3SMichael Kruse 55e395da79STobias Grosser __isl_give isl_schedule_node *isl_schedule_node_domain_intersect_domain( 56e395da79STobias Grosser __isl_take isl_schedule_node *node, __isl_take isl_union_set *domain); 57f560ca90STobias Grosser __isl_give isl_schedule_node *isl_schedule_node_domain_gist_params( 58f560ca90STobias Grosser __isl_take isl_schedule_node *node, __isl_take isl_set *context); 59e395da79STobias Grosser 6029e36dc0STobias Grosser __isl_give isl_schedule_node *isl_schedule_node_insert_expansion( 6129e36dc0STobias Grosser __isl_take isl_schedule_node *node, 6229e36dc0STobias Grosser __isl_take isl_union_pw_multi_aff *contraction, 6329e36dc0STobias Grosser __isl_take isl_union_map *expansion); 6429e36dc0STobias Grosser __isl_give isl_schedule_node *isl_schedule_node_insert_extension( 6529e36dc0STobias Grosser __isl_take isl_schedule_node *node, 6629e36dc0STobias Grosser __isl_take isl_union_map *extension); 6729e36dc0STobias Grosser 681fa7b972STobias Grosser #endif 69