]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR bootstrap/53331 (AIX bootstrap failure in tree-vect-data-ref compiling matmul_i4)
authorRichard Guenther <rguenther@suse.de>
Mon, 14 May 2012 15:01:22 +0000 (15:01 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 14 May 2012 15:01:22 +0000 (15:01 +0000)
2012-05-14  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/53331
* tree-vect-data-refs.c (vect_verify_datarefs_alignment): Ignore
strided loads.
* tree-vect-stmts.c (vect_model_load_cost): Handle strided loads.

From-SVN: r187466

gcc/ChangeLog
gcc/tree-vect-data-refs.c
gcc/tree-vect-stmts.c

index 9933288018fe430ecb1a8c1415780866944e973e..bb20e58890a4c12b5356a4aac77ae62fc17bb65a 100644 (file)
@@ -1,3 +1,10 @@
+2012-05-14  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/53331
+       * tree-vect-data-refs.c (vect_verify_datarefs_alignment): Ignore
+       strided loads.
+       * tree-vect-stmts.c (vect_model_load_cost): Handle strided loads.
+
 2012-05-14  Manuel López-Ibáñez  <manu@gcc.gnu.org>
 
        PR 53063
index e536321fcdc3bb55c4338e804997438ed1aa0ee5..1a87d1e1f677e03d9524fd424a69196ad42aae05 100644 (file)
@@ -1078,6 +1078,11 @@ vect_verify_datarefs_alignment (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
           || !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 88204fec2d342d6c1825c72f10e82e0262ce458c..bdb6828baadad938f407604753e1cee396aa688d 100644 (file)
@@ -1032,10 +1032,19 @@ vect_model_load_cost (stmt_vec_info stmt_info, int ncopies, bool load_lanes_p,
     }
 
   /* 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))
+    {
+      /* N scalar loads plus gathering them into a vector.
+         ???  scalar_to_vec isn't the cost for that.  */
+      inside_cost += (vect_get_stmt_cost (scalar_load) * ncopies
+                     * TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info)));
+      inside_cost += ncopies * vect_get_stmt_cost (scalar_to_vec);
+    }
+  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, "