diff options
author | Andrew Pinski <pinskia@gmail.com> | 2006-11-28 23:23:11 -0800 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2006-11-28 23:23:11 -0800 |
commit | e969dbde29bfd396259357aa54a54f38f09ff593 (patch) | |
tree | 869f90739651886a919f4571e43bead73dcdfefa /gcc | |
parent | fd074cfecc4d544776f7c1ba12882e5023dd2c79 (diff) | |
download | gcc-e969dbde29bfd396259357aa54a54f38f09ff593.zip gcc-e969dbde29bfd396259357aa54a54f38f09ff593.tar.gz gcc-e969dbde29bfd396259357aa54a54f38f09ff593.tar.bz2 |
re PR tree-optimization/29984 (SPE GCC segfaults with MAX_EXPR <a, a>)
2006-11-28 Andrew Pinski <pinskia@gmail.com>
PR tree-opt/29984
* gcc.dg/tree-ssa/reassoc-12.c: New test.
2006-11-28 Andrew Pinski <pinskia@gmail.com>
PR tree-opt/29984
* tree-ssa-reassoc.c (eliminate_duplicate_pair): Handle MAX_EXPR
and MIN_EXRP.
From-SVN: r119303
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/reassoc-12.c | 11 | ||||
-rw-r--r-- | gcc/tree-ssa-reassoc.c | 8 |
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fb46791..c838be7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-11-28 Andrew Pinski <pinskia@gmail.com> + + PR tree-opt/29984 + * tree-ssa-reassoc.c (eliminate_duplicate_pair): Handle MAX_EXPR + and MIN_EXRP. + 2006-11-28 Bob Wilson <bob.wilson@acm.org> * config/xtensa/lib1funcs.asm (__umulsidi3): Restore a12-a15 on exit. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8d9d9e4..a08b86a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-11-28 Andrew Pinski <pinskia@gmail.com> + + PR tree-opt/29984 + * gcc.dg/tree-ssa/reassoc-12.c: New test. + 2006-11-28 Jan Hubicka <jh@suse.cz> * gcc.dg/memcpy-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-12.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-12.c new file mode 100644 index 0000000..65e2931 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-12.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-reassoc1-details" } */ +int f(int a, int b) +{ + /* MAX_EXPR <a, a> should cause it to be equivalent to a. */ + int c = a>=b?a:b; + int d = c>=a?c:a; + return d; +} +/* { dg-final { scan-tree-dump-times "Equivalence:" 1 "reassoc1"} } */ +/* { dg-final { cleanup-tree-dump "reassoc1" } } */ diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 6835a17..8b5d34a 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -417,8 +417,8 @@ eliminate_duplicate_pair (enum tree_code opcode, operand_entry_t last) { - /* If we have two of the same op, and the opcode is & or |, we can - eliminate one of them. + /* If we have two of the same op, and the opcode is & |, min, or max, + we can eliminate one of them. If we have two of the same op, and the opcode is ^, we can eliminate both of them. */ @@ -426,13 +426,15 @@ eliminate_duplicate_pair (enum tree_code opcode, { switch (opcode) { + case MAX_EXPR: + case MIN_EXPR: case BIT_IOR_EXPR: case BIT_AND_EXPR: if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "Equivalence: "); print_generic_expr (dump_file, curr->op, 0); - fprintf (dump_file, " [&|] "); + fprintf (dump_file, " [&|minmax] "); print_generic_expr (dump_file, last->op, 0); fprintf (dump_file, " -> "); print_generic_stmt (dump_file, last->op, 0); |