2011-06-29 Sebastian Pop <sebastian....@amd.com> * graphite-clast-to-gimple.c (compute_bounds_for_level): Removed. (compute_type_for_level): Removed. (clast_get_body_of_loop): Removed. (gcc_type_for_iv_of_clast_loop): Removed. (graphite_create_new_loop): Use max_precision_type. Compute the type of the IV based only on the CLAST bounds. (translate_clast_for_loop): Do not pass level to graphite_create_new_loop. --- gcc/ChangeLog | 11 +++++ gcc/graphite-clast-to-gimple.c | 95 +-------------------------------------- 2 files changed, 14 insertions(+), 92 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0616b10..3117f23 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,16 @@ 2011-06-29 Sebastian Pop <sebastian....@amd.com> + * graphite-clast-to-gimple.c (compute_bounds_for_level): Removed. + (compute_type_for_level): Removed. + (clast_get_body_of_loop): Removed. + (gcc_type_for_iv_of_clast_loop): Removed. + (graphite_create_new_loop): Use max_precision_type. Compute the type + of the IV based only on the CLAST bounds. + (translate_clast_for_loop): Do not pass level to + graphite_create_new_loop. + +2011-06-29 Sebastian Pop <sebastian....@amd.com> + * graphite-clast-to-gimple.c (precision_for_value): Removed. (precision_for_interval): Removed. (gcc_type_for_interval): Use mpz_sizeinbase. diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c index 70031a0..c8d76c1 100644 --- a/gcc/graphite-clast-to-gimple.c +++ b/gcc/graphite-clast-to-gimple.c @@ -603,94 +603,6 @@ graphite_create_new_guard (sese region, edge entry_edge, return exit_edge; } -/* Compute the lower bound LOW and upper bound UP for the induction - variable at LEVEL for the statement PBB, based on the transformed - scattering of PBB: T|I|G|Cst, with T the scattering transform, I - the iteration domain, and G the context parameters. */ - -static void -compute_bounds_for_level (poly_bb_p pbb, int level, mpz_t low, mpz_t up) -{ - ppl_Pointset_Powerset_C_Polyhedron_t ps; - ppl_Linear_Expression_t le; - - combine_context_id_scat (&ps, pbb, false); - - /* Prepare the linear expression corresponding to the level that we - want to maximize/minimize. */ - { - ppl_dimension_type dim = pbb_nb_scattering_transform (pbb) - + pbb_dim_iter_domain (pbb) + pbb_nb_params (pbb); - - ppl_new_Linear_Expression_with_dimension (&le, dim); - ppl_set_coef (le, 2 * level + 1, 1); - } - - ppl_max_for_le_pointset (ps, le, up); - ppl_min_for_le_pointset (ps, le, low); - ppl_delete_Linear_Expression (le); - ppl_delete_Pointset_Powerset_C_Polyhedron (ps); -} - -/* Compute the type for the induction variable at LEVEL for the - statement PBB, based on the transformed schedule of PBB. */ - -static tree -compute_type_for_level (poly_bb_p pbb, int level) -{ - mpz_t low, up; - tree type; - - mpz_init (low); - mpz_init (up); - - compute_bounds_for_level (pbb, level, low, up); - type = gcc_type_for_interval (low, up); - - mpz_clear (low); - mpz_clear (up); - return type; -} - -/* Walks a CLAST and returns the first statement in the body of a - loop. */ - -static struct clast_user_stmt * -clast_get_body_of_loop (struct clast_stmt *stmt) -{ - if (!stmt - || CLAST_STMT_IS_A (stmt, stmt_user)) - return (struct clast_user_stmt *) stmt; - - if (CLAST_STMT_IS_A (stmt, stmt_for)) - return clast_get_body_of_loop (((struct clast_for *) stmt)->body); - - if (CLAST_STMT_IS_A (stmt, stmt_guard)) - return clast_get_body_of_loop (((struct clast_guard *) stmt)->then); - - if (CLAST_STMT_IS_A (stmt, stmt_block)) - return clast_get_body_of_loop (((struct clast_block *) stmt)->body); - - gcc_unreachable (); -} - -/* Returns the type for the induction variable for the loop translated - from STMT_FOR. */ - -static tree -gcc_type_for_iv_of_clast_loop (struct clast_for *stmt_for, int level, - tree lb_type, tree ub_type) -{ - struct clast_stmt *stmt = (struct clast_stmt *) stmt_for; - struct clast_user_stmt *body = clast_get_body_of_loop (stmt); - CloogStatement *cs = body->statement; - poly_bb_p pbb = (poly_bb_p) cloog_statement_usr (cs); - - return max_signed_precision_type (lb_type, max_precision_type - (ub_type, compute_type_for_level - (pbb, level - 1))); -} - /* Creates a new LOOP corresponding to Cloog's STMT. Inserts an induction variable for the new LOOP. New LOOP is attached to CFG starting at ENTRY_EDGE. LOOP is inserted into the loop tree and @@ -703,13 +615,13 @@ static struct loop * graphite_create_new_loop (sese region, edge entry_edge, struct clast_for *stmt, loop_p outer, VEC (tree, heap) **newivs, - htab_t newivs_index, htab_t params_index, int level) + htab_t newivs_index, htab_t params_index) { tree lb_type = gcc_type_for_clast_expr (stmt->LB, region, *newivs, newivs_index, params_index); tree ub_type = gcc_type_for_clast_expr (stmt->UB, region, *newivs, newivs_index, params_index); - tree type = gcc_type_for_iv_of_clast_loop (stmt, level, lb_type, ub_type); + tree type = max_precision_type (lb_type, ub_type); tree lb = clast_to_gcc_expression (type, stmt->LB, region, *newivs, newivs_index, params_index); tree ub = clast_to_gcc_expression (type, stmt->UB, region, *newivs, @@ -945,8 +857,7 @@ translate_clast_for_loop (sese region, loop_p context_loop, { struct loop *loop = graphite_create_new_loop (region, next_e, stmt, context_loop, newivs, - newivs_index, params_index, - level); + newivs_index, params_index); edge last_e = single_exit (loop); edge to_body = single_succ_edge (loop->header); basic_block after = to_body->dest; -- 1.7.4.1