From 035944336cffb50129e8faa864ceb3b84629e36d Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Thu, 9 Jan 2014 17:01:03 +0100 Subject: [PATCH] add isl_schedule_node_is_equal Signed-off-by: Sven Verdoolaege --- doc/user.pod | 8 ++++++++ include/isl/schedule_node.h | 3 +++ isl_schedule_node.c | 26 ++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 6d81317c..66b34d87 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -7396,6 +7396,14 @@ Schedule nodes can be copied and freed using the following functions. __isl_null isl_schedule_node *isl_schedule_node_free( __isl_take isl_schedule_node *node); +The following functions can be used to check if two schedule +nodes point to the same position in the same schedule. + + #include + int isl_schedule_node_is_equal( + __isl_keep isl_schedule_node *node1, + __isl_keep isl_schedule_node *node2); + The following properties can be obtained from a schedule node. #include diff --git a/include/isl/schedule_node.h b/include/isl/schedule_node.h index 49e8464b..a445be0f 100644 --- a/include/isl/schedule_node.h +++ b/include/isl/schedule_node.h @@ -18,6 +18,9 @@ __isl_give isl_schedule_node *isl_schedule_node_copy( __isl_null isl_schedule_node *isl_schedule_node_free( __isl_take isl_schedule_node *node); +int isl_schedule_node_is_equal(__isl_keep isl_schedule_node *node1, + __isl_keep isl_schedule_node *node2); + isl_ctx *isl_schedule_node_get_ctx(__isl_keep isl_schedule_node *node); enum isl_schedule_node_type isl_schedule_node_get_type( __isl_keep isl_schedule_node *node); diff --git a/isl_schedule_node.c b/isl_schedule_node.c index 41496d58..10af6fb8 100644 --- a/isl_schedule_node.c +++ b/isl_schedule_node.c @@ -218,6 +218,32 @@ __isl_null isl_schedule_node *isl_schedule_node_free( return NULL; } +/* Do "node1" and "node2" point to the same position in the same + * schedule? + */ +int isl_schedule_node_is_equal(__isl_keep isl_schedule_node *node1, + __isl_keep isl_schedule_node *node2) +{ + int i, n1, n2; + + if (!node1 || !node2) + return -1; + if (node1 == node2) + return 1; + if (node1->schedule != node2->schedule) + return 0; + + n1 = isl_schedule_node_get_tree_depth(node1); + n2 = isl_schedule_node_get_tree_depth(node2); + if (n1 != n2) + return 0; + for (i = 0; i < n1; ++i) + if (node1->child_pos[i] != node2->child_pos[i]) + return 0; + + return 1; +} + /* Internal data structure for * isl_schedule_node_get_prefix_schedule_union_pw_multi_aff * -- 2.11.4.GIT