tree-optimization/113371 - avoid prologue peeling for peeled early exits
commit3359942417b02de88ae84d50aac232ac01ff9e15
authorRichard Biener <rguenther@suse.de>
Tue, 16 Jan 2024 12:09:27 +0000 (16 13:09 +0100)
committerRichard Biener <rguenther@suse.de>
Wed, 17 Jan 2024 08:22:32 +0000 (17 09:22 +0100)
tree8afe57e0cf97b5b9dafee62a4341779b908cdb9a
parent0c42d1782e48d8ad578ace2065cce9b3615f97c0
tree-optimization/113371 - avoid prologue peeling for peeled early exits

The following avoids prologue peeling when doing early exit
vectorization with the IV exit before the early exit.  That's because
we it invalidates the invariant that the effective latch of the loop
is empty causing wrong continuation to the main loop.  In particular
this is prone to break virtual SSA form.

PR tree-optimization/113371
* tree-vect-data-refs.cc (vect_enhance_data_refs_alignment):
Do not peel when LOOP_VINFO_EARLY_BREAKS_VECT_PEELED.
* tree-vect-loop-manip.cc (vect_do_peeling): Assert we do
not perform prologue peeling when LOOP_VINFO_EARLY_BREAKS_VECT_PEELED.

* gcc.dg/vect/pr113371.c: New testcase.
gcc/testsuite/gcc.dg/vect/pr113371.c [new file with mode: 0644]
gcc/tree-vect-data-refs.cc
gcc/tree-vect-loop-manip.cc