void ppl_insert_dimensions_pointset (ppl_Pointset_Powerset_C_Polyhedron_t ph, int x, int nb_new_dims) { ppl_dimension_type i, dim; ppl_dimension_type *map; ppl_dimension_type x_ppl, nb_new_dims_ppl; x_ppl = (ppl_dimension_type) x; nb_new_dims_ppl = (ppl_dimension_type) nb_new_dims; ppl_Pointset_Powerset_C_Polyhedron_space_dimension (ph, &dim); ppl_Pointset_Powerset_C_Polyhedron_add_space_dimensions_and_embed (ph, nb_new_dims); map = (ppl_dimension_type *) XNEWVEC (ppl_dimension_type, dim + nb_new_dims); for (i = 0; i < x_ppl; i++) map[i] = i; for (i = x_ppl; i < x_ppl + nb_new_dims_ppl; i++) map[dim + i - x_ppl] = i; for (i = x_ppl + nb_new_dims_ppl; i < dim + nb_new_dims_ppl; i++) map[i - nb_new_dims_ppl] = i; ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions (ph, map, dim + nb_new_dims); free (map); }
static void build_alias_set_powerset (ppl_Pointset_Powerset_C_Polyhedron_t alias_powerset, ppl_dimension_type alias_dim) { ppl_dimension_type *ds; ppl_dimension_type access_dim; unsigned i, pos = 0; ppl_Pointset_Powerset_C_Polyhedron_space_dimension (alias_powerset, &access_dim); ds = XNEWVEC (ppl_dimension_type, access_dim-1); for (i = 0; i < access_dim; i++) { if (i == alias_dim) continue; ds[pos] = i; pos++; } ppl_Pointset_Powerset_C_Polyhedron_remove_space_dimensions (alias_powerset, ds, access_dim - 1); free (ds); }
static bool graphite_carried_dependence_level_k (poly_dr_p pdr1, poly_dr_p pdr2, int level) { poly_bb_p pbb1 = PDR_PBB (pdr1); poly_bb_p pbb2 = PDR_PBB (pdr2); ppl_Pointset_Powerset_C_Polyhedron_t d1 = PBB_DOMAIN (pbb1); ppl_Pointset_Powerset_C_Polyhedron_t d2 = PBB_DOMAIN (pbb2); ppl_Polyhedron_t so1 = PBB_TRANSFORMED_SCATTERING (pbb1); ppl_Polyhedron_t so2 = PBB_TRANSFORMED_SCATTERING (pbb2); ppl_Pointset_Powerset_C_Polyhedron_t po; ppl_Pointset_Powerset_C_Polyhedron_t eqpp; graphite_dim_t sdim1 = pdr_nb_subscripts (pdr1) + 1; graphite_dim_t sdim2 = pdr_nb_subscripts (pdr2) + 1; graphite_dim_t tdim1 = pbb_nb_scattering_transform (pbb1); graphite_dim_t ddim1 = pbb_dim_iter_domain (pbb1); ppl_dimension_type dim; bool empty_p; if ((PDR_TYPE (pdr1) == PDR_READ && PDR_TYPE (pdr2) == PDR_READ) || !poly_drs_may_alias_p (pdr1, pdr2)) return false; if (sdim1 != sdim2) return true; po = dependence_polyhedron (pbb1, pbb2, d1, d2, pdr1, pdr2, so1, so2, true, false); if (ppl_Pointset_Powerset_C_Polyhedron_is_empty (po)) { ppl_delete_Pointset_Powerset_C_Polyhedron (po); return false; } ppl_Pointset_Powerset_C_Polyhedron_space_dimension (po, &dim); eqpp = build_pairwise_scheduling_inequality (dim, level, tdim1 + ddim1, 1); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (eqpp, po); empty_p = ppl_Pointset_Powerset_C_Polyhedron_is_empty (eqpp); ppl_delete_Pointset_Powerset_C_Polyhedron (po); ppl_delete_Pointset_Powerset_C_Polyhedron (eqpp); return !empty_p; }
static ppl_Pointset_Powerset_C_Polyhedron_t map_dr_into_dep_poly (graphite_dim_t dim, ppl_Pointset_Powerset_C_Polyhedron_t dr, graphite_dim_t cut0, graphite_dim_t cut1, graphite_dim_t nb0, graphite_dim_t nb1) { ppl_dimension_type pdim; ppl_dimension_type *map; ppl_Pointset_Powerset_C_Polyhedron_t res; ppl_dimension_type i; ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron (&res, dr); ppl_Pointset_Powerset_C_Polyhedron_space_dimension (res, &pdim); map = (ppl_dimension_type *) XNEWVEC (ppl_dimension_type, pdim); /* First mapping: move 'g' vector to right position. */ for (i = 0; i < cut0; i++) map[i] = i; for (i = cut0; i < cut1; i++) map[i] = pdim - cut1 + i; for (i = cut1; i < pdim; i++) map[i] = cut0 + i - cut1; ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions (res, map, pdim); free (map); /* After swapping 's' and 'g' vectors, we have to update a new cut. */ cut1 = pdim - cut1 + cut0; ppl_insert_dimensions_pointset (res, 0, nb0); ppl_insert_dimensions_pointset (res, nb0 + cut0, nb1); ppl_insert_dimensions_pointset (res, nb0 + nb1 + cut1, dim - nb0 - nb1 - pdim); return res; }