From: Sebastian Pop Date: Fri, 8 Jan 2010 07:39:01 +0000 (+0000) Subject: re PR tree-optimization/42521 (ICE: in graphite_loop_normal_form, at graphite-sese... X-Git-Tag: releases/gcc-4.5.0~1340 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd4a56fff2611fa6d840e801d8181bfac061f8e0;p=thirdparty%2Fgcc.git re PR tree-optimization/42521 (ICE: in graphite_loop_normal_form, at graphite-sese-to-poly.c:2844) Fix PR42521. 2010-01-07 Sebastian Pop PR middle-end/42521 * graphite.c (graphite_finalize): Call scev_reset. (graphite_transform_loops): Do not call scev_reset between the code generation of scops. * testsuite/gcc.dg/graphite/pr42521.c: New. From-SVN: r155728 --- diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite index 379e35164577..165f7ebec972 100644 --- a/gcc/ChangeLog.graphite +++ b/gcc/ChangeLog.graphite @@ -1,3 +1,12 @@ +2010-01-07 Sebastian Pop + + PR middle-end/42521 + * graphite.c (graphite_finalize): Call scev_reset. + (graphite_transform_loops): Do not call scev_reset between the code + generation of scops. + + * testsuite/gcc.dg/graphite/pr42521.c: New. + 2010-01-07 Sebastian Pop * graphite-interchange.c (memory_stride_in_loop): Renamed diff --git a/gcc/graphite.c b/gcc/graphite.c index 83d484aae561..7037a3fa1a06 100644 --- a/gcc/graphite.c +++ b/gcc/graphite.c @@ -228,6 +228,7 @@ graphite_finalize (bool need_cfg_cleanup_p) { if (need_cfg_cleanup_p) { + scev_reset (); cleanup_tree_cfg (); profile_status = PROFILE_ABSENT; release_recorded_exits (); @@ -279,10 +280,7 @@ graphite_transform_loops (void) check_poly_representation (scop); if (transform_done) - { - scev_reset (); - need_cfg_cleanup_p = true; - } + need_cfg_cleanup_p = true; } htab_delete (bb_pbb_mapping); diff --git a/gcc/testsuite/gcc.dg/graphite/pr42521.c b/gcc/testsuite/gcc.dg/graphite/pr42521.c new file mode 100644 index 000000000000..2695df57979a --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr42521.c @@ -0,0 +1,18 @@ +/* { dg-options "-O3 -fgraphite-identity" } */ + +extern int *A; +extern int B[][4]; + +void foo(int im, int jm, int cond) +{ + int i, j; + if (cond) + for (i = 0; i < 256; i++) + A[i] = 0; + + for (i = 0; i < im; i++) + for (j = 1; j < jm; j++) + if (jm != 8 || j != jm >> 1) + B[j][0] ^= B[j-1][0]; + +}