aboutsummaryrefslogtreecommitdiff
path: root/gcc/cse.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/cse.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/cse.c')
-rw-r--r--gcc/cse.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/cse.c b/gcc/cse.c
index ca577c5..651203d 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -5395,6 +5395,11 @@ cse_insn (rtx insn, rtx libcall_insn)
|| (GET_CODE (trial) == LABEL_REF
&& ! condjump_p (insn))))
{
+ /* Don't substitute non-local labels, this confuses CFG. */
+ if (GET_CODE (trial) == LABEL_REF
+ && LABEL_REF_NONLOCAL_P (trial))
+ continue;
+
SET_SRC (sets[i].rtl) = trial;
cse_jumps_altered = 1;
break;