diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-06 06:41:46 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-08-06 06:41:46 +0000 |
commit | 78be5133a8764f1f60c701d0d99f69a7f91edb02 (patch) | |
tree | e2be23f16017f416dd7b43182da14b835fef89a4 /gcc/local-alloc.c | |
parent | 7a577715206598190155e55bc6207d7d4eacf88a (diff) | |
download | gcc-78be5133a8764f1f60c701d0d99f69a7f91edb02.tar.gz |
* local-alloc.c (update_equiv_regs): Do not move insns that
can throw.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44655 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r-- | gcc/local-alloc.c | 6 |
1 files changed, 6 insertions, 0 deletions
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)) |