aboutsummaryrefslogtreecommitdiff
path: root/gcc/reorg.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-09-03 18:49:51 +0000
committerJakub Jelinek <jakub@redhat.com>2005-09-03 18:49:51 +0000
commitb1cd8e4114338cbc41bce56bfdc4e9f85c9b53af (patch)
tree8cd0ea8189b4ec5d94a1f55e0af06a8e152bdc41 /gcc/reorg.c
parent5d0b0fd9f317cd0a1e0e117e658341179b5e5e9b (diff)
PR rtl-optimization/23454
* reorg.c (relax_delay_slots): Only call invert_jump if any_condjump_p is true. * g++.dg/opt/pr23454.C: New test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@103810 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reorg.c')
-rw-r--r--gcc/reorg.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/reorg.c b/gcc/reorg.c
index cda716887d6..8b9d7efccfb 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -3123,10 +3123,11 @@ relax_delay_slots (rtx first)
if (target_label && target_label != JUMP_LABEL (insn))
reorg_redirect_jump (insn, target_label);
- /* See if this jump branches around an unconditional jump.
- If so, invert this jump and point it to the target of the
+ /* See if this jump conditionally branches around an unconditional
+ jump. If so, invert this jump and point it to the target of the
second jump. */
if (next && JUMP_P (next)
+ && any_condjump_p (insn)
&& (simplejump_p (next) || GET_CODE (PATTERN (next)) == RETURN)
&& target_label
&& next_active_insn (target_label) == next_active_insn (next)
@@ -3172,7 +3173,7 @@ relax_delay_slots (rtx first)
if (JUMP_P (insn)
&& (simplejump_p (insn) || GET_CODE (PATTERN (insn)) == RETURN)
&& (other = prev_active_insn (insn)) != 0
- && (condjump_p (other) || condjump_in_parallel_p (other))
+ && any_condjump_p (other)
&& no_labels_between_p (other, insn)
&& 0 > mostly_true_jump (other,
get_branch_condition (other,