------- Comment #35 from steven at gcc dot gnu dot org 2006-01-13 22:09 ------- After too much trial-and-error, and thinking about it some more, I think we should approach this as a SMS or powerpc bug. The code that Mustafa changed makes us reject the RTL equivalent of "if (a) goto b; b: ...", i.e. a jump to the next instruction ;-)
My initial reaction was that you want to clean that jump up, but then again, the code Mustafa changed explicitly allowed this kind of jump. We had: if (n_branch != 1 && any_condjump_p (BB_END (bb)) && JUMP_LABEL (BB_END (bb)) != BB_HEAD (fallthru->dest)) which says that if you have a conditional jump, there must be at least one branch edge, _unless_ the jump is to the next instruction. In the latter case, there is only one edge in the CFG from bb to single_succ(bb), which represents both the fallthru and the branch cases of the conditional jump. The problem is that reverting Mustafa's "fix" exposes an ICE on PowerPC. I think we should try to understand where that comes from before reverting. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24626