aboutsummaryrefslogtreecommitdiff
path: root/gcc/dce.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel1@de.ibm.com>2007-10-28 10:14:21 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2007-10-28 10:14:21 +0000
commit137e9a70b73b7077073fd97bea30f6a148daeae7 (patch)
tree5428021c4a21da831fb98d6cb297d06cef563f3e /gcc/dce.c
parentc7a7567d5248031d457dbe8ba0923fcfa1db0173 (diff)
downloadgcc-137e9a70b73b7077073fd97bea30f6a148daeae7.zip
gcc-137e9a70b73b7077073fd97bea30f6a148daeae7.tar.gz
gcc-137e9a70b73b7077073fd97bea30f6a148daeae7.tar.bz2
dce.c (delete_unmarked_insns): Just delete the RETVAL and LIBCALL notes if...
2007-10-28 Andreas Krebbel <krebbel1@de.ibm.com> * dce.c (delete_unmarked_insns): Just delete the RETVAL and LIBCALL notes if they are about to be moved to the same insn. From-SVN: r129693
Diffstat (limited to 'gcc/dce.c')
-rw-r--r--gcc/dce.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/dce.c b/gcc/dce.c
index bf8e7a3..e63a07a 100644
--- a/gcc/dce.c
+++ b/gcc/dce.c
@@ -346,10 +346,17 @@ delete_unmarked_insns (void)
rtx new_libcall_insn = next_real_insn (insn);
rtx retval_note = find_reg_note (XEXP (note, 0),
REG_RETVAL, NULL_RTX);
- REG_NOTES (new_libcall_insn)
- = gen_rtx_INSN_LIST (REG_LIBCALL, XEXP (note, 0),
- REG_NOTES (new_libcall_insn));
- XEXP (retval_note, 0) = new_libcall_insn;
+ /* If the RETVAL and LIBCALL notes would land on the same
+ insn just remove them. */
+ if (XEXP (note, 0) == new_libcall_insn)
+ remove_note (new_libcall_insn, retval_note);
+ else
+ {
+ REG_NOTES (new_libcall_insn)
+ = gen_rtx_INSN_LIST (REG_LIBCALL, XEXP (note, 0),
+ REG_NOTES (new_libcall_insn));
+ XEXP (retval_note, 0) = new_libcall_insn;
+ }
}
/* If the insn contains a REG_RETVAL note and is dead, but the