void new_poly_dr (poly_bb_p pbb, gimple *stmt, enum poly_dr_type type, isl_map *acc, isl_set *subscript_sizes) { static int id = 0; poly_dr_p pdr = XNEW (struct poly_dr); pdr->stmt = stmt; PDR_ID (pdr) = id++; PDR_NB_REFS (pdr) = 1; PDR_PBB (pdr) = pbb; pdr->accesses = acc; pdr->subscript_sizes = subscript_sizes; PDR_TYPE (pdr) = type; PBB_DRS (pbb).safe_push (pdr); if (dump_file) { fprintf (dump_file, "Converting dr: "); print_pdr (dump_file, pdr); fprintf (dump_file, "To polyhedral representation:\n"); fprintf (dump_file, " - access functions: "); print_isl_map (dump_file, acc); fprintf (dump_file, " - subscripts: "); print_isl_set (dump_file, subscript_sizes); } }
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 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; }
void new_poly_dr (poly_bb_p pbb, gimple *stmt, enum poly_dr_type type, isl_map *acc, isl_set *subscript_sizes) { static int id = 0; poly_dr_p pdr = XNEW (struct poly_dr); pdr->stmt = stmt; PDR_ID (pdr) = id++; PDR_NB_REFS (pdr) = 1; PDR_PBB (pdr) = pbb; pdr->accesses = acc; pdr->subscript_sizes = subscript_sizes; PDR_TYPE (pdr) = type; PBB_DRS (pbb).safe_push (pdr); }
void new_poly_dr (poly_bb_p pbb, int dr_base_object_set, ppl_Pointset_Powerset_C_Polyhedron_t accesses, enum poly_dr_type type, void *cdr, graphite_dim_t nb_subscripts) { static int id = 0; poly_dr_p pdr = XNEW (struct poly_dr); PDR_ID (pdr) = id++; PDR_BASE_OBJECT_SET (pdr) = dr_base_object_set; PDR_NB_REFS (pdr) = 1; PDR_PBB (pdr) = pbb; PDR_ACCESSES (pdr) = accesses; PDR_TYPE (pdr) = type; PDR_CDR (pdr) = cdr; PDR_NB_SUBSCRIPTS (pdr) = nb_subscripts; VEC_safe_push (poly_dr_p, heap, PBB_DRS (pbb), pdr); }
void new_poly_dr (poly_bb_p pbb, enum poly_dr_type type, data_reference_p cdr, graphite_dim_t nb_subscripts, isl_map *acc, isl_set *subscript_sizes) { static int id = 0; poly_dr_p pdr = XNEW (struct poly_dr); PDR_ID (pdr) = id++; PDR_NB_REFS (pdr) = 1; PDR_PBB (pdr) = pbb; pdr->accesses = acc; pdr->subscript_sizes = subscript_sizes; PDR_TYPE (pdr) = type; PDR_CDR (pdr) = cdr; PDR_NB_SUBSCRIPTS (pdr) = nb_subscripts; PBB_DRS (pbb).safe_push (pdr); }