static bool poly_drs_may_alias_p (poly_dr_p pdr1, poly_dr_p pdr2) { ppl_Pointset_Powerset_C_Polyhedron_t alias_powerset1, alias_powerset2; ppl_Pointset_Powerset_C_Polyhedron_t accesses1 = PDR_ACCESSES (pdr1); ppl_Pointset_Powerset_C_Polyhedron_t accesses2 = PDR_ACCESSES (pdr2); ppl_dimension_type alias_dim1 = pdr_alias_set_dim (pdr1); ppl_dimension_type alias_dim2 = pdr_alias_set_dim (pdr2); int empty_p; ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron (&alias_powerset1, accesses1); ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron (&alias_powerset2, accesses2); build_alias_set_powerset (alias_powerset1, alias_dim1); build_alias_set_powerset (alias_powerset2, alias_dim2); ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (alias_powerset1, alias_powerset2); empty_p = ppl_Pointset_Powerset_C_Polyhedron_is_empty (alias_powerset1); ppl_delete_Pointset_Powerset_C_Polyhedron (alias_powerset1); ppl_delete_Pointset_Powerset_C_Polyhedron (alias_powerset2); return !empty_p; }
static ppl_Pointset_Powerset_C_Polyhedron_t map_into_dep_poly (graphite_dim_t dim, graphite_dim_t gdim, ppl_Pointset_Powerset_C_Polyhedron_t p, graphite_dim_t cut, graphite_dim_t offset) { ppl_Pointset_Powerset_C_Polyhedron_t res; ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron (&res, p); ppl_insert_dimensions_pointset (res, 0, offset); ppl_insert_dimensions_pointset (res, offset + cut, dim - offset - cut - gdim); return res; }
static inline bool can_collapse_pdrs (poly_dr_p pdr1, poly_dr_p pdr2) { bool res; ppl_Pointset_Powerset_C_Polyhedron_t af1, af2, diff; if (PDR_PBB (pdr1) != PDR_PBB (pdr2) || PDR_NB_SUBSCRIPTS (pdr1) != PDR_NB_SUBSCRIPTS (pdr2) || PDR_TYPE (pdr1) != PDR_TYPE (pdr2)) return false; af1 = PDR_ACCESSES (pdr1); af2 = PDR_ACCESSES (pdr2); ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron (&diff, af1); ppl_Pointset_Powerset_C_Polyhedron_difference_assign (diff, af2); res = ppl_Pointset_Powerset_C_Polyhedron_is_empty (diff); ppl_delete_Pointset_Powerset_C_Polyhedron (diff); return res; }
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; }