diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-11-01 09:48:05 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2007-11-01 09:48:05 +0100 |
commit | d0a55efc8463a68632498a84cffa7b84fe3d6e26 (patch) | |
tree | 45f7a53520410f93df610fbb1e6060c29abf1bae /gcc/gcse.c | |
parent | 895a8136438717d4770e58be58ffa8bb71df4c28 (diff) | |
download | gcc-d0a55efc8463a68632498a84cffa7b84fe3d6e26.zip gcc-d0a55efc8463a68632498a84cffa7b84fe3d6e26.tar.gz gcc-d0a55efc8463a68632498a84cffa7b84fe3d6e26.tar.bz2 |
re PR rtl-optimization/33673 (ICE in verify_flow_info, missing barrier, when multiple tree opts disabled)
PR rtl-optimization/33673
* gcse.c (cprop_jump): If a conditional jump has been optimized
into unconditional jump, make the remaining normal edge fallthru
and delete the jump insn.
* gcc.dg/pr33673.c: New test.
From-SVN: r129819
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r-- | gcc/gcse.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -2875,6 +2875,24 @@ cprop_jump (basic_block bb, rtx setcc, rtx jump, rtx from, rtx src) } purge_dead_edges (bb); + /* If a conditional jump has been changed into unconditional jump, remove + the jump and make the edge fallthru - this is always called in + cfglayout mode. */ + if (new != pc_rtx && simplejump_p (jump)) + { + edge e; + edge_iterator ei; + + for (ei = ei_start (bb->succs); (e = ei_safe_edge (ei)); ei_next (&ei)) + if (e->dest != EXIT_BLOCK_PTR + && BB_HEAD (e->dest) == JUMP_LABEL (jump)) + { + e->flags |= EDGE_FALLTHRU; + break; + } + delete_insn (jump); + } + return 1; } |