Just a suggestion, but... Bernd Schmidt <ber...@codesourcery.com> writes: > Index: gcc/cfgcleanup.c > =================================================================== > --- gcc/cfgcleanup.c (revision 178734) > +++ gcc/cfgcleanup.c (working copy) > @@ -1488,6 +1488,16 @@ outgoing_edges_match (int mode, basic_bl > edge e1, e2; > edge_iterator ei; > > + /* If we performed shrink-wrapping, edges to the EXIT_BLOCK_PTR can > + only be distinguished for JUMP_INSNs. The two paths may differ in > + whether they went through the prologue. Sibcalls are fine, we know > + that we either didn't need or inserted an epilogue before them. */ > + if (flag_shrink_wrap > + && single_succ_p (bb1) && single_succ (bb1) == EXIT_BLOCK_PTR > + && !JUMP_P (BB_END (bb1)) > + && !(CALL_P (BB_END (bb1)) && SIBLING_CALL_P (BB_END (bb1)))) > + return false;
...how about adding a bit to crtl to say whether shrink-wrap occured, and check that instead of flag_shrink_wrap? (Leaving the full review to Richard.) Richard