diff options
author | Richard Biener <rguenther@suse.de> | 2017-02-27 08:51:28 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-02-27 08:51:28 +0000 |
commit | 68b948d3ba7cee54ba9f03a5b04f505f9c7538ff (patch) | |
tree | 2c076d7eb5021139981bfc90131783fb89462744 /gcc/tree-ssa-pre.c | |
parent | 69a2e8a10b5e80bb696269f7d6365a3efd16c18d (diff) | |
download | gcc-68b948d3ba7cee54ba9f03a5b04f505f9c7538ff.zip gcc-68b948d3ba7cee54ba9f03a5b04f505f9c7538ff.tar.gz gcc-68b948d3ba7cee54ba9f03a5b04f505f9c7538ff.tar.bz2 |
re PR tree-optimization/45397 (Issues with integer narrowing conversions)
2017-02-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/45397
* tree-ssa-pre.c (eliminate_insert): Handle BIT_AND_EXPR.
* tree-ssa-sccvn.c (valueized_wider_op): New helper.
(visit_nary_op): Add pattern matching for CSEing sign-changed
or truncated operations with wider ones.
* gcc.dg/tree-ssa/pr45397.c: New testcase.
From-SVN: r245752
Diffstat (limited to 'gcc/tree-ssa-pre.c')
-rw-r--r-- | gcc/tree-ssa-pre.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 7fce0d3..a1d7677 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4103,7 +4103,9 @@ eliminate_insert (gimple_stmt_iterator *gsi, tree val) if (!is_gimple_assign (stmt) || (!CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt)) && gimple_assign_rhs_code (stmt) != VIEW_CONVERT_EXPR - && gimple_assign_rhs_code (stmt) != BIT_FIELD_REF)) + && gimple_assign_rhs_code (stmt) != BIT_FIELD_REF + && (gimple_assign_rhs_code (stmt) != BIT_AND_EXPR + || TREE_CODE (gimple_assign_rhs2 (stmt)) != INTEGER_CST))) return NULL_TREE; tree op = gimple_assign_rhs1 (stmt); @@ -4121,6 +4123,9 @@ eliminate_insert (gimple_stmt_iterator *gsi, tree val) TREE_TYPE (val), leader, TREE_OPERAND (gimple_assign_rhs1 (stmt), 1), TREE_OPERAND (gimple_assign_rhs1 (stmt), 2)); + else if (gimple_assign_rhs_code (stmt) == BIT_AND_EXPR) + res = gimple_build (&stmts, BIT_AND_EXPR, + TREE_TYPE (val), leader, gimple_assign_rhs2 (stmt)); else res = gimple_build (&stmts, gimple_assign_rhs_code (stmt), TREE_TYPE (val), leader); |