From 4df6dff88d633c799406c5f851d2a8d503f60be5 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sun, 20 Jul 2014 11:35:38 +0200 Subject: [PATCH] add isl_ast_graft_list_insert_pending_guard_nodes This will be useful when inserting pending guards from a context node. Signed-off-by: Sven Verdoolaege --- isl_ast_graft.c | 36 ++++++++++++++++++++++++++++++++++++ isl_ast_graft_private.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/isl_ast_graft.c b/isl_ast_graft.c index c8d22725..05009ebb 100644 --- a/isl_ast_graft.c +++ b/isl_ast_graft.c @@ -649,6 +649,42 @@ static __isl_give isl_ast_graft_list *insert_pending_guard_nodes( return res; } +/* For each graft in "list", + * insert an if node around graft->node testing the condition encoded + * in graft->guard, assuming graft->guard involves any conditions. + * Subsequently remove the guards from the grafts. + */ +__isl_give isl_ast_graft_list *isl_ast_graft_list_insert_pending_guard_nodes( + __isl_take isl_ast_graft_list *list, __isl_keep isl_ast_build *build) +{ + int i, n; + isl_set *universe; + + list = insert_pending_guard_nodes(list, build); + if (!list) + return NULL; + + universe = isl_set_universe(isl_ast_build_get_space(build, 1)); + n = isl_ast_graft_list_n_ast_graft(list); + for (i = 0; i < n; ++i) { + isl_ast_graft *graft; + + graft = isl_ast_graft_list_get_ast_graft(list, i); + if (!graft) + break; + isl_set_free(graft->guard); + graft->guard = isl_set_copy(universe); + if (!graft->guard) + graft = isl_ast_graft_free(graft); + list = isl_ast_graft_list_set_ast_graft(list, i, graft); + } + isl_set_free(universe); + if (i < n) + return isl_ast_graft_list_free(list); + + return list; +} + /* Collect the nodes contained in the grafts in "list" in a node list. */ static __isl_give isl_ast_node_list *extract_node_list( diff --git a/isl_ast_graft_private.h b/isl_ast_graft_private.h index 82b1c1cc..5dc141e2 100644 --- a/isl_ast_graft_private.h +++ b/isl_ast_graft_private.h @@ -80,6 +80,8 @@ __isl_give isl_ast_graft_list *isl_ast_graft_list_unembed( __isl_take isl_ast_graft_list *list, int product); __isl_give isl_ast_graft_list *isl_ast_graft_list_preimage_multi_aff( __isl_take isl_ast_graft_list *list, __isl_take isl_multi_aff *ma); +__isl_give isl_ast_graft_list *isl_ast_graft_list_insert_pending_guard_nodes( + __isl_take isl_ast_graft_list *list, __isl_keep isl_ast_build *build); __isl_give isl_ast_node *isl_ast_node_from_graft_list( __isl_take isl_ast_graft_list *list, __isl_keep isl_ast_build *build); -- 2.11.4.GIT