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
This commit is contained in:
Richard Guenther 2012-04-11 14:04:00 +00:00 committed by Richard Biener
parent 405af656bc
commit 754870ed77
4 changed files with 39 additions and 0 deletions

View File

@ -1,3 +1,11 @@
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

View File

@ -1,3 +1,8 @@
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

View File

@ -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

View File

@ -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;
}