summaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorIra Rosen <ira.rosen@linaro.org>2011-09-18 08:59:52 +0000
committerIra Rosen <irar@gcc.gnu.org>2011-09-18 08:59:52 +0000
commitdeaf836ccfe15c19c38dc85c2e6718980b5f0803 (patch)
treea435f436a26f0e927db7c221eb9e20a0efbcee92 /gcc/tree-vect-data-refs.c
parentab0ca06f703628ad4d25662758fe578a76d6d6dc (diff)
downloadgcc-deaf836ccfe15c19c38dc85c2e6718980b5f0803.tar.gz
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
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r--gcc/tree-vect-data-refs.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 33ccf347ff9..e1cbecdff73 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -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;
}
}