------- Comment #7 from amylaar at gcc dot gnu dot org 2006-01-24 23:09 ------- (In reply to comment #2) > It seems condjump_equiv_p (info, false) returns false because > f1->dest and f2->dest are forwarder blocks:
This means that they have to have been forwarder blocks to forwarder blocks originally, since one level of forwarder block for the fall-through edges for f1 / f2 is already resolved. I don't understand how this can happen with the backtrace from the original report (in particular frames 0..2). try_crossjump_to_edge should already have checked outgoing_edges_match, which should have forwarded the result from a condjump_equiv_p call. > > (gdb) p/x f1->dest->flags > $6 = 0xc01 > (gdb) p/x f2->dest->flags > $8 = 0xc01 > > /* To simplify use of this function, return false if there are > unneeded forwarder blocks. These will get eliminated later > during cleanup_cfg. */ > if (FORWARDER_BLOCK_P (f1->dest) > || FORWARDER_BLOCK_P (f2->dest) > || FORWARDER_BLOCK_P (b1->dest) > || FORWARDER_BLOCK_P (b2->dest)) > return false; > -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25459