mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 04:10:29 +08:00
re PR tree-optimization/46190 (ICE in vect_enhance_data_refs_alignment when building fma3d)
2010-11-03 Richard Guenther <rguenther@suse.de> PR tree-optimization/46190 * tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Properly compute peel iterations. * gfortran.dg/pr46190.f90: New testcase. From-SVN: r166244
This commit is contained in:
parent
623238466c
commit
8b8bba2dd9
@ -1,3 +1,9 @@
|
||||
2010-11-03 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/46190
|
||||
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
|
||||
Properly compute peel iterations.
|
||||
|
||||
2010-11-03 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/46286
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-11-03 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/46190
|
||||
* gfortran.dg/pr46190.f90: New testcase.
|
||||
|
||||
2010-11-03 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR testsuite/46274
|
||||
|
64
gcc/testsuite/gfortran.dg/pr46190.f90
Normal file
64
gcc/testsuite/gfortran.dg/pr46190.f90
Normal file
@ -0,0 +1,64 @@
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O2 -ftree-vectorize" }
|
||||
|
||||
TYPE :: spot_weld_type
|
||||
CHARACTER(8) PLACE ! Keyword "NODE" or "POSITION"
|
||||
END TYPE
|
||||
TYPE (spot_weld_type), DIMENSION(:), ALLOCATABLE :: SPOT_WELD
|
||||
INTEGER, PARAMETER :: LSRT = 12 ! Length of sorted-element-distance array
|
||||
INTEGER &
|
||||
& IETYP(LSRT) ! -/- Sort array for closest el's, 0/1=tri/qu
|
||||
REAL(KIND(0D0)) &
|
||||
& DSQRD(LSRT) ! -/- Sort array for closest el's, d**2
|
||||
LOGICAL &
|
||||
& COINCIDENT, &
|
||||
& INSIDE_ELEMENT
|
||||
IF (SPOT_WELD(NSW)%PLACE .EQ. 'POSITION') THEN
|
||||
DO n = 1,LSRT
|
||||
ENDDO
|
||||
DO i = 1,NUMP3
|
||||
DO WHILE (Distance_Squared .GT. DSQRD(n) .AND. n .LE. LSRT)
|
||||
ENDDO
|
||||
IF (n .LT. LSRT) THEN
|
||||
DO k = LSRT-1,n,-1
|
||||
DSQRD(k+1) = DSQRD(k)
|
||||
IETYP(k+1) = IETYP(k)
|
||||
ENDDO
|
||||
ENDIF
|
||||
DO n = 1,LSRT
|
||||
IF (IETYP(n) .EQ. 0) THEN
|
||||
INSIDE_ELEMENT = &
|
||||
& Xi1EL(n) .GE. 0.0 .AND. Xi2EL(n) .GE. 0.0
|
||||
IF (DSQRD(n) .LT. Dmin) THEN
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDDO
|
||||
IF (Icount .GT. 0) THEN
|
||||
DO i = 1,Icount
|
||||
CALL USER_MESSAGE &
|
||||
& ( &
|
||||
& )
|
||||
ENDDO
|
||||
CALL USER_MESSAGE &
|
||||
& ( &
|
||||
& )
|
||||
ENDIF
|
||||
IF &
|
||||
& ( &
|
||||
& .NOT.COINCIDENT &
|
||||
& ) &
|
||||
& THEN
|
||||
IF (NP1 .GT. 0) THEN
|
||||
IF (NP1 .GT. 0) THEN
|
||||
ENDIF
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF (.NOT.COINCIDENT) THEN
|
||||
DO i = 1,3
|
||||
IF (NP(i) .GT. 0) THEN
|
||||
ENDIF
|
||||
ENDDO
|
||||
ENDIF
|
||||
ENDIF
|
||||
END
|
@ -1518,7 +1518,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
|
||||
mis = DR_MISALIGNMENT (dr) / GET_MODE_SIZE (TYPE_MODE (
|
||||
TREE_TYPE (DR_REF (dr))));
|
||||
npeel_tmp = (negative
|
||||
? (mis - nelements) : (nelements - mis)) & (vf - 1);
|
||||
? (mis - nelements) : (nelements - mis))
|
||||
& (nelements - 1);
|
||||
|
||||
/* For multiple types, it is possible that the bigger type access
|
||||
will have more than one peeling option. E.g., a loop with two
|
||||
@ -1722,7 +1723,8 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
|
||||
count. */
|
||||
mis = DR_MISALIGNMENT (dr0);
|
||||
mis /= GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (DR_REF (dr0))));
|
||||
npeel = (negative ? mis - nelements : nelements - mis) & (vf - 1);
|
||||
npeel = ((negative ? mis - nelements : nelements - mis)
|
||||
& (nelements - 1));
|
||||
}
|
||||
|
||||
/* For interleaved data access every iteration accesses all the
|
||||
|
Loading…
x
Reference in New Issue
Block a user