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).