aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>2001-05-21 01:21:23 +0000
committerKaveh Ghazi <ghazi@gcc.gnu.org>2001-05-21 01:21:23 +0000
commit88e3805d76d44556e6c07062d62a31e7953b5a6a (patch)
treeb05439e6d5d3e5f22860bee1bfa31706393393c1 /gcc/fold-const.c
parent4b404517536c85a092184a540f30d8bd5a496e26 (diff)
downloadgcc-88e3805d76d44556e6c07062d62a31e7953b5a6a.zip
gcc-88e3805d76d44556e6c07062d62a31e7953b5a6a.tar.gz
gcc-88e3805d76d44556e6c07062d62a31e7953b5a6a.tar.bz2
fold-const.c (tree_expr_nonnegative_p): Detect more non-negative cases.
* fold-const.c (tree_expr_nonnegative_p): Detect more non-negative cases. testsuite: * g++.old-deja/g++.warn/compare1.C: New test. * gcc.dg/compare4.c: New test. From-SVN: r42365
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 3bedea1..2cf534f 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -7351,11 +7351,24 @@ tree_expr_nonnegative_p (t)
{
switch (TREE_CODE (t))
{
+ case ABS_EXPR:
+ case FFS_EXPR:
+ return 1;
case INTEGER_CST:
return tree_int_cst_sgn (t) >= 0;
case COND_EXPR:
return tree_expr_nonnegative_p (TREE_OPERAND (t, 1))
&& tree_expr_nonnegative_p (TREE_OPERAND (t, 2));
+ case COMPOUND_EXPR:
+ return tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
+ case MIN_EXPR:
+ return tree_expr_nonnegative_p (TREE_OPERAND (t, 0))
+ && tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
+ case MAX_EXPR:
+ return tree_expr_nonnegative_p (TREE_OPERAND (t, 0))
+ || tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
+ case MODIFY_EXPR:
+ return tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
case BIND_EXPR:
return tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
case RTL_EXPR: