aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2005-03-23 15:59:40 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2005-03-23 15:59:40 +0000
commit17ac08e2fb86675af83171afbeccfe7936c48709 (patch)
tree1d2e8d636e2d097fbbf7d8d91bff95a8cd0968e0 /gcc
parent0e6b0dafa31335e74c230356f71d0356089a3a3f (diff)
downloadgcc-17ac08e2fb86675af83171afbeccfe7936c48709.zip
gcc-17ac08e2fb86675af83171afbeccfe7936c48709.tar.gz
gcc-17ac08e2fb86675af83171afbeccfe7936c48709.tar.bz2
final.c (final_scan_insn): Don't remove no-op instructions.
* final.c (final_scan_insn): Don't remove no-op instructions. * reload1.c (reload): Remove simple no-op instructions even when not optimizing. From-SVN: r96933
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/final.c17
-rw-r--r--gcc/reload1.c13
3 files changed, 21 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 223b673..36c07b8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-23 Ian Lance Taylor <ian@airs.com>
+
+ * final.c (final_scan_insn): Don't remove no-op instructions.
+ * reload1.c (reload): Remove simple no-op instructions even when
+ not optimizing.
+
2005-03-23 Dorit Naishlos <dorit@il.ib.com>
PR tree-optimization/20501
diff --git a/gcc/final.c b/gcc/final.c
index 9347efe..906e50c 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -1,6 +1,7 @@
/* Convert RTL to assembler code and output it, for GNU compiler.
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
- 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+ 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+ Free Software Foundation, Inc.
This file is part of GCC.
@@ -2267,20 +2268,6 @@ final_scan_insn (rtx insn, FILE *file, int optimize ATTRIBUTE_UNUSED,
}
#endif
-#ifndef STACK_REGS
- /* Don't bother outputting obvious no-ops, even without -O.
- This optimization is fast and doesn't interfere with debugging.
- Don't do this if the insn is in a delay slot, since this
- will cause an improper number of delay insns to be written. */
- if (final_sequence == 0
- && prescan >= 0
- && NONJUMP_INSN_P (insn) && GET_CODE (body) == SET
- && REG_P (SET_SRC (body))
- && REG_P (SET_DEST (body))
- && REGNO (SET_SRC (body)) == REGNO (SET_DEST (body)))
- break;
-#endif
-
#ifdef HAVE_cc0
/* If this is a conditional branch, maybe modify it
if the cc's are in a nonstandard state
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 41a2f02..5e1ab1a 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -1174,6 +1174,19 @@ reload (rtx first, int global)
replace_pseudos_in (& XEXP (PATTERN (insn), 0),
VOIDmode, PATTERN (insn));
+ /* Discard obvious no-ops, even without -O. This optimization
+ is fast and doesn't interfere with debugging. */
+ if (NONJUMP_INSN_P (insn)
+ && GET_CODE (PATTERN (insn)) == SET
+ && REG_P (SET_SRC (PATTERN (insn)))
+ && REG_P (SET_DEST (PATTERN (insn)))
+ && (REGNO (SET_SRC (PATTERN (insn)))
+ == REGNO (SET_DEST (PATTERN (insn)))))
+ {
+ delete_insn (insn);
+ continue;
+ }
+
pnote = &REG_NOTES (insn);
while (*pnote != 0)
{