aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-fold.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-05-22 07:26:32 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-05-22 07:26:32 +0000
commit8e2c037d24c51e0333b1fad90c61d5526a963446 (patch)
treed35548003da1fa16cfa37c16eaff03ecbee13e7e /gcc/gimple-fold.c
parente154242724b084380e3221df7c08fcdbd8460674 (diff)
downloadgcc-8e2c037d24c51e0333b1fad90c61d5526a963446.zip
gcc-8e2c037d24c51e0333b1fad90c61d5526a963446.tar.gz
gcc-8e2c037d24c51e0333b1fad90c61d5526a963446.tar.bz2
gimple-fold.c (arith_code_with_undefined_signed_overflow): Add ABS_EXPR.
2019-05-22 Richard Biener <rguenther@suse.de> * gimple-fold.c (arith_code_with_undefined_signed_overflow): Add ABS_EXPR. (rewrite_to_defined_overflow): Handle rewriting ABS_EXPR as ABSU_EXPR. * gcc.dg/tree-ssa/ssa-lim-13.c: New testcase. From-SVN: r271501
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r--gcc/gimple-fold.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index 1b10bae..b3e9317 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -7329,6 +7329,7 @@ arith_code_with_undefined_signed_overflow (tree_code code)
{
switch (code)
{
+ case ABS_EXPR:
case PLUS_EXPR:
case MINUS_EXPR:
case MULT_EXPR:
@@ -7361,12 +7362,15 @@ rewrite_to_defined_overflow (gimple *stmt)
tree lhs = gimple_assign_lhs (stmt);
tree type = unsigned_type_for (TREE_TYPE (lhs));
gimple_seq stmts = NULL;
- for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
- {
- tree op = gimple_op (stmt, i);
- op = gimple_convert (&stmts, type, op);
- gimple_set_op (stmt, i, op);
- }
+ if (gimple_assign_rhs_code (stmt) == ABS_EXPR)
+ gimple_assign_set_rhs_code (stmt, ABSU_EXPR);
+ else
+ for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
+ {
+ tree op = gimple_op (stmt, i);
+ op = gimple_convert (&stmts, type, op);
+ gimple_set_op (stmt, i, op);
+ }
gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt));
if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
gimple_assign_set_rhs_code (stmt, PLUS_EXPR);