summaryrefslogtreecommitdiff
path: root/gcc/local-alloc.c
diff options
context:
space:
mode:
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-28 23:29:02 +0000
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-28 23:29:02 +0000
commit806351c6eab694010f9c1fdfb1489ac2973ac70b (patch)
tree2ac40772304a0e5a5f796356ffe7f8326d39ef03 /gcc/local-alloc.c
parent07f6ff584617b908a02aa42863f579cfd5d0c4c9 (diff)
downloadgcc-806351c6eab694010f9c1fdfb1489ac2973ac70b.tar.gz
* cse.c (cse_insn): Avoid creating direct non-local jumps.
* combine.c (can_combine_p): Likewise. * local-alloc. (update_equiv_regs): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88258 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/local-alloc.c')
-rw-r--r--gcc/local-alloc.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c
index a01b99a0425..64db8c4258f 100644
--- a/gcc/local-alloc.c
+++ b/gcc/local-alloc.c
@@ -1010,6 +1010,11 @@ update_equiv_regs (void)
if (! INSN_P (insn))
continue;
+ /* Don't substitute into a non-local goto, this confuses CFG. */
+ if (JUMP_P (insn)
+ && find_reg_note (insn, REG_NON_LOCAL_GOTO, NULL_RTX))
+ continue;
+
for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
{
if (REG_NOTE_KIND (link) == REG_DEAD