diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-08-29 19:40:20 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-08-29 19:40:20 +0000 |
commit | 5e9f78cc748e907a69955f0b88fecf2686683843 (patch) | |
tree | 645bc4e2cc150466118e298ff666849d6252a5c7 | |
parent | 477a21f7f9b31c687d45f1001dd93c90df52cf29 (diff) | |
download | gcc-5e9f78cc748e907a69955f0b88fecf2686683843.zip gcc-5e9f78cc748e907a69955f0b88fecf2686683843.tar.gz gcc-5e9f78cc748e907a69955f0b88fecf2686683843.tar.bz2 |
re PR rtl-optimization/16590 (Incorrect execution when compiling with -O2)
PR rtl-optimization/16590
* gcse.c (pre_delete): Do not create invalid REG_EQUAL notes.
PR rtl-optimization/16590
* g++.dg/opt/loop1.C: New test.
From-SVN: r86732
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/gcse.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/loop1.C | 24 |
4 files changed, 37 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2138bf6..b168aa3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-08-29 Mark Mitchell <mark@codesourcery.com> + + PR rtl-optimization/16590 + * gcse.c (pre_delete): Do not create invalid REG_EQUAL notes. + 2004-08-29 Diego Novillo <dnovillo@redhat.com> * tree-ssa-ccp.c (ccp_visit_stmt): Remove #if 0 guards. @@ -4463,7 +4463,9 @@ pre_delete (void) expr->reaching_reg = gen_reg_rtx (GET_MODE (SET_DEST (set))); - gcse_emit_move_after (expr->reaching_reg, SET_DEST (set), insn); + emit_insn_after (gen_move_insn (SET_DEST (set), + expr->reaching_reg), + insn); delete_insn (insn); occr->deleted_p = 1; SET_BIT (pre_redundant_insns, INSN_CUID (insn)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ada3528..4fcbd8b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-08-29 Mark Mitchell <mark@codesourcery.com> + + PR rtl-optimization/16590 + * g++.dg/opt/loop1.C: New test. + 2004-08-29 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de> PR fortran/13910 diff --git a/gcc/testsuite/g++.dg/opt/loop1.C b/gcc/testsuite/g++.dg/opt/loop1.C new file mode 100644 index 0000000..ad0308e --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/loop1.C @@ -0,0 +1,24 @@ +// PR rtl-optimization/16590 +// { dg-do run } +// { dg-options "-O2" } + +extern "C" void abort(); + +struct iterator { + char * p; + int *dummy; +}; + +static iterator pend(char * start) { + iterator p = {start, 0}; + if (p.p == start) p.p = start+5; + --p.p; + return p; +} + +int main() { + char mem[4+1]; + + if(pend(mem).p != mem+4) + abort (); +} |