[Bug tree-optimization/36034] [4.3/4.4 Regression] wrong code vectorizing unrolled inner loop (SLP)

irar at il dot ibm dot com gcc-bugzilla@gcc.gnu.org
Thu Apr 24 12:25:00 GMT 2008



------- Comment #4 from irar at il dot ibm dot com  2008-04-24 12:24 -------
(In reply to comment #2)

> 
> the final increment for ivtmp.15_36 is wrong -- it should be 48.
> 

Right. We are not supposed to vectorize this at all, since SLP currently
doesn't support loads with gaps.

Here is a possible fix:

Index: tree-vect-analyze.c
===================================================================
--- tree-vect-analyze.c (revision 134161)
+++ tree-vect-analyze.c (working copy)
@@ -2226,11 +2226,16 @@ vect_analyze_group_access (struct data_r

       /* Check that the size of the interleaving is equal to STEP for stores,
          i.e., that there are no gaps.  */
-      if (!DR_IS_READ (dr) && dr_step != count_in_bytes)
+      if (dr_step != count_in_bytes)
         {
-          if (vect_print_dump_info (REPORT_DETAILS))
-            fprintf (vect_dump, "interleaved store with gaps");
-          return false;
+          if (DR_IS_READ (dr))
+            slp_impossible = true;
+          else
+            {
+              if (vect_print_dump_info (REPORT_DETAILS))
+                fprintf (vect_dump, "interleaved store with gaps");
+              return false;
+            }
         }

       /* Check that STEP is a multiple of type size.  */

I'll not be able to test and submit it till Sunday.

Ira


-- 

irar at il dot ibm dot com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2008-04-24 12:24:56
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36034



More information about the Gcc-bugs mailing list