+2017-09-15 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/68823
+ * graphite-scop-detection.c (build_alias_set): If we have a
+ possible dependence check whether we can handle them by just
+ looking at the DRs DR_ACCESS_FNs.
+ (build_scops): If build_alias_set fails, fail the SCOP.
+
2017-09-14 Michael Meissner <meissner@linux.vnet.ibm.com>
* config/rs6000/rs6000-builtin.def (BU_FLOAT128_1_HW): New macros
/* Compute alias-sets for all data references in DRS. */
-static void
+static bool
build_alias_set (scop_p scop)
{
int num_vertices = scop->drs.length ();
for (j = i+1; scop->drs.iterate (j, &dr2); j++)
if (dr_may_alias_p (dr1->dr, dr2->dr, true))
{
+ /* Dependences in the same alias set need to be handled
+ by just looking at DR_ACCESS_FNs. */
+ if (DR_NUM_DIMENSIONS (dr1->dr) != DR_NUM_DIMENSIONS (dr2->dr)
+ || ! operand_equal_p (DR_BASE_OBJECT (dr1->dr),
+ DR_BASE_OBJECT (dr2->dr),
+ OEP_ADDRESS_OF)
+ || ! types_compatible_p (TREE_TYPE (DR_BASE_OBJECT (dr1->dr)),
+ TREE_TYPE (DR_BASE_OBJECT (dr2->dr))))
+ {
+ free_graph (g);
+ return false;
+ }
add_edge (g, i, j);
add_edge (g, j, i);
}
scop->drs[i].alias_set = g->vertices[i].component + 1;
free_graph (g);
+ return true;
}
/* Gather BBs and conditions for a SCOP. */
scop->pbbs.qsort (cmp_pbbs);
order.release ();
- build_alias_set (scop);
+ if (! build_alias_set (scop))
+ {
+ DEBUG_PRINT (dp << "[scop-detection-fail] cannot handle dependences\n");
+ free_scop (scop);
+ continue;
+ }
/* Do not optimize a scop containing only PBBs that do not belong
to any loops. */