aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-pre.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-02-27 08:51:28 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-02-27 08:51:28 +0000
commit68b948d3ba7cee54ba9f03a5b04f505f9c7538ff (patch)
tree2c076d7eb5021139981bfc90131783fb89462744 /gcc/tree-ssa-pre.c
parent69a2e8a10b5e80bb696269f7d6365a3efd16c18d (diff)
downloadgcc-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.c7
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);