diff options
author | Jeff Law <law@gcc.gnu.org> | 2013-01-19 22:00:56 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2013-01-19 22:00:56 -0700 |
commit | 5630e3e157a10a74e925de90e9badee11996a225 (patch) | |
tree | da83783cfe5329522a7123873999d87c323e4415 /gcc/tree-ssa-sccvn.c | |
parent | 424bac94825a2dda9eafecae640d5952e0c40108 (diff) | |
download | gcc-5630e3e157a10a74e925de90e9badee11996a225.zip gcc-5630e3e157a10a74e925de90e9badee11996a225.tar.gz gcc-5630e3e157a10a74e925de90e9badee11996a225.tar.bz2 |
re PR tree-optimization/52631 (VN does not use simplified expression for lookup)
PR tree-optimization/52631
* tree-ssa-sccvn (visit_use): Before looking up the original
statement, try looking up the simplified expression.
PR tree-optimization/52631
* tree-ssa/pr52631.c: New test.
* tree-ssa/ssa-fre-9: Update expected output.
From-SVN: r195318
Diffstat (limited to 'gcc/tree-ssa-sccvn.c')
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 5794035..81a07ae 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -3422,6 +3422,28 @@ visit_use (tree use) } else { + /* First try to lookup the simplified expression. */ + if (simplified) + { + enum gimple_rhs_class rhs_class; + + + rhs_class = get_gimple_rhs_class (TREE_CODE (simplified)); + if ((rhs_class == GIMPLE_UNARY_RHS + || rhs_class == GIMPLE_BINARY_RHS + || rhs_class == GIMPLE_TERNARY_RHS) + && valid_gimple_rhs_p (simplified)) + { + tree result = vn_nary_op_lookup (simplified, NULL); + if (result) + { + changed = set_ssa_val_to (lhs, result); + goto done; + } + } + } + + /* Otherwise visit the original statement. */ switch (vn_get_stmt_kind (stmt)) { case VN_NARY: |