From 14bc8dc2806a4dae14ec1fa052fb319cf92c2085 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 14 May 2004 11:51:05 -0600 Subject: [PATCH] tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Reorganize so that it picks up more opportunities to eliminate ABS expressions... * tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Reorganize so that it picks up more opportunities to eliminate ABS expressions or turn them into negations. * gcc.dg/tree-ssa/20040514-2.c: New test. From-SVN: r81853 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/tree-ssa/20040514-2.c | 15 +++++++++++++++ gcc/tree-ssa-dom.c | 24 ++++++++++++++++++++++-- 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/20040514-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67de341..844500d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-05-14 Jeff Law + + * tree-ssa-dom.c (simplify_rhs_and_lookup_avail_expr): Reorganize + so that it picks up more opportunities to eliminate ABS expressions + or turn them into negations. + 2004-05-14 Steven Bosscher * passes.c (rest_of_handle_null_pointer): Remove. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6269855..77a80ba 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-05-14 Jeff Law + + * gcc.dg/tree-ssa/20040514-2.c: New test. + 2004-05-14 Tobias Schlueter * gfortran.fortran-torture/compile/noncontinuation_1.f90: Rename diff --git a/gcc/testsuite/gcc.dg/tree-ssa/20040514-2.c b/gcc/testsuite/gcc.dg/tree-ssa/20040514-2.c new file mode 100644 index 0000000..b651ae3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/20040514-2.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O1 -fdump-tree-dom3" } */ +int +foo2 (distance, i, j) + int distance; + int i, j; +{ + int t = distance; + if (t <= 0) + t = ((t) >= 0 ? (t) : -(t)); + return t; +} + +/* There should be no ABS_EXPR. */ +/* { dg-final { scan-tree-dump-times "ABS_EXPR " 0 "dom3"} } */ diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c index ed47ea6..89f4c6a 100644 --- a/gcc/tree-ssa-dom.c +++ b/gcc/tree-ssa-dom.c @@ -1826,7 +1826,7 @@ simplify_rhs_and_lookup_avail_expr (struct dom_walk_data *walk_data, if (! dummy_cond) { - dummy_cond = build (LT_EXPR, boolean_type_node, + dummy_cond = build (LE_EXPR, boolean_type_node, op, integer_zero_node); dummy_cond = build (COND_EXPR, void_type_node, dummy_cond, NULL, NULL); @@ -1834,7 +1834,7 @@ simplify_rhs_and_lookup_avail_expr (struct dom_walk_data *walk_data, } else { - TREE_SET_CODE (TREE_OPERAND (dummy_cond, 0), LT_EXPR); + TREE_SET_CODE (TREE_OPERAND (dummy_cond, 0), LE_EXPR); TREE_OPERAND (TREE_OPERAND (dummy_cond, 0), 0) = op; TREE_OPERAND (TREE_OPERAND (dummy_cond, 0), 1) = convert (type, integer_zero_node); @@ -1842,6 +1842,26 @@ simplify_rhs_and_lookup_avail_expr (struct dom_walk_data *walk_data, val = simplify_cond_and_lookup_avail_expr (dummy_cond, &bd->avail_exprs, NULL, false); + + if (!val) + { + TREE_SET_CODE (TREE_OPERAND (dummy_cond, 0), GE_EXPR); + TREE_OPERAND (TREE_OPERAND (dummy_cond, 0), 0) = op; + TREE_OPERAND (TREE_OPERAND (dummy_cond, 0), 1) + = convert (type, integer_zero_node); + + val = simplify_cond_and_lookup_avail_expr (dummy_cond, + &bd->avail_exprs, + NULL, false); + + if (val) + { + if (integer_zerop (val)) + val = integer_one_node; + else if (integer_onep (val)) + val = integer_zero_node; + } + } } if (val -- 2.7.4