Commit d2a365a8 by Jakub Jelinek Committed by Jakub Jelinek

re PR middle-end/58564 (possible wrong code bug at -O0)

	PR middle-end/58564
	* fold-const.c (tree_unary_nonnegative_warnv_p): Use
	INTEGRAL_TYPE_P (t) instead of TREE_CODE (t) == INTEGER_TYPE.

From-SVN: r203044
parent f66d0891
2013-09-30 Jakub Jelinek <jakub@redhat.com> 2013-09-30 Jakub Jelinek <jakub@redhat.com>
PR middle-end/58564 PR middle-end/58564
* fold-const.c (tree_unary_nonnegative_warnv_p): Use
INTEGRAL_TYPE_P (t) instead of TREE_CODE (t) == INTEGER_TYPE.
PR middle-end/58564
* fold-const.c (fold_ternary_loc): For A < 0 : <sign bit of A> : 0 * fold-const.c (fold_ternary_loc): For A < 0 : <sign bit of A> : 0
optimization, punt if sign_bit_p looked through any zero extension. optimization, punt if sign_bit_p looked through any zero extension.
......
...@@ -15448,7 +15448,7 @@ tree_unary_nonnegative_warnv_p (enum tree_code code, tree type, tree op0, ...@@ -15448,7 +15448,7 @@ tree_unary_nonnegative_warnv_p (enum tree_code code, tree type, tree op0,
if (TREE_CODE (inner_type) == REAL_TYPE) if (TREE_CODE (inner_type) == REAL_TYPE)
return tree_expr_nonnegative_warnv_p (op0, return tree_expr_nonnegative_warnv_p (op0,
strict_overflow_p); strict_overflow_p);
if (TREE_CODE (inner_type) == INTEGER_TYPE) if (INTEGRAL_TYPE_P (inner_type))
{ {
if (TYPE_UNSIGNED (inner_type)) if (TYPE_UNSIGNED (inner_type))
return true; return true;
...@@ -15456,12 +15456,12 @@ tree_unary_nonnegative_warnv_p (enum tree_code code, tree type, tree op0, ...@@ -15456,12 +15456,12 @@ tree_unary_nonnegative_warnv_p (enum tree_code code, tree type, tree op0,
strict_overflow_p); 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) if (TREE_CODE (inner_type) == REAL_TYPE)
return tree_expr_nonnegative_warnv_p (op0, return tree_expr_nonnegative_warnv_p (op0,
strict_overflow_p); 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) return TYPE_PRECISION (inner_type) < TYPE_PRECISION (outer_type)
&& TYPE_UNSIGNED (inner_type); && TYPE_UNSIGNED (inner_type);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment