aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2004-09-28 23:29:02 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2004-09-28 23:29:02 +0000
commit2f39b6caf61637fe3656c1b63b316dc3af6f3028 (patch)
tree2ac40772304a0e5a5f796356ffe7f8326d39ef03 /gcc/combine.c
parentb0b324b07fc46746d3eada8cc27d6000a3756bed (diff)
downloadgcc-2f39b6caf61637fe3656c1b63b316dc3af6f3028.zip
gcc-2f39b6caf61637fe3656c1b63b316dc3af6f3028.tar.gz
gcc-2f39b6caf61637fe3656c1b63b316dc3af6f3028.tar.bz2
cse.c (cse_insn): Avoid creating direct non-local jumps.
* cse.c (cse_insn): Avoid creating direct non-local jumps. * combine.c (can_combine_p): Likewise. * local-alloc. (update_equiv_regs): Likewise. From-SVN: r88258
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index ad5ec64..2c7fbf5 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1176,6 +1176,8 @@ can_combine_p (rtx insn, rtx i3, rtx pred ATTRIBUTE_UNUSED, rtx succ,
/* Don't substitute into an incremented register. */
|| FIND_REG_INC_NOTE (i3, dest)
|| (succ && FIND_REG_INC_NOTE (succ, dest))
+ /* Don't substitute into a non-local goto, this confuses CFG. */
+ || (JUMP_P (i3) && find_reg_note (i3, REG_NON_LOCAL_GOTO, NULL_RTX))
#if 0
/* Don't combine the end of a libcall into anything. */
/* ??? This gives worse code, and appears to be unnecessary, since no