From f8df4e317d0e9b312d7cc6324129fcb2cf91d1fc Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Wed, 11 Jun 2014 16:21:42 +0200 Subject: [PATCH] add isl_schedule_insert_guard Signed-off-by: Sven Verdoolaege --- doc/user.pod | 8 ++++++++ include/isl/schedule.h | 2 ++ isl_schedule.c | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 18c8f68a..2bb64c47 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -7383,6 +7383,14 @@ be introduced into the schedule using the following function. __isl_take isl_schedule *schedule, __isl_take isl_set *context) +A top-level guard node (right underneath the domain node) can +be introduced into the schedule using the following function. + + #include + __isl_give isl_schedule *isl_schedule_insert_guard( + __isl_take isl_schedule *schedule, + __isl_take isl_set *guard) + A schedule that combines two schedules either in the given order or in an arbitrary order, i.e., with an C or an C node, diff --git a/include/isl/schedule.h b/include/isl/schedule.h index 11d0bc41..9886fa46 100644 --- a/include/isl/schedule.h +++ b/include/isl/schedule.h @@ -104,6 +104,8 @@ __isl_give isl_schedule *isl_schedule_insert_context( __isl_give isl_schedule *isl_schedule_insert_partial_schedule( __isl_take isl_schedule *schedule, __isl_take isl_multi_union_pw_aff *partial); +__isl_give isl_schedule *isl_schedule_insert_guard( + __isl_take isl_schedule *schedule, __isl_take isl_set *guard); __isl_give isl_schedule *isl_schedule_sequence( __isl_take isl_schedule *schedule1, __isl_take isl_schedule *schedule2); __isl_give isl_schedule *isl_schedule_set( diff --git a/isl_schedule.c b/isl_schedule.c index 9a5ff0b0..692f7443 100644 --- a/isl_schedule.c +++ b/isl_schedule.c @@ -921,6 +921,25 @@ __isl_give isl_schedule *isl_schedule_insert_context( return schedule; } +/* Insert a guard node with constraints "guard" between the domain + * root node of "schedule" and its single child. + * Return a pointer to the updated schedule. + */ +__isl_give isl_schedule *isl_schedule_insert_guard( + __isl_take isl_schedule *schedule, __isl_take isl_set *guard) +{ + isl_schedule_node *node; + + node = isl_schedule_get_root(schedule); + isl_schedule_free(schedule); + node = isl_schedule_node_child(node, 0); + node = isl_schedule_node_insert_guard(node, guard); + schedule = isl_schedule_node_get_schedule(node); + isl_schedule_node_free(node); + + return schedule; +} + /* Return a tree with as top-level node a filter corresponding to "filter" and * as child, the (single) child of "tree". * However, if this single child is of type "type", then the filter is inserted -- 2.11.4.GIT