aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop-manip.c
diff options
context:
space:
mode:
authorAndre Vieira <andre.simoesdiasvieira@arm.com>2019-11-11 12:07:04 +0000
committerAndre Vieira <avieira@gcc.gnu.org>2019-11-11 12:07:04 +0000
commit87b47251924c7539a9a8e191587d118a14496473 (patch)
treea75f70ee7521d8e1409a7babf689fcb2838a5e59 /gcc/tree-vect-loop-manip.c
parent3f246567a44ba034c0b48f929c4d4586a4b914ed (diff)
downloadgcc-87b47251924c7539a9a8e191587d118a14496473.zip
gcc-87b47251924c7539a9a8e191587d118a14496473.tar.gz
gcc-87b47251924c7539a9a8e191587d118a14496473.tar.bz2
[vect]Account for epilogue's peeling for gaps when checking if we have enough
niters for epilogue gcc/ChangeLog: 2019-11-11 Andre Vieira <andre.simoesdiasvieira@arm.com> * tree-vect-loop-manip.c (vect_do_peeling): Take epilogue gaps into account when checking if there are enough iterations to vectorize epilogue. gcc/testsuite/ChangeLog: 2019-11-11 Andre Vieira <andre.simoesdiasvieira@arm.com> * gcc.dg/vect/vect-reduc-epilogue-gaps.c: New test. From-SVN: r278049
Diffstat (limited to 'gcc/tree-vect-loop-manip.c')
-rw-r--r--gcc/tree-vect-loop-manip.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index 54f3ccf..559d59b 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -2530,9 +2530,11 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
= eiters % lowest_vf + LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo);
unsigned int ratio;
+ unsigned int epilogue_gaps
+ = LOOP_VINFO_PEELING_FOR_GAPS (epilogue_vinfo);
while (!(constant_multiple_p (loop_vinfo->vector_size,
epilogue_vinfo->vector_size, &ratio)
- && eiters >= lowest_vf / ratio))
+ && eiters >= lowest_vf / ratio + epilogue_gaps))
{
delete epilogue_vinfo;
epilogue_vinfo = NULL;
@@ -2543,6 +2545,7 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
}
epilogue_vinfo = loop_vinfo->epilogue_vinfos[0];
loop_vinfo->epilogue_vinfos.ordered_remove (0);
+ epilogue_gaps = LOOP_VINFO_PEELING_FOR_GAPS (epilogue_vinfo);
}
}
/* Prolog loop may be skipped. */