summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-12 13:01:37 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2000-11-12 13:01:37 +0000
commitee2e4dd871f920449079fbec3ab96286f9aa4590 (patch)
tree00463063b57e97e73fdf6d912f40f5f6fdc19729 /gcc
parent920b5d413dad5d969d4fb028ef4dc2f01cd07938 (diff)
downloadgcc-ee2e4dd871f920449079fbec3ab96286f9aa4590.tar.gz
* jump.c (delete_computation): Don't assume that just becuase an
instruction sets a register, that register is dead. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37405 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/jump.c27
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20001112-1.c10
3 files changed, 15 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b255253a79d..26e35f1ada0 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2000-11-12 Mark Mitchell <mark@codesourcery.com>
+
+ * jump.c (delete_computation): Don't assume that just becuase an
+ instruction sets a register, that register is dead.
+
2000-11-12 Neil Booth <neilb@earthling.net>
* cppexp.c: Don't worry about pfile->skipping.
diff --git a/gcc/jump.c b/gcc/jump.c
index d6941c83ffa..195e60f9d8b 100644
--- a/gcc/jump.c
+++ b/gcc/jump.c
@@ -2680,7 +2680,6 @@ delete_computation (insn)
rtx insn;
{
rtx note, next;
- rtx set;
#ifdef HAVE_cc0
if (reg_referenced_p (cc0_rtx, PATTERN (insn)))
@@ -2717,32 +2716,6 @@ delete_computation (insn)
}
#endif
- /* The REG_DEAD note may have been omitted for a register
- which is both set and used by the insn. */
- set = single_set (insn);
- if (set && GET_CODE (SET_DEST (set)) == REG)
- {
- int dest_regno = REGNO (SET_DEST (set));
- int dest_endregno
- = dest_regno + (dest_regno < FIRST_PSEUDO_REGISTER
- ? HARD_REGNO_NREGS (dest_regno,
- GET_MODE (SET_DEST (set))) : 1);
- int i;
-
- for (i = dest_regno; i < dest_endregno; i++)
- {
- if (! refers_to_regno_p (i, i + 1, SET_SRC (set), NULL_PTR)
- || find_regno_note (insn, REG_DEAD, i))
- continue;
-
- note = gen_rtx_EXPR_LIST (REG_DEAD,
- (i < FIRST_PSEUDO_REGISTER
- ? gen_rtx_REG (reg_raw_mode[i], i)
- : SET_DEST (set)), NULL_RTX);
- delete_prior_computation (note, insn);
- }
- }
-
for (note = REG_NOTES (insn); note; note = next)
{
next = XEXP (note, 1);
diff --git a/gcc/testsuite/gcc.c-torture/execute/20001112-1.c b/gcc/testsuite/gcc.c-torture/execute/20001112-1.c
new file mode 100644
index 00000000000..6ce2f66516f
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20001112-1.c
@@ -0,0 +1,10 @@
+int main ()
+{
+ long long i = 1;
+
+ i = i * 2 + 1;
+
+ if (i != 3)
+ abort ();
+ exit (0);
+}