/* Conversion of SESE regions to Polyhedra.
- Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 2009 Free Software Foundation, Inc.
Contributed by Sebastian Pop <sebastian.pop@amd.com>.
This file is part of GCC.
GBB_DATA_REFS (gbb) = drs;
GBB_CONDITIONS (gbb) = NULL;
GBB_CONDITION_CASES (gbb) = NULL;
+ GBB_CLOOG_IV_TYPES (gbb) = NULL;
return gbb;
}
static void
free_gimple_bb (struct gimple_bb *gbb)
{
+ if (GBB_CLOOG_IV_TYPES (gbb))
+ htab_delete (GBB_CLOOG_IV_TYPES (gbb));
+
free_data_refs_aux (GBB_DATA_REFS (gbb));
free_data_refs (GBB_DATA_REFS (gbb));
gcc_assert (scattering_dimensions >= used_scattering_dimensions);
- mpz_init (v);
+ value_init (v);
ppl_new_Coefficient (&c);
PBB_TRANSFORMED (pbb) = poly_scattering_new ();
ppl_new_C_Polyhedron_from_space_dimension
ppl_Linear_Expression_t expr;
ppl_new_Linear_Expression_with_dimension (&expr, dim);
- mpz_set_si (v, 1);
+ value_set_si (v, 1);
ppl_assign_Coefficient_from_mpz_t (c, v);
ppl_Linear_Expression_add_to_coefficient (expr, i, c);
{
ppl_Linear_Expression_coefficient (static_schedule, i / 2, c);
ppl_Coefficient_to_mpz_t (c, v);
- mpz_neg (v, v);
+ value_oppose (v, v);
ppl_assign_Coefficient_from_mpz_t (c, v);
ppl_Linear_Expression_add_to_inhomogeneous (expr, c);
}
{
int loop = (i - 1) / 2;
- mpz_set_si (v, -1);
+ value_set_si (v, -1);
ppl_assign_Coefficient_from_mpz_t (c, v);
ppl_Linear_Expression_add_to_coefficient
(expr, scattering_dimensions + loop, c);
ppl_delete_Constraint (cstr);
}
- mpz_clear (v);
+ value_clear (v);
ppl_delete_Coefficient (c);
PBB_ORIGINAL (pbb) = poly_scattering_copy (PBB_TRANSFORMED (pbb));
ppl_Coefficient_t c;
Value v;
- mpz_init (v);
+ value_init (v);
ppl_new_Coefficient (&c);
ppl_new_Linear_Expression (&static_schedule);
because we cannot compare_prefix_loops against a previous loop,
prefix will be equal to zero, and that index will be
incremented before copying. */
- mpz_set_si (v, -1);
+ value_set_si (v, -1);
ppl_assign_Coefficient_from_mpz_t (c, v);
ppl_Linear_Expression_add_to_coefficient (static_schedule, 0, c);
ppl_assign_Linear_Expression_from_Linear_Expression (common,
static_schedule);
- mpz_set_si (v, 1);
+ value_set_si (v, 1);
ppl_assign_Coefficient_from_mpz_t (c, v);
ppl_Linear_Expression_add_to_coefficient (common, prefix, c);
ppl_assign_Linear_Expression_from_Linear_Expression (static_schedule,
ppl_delete_Linear_Expression (common);
}
- mpz_clear (v);
+ value_clear (v);
ppl_delete_Coefficient (c);
ppl_delete_Linear_Expression (static_schedule);
}
ppl_new_Coefficient (&coef);
ppl_Linear_Expression_coefficient (expr, d, coef);
- mpz_init (val);
+ value_init (val);
ppl_Coefficient_to_mpz_t (coef, val);
- mpz_add (val, val, k);
+ value_addto (val, val, k);
ppl_assign_Coefficient_from_mpz_t (coef, val);
ppl_Linear_Expression_add_to_coefficient (expr, d, coef);
- mpz_clear (val);
+ value_clear (val);
ppl_delete_Coefficient (coef);
}
| a [i * p] = ... */
gcc_assert (TREE_CODE (e) == INTEGER_CST);
- mpz_init (val);
- mpz_set_si (val, int_cst_value (e));
+ value_init (val);
+ value_set_si (val, int_cst_value (e));
add_value_to_dim (l, expr, val);
- mpz_clear (val);
+ value_clear (val);
}
}
ppl_Coefficient_t coef;
int v = int_cst_value (cst);
- mpz_init (val);
- mpz_set_si (val, 0);
+ value_init (val);
+ value_set_si (val, 0);
/* Necessary to not get "-1 = 2^n - 1". */
if (v < 0)
- mpz_sub_ui (val, val, -v);
+ value_sub_int (val, val, -v);
else
- mpz_add_ui (val, val, v);
+ value_add_int (val, val, v);
- mpz_mul (val, val, k);
+ value_multiply (val, val, k);
ppl_new_Coefficient (&coef);
ppl_assign_Coefficient_from_mpz_t (coef, val);
ppl_Linear_Expression_add_to_inhomogeneous (expr, coef);
- mpz_clear (val);
+ value_clear (val);
ppl_delete_Coefficient (coef);
}
{
Value val;
gcc_assert (host_integerp (TREE_OPERAND (e, 1), 0));
- mpz_init (val);
- mpz_set_si (val, int_cst_value (TREE_OPERAND (e, 1)));
- mpz_mul (val, val, k);
+ value_init (val);
+ value_set_si (val, int_cst_value (TREE_OPERAND (e, 1)));
+ value_multiply (val, val, k);
scan_tree_for_params (s, TREE_OPERAND (e, 0), c, val);
- mpz_clear (val);
+ value_clear (val);
}
else
scan_tree_for_params (s, TREE_OPERAND (e, 0), c, k);
{
Value val;
gcc_assert (host_integerp (TREE_OPERAND (e, 0), 0));
- mpz_init (val);
- mpz_set_si (val, int_cst_value (TREE_OPERAND (e, 0)));
- mpz_mul (val, val, k);
+ value_init (val);
+ value_set_si (val, int_cst_value (TREE_OPERAND (e, 0)));
+ value_multiply (val, val, k);
scan_tree_for_params (s, TREE_OPERAND (e, 1), c, val);
- mpz_clear (val);
+ value_clear (val);
}
else
scan_tree_for_params (s, TREE_OPERAND (e, 1), c, k);
ppl_subtract_Linear_Expression_from_Linear_Expression (c,
tmp_expr);
ppl_delete_Linear_Expression (tmp_expr);
- mpz_init (minus_one);
- mpz_set_si (minus_one, -1);
+ value_init (minus_one);
+ value_set_si (minus_one, -1);
ppl_new_Coefficient_from_mpz_t (&coef, minus_one);
ppl_Linear_Expression_add_to_inhomogeneous (c, coef);
- mpz_clear (minus_one);
+ value_clear (minus_one);
ppl_delete_Coefficient (coef);
}
loop_p loop = GBB_BB (gbb)->loop_father;
Value one;
- mpz_init (one);
- mpz_set_si (one, 1);
+ value_init (one);
+ value_set_si (one, 1);
/* Find parameters in the access functions of data references. */
for (i = 0; VEC_iterate (data_reference_p, GBB_DATA_REFS (gbb), i, dr); i++)
scan_tree_for_params (region, rhs, NULL, one);
}
- mpz_clear (one);
+ value_clear (one);
}
/* Record the parameters used in the SCOP. A variable is a parameter
struct loop *loop;
Value one;
- mpz_init (one);
- mpz_set_si (one, 1);
+ value_init (one);
+ value_set_si (one, 1);
/* Find the parameters used in the loop bounds. */
for (i = 0; VEC_iterate (loop_p, SESE_LOOP_NEST (region), i, loop); i++)
scan_tree_for_params (region, nb_iters, NULL, one);
}
- mpz_clear (one);
+ value_clear (one);
/* Find the parameters used in data accesses. */
for (i = 0; VEC_iterate (poly_bb_p, SCOP_BBS (scop), i, pbb); i++)
ub_expr);
/* Construct the negated number of last iteration in VAL. */
- mpz_init (val);
+ value_init (val);
mpz_set_double_int (val, nit, false);
- mpz_sub_ui (val, val, 1);
- mpz_neg (val, val);
+ value_sub_int (val, val, 1);
+ value_oppose (val, val);
/* NB_ITERS_LE holds the number of last iteration in
parametrical form. Subtract estimated number of last
ppl_delete_Polyhedron (pol);
ppl_delete_Linear_Expression (nb_iters_le);
ppl_delete_Constraint (ub);
- mpz_clear (val);
+ value_clear (val);
}
/* Builds the constraint polyhedra for LOOP in SCOP. OUTER_PH gives
ppl_Linear_Expression_t ub_expr;
double_int nit;
- mpz_init (one);
- mpz_set_si (one, 1);
+ value_init (one);
+ value_set_si (one, 1);
ppl_new_Linear_Expression_with_dimension (&ub_expr, dim);
nb_iters = scalar_evolution_in_region (region, loop, nb_iters);
scan_tree_for_params (SCOP_REGION (scop), nb_iters, ub_expr, one);
- mpz_clear (one);
+ value_clear (one);
if (estimated_loop_iterations (loop, true, &nit))
add_upper_bounds_from_estimated_nit (scop, nit, dim, ub_expr);
t = scalar_evolution_in_region (region, loop, t);
gcc_assert (!automatically_generated_chrec_p (t));
- mpz_init (one);
- mpz_set_si (one, 1);
+ value_init (one);
+ value_set_si (one, 1);
scan_tree_for_params (region, t, res, one);
- mpz_clear (one);
+ value_clear (one);
return res;
}
the left or the right side of the expression. */
if (code == LT_EXPR)
{
- mpz_init (v);
- mpz_set_si (v, 1);
+ value_init (v);
+ value_set_si (v, 1);
ppl_new_Coefficient (&c);
ppl_assign_Coefficient_from_mpz_t (c, v);
ppl_Linear_Expression_add_to_inhomogeneous (left, c);
ppl_delete_Coefficient (c);
- mpz_clear (v);
+ value_clear (v);
code = LE_EXPR;
}
else if (code == GT_EXPR)
{
- mpz_init (v);
- mpz_set_si (v, 1);
+ value_init (v);
+ value_set_si (v, 1);
ppl_new_Coefficient (&c);
ppl_assign_Coefficient_from_mpz_t (c, v);
ppl_Linear_Expression_add_to_inhomogeneous (right, c);
ppl_delete_Coefficient (c);
- mpz_clear (v);
+ value_clear (v);
code = GE_EXPR;
}
scop_p scop = PBB_SCOP (pbb);
sese region = SCOP_REGION (scop);
- mpz_init (v);
+ value_init (v);
for (i = 0; i < nb_subscripts; i++)
{
ppl_new_Linear_Expression_with_dimension (&fn, dom_nb_dims);
ppl_new_Linear_Expression_with_dimension (&access, accessp_nb_dims);
- mpz_set_si (v, 1);
+ value_set_si (v, 1);
scan_tree_for_params (region, afn, fn, v);
ppl_assign_Linear_Expression_from_Linear_Expression (access, fn);
ppl_delete_Constraint (cstr);
}
- mpz_clear (v);
+ value_clear (v);
}
/* Add constrains representing the size of the accessed data to the
|| !is_gimple_reg (gimple_phi_result (phi)))
return false;
- /* Note that loop close phi nodes should have a single argument
- because we translated the representation into a canonical form
- before Graphite: see canonicalize_loop_closed_ssa_form. */
return (gimple_phi_num_args (phi) == 1);
}
gimple stmt = gimple_build_assign (res, zero_dim_array);
tree arg = gimple_phi_arg_def (phi, 0);
- /* Note that loop close phi nodes should have a single argument
- because we translated the representation into a canonical form
- before Graphite: see canonicalize_loop_closed_ssa_form. */
- gcc_assert (gimple_phi_num_args (phi) == 1);
-
if (TREE_CODE (arg) == SSA_NAME
&& !SSA_NAME_IS_DEFAULT_DEF (arg))
insert_out_of_ssa_copy (zero_dim_array, arg);
update_ssa (TODO_update_ssa);
#ifdef ENABLE_CHECKING
- verify_loop_closed_ssa (true);
+ verify_ssa (false);
+ verify_loop_closed_ssa ();
#endif
FOR_EACH_BB (bb)
update_ssa (TODO_update_ssa);
#ifdef ENABLE_CHECKING
- verify_loop_closed_ssa (true);
+ verify_ssa (false);
+ verify_loop_closed_ssa ();
#endif
}
if (TREE_CODE (arg) != SSA_NAME)
return NULL;
- /* Note that loop close phi nodes should have a single argument
- because we translated the representation into a canonical form
- before Graphite: see canonicalize_loop_closed_ssa_form. */
- gcc_assert (gimple_phi_num_args (stmt) == 1);
-
def = SSA_NAME_DEF_STMT (arg);
loop_phi = detect_commutative_reduction (def, in, out);
{
unsigned int i;
gimple loop_phi;
- tree red = NULL_TREE;
+ tree red;
for (i = 0; VEC_iterate (gimple, in, i, loop_phi); i++)
{
gsi_commit_edge_inserts ();
update_ssa (TODO_update_ssa);
#ifdef ENABLE_CHECKING
- verify_loop_closed_ssa (true);
+ verify_ssa (false);
+ verify_loop_closed_ssa ();
#endif
}
bool known_niter = number_of_iterations_exit (loop, exit, &niter, false);
- /* At this point we should know the number of iterations. */
+ /* At this point we should know the number of iterations, */
gcc_assert (known_niter);
nit = force_gimple_operand (unshare_expr (niter.niter), &stmts, true,
if (stmts)
gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
- loop->single_iv = canonicalize_loop_ivs (loop, &nit, false);
+ loop->single_iv = canonicalize_loop_ivs (loop, &nit);
}
/* Rewrite all the loops of SCOP in normal form: one induction