+2011-09-18 Ira Rosen <ira.rosen@linaro.org>
+
+ PR tree-optimization/50412
+ * tree-vect-data-refs.c (vect_analyze_group_access): Fail for
+ acceses that require epilogue loop if vectorizing outer loop.
+
2011-09-17 David S. Miller <davem@davemloft.net>
* config/sparc/sparc.md (UNSPEC_EDGE8, UNSPEC_EDGE8L,
--- /dev/null
+! { dg-do compile }
+
+ DOUBLE PRECISION AK,AI,AAE
+ COMMON/com/AK(36),AI(4,4),AAE(8,4),ii,jj
+ DO 20 II=1,4
+ DO 21 JJ=1,4
+ AK(n)=AK(n)-AAE(I,II)*AI(II,JJ)
+ 21 CONTINUE
+ 20 CONTINUE
+ END
+
+! { dg-final { cleanup-tree-dump "vect" } }
HOST_WIDE_INT dr_step = TREE_INT_CST_LOW (step);
HOST_WIDE_INT stride, last_accessed_element = 1;
bool slp_impossible = false;
+ struct loop *loop = NULL;
+
+ if (loop_vinfo)
+ loop = LOOP_VINFO_LOOP (loop_vinfo);
/* For interleaving, STRIDE is STEP counted in elements, i.e., the size of the
interleaving group (including gaps). */
if (loop_vinfo)
{
- LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
-
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "Data access with gaps requires scalar "
"epilogue loop");
+ if (loop->inner)
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "Peeling for outer loop is not"
+ " supported");
+ return false;
+ }
+
+ LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
}
return true;
/* There is a gap in the end of the group. */
if (stride - last_accessed_element > 0 && loop_vinfo)
{
- LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "Data access with gaps requires scalar "
"epilogue loop");
+ if (loop->inner)
+ {
+ if (vect_print_dump_info (REPORT_DETAILS))
+ fprintf (vect_dump, "Peeling for outer loop is not supported");
+ return false;
+ }
+
+ LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo) = true;
}
}