diff options
author | Mark Mitchell <mark@codesourcery.com> | 2000-11-12 13:01:37 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2000-11-12 13:01:37 +0000 |
commit | f8c4f860516d50239cb285c6ddb575a53aea4fec (patch) | |
tree | 00463063b57e97e73fdf6d912f40f5f6fdc19729 /gcc | |
parent | b528a07e0e5693ec33b7e77c600c0b32117f7742 (diff) | |
download | gcc-f8c4f860516d50239cb285c6ddb575a53aea4fec.zip gcc-f8c4f860516d50239cb285c6ddb575a53aea4fec.tar.gz gcc-f8c4f860516d50239cb285c6ddb575a53aea4fec.tar.bz2 |
jump.c (delete_computation): Don't assume that just becuase an instruction sets a register...
* jump.c (delete_computation): Don't assume that just becuase an
instruction sets a register, that register is dead.
From-SVN: r37405
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/jump.c | 27 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20001112-1.c | 10 |
3 files changed, 15 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b255253..26e35f1 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. @@ -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 0000000..6ce2f66 --- /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); +} |