From 75b816ed37d9537882d866f935cb8f1588374df9 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 11 Jul 2014 14:42:55 +0200 Subject: [PATCH] pet_scop_embed: extract out pet_scop_reset_skips This makes it more explicit that the skips are reset and it will allow us to postpone the call to pet_scop_embed in the next commit, while the skips need to be reset at the place where pet_scop_embed is currently called. Signed-off-by: Sven Verdoolaege --- scop.c | 17 ++++++++++------- scop.h | 1 + tree2scop.c | 3 +++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/scop.c b/scop.c index 6c18243..eb1d8d1 100644 --- a/scop.c +++ b/scop.c @@ -1560,10 +1560,6 @@ error: /* Adjust the context and statement schedules according to an embedding * in a loop with iteration domain "dom" and schedule "sched". - * - * Any skip conditions within the loop have no effect outside of the loop. - * The caller is responsible for making sure skip[pet_skip_later] has been - * taken into account. */ struct pet_scop *pet_scop_embed(struct pet_scop *scop, __isl_take isl_set *dom, __isl_take isl_aff *sched) @@ -1576,9 +1572,6 @@ struct pet_scop *pet_scop_embed(struct pet_scop *scop, __isl_take isl_set *dom, if (!scop) goto error; - pet_scop_reset_skip(scop, pet_skip_now); - pet_scop_reset_skip(scop, pet_skip_later); - scop->context = context_embed(scop->context, dom); if (!scop->context) goto error; @@ -2043,6 +2036,16 @@ void pet_scop_reset_skip(struct pet_scop *scop, enum pet_skip type) ext->skip[type] = NULL; } +/* Drop all skip conditions on "scop". + */ +struct pet_scop *pet_scop_reset_skips(struct pet_scop *scop) +{ + pet_scop_reset_skip(scop, pet_skip_now); + pet_scop_reset_skip(scop, pet_skip_later); + + return scop; +} + /* Make the skip condition (if any) depend on the value of "test" being * equal to "satisfied". * diff --git a/scop.h b/scop.h index 97f4fec..c6234ea 100644 --- a/scop.h +++ b/scop.h @@ -84,6 +84,7 @@ __isl_give isl_id *pet_scop_get_skip_id(struct pet_scop *scop, __isl_give pet_expr *pet_scop_get_skip_expr(struct pet_scop *scop, enum pet_skip type); void pet_scop_reset_skip(struct pet_scop *scop, enum pet_skip type); +struct pet_scop *pet_scop_reset_skips(struct pet_scop *scop); struct pet_scop *pet_scop_add_array(struct pet_scop *scop, struct pet_array *array); diff --git a/tree2scop.c b/tree2scop.c index df8dee7..6b3d0a1 100644 --- a/tree2scop.c +++ b/tree2scop.c @@ -575,6 +575,7 @@ static struct pet_scop *scop_from_infinite_loop(__isl_keep pet_tree *body, if (has_var_break) id_test = pet_scop_get_skip_id(scop, pet_skip_later); + scop = pet_scop_reset_skips(scop); scop = pet_scop_embed(scop, isl_set_copy(domain), sched); if (has_affine_break) { domain = apply_affine_break(domain, skip, 1, 0, NULL); @@ -855,6 +856,7 @@ static struct pet_scop *scop_from_non_affine_while(__isl_take pet_expr *cond, scop_body = scop_add_inc(scop_body, expr_inc, loc, pc, state); } else pet_loc_free(loc); + scop_body = pet_scop_reset_skips(scop_body); scop_body = pet_scop_embed(scop_body, isl_set_copy(domain), sched); if (has_affine_break) { @@ -1645,6 +1647,7 @@ static struct pet_scop *scop_from_affine_for(__isl_keep pet_tree *tree, scop = pet_scop_reset_context(scop); scop = pet_scop_prefix(scop, 1); } + scop = pet_scop_reset_skips(scop); scop = pet_scop_embed(scop, isl_set_copy(domain), sched); scop = pet_scop_resolve_nested(scop); if (has_affine_break) { -- 2.11.4.GIT