https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79575

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2017-02-20
                 CC|                            |jakub at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So, what happens is that vect_transform_loop calls
6811      epilogue = vect_do_peeling (loop_vinfo, niters, nitersm1,
&niters_vector, th,
6812                                  check_profitability, niters_no_overflow);
which creates the epilogue loop, and then we on that epilogue loop call
vect_transform_loop which calls vect_do_peeling again.  That looks very weird,
I'd have expected that there shouldn't be any further peeling on the epilogue.
The patch posted on 2016-11-24 had some early return if the current loop is the
masked one, but that hasn't been applied.
Or, if the peeling of the epilogue loop is needed, we need to be more careful
on where the guard condition is inserted, because right now it is inserted into
the same guard_bb that an earlier condition has been added for the original
loop (which is why we end up with control stmts inside of bb).

Reply via email to