Commit 8349b024 by Richard Biener Committed by Richard Biener

re PR tree-optimization/68639 (ICE: Floating point exception)

2015-12-03  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/68639
	* tree-vect-data-refs.c (dr_group_sort_cmp): Split groups
	belonging to different loops.
	(vect_analyze_data_ref_accesses): Likewise.

	* gfortran.fortran-torture/compile/pr68639.f90: New testcase.

From-SVN: r231220
parent d8e3e8a5
2015-12-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/68639
* tree-vect-data-refs.c (dr_group_sort_cmp): Split groups
belonging to different loops.
(vect_analyze_data_ref_accesses): Likewise.
2015-12-02 Jan Hubicka <hubicka@ucw.cz> 2015-12-02 Jan Hubicka <hubicka@ucw.cz>
* ipa-pure-const.c (ignore_edge_for_pure_const): New function. * ipa-pure-const.c (ignore_edge_for_pure_const): New function.
2015-12-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/68639
* gfortran.fortran-torture/compile/pr68639.f90: New testcase.
2015-12-02 Jan Hubicka <hubicka@ucw.cz> 2015-12-02 Jan Hubicka <hubicka@ucw.cz>
PR ipa/68184 PR ipa/68184
......
SUBROUTINE makeCoulE0(natorb,Coul)
INTEGER, PARAMETER :: dp=8
REAL(KIND=dp), PARAMETER :: fourpi=432.42, oorootpi=13413.3142
INTEGER :: natorb
REAL(KIND=dp), DIMENSION(45, 45), &
INTENT(OUT) :: Coul
INTEGER :: gpt, imA, imB, k1, k2, k3, &
k4, lp, mp, np
REAL(KIND=dp) :: alpha, d2f(3,3), &
d4f(3,3,3,3), f, ff, w
REAL(KIND=dp), DIMENSION(3, 45) :: M1A
REAL(KIND=dp), DIMENSION(45) :: M0A
DO imA=1, (natorb*(natorb+1))/2
DO imB=1, (natorb*(natorb+1))/2
w= M0A(imA)*M0A(imB)
DO k1=1,3
w=w+ M1A(k1,imA)*M1A(k1,imB)
ENDDO
Coul(imA,imB)=Coul(imA,imB)-4.0_dp*alpha**3*oorootpi*w/3.0_dp
ENDDO
ENDDO
END SUBROUTINE makeCoulE0
...@@ -2597,6 +2597,12 @@ dr_group_sort_cmp (const void *dra_, const void *drb_) ...@@ -2597,6 +2597,12 @@ dr_group_sort_cmp (const void *dra_, const void *drb_)
if (dra == drb) if (dra == drb)
return 0; return 0;
/* DRs in different loops never belong to the same group. */
loop_p loopa = gimple_bb (DR_STMT (dra))->loop_father;
loop_p loopb = gimple_bb (DR_STMT (drb))->loop_father;
if (loopa != loopb)
return loopa->num < loopb->num ? -1 : 1;
/* Ordering of DRs according to base. */ /* Ordering of DRs according to base. */
if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0)) if (!operand_equal_p (DR_BASE_ADDRESS (dra), DR_BASE_ADDRESS (drb), 0))
{ {
...@@ -2688,6 +2694,12 @@ vect_analyze_data_ref_accesses (vec_info *vinfo) ...@@ -2688,6 +2694,12 @@ vect_analyze_data_ref_accesses (vec_info *vinfo)
matters we can push those to a worklist and re-iterate matters we can push those to a worklist and re-iterate
over them. The we can just skip ahead to the next DR here. */ over them. The we can just skip ahead to the next DR here. */
/* DRs in a different loop should not be put into the same
interleaving group. */
if (gimple_bb (DR_STMT (dra))->loop_father
!= gimple_bb (DR_STMT (drb))->loop_father)
break;
/* Check that the data-refs have same first location (except init) /* Check that the data-refs have same first location (except init)
and they are both either store or load (not load and store, and they are both either store or load (not load and store,
not masked loads or stores). */ not masked loads or stores). */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment