static inline tree pbb_to_depth_to_oldiv (poly_bb_p pbb, int depth) { gimple_bb_p gbb = PBB_BLACK_BOX (pbb); sese region = SCOP_REGION (PBB_SCOP (pbb)); loop_p loop = gbb_loop_at_index (gbb, region, depth); return (tree) loop->aux; }
static ppl_Pointset_Powerset_C_Polyhedron_t dependence_polyhedron (poly_bb_p pbb1, poly_bb_p pbb2, ppl_Pointset_Powerset_C_Polyhedron_t d1, ppl_Pointset_Powerset_C_Polyhedron_t d2, poly_dr_p pdr1, poly_dr_p pdr2, ppl_Polyhedron_t s1, ppl_Polyhedron_t s2, bool direction, bool original_scattering_p) { poly_dr_pair tmp; PTR *x = NULL; ppl_Pointset_Powerset_C_Polyhedron_t res; if (original_scattering_p) { tmp.source = pdr1; tmp.sink = pdr2; x = htab_find_slot (SCOP_ORIGINAL_PDR_PAIRS (PBB_SCOP (pbb1)), &tmp, INSERT); if (x && *x) { if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "\nddp cache: hit.\n"); return ((poly_dr_pair *)*x)->ddp; } else if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "\nddp cache: miss.\n"); } res = dependence_polyhedron_1 (pbb1, pbb2, d1, d2, pdr1, pdr2, s1, s2, direction, original_scattering_p); if (original_scattering_p) { gcc_assert (x && *x == NULL); *x = new_poly_dr_pair (pdr1, pdr2, res); if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "\nddp cache: add element.\n"); } return res; }
static void extend_scattering (poly_bb_p pbb, int max_scattering) { ppl_dimension_type nb_old_dims, nb_new_dims; int nb_added_dims, i; ppl_Coefficient_t coef; Value one; nb_added_dims = max_scattering - pbb_nb_scattering_transform (pbb); value_init (one); value_set_si (one, 1); ppl_new_Coefficient (&coef); ppl_assign_Coefficient_from_mpz_t (coef, one); gcc_assert (nb_added_dims >= 0); nb_old_dims = pbb_nb_scattering_transform (pbb) + pbb_dim_iter_domain (pbb) + scop_nb_params (PBB_SCOP (pbb)); nb_new_dims = nb_old_dims + nb_added_dims; ppl_insert_dimensions (PBB_TRANSFORMED_SCATTERING (pbb), pbb_nb_scattering_transform (pbb), nb_added_dims); PBB_NB_SCATTERING_TRANSFORM (pbb) += nb_added_dims; /* Add identity matrix for the added dimensions. */ for (i = max_scattering - nb_added_dims; i < max_scattering; i++) { ppl_Constraint_t cstr; ppl_Linear_Expression_t expr; ppl_new_Linear_Expression_with_dimension (&expr, nb_new_dims); ppl_Linear_Expression_add_to_coefficient (expr, i, coef); ppl_new_Constraint (&cstr, expr, PPL_CONSTRAINT_TYPE_EQUAL); ppl_Polyhedron_add_constraint (PBB_TRANSFORMED_SCATTERING (pbb), cstr); ppl_delete_Constraint (cstr); ppl_delete_Linear_Expression (expr); } ppl_delete_Coefficient (coef); value_clear (one); }
static ppl_Pointset_Powerset_C_Polyhedron_t dependence_polyhedron_1 (poly_bb_p pbb1, poly_bb_p pbb2, ppl_Pointset_Powerset_C_Polyhedron_t d1, ppl_Pointset_Powerset_C_Polyhedron_t d2, poly_dr_p pdr1, poly_dr_p pdr2, ppl_Polyhedron_t s1, ppl_Polyhedron_t s2, bool direction, bool original_scattering_p) { scop_p scop = PBB_SCOP (pbb1); graphite_dim_t tdim1 = original_scattering_p ? pbb_nb_scattering_orig (pbb1) : pbb_nb_scattering_transform (pbb1); graphite_dim_t tdim2 = original_scattering_p ? pbb_nb_scattering_orig (pbb2) : pbb_nb_scattering_transform (pbb2); graphite_dim_t ddim1 = pbb_dim_iter_domain (pbb1); graphite_dim_t ddim2 = pbb_dim_iter_domain (pbb2); graphite_dim_t sdim1 = pdr_nb_subscripts (pdr1) + 1; graphite_dim_t gdim = scop_nb_params (scop); graphite_dim_t dim1 = pdr_dim (pdr1); graphite_dim_t dim2 = pdr_dim (pdr2); graphite_dim_t dim = tdim1 + tdim2 + dim1 + dim2; ppl_Pointset_Powerset_C_Polyhedron_t res; ppl_Pointset_Powerset_C_Polyhedron_t id1, id2, isc1, isc2, idr1, idr2; ppl_Pointset_Powerset_C_Polyhedron_t sc1, sc2, dreq; gcc_assert (PBB_SCOP (pbb1) == PBB_SCOP (pbb2)); ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron (&sc1, s1); ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron (&sc2, s2); id1 = map_into_dep_poly (dim, gdim, d1, ddim1, tdim1); id2 = map_into_dep_poly (dim, gdim, d2, ddim2, tdim1 + ddim1 + tdim2); isc1 = map_into_dep_poly (dim, gdim, sc1, ddim1 + tdim1, 0); isc2 = map_into_dep_poly (dim, gdim, sc2, ddim2 + tdim2, tdim1 + ddim1); idr1 = map_dr_into_dep_poly (dim, PDR_ACCESSES (pdr1), ddim1, ddim1 + gdim, tdim1, tdim2 + ddim2); idr2 = map_dr_into_dep_poly (dim, PDR_ACCESSES (pdr2), ddim2, ddim2 + gdim, tdim1 + ddim1 + tdim2, sdim1); /* Now add the subscript equalities. */ dreq = dr_equality_constraints (dim, tdim1 + ddim1 + tdim2 + ddim2, sdim1); ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension (&res, dim, 0); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (res, id1); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (res, id2); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (res, isc1); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (res, isc2); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (res, idr1); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (res, idr2); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (res, dreq); ppl_delete_Pointset_Powerset_C_Polyhedron (id1); ppl_delete_Pointset_Powerset_C_Polyhedron (id2); ppl_delete_Pointset_Powerset_C_Polyhedron (sc1); ppl_delete_Pointset_Powerset_C_Polyhedron (sc2); ppl_delete_Pointset_Powerset_C_Polyhedron (isc1); ppl_delete_Pointset_Powerset_C_Polyhedron (isc2); ppl_delete_Pointset_Powerset_C_Polyhedron (idr1); ppl_delete_Pointset_Powerset_C_Polyhedron (idr2); ppl_delete_Pointset_Powerset_C_Polyhedron (dreq); if (!ppl_Pointset_Powerset_C_Polyhedron_is_empty (res)) build_lexicographically_gt_constraint (&res, dim, MIN (tdim1, tdim2), tdim1 + ddim1, direction); return res; }