Commit deaf836c by Ira Rosen Committed by Ira Rosen

re PR tree-optimization/50412 (gfortran -Ofast ICE in vect_do_peeling_for_loop_bound)


        PR tree-optimization/50412
        * tree-vect-data-refs.c (vect_analyze_group_access): Fail for
        acceses that require epilogue loop if vectorizing outer loop.

From-SVN: r178940
parent ab0ca06f
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,
2011-09-18 Ira Rosen <ira.rosen@linaro.org>
PR tree-optimization/50412
* gfortran.dg/vect/pr50412.f90: New.
2011-09-16 Jason Merrill <jason@redhat.com>
PR c++/50424
......
! { 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" } }
......@@ -2060,6 +2060,10 @@ vect_analyze_group_access (struct data_reference *dr)
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). */
......@@ -2090,11 +2094,18 @@ vect_analyze_group_access (struct data_reference *dr)
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;
......@@ -2277,10 +2288,17 @@ vect_analyze_group_access (struct data_reference *dr)
/* 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;
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment