diff options
author | Richard Biener <rguenther@suse.de> | 2019-05-22 07:26:32 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-05-22 07:26:32 +0000 |
commit | 8e2c037d24c51e0333b1fad90c61d5526a963446 (patch) | |
tree | d35548003da1fa16cfa37c16eaff03ecbee13e7e /gcc/gimple-fold.c | |
parent | e154242724b084380e3221df7c08fcdbd8460674 (diff) | |
download | gcc-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.c | 16 |
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); |