tree-optimization/113026 - avoid vector epilog in more cases
commitb3cc5a1efead520bc977b4ba51f1328d01b3e516
authorRichard Biener <rguenther@suse.de>
Fri, 15 Dec 2023 09:32:29 +0000 (15 10:32 +0100)
committerRichard Biener <rguenther@suse.de>
Mon, 8 Jan 2024 13:45:56 +0000 (8 14:45 +0100)
tree7695ab4fd594ff8ec83b51a549513d47588d267e
parent8c0dd8a6ff85d6e7b38957f2da400f5cfa8fef6b
tree-optimization/113026 - avoid vector epilog in more cases

The following avoids creating a niter peeling epilog more consistently,
matching what peeling later uses for the skip_vector condition, in
particular when versioning is required which then also ensures the
vector loop is entered unless the epilog is vectorized.  This should
ideally match LOOP_VINFO_VERSIONING_THRESHOLD which is only computed
later, some refactoring could make that better matching.

The patch also makes sure to adjust the upper bound of the epilogues
when we do not have a skip edge around the vector loop.

PR tree-optimization/113026
* tree-vect-loop.cc (vect_need_peeling_or_partial_vectors_p):
Avoid an epilog in more cases.
* tree-vect-loop-manip.cc (vect_do_peeling): Adjust the
epilogues niter upper bounds and estimates.

* gcc.dg/torture/pr113026-1.c: New testcase.
* gcc.dg/torture/pr113026-2.c: Likewise.
gcc/testsuite/gcc.dg/torture/pr113026-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/torture/pr113026-2.c [new file with mode: 0644]
gcc/tree-vect-loop-manip.cc
gcc/tree-vect-loop.cc