aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-10-23 14:33:35 +0000
committerJeff Law <law@gcc.gnu.org>1998-10-23 08:33:35 -0600
commit7b16da78b147daa91116668c6e03b111685f8c1f (patch)
tree41672069b9e7180bd3d4ce8425e2b543b284569c /gcc
parentca3bf2b5db619ff2f19ac253c05db30c9b84bf56 (diff)
downloadgcc-7b16da78b147daa91116668c6e03b111685f8c1f.zip
gcc-7b16da78b147daa91116668c6e03b111685f8c1f.tar.gz
gcc-7b16da78b147daa91116668c6e03b111685f8c1f.tar.bz2
* flow.c (life_analysis_1): Delete CLOBBER insns after reload.
From-SVN: r23257
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog2
-rw-r--r--gcc/flow.c17
2 files changed, 19 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index eba3f14..7c0212d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -26,6 +26,8 @@ Fri Oct 23 15:34:14 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
Fri Oct 23 13:12:35 1998 Jeffrey A Law (law@cygnus.com)
+ * flow.c (life_analysis_1): Delete CLOBBER insns after reload.
+
* mn10200.md (truncated shift): Accept constant inputs too.
Fri Oct 23 04:06:57 1998 Richard Earnshaw (rearnsha@arm.com)
diff --git a/gcc/flow.c b/gcc/flow.c
index 94251ff..2d3c983 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -1358,6 +1358,23 @@ life_analysis_1 (f, nregs)
if (reload_completed)
bcopy (regs_ever_live, save_regs_ever_live, (sizeof (regs_ever_live)));
+ /* Also remove all CLOBBER insns after reload. They can cause us to think
+ a value is dead when it really is not dead. */
+ if (reload_completed)
+ {
+ rtx insn;
+
+ for (insn = f; insn; insn = NEXT_INSN (insn))
+ {
+ if (GET_CODE (insn) == INSN
+ && GET_CODE (PATTERN (insn)) == CLOBBER)
+ {
+ PUT_CODE (insn, NOTE);
+ NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
+ NOTE_SOURCE_FILE (insn) = 0;
+ }
+ }
+ }
bzero (regs_ever_live, sizeof regs_ever_live);
/* Allocate and zero out many data structures