diff options
author | Richard Guenther <rguenther@suse.de> | 2012-04-11 14:04:00 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-04-11 14:04:00 +0000 |
commit | 754870ed779d39b573295a04dc559542e7bcabf3 (patch) | |
tree | 2ef6199ab21d5100ae3c9462c2fefb73040fea00 /gcc | |
parent | 405af656bcbddb0f655aa7744220478b80df09d7 (diff) | |
download | gcc-754870ed779d39b573295a04dc559542e7bcabf3.zip gcc-754870ed779d39b573295a04dc559542e7bcabf3.tar.gz gcc-754870ed779d39b573295a04dc559542e7bcabf3.tar.bz2 |
re PR middle-end/52621 (ICE with -O3 -march=opteron in initialize_matrix_A, at tree-data-ref.c:1964)
2012-04-11 Richard Guenther <rguenther@suse.de>
PR middle-end/52621
* tree-chrec.c (evolution_function_is_invariant_rec_p): Properly
consider loop nesting.
(evolution_function_is_univariate_p): Properly check the remainder
for chrecs.
* gfortran.dg/pr52621.f90: New testcase.
From-SVN: r186321
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr52621.f90 | 20 | ||||
-rw-r--r-- | gcc/tree-chrec.c | 6 |
4 files changed, 39 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 945e904..ed6beb1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2012-04-11 Richard Guenther <rguenther@suse.de> + PR middle-end/52621 + * tree-chrec.c (evolution_function_is_invariant_rec_p): Properly + consider loop nesting. + (evolution_function_is_univariate_p): Properly check the remainder + for chrecs. + +2012-04-11 Richard Guenther <rguenther@suse.de> + PR middle-end/52918 * except.c (sjlj_emit_dispatch_table): Properly update loop structure. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e2a1c3..ab04f98 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2012-04-11 Richard Guenther <rguenther@suse.de> + PR middle-end/52621 + * gfortran.dg/pr52621.f90: New testcase. + +2012-04-11 Richard Guenther <rguenther@suse.de> + PR middle-end/52918 * g++.dg/torture/pr52918-1.C: New testcase. * g++.dg/torture/pr52918-2.C: Likewise. diff --git a/gcc/testsuite/gfortran.dg/pr52621.f90 b/gcc/testsuite/gfortran.dg/pr52621.f90 new file mode 100644 index 0000000..d305e4d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr52621.f90 @@ -0,0 +1,20 @@ +! { dg-do compile } +! { dg-options "-O2 -fprefetch-loop-arrays" } + + SUBROUTINE GHDSYM(IZ,IS,LMMAX,S,LMS,Y,L2M,DRL,NLAY2,K0,DCUT)!, +! + COMPLEX Y(L2M,L2M),H(33),S(LMS) + COMPLEX RU,CI,CZ,K0,FF,Z,Z1,Z2,Z3,ST +! + DO 140 KK=1,4 + DO 130 L=1,L2M + L1=L*L-L + DO 120 M=1,L + IPM=L1+M + IMM=L1-M+2 + S(IPM)=S(IPM)+Z3*Y(L,M) + IF (M.NE.1) S(IMM)=S(IMM)+Z3*Y(M-1,L)*CSGN +120 CONTINUE +130 CONTINUE +140 CONTINUE + END diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c index fbd61c0..38dca4a 100644 --- a/gcc/tree-chrec.c +++ b/gcc/tree-chrec.c @@ -1011,6 +1011,8 @@ evolution_function_is_invariant_rec_p (tree chrec, int loopnum) if (TREE_CODE (chrec) == POLYNOMIAL_CHREC) { if (CHREC_VARIABLE (chrec) == (unsigned) loopnum + || flow_loop_nested_p (get_loop (loopnum), + get_loop (CHREC_VARIABLE (chrec))) || !evolution_function_is_invariant_rec_p (CHREC_RIGHT (chrec), loopnum) || !evolution_function_is_invariant_rec_p (CHREC_LEFT (chrec), @@ -1114,6 +1116,8 @@ evolution_function_is_univariate_p (const_tree chrec) break; default: + if (tree_contains_chrecs (CHREC_LEFT (chrec), NULL)) + return false; break; } @@ -1127,6 +1131,8 @@ evolution_function_is_univariate_p (const_tree chrec) break; default: + if (tree_contains_chrecs (CHREC_RIGHT (chrec), NULL)) + return false; break; } |