summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/local-alloc.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 293b81df950..0e35ab36cf8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-08-05 Richard Henderson <rth@redhat.com>
+
+ * local-alloc.c (update_equiv_regs): Do not move insns that
+ can throw.
+
2001-08-05 Jan Hubicka <jh@suse.cz>
* Makefile.in (reload1.o): Add dedendancy on except.h
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index a068db8385d..c987190698e 100644
--- a/gcc/local-alloc.c
+++ b/gcc/local-alloc.c
@@ -1102,6 +1102,12 @@ update_equiv_regs ()
abort ();
equiv_insn = XEXP (reg_equiv[regno].init_insns, 0);
+ /* We may not move instructions that can throw, since
+ that changes basic block boundaries and we are not
+ prepared to adjust the CFG to match. */
+ if (can_throw_internal (equiv_insn))
+ continue;
+
if (asm_noperands (PATTERN (equiv_insn)) < 0
&& validate_replace_rtx (regno_reg_rtx[regno],
reg_equiv[regno].src, insn))