http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55740
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Component|middle-end |rtl-optimization AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org |gnu.org | --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-19 15:12:56 UTC --- And it's of course after RTL CSE ... Which ends up merging two loop headers as we cross-jumped the tails ... /* If we merge a loop header into its predecessor, update the loop structure. */ if (current_loops != NULL) { if (b->loop_father->header == b) { remove_bb_from_loops (a); add_bb_to_loop (a, b->loop_father); a->loop_father->header = a; } remove_bb_from_loops (b); } Which looks broken if a is already a loop header. I have a patch.