]> gcc.gnu.org Git - gcc.git/commitdiff
re PR tree-optimization/46190 (ICE in vect_enhance_data_refs_alignment when building...
authorRichard Guenther <rguenther@suse.de>
Wed, 3 Nov 2010 13:30:48 +0000 (13:30 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 3 Nov 2010 13:30:48 +0000 (13:30 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr46190.f90 [new file with mode: 0644]
gcc/tree-vect-data-refs.c

index 8f34c23031fe0fb97a93fcc4d8d89c9139458025..30b39a62623fb0491fbb25baab509f8622ed6eab 100644 (file)
@@ -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
index 12757adfb241ef27e3ebf6b6c6ba3afcec94546a..f0a88888fd4fd241659c9d9f7d36dc00f1fd3700 100644 (file)
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/pr46190.f90 b/gcc/testsuite/gfortran.dg/pr46190.f90
new file mode 100644 (file)
index 0000000..15fad04
--- /dev/null
@@ -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
index b4da5178be930e6550965c78491ca9b620871d72..ce872cf26187b2d7d829d2f367659ee970553c9d 100644 (file)
@@ -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
This page took 0.169106 seconds and 5 git commands to generate.