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

Reply via email to