From 93da030f633623de87801b2aea0b8cfe79edebc2 Mon Sep 17 00:00:00 2001 From: "J\"orn Rennecke" Date: Wed, 29 Apr 1998 13:53:20 +0000 Subject: sched.c (new_insn_dead_notes): Check if the register was used in the original instruction. * sched.c (new_insn_dead_notes): Check if the register was used in the original instruction. * haifa-sched.c (new_insn_dead_notes): Likewise. From-SVN: r19494 --- gcc/ChangeLog | 6 ++++++ gcc/haifa-sched.c | 7 +++++++ gcc/sched.c | 7 +++++++ 3 files changed, 20 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 42f7119..b0c68c2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Wed Apr 29 21:45:16 1998 J"orn Rennecke + + * sched.c (new_insn_dead_notes): Check if the register was + used in the original instruction. + * haifa-sched.c (new_insn_dead_notes): Likewise. + Wed Apr 29 13:46:03 1998 Jim Wilson * dwarf2out.c (scope_die_for): If could not find proper scope, diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 8d220f0..7fccfd2 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -7621,6 +7621,13 @@ new_insn_dead_notes (pat, insn, last, orig_insn) if (GET_CODE (dest) == REG) { + /* If the original insn already used this register, we may not add new + notes for it. One example for a split that needs this test is + when a multi-word memory access with register-indirect addressing + is split into multiple memory accesses with auto-increment and + one adjusting add instruction for the address register. */ + if (reg_referenced_p (dest, PATTERN (orig_insn))) + return; for (tem = last; tem != insn; tem = PREV_INSN (tem)) { if (GET_RTX_CLASS (GET_CODE (tem)) == 'i' diff --git a/gcc/sched.c b/gcc/sched.c index a44002e..635dceb 100644 --- a/gcc/sched.c +++ b/gcc/sched.c @@ -3655,6 +3655,13 @@ new_insn_dead_notes (pat, insn, last, orig_insn) if (GET_CODE (dest) == REG) { + /* If the original insn already used this register, we may not add new + notes for it. One example for a split that needs this test is + when a multi-word memory access with register-indirect addressing + is split into multiple memory accesses with auto-increment and + one adjusting add instruction for the address register. */ + if (reg_referenced_p (dest, PATTERN (orig_insn))) + return; for (tem = last; tem != insn; tem = PREV_INSN (tem)) { if (GET_RTX_CLASS (GET_CODE (tem)) == 'i' -- cgit v1.1