diff --git a/gcc/graphite-dependences.c b/gcc/graphite-dependences.c index b0f8680..f382233 100644 --- a/gcc/graphite-dependences.c +++ b/gcc/graphite-dependences.c @@ -426,22 +426,48 @@ subtract_commutative_associative_deps (scop_p scop, *must_raw = isl_union_map_subtract (*must_raw, x_must_raw); *may_raw = isl_union_map_subtract (*may_raw, x_may_raw); - *must_raw_no_source = isl_union_map_subtract (*must_raw_no_source, - x_must_raw_no_source); - *may_raw_no_source = isl_union_map_subtract (*may_raw_no_source, - x_may_raw_no_source); + + if (must_raw_no_source) + *must_raw_no_source = isl_union_map_subtract (*must_raw_no_source, + x_must_raw_no_source); + else + isl_union_map_free (x_must_raw_no_source); + + if (may_raw_no_source) + *may_raw_no_source = isl_union_map_subtract (*may_raw_no_source, + x_may_raw_no_source); + else + isl_union_map_free (x_may_raw_no_source); + *must_war = isl_union_map_subtract (*must_war, x_must_war); *may_war = isl_union_map_subtract (*may_war, x_may_war); - *must_war_no_source = isl_union_map_subtract (*must_war_no_source, - x_must_war_no_source); - *may_war_no_source = isl_union_map_subtract (*may_war_no_source, - x_may_war_no_source); + + if (must_war_no_source) + *must_war_no_source = isl_union_map_subtract (*must_war_no_source, + x_must_war_no_source); + else + isl_union_map_free (x_must_war_no_source); + + if (may_war_no_source) + *may_war_no_source = isl_union_map_subtract (*may_war_no_source, + x_may_war_no_source); + else + isl_union_map_free (x_may_war_no_source); + *must_waw = isl_union_map_subtract (*must_waw, x_must_waw); *may_waw = isl_union_map_subtract (*may_waw, x_may_waw); - *must_waw_no_source = isl_union_map_subtract (*must_waw_no_source, - x_must_waw_no_source); - *may_waw_no_source = isl_union_map_subtract (*may_waw_no_source, - x_may_waw_no_source); + + if (must_waw_no_source) + *must_waw_no_source = isl_union_map_subtract (*must_waw_no_source, + x_must_waw_no_source); + else + isl_union_map_free (x_must_waw_no_source); + + if (may_waw_no_source) + *may_waw_no_source = isl_union_map_subtract (*may_waw_no_source, + x_may_waw_no_source); + else + isl_union_map_free (x_may_waw_no_source); } isl_union_map_free (original); diff --git a/gcc/testsuite/gfortran.dg/graphite/pr59586.f b/gcc/testsuite/gfortran.dg/graphite/pr59586.f new file mode 100644 index 0000000..f33a1b1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/graphite/pr59586.f @@ -0,0 +1,11 @@ +! { dg-additional-options "-Ofast -floop-parallelize-all" } + + subroutine subsm ( n, x, xp, xx) + integer n, m, x(n),xp(n), xx(n), gg(n), dd_p + do 55 i=1, n + dd_p = dd_p + (x(i) - xx(i))*gg(i) + 55 continue + if ( dd_p .gt. 0 ) then + call dcopy( n, xp, 1, x, 1 ) + endif + end