aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-eh.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-10-31 08:10:58 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-10-31 08:10:58 +0000
commit1a71493d596d4654ccb7c29c89aef19460e5f998 (patch)
treef437d4a094b4eb237f8f75ed0bb8f8f1f62fb312 /gcc/tree-eh.c
parent2e9d500e4ec1da287d34f34c55c1ca8fe4abaa3a (diff)
downloadgcc-1a71493d596d4654ccb7c29c89aef19460e5f998.zip
gcc-1a71493d596d4654ccb7c29c89aef19460e5f998.tar.gz
gcc-1a71493d596d4654ccb7c29c89aef19460e5f998.tar.bz2
tree-eh.c (replace_trapping_overflow): Simplify ABS_EXPR case using ABSU_EXPR.
2018-10-31 Richard Biener <rguenther@suse.de> * tree-eh.c (replace_trapping_overflow): Simplify ABS_EXPR case using ABSU_EXPR. From-SVN: r265654
Diffstat (limited to 'gcc/tree-eh.c')
-rw-r--r--gcc/tree-eh.c24
1 files changed, 3 insertions, 21 deletions
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index 1c7d9dc..61414b3 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -2759,27 +2759,9 @@ replace_trapping_overflow (tree *tp, int *walk_subtrees, void *data)
if (TREE_CODE (*tp) == ABS_EXPR)
{
- tree op = TREE_OPERAND (*tp, 0);
- op = save_expr (op);
- /* save_expr skips simple arithmetics, which is undesirable
- here, if it might trap due to flag_trapv. We need to
- force a SAVE_EXPR in the COND_EXPR condition, to evaluate
- it before the comparison. */
- if (EXPR_P (op)
- && TREE_CODE (op) != SAVE_EXPR
- && walk_tree (&op, find_trapping_overflow, NULL, NULL))
- {
- op = build1_loc (EXPR_LOCATION (op), SAVE_EXPR, type, op);
- TREE_SIDE_EFFECTS (op) = 1;
- }
- /* Change abs (op) to op < 0 ? -op : op and handle the NEGATE_EXPR
- like other signed integer trapping operations. */
- tree cond = fold_build2 (LT_EXPR, boolean_type_node,
- op, build_int_cst (type, 0));
- tree neg = fold_build1 (NEGATE_EXPR, utype,
- fold_convert (utype, op));
- *tp = fold_build3 (COND_EXPR, type, cond,
- fold_convert (type, neg), op);
+ TREE_SET_CODE (*tp, ABSU_EXPR);
+ TREE_TYPE (*tp) = utype;
+ *tp = fold_convert (type, *tp);
}
else
{