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

--- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-05-14 
10:02:12 UTC ---
Can you try

Index: gcc/tree-vect-data-refs.c
===================================================================
--- gcc/tree-vect-data-refs.c   (revision 187449)
+++ gcc/tree-vect-data-refs.c   (working copy)
@@ -1078,6 +1078,11 @@ vect_verify_datarefs_alignment (loop_vec
           || !STMT_VINFO_VECTORIZABLE (stmt_info))
         continue;

+      /* Strided loads perform only component accesses, alignment is
+        irrelevant for them.  */
+      if (STMT_VINFO_STRIDE_LOAD_P (stmt_info))
+       continue;
+
       supportable_dr_alignment = vect_supportable_dr_alignment (dr, false);
       if (!supportable_dr_alignment)
         {
Index: gcc/tree-vect-stmts.c
===================================================================
--- gcc/tree-vect-stmts.c       (revision 187449)
+++ gcc/tree-vect-stmts.c       (working copy)
@@ -1032,10 +1030,14 @@ vect_model_load_cost (stmt_vec_info stmt
     }

   /* The loads themselves.  */
-  vect_get_load_cost (first_dr, ncopies,
-         ((!STMT_VINFO_GROUPED_ACCESS (stmt_info)) || group_size > 1
-          || slp_node),
-         &inside_cost, &outside_cost);
+  if (STMT_VINFO_STRIDE_LOAD_P (stmt_info))
+    inside_cost
+      += ncopies * TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info));
+  else
+    vect_get_load_cost (first_dr, ncopies,
+                       ((!STMT_VINFO_GROUPED_ACCESS (stmt_info))
+                        || group_size > 1 || slp_node),
+                       &inside_cost, &outside_cost);

   if (vect_print_dump_info (REPORT_COST))
     fprintf (vect_dump, "vect_model_load_cost: inside_cost = %d, "

Reply via email to