From 05b7b5a4a1e9916e2f40e2d9d5c1bfb59ad06aaa Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 27 Apr 2015 12:46:58 +0000 Subject: [PATCH] tree-ssa-dom.c (record_equivalences_from_phis): Valueize PHI arg. 2015-04-27 Richard Biener * tree-ssa-dom.c (record_equivalences_from_phis): Valueize PHI arg. (record_equivalences_from_stmt): Valueize rhs. (record_equality): Canonicalize x and y order via tree_swap_operands_p. Do not swap operands for same loop depth. * gcc.target/i386/pr65217.c: XFAIL. From-SVN: r222463 --- gcc/ChangeLog | 7 +++++ gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gcc.target/i386/pr65217.c | 4 +-- gcc/tree-ssa-dom.c | 41 +++++++++++++++++-------- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index be8560c5121..8f76eb645fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-04-27 Richard Biener + + * tree-ssa-dom.c (record_equivalences_from_phis): Valueize PHI arg. + (record_equivalences_from_stmt): Valueize rhs. + (record_equality): Canonicalize x and y order via + tree_swap_operands_p. Do not swap operands for same loop depth. + 2015-04-27 Georg-Johann Lay PR target/65296 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c25b518b22b..c44dc28440d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-04-27 Richard Biener + + * gcc.target/i386/pr65217.c: XFAIL. + 2015-04-27 Jakub Jelinek PR tree-optimization/65875 diff --git a/gcc/testsuite/gcc.target/i386/pr65217.c b/gcc/testsuite/gcc.target/i386/pr65217.c index d5c9be5b9ef..3f495b21f29 100644 --- a/gcc/testsuite/gcc.target/i386/pr65217.c +++ b/gcc/testsuite/gcc.target/i386/pr65217.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O" } */ -/* { dg-final { scan-assembler-not "negl" } } */ -/* { dg-final { scan-assembler-not "andl" } } */ +/* { dg-final { scan-assembler-not "negl" { xfail *-*-* } } } */ +/* { dg-final { scan-assembler-not "andl" { xfail *-*-* } } } */ int test(int n) diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index 355c84c076f..a67b4e447ac 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -1519,6 +1519,13 @@ record_equivalences_from_phis (basic_block bb) if (lhs == t) continue; + /* Valueize t. */ + if (TREE_CODE (t) == SSA_NAME) + { + tree tmp = SSA_NAME_VALUE (t); + t = tmp ? tmp : t; + } + /* If we have not processed an alternative yet, then set RHS to this alternative. */ if (rhs == NULL) @@ -1752,6 +1759,9 @@ record_equality (tree x, tree y) { tree prev_x = NULL, prev_y = NULL; + if (tree_swap_operands_p (x, y, false)) + std::swap (x, y); + if (TREE_CODE (x) == SSA_NAME) prev_x = SSA_NAME_VALUE (x); if (TREE_CODE (y) == SSA_NAME) @@ -1766,7 +1776,7 @@ record_equality (tree x, tree y) else if (is_gimple_min_invariant (x) /* ??? When threading over backedges the following is important for correctness. See PR61757. */ - || (loop_depth_of_name (x) <= loop_depth_of_name (y))) + || (loop_depth_of_name (x) < loop_depth_of_name (y))) prev_x = x, x = y, y = prev_x, prev_x = prev_y; else if (prev_x && is_gimple_min_invariant (prev_x)) x = y, y = prev_x, prev_x = prev_y; @@ -2128,18 +2138,25 @@ record_equivalences_from_stmt (gimple stmt, int may_optimize_p) if (may_optimize_p && (TREE_CODE (rhs) == SSA_NAME || is_gimple_min_invariant (rhs))) - { - if (dump_file && (dump_flags & TDF_DETAILS)) - { - fprintf (dump_file, "==== ASGN "); - print_generic_expr (dump_file, lhs, 0); - fprintf (dump_file, " = "); - print_generic_expr (dump_file, rhs, 0); - fprintf (dump_file, "\n"); - } + { + /* Valueize rhs. */ + if (TREE_CODE (rhs) == SSA_NAME) + { + tree tmp = SSA_NAME_VALUE (rhs); + rhs = tmp ? tmp : rhs; + } - set_ssa_name_value (lhs, rhs); - } + if (dump_file && (dump_flags & TDF_DETAILS)) + { + fprintf (dump_file, "==== ASGN "); + print_generic_expr (dump_file, lhs, 0); + fprintf (dump_file, " = "); + print_generic_expr (dump_file, rhs, 0); + fprintf (dump_file, "\n"); + } + + set_ssa_name_value (lhs, rhs); + } } /* Make sure we can propagate &x + CST. */ -- 2.30.2