From 738781d45003e2278735a4e94407e810a8917327 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sun, 12 Dec 2021 15:42:48 +0100 Subject: [PATCH] extract out shared isl_schedule_node_grandparent This is a convenience function to mirror isl_schedule_node_grandchild. Just like isl_schedule_node_grandchild, it is not currently exported because in the bindings, the "parent" method can just as easily be applied twice. Signed-off-by: Sven Verdoolaege --- doc/user.pod | 3 +++ include/isl/schedule_node.h | 2 ++ isl_schedule_node.c | 11 +++++++++-- isl_scheduler.c | 12 ++++-------- isl_test.c | 3 +-- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/doc/user.pod b/doc/user.pod index acd5e8e2..0cd39a1a 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -10180,6 +10180,9 @@ exists. __isl_keep isl_schedule_node *node); __isl_give isl_schedule_node *isl_schedule_node_parent( __isl_take isl_schedule_node *node); + __isl_give isl_schedule_node * + isl_schedule_node_grandparent( + __isl_take isl_schedule_node *node); __isl_give isl_schedule_node *isl_schedule_node_root( __isl_take isl_schedule_node *node); __isl_give isl_schedule_node *isl_schedule_node_ancestor( diff --git a/include/isl/schedule_node.h b/include/isl/schedule_node.h index f548d22a..ef1039fb 100644 --- a/include/isl/schedule_node.h +++ b/include/isl/schedule_node.h @@ -92,6 +92,8 @@ __isl_give isl_schedule_node *isl_schedule_node_root( __isl_export __isl_give isl_schedule_node *isl_schedule_node_parent( __isl_take isl_schedule_node *node); +__isl_give isl_schedule_node *isl_schedule_node_grandparent( + __isl_take isl_schedule_node *node); __isl_export __isl_give isl_schedule_node *isl_schedule_node_ancestor( __isl_take isl_schedule_node *node, int generation); diff --git a/isl_schedule_node.c b/isl_schedule_node.c index a48cd962..9caabf1d 100644 --- a/isl_schedule_node.c +++ b/isl_schedule_node.c @@ -1141,6 +1141,14 @@ __isl_give isl_schedule_node *isl_schedule_node_parent( return isl_schedule_node_ancestor(node, 1); } +/* Move the "node" pointer to the parent of its parent. + */ +__isl_give isl_schedule_node *isl_schedule_node_grandparent( + __isl_take isl_schedule_node *node) +{ + return isl_schedule_node_ancestor(node, 2); +} + /* Move the "node" pointer to the root of its schedule tree. */ __isl_give isl_schedule_node *isl_schedule_node_root( @@ -4203,8 +4211,7 @@ static __isl_give isl_schedule_node *extend_extension( pos = isl_schedule_node_get_child_position(node); if (pos < 0) node = isl_schedule_node_free(node); - node = isl_schedule_node_parent(node); - node = isl_schedule_node_parent(node); + node = isl_schedule_node_grandparent(node); node_extension = isl_schedule_node_extension_get_extension(node); disjoint = isl_union_map_is_disjoint(extension, node_extension); extension = isl_union_map_union(extension, node_extension); diff --git a/isl_scheduler.c b/isl_scheduler.c index 8f62b657..85597cca 100644 --- a/isl_scheduler.c +++ b/isl_scheduler.c @@ -3972,8 +3972,7 @@ static __isl_give isl_schedule_node *compute_split_schedule( &node_scc_at_least, &edge_src_scc_at_least, graph->src_scc + 1, 0); is_seq = isl_schedule_node_get_type(node) == isl_schedule_node_sequence; - node = isl_schedule_node_parent(node); - node = isl_schedule_node_parent(node); + node = isl_schedule_node_grandparent(node); if (is_seq) node = isl_schedule_node_sequence_splice_child(node, 1); node = isl_schedule_node_grandchild(node, 0, 0); @@ -3981,8 +3980,7 @@ static __isl_give isl_schedule_node *compute_split_schedule( &node_scc_at_most, &edge_dst_scc_at_most, graph->src_scc, 0); is_seq = isl_schedule_node_get_type(node) == isl_schedule_node_sequence; - node = isl_schedule_node_parent(node); - node = isl_schedule_node_parent(node); + node = isl_schedule_node_grandparent(node); if (is_seq) node = isl_schedule_node_sequence_splice_child(node, 0); @@ -7399,8 +7397,7 @@ static __isl_give isl_schedule_node *finish_bands_clustering( int j = c->scc_cluster[i]; node = isl_schedule_node_grandchild(node, i, 0); node = compute_schedule_finish_band(node, &c->cluster[j], 0); - node = isl_schedule_node_parent(node); - node = isl_schedule_node_parent(node); + node = isl_schedule_node_grandparent(node); } return node; @@ -7547,8 +7544,7 @@ static __isl_give isl_schedule_node *compute_component_schedule( node = compute_sub_schedule(node, ctx, graph, &node_scc_exactly, &edge_scc_exactly, component, wcc); - node = isl_schedule_node_parent(node); - node = isl_schedule_node_parent(node); + node = isl_schedule_node_grandparent(node); } return node; diff --git a/isl_test.c b/isl_test.c index 648778e3..a8f7c5ee 100644 --- a/isl_test.c +++ b/isl_test.c @@ -10439,8 +10439,7 @@ static int test_schedule_tree_group_2(isl_ctx *ctx) umap1 = isl_union_map_intersect_domain(umap1, uset); isl_schedule_free(schedule); - node = isl_schedule_node_parent(node); - node = isl_schedule_node_parent(node); + node = isl_schedule_node_grandparent(node); id = isl_id_alloc(ctx, "group1", NULL); node = isl_schedule_node_group(node, id); node = isl_schedule_node_grandchild(node, 1, 0); -- 2.11.4.GIT