This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Improve tree_unary_nonnegative_warnv_p (PR middle-end/58564)
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Richard Biener <rguenther at suse dot de>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 30 Sep 2013 15:31:24 +0200
- Subject: [PATCH] Improve tree_unary_nonnegative_warnv_p (PR middle-end/58564)
- Authentication-results: sourceware.org; auth=none
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
Related to the last patch, this handles also BOOLEAN_TYPE and
ENUMERAL_TYPE the same as INTEGER_TYPE in tree_unary_nonnegative_warnv_p,
which means we e.g. fold properly the (int) (x != 0 && y != 0) < 0
when (x != 0 && y != 0) has BOOLEAN_TYPE.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
2013-09-30 Jakub Jelinek <jakub@redhat.com>
PR middle-end/58564
* fold-const.c (tree_unary_nonnegative_warnv_p): Use
INTEGRAL_TYPE_P (t) instead of TREE_CODE (t) == INTEGER_TYPE.
--- gcc/fold-const.c.jj 2013-09-30 11:19:06.000000000 +0200
+++ gcc/fold-const.c 2013-09-30 11:47:40.984561868 +0200
@@ -15448,7 +15448,7 @@ tree_unary_nonnegative_warnv_p (enum tre
if (TREE_CODE (inner_type) == REAL_TYPE)
return tree_expr_nonnegative_warnv_p (op0,
strict_overflow_p);
- if (TREE_CODE (inner_type) == INTEGER_TYPE)
+ if (INTEGRAL_TYPE_P (inner_type))
{
if (TYPE_UNSIGNED (inner_type))
return true;
@@ -15456,12 +15456,12 @@ tree_unary_nonnegative_warnv_p (enum tre
strict_overflow_p);
}
}
- else if (TREE_CODE (outer_type) == INTEGER_TYPE)
+ else if (INTEGRAL_TYPE_P (outer_type))
{
if (TREE_CODE (inner_type) == REAL_TYPE)
return tree_expr_nonnegative_warnv_p (op0,
strict_overflow_p);
- if (TREE_CODE (inner_type) == INTEGER_TYPE)
+ if (INTEGRAL_TYPE_P (inner_type))
return TYPE_PRECISION (inner_type) < TYPE_PRECISION (outer_type)
&& TYPE_UNSIGNED (inner_type);
}
Jakub