Hi, This patch fixes a bug of comparing goto_locus to UNKNOWN_LOCATION when combining basic blocks.
Bootstrapped and and passed gcc regression tests. Is it okay for trunk? Thanks, Dehao gcc/ChangeLog: 2012-11-26 Dehao Chen <de...@google.com> * cfgrtl.c (rtl_merge_blocks): Check with UNKNOWN_LOCATION correctly. (cfg_layout_merge_blocks): Likewise. Index: gcc/cfgrtl.c =================================================================== --- gcc/cfgrtl.c (revision 193828) +++ gcc/cfgrtl.c (working copy) @@ -890,7 +890,8 @@ rtl_merge_blocks (basic_block a, basic_block b) df_bb_delete (b->index); /* If B was a forwarder block, propagate the locus on the edge. */ - if (forwarder_p && !EDGE_SUCC (b, 0)->goto_locus) + if (forwarder_p + && LOCATION_LOCUS (EDGE_SUCC (b, 0)->goto_locus) == UNKNOWN_LOCATION) EDGE_SUCC (b, 0)->goto_locus = EDGE_SUCC (a, 0)->goto_locus; if (dump_file) @@ -4149,7 +4150,7 @@ cfg_layout_merge_blocks (basic_block a, basic_bloc /* If B was a forwarder block, propagate the locus on the edge. */ if (forwarder_p - && LOCATION_LOCUS (EDGE_SUCC (b, 0)->goto_locus) != UNKNOWN_LOCATION) + && LOCATION_LOCUS (EDGE_SUCC (b, 0)->goto_locus) == UNKNOWN_LOCATION) EDGE_SUCC (b, 0)->goto_locus = EDGE_SUCC (a, 0)->goto_locus; if (dump_file)