summaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-21 01:21:23 +0000
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>2001-05-21 01:21:23 +0000
commitcde9d0c7dc4114f5de6e16e3c547a60c8cd2f41d (patch)
treeb05439e6d5d3e5f22860bee1bfa31706393393c1 /gcc/fold-const.c
parent3cfa0cc41e56311aa21a0fd7f95490459ec34bce (diff)
downloadgcc-cde9d0c7dc4114f5de6e16e3c547a60c8cd2f41d.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42365 138bc75d-0d04-0410-961f-82ee72b054a4
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 3bedea13a78..2cf534f8653 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: