From: Richard Biener Date: Wed, 31 Oct 2018 08:10:58 +0000 (+0000) Subject: tree-eh.c (replace_trapping_overflow): Simplify ABS_EXPR case using ABSU_EXPR. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1a71493d596d4654ccb7c29c89aef19460e5f998;p=gcc.git tree-eh.c (replace_trapping_overflow): Simplify ABS_EXPR case using ABSU_EXPR. 2018-10-31 Richard Biener * tree-eh.c (replace_trapping_overflow): Simplify ABS_EXPR case using ABSU_EXPR. From-SVN: r265654 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4ed9cd6d37d..660bafb20c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-10-31 Richard Biener + + * tree-eh.c (replace_trapping_overflow): Simplify ABS_EXPR case + using ABSU_EXPR. + 2018-10-31 Sameera Deshpande * config/aarch64/aarch64-cores.def (saphira): Use saphira pipeline. diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index 1c7d9dc1d59..61414b3c78e 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 {