diff options
author | Andre Vieira <andre.simoesdiasvieira@arm.com> | 2019-11-11 12:07:04 +0000 |
---|---|---|
committer | Andre Vieira <avieira@gcc.gnu.org> | 2019-11-11 12:07:04 +0000 |
commit | 87b47251924c7539a9a8e191587d118a14496473 (patch) | |
tree | a75f70ee7521d8e1409a7babf689fcb2838a5e59 /gcc/tree-vect-loop-manip.c | |
parent | 3f246567a44ba034c0b48f929c4d4586a4b914ed (diff) | |
download | gcc-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.c | 5 |
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. */ |