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
This commit is contained in:
Andrew Pinski 2006-11-28 23:23:11 -08:00 committed by Andrew Pinski
parent fd074cfecc
commit e969dbde29
4 changed files with 27 additions and 3 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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" } } */

View File

@ -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);