aboutsummaryrefslogtreecommitdiff
path: root/gcc/local-alloc.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-08-05 23:41:46 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-08-05 23:41:46 -0700
commit78d56e8b0a6fe5d1ab79028bb1f0c3e6dbc27bbb (patch)
treee2be23f16017f416dd7b43182da14b835fef89a4 /gcc/local-alloc.c
parent39f95a2c8e36fcfbaaed01fda58429b7f536cefa (diff)
downloadgcc-78d56e8b0a6fe5d1ab79028bb1f0c3e6dbc27bbb.zip
gcc-78d56e8b0a6fe5d1ab79028bb1f0c3e6dbc27bbb.tar.gz
gcc-78d56e8b0a6fe5d1ab79028bb1f0c3e6dbc27bbb.tar.bz2
local-alloc.c (update_equiv_regs): Do not move insns that can throw.
* local-alloc.c (update_equiv_regs): Do not move insns that can throw. From-SVN: r44655
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r--gcc/local-alloc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index a068db8..c987190 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))