From b6ab6ef81c11e2353f7ef7b771e4aca774f1be68 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 15 Sep 2017 07:03:02 +0000 Subject: [PATCH] re PR tree-optimization/68823 ([graphite] tramp3d-v4 compiled with -floop-nest-optimize crashes) 2017-09-15 Richard Biener 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. From-SVN: r252780 --- gcc/ChangeLog | 8 ++++++++ gcc/graphite-scop-detection.c | 22 ++++++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 861616b2a15..4ff9f794bf9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-09-15 Richard Biener + + 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 * config/rs6000/rs6000-builtin.def (BU_FLOAT128_1_HW): New macros diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index e17d58a26fc..bc66dfdac12 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -1855,7 +1855,7 @@ try_generate_gimple_bb (scop_p scop, basic_block bb) /* 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 (); @@ -1868,6 +1868,18 @@ build_alias_set (scop_p scop) 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); } @@ -1883,6 +1895,7 @@ build_alias_set (scop_p scop) scop->drs[i].alias_set = g->vertices[i].component + 1; free_graph (g); + return true; } /* Gather BBs and conditions for a SCOP. */ @@ -2075,7 +2088,12 @@ build_scops (vec *scops) 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. */ -- 2.30.2