aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-11-01 09:48:05 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2007-11-01 09:48:05 +0100
commitd0a55efc8463a68632498a84cffa7b84fe3d6e26 (patch)
tree45f7a53520410f93df610fbb1e6060c29abf1bae /gcc/gcse.c
parent895a8136438717d4770e58be58ffa8bb71df4c28 (diff)
downloadgcc-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.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 79aa8af..a519acb 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -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;
}