Commit 455f14dd by Roger Sayle Committed by Roger Sayle

builtins.c (expand_builtin_pow, [...]): Replace uses of the macro…

builtins.c (expand_builtin_pow, [...]): Replace uses of the macro TREE_CONSTANT_OVERFLOW with TREE_OVERFLOW.


	* builtins.c (expand_builtin_pow, expand_builtin_powi,
	fold_builtin_cabs, fold_builtin_sqrt, fold_builtin_trunc,
	fold_builtin_floor, fold_builtin_ceil, fold_builtin_round,
	fold_builtin_int_int_roundingfn, fold_builtin_bitop,
	fold_builtin_bswap, real_constp, fold_builtin_pow,
	fold_builtin_powi, fold_builtin_signbit, fold_builtin_copysign,
	do_mpfr_arg1, do_mpfr_arg2, do_mpfr_arg3, do_mpfr_sincos): Replace
	uses of the macro TREE_CONSTANT_OVERFLOW with TREE_OVERFLOW.
	* convert.c (convert_to_pointer): Likewise.
	* expr.c (highest_pow2_factor, expand_expr_real_1): Likewise.
	* fold-const.c (force_fit_type, fold_negate_expr, int_const_binop,
	const_binop, fold_convert_const_int_from_int,
	fold_convert_const_int_from_real,
	fold_convert_const_real_from_real, sign_bit_p,
	optimize_minmax_comparison, extract_muldiv_1, fold_div_compare,
	fold_sign_changed_comparison, fold_unary, fold_comparison,
	fold_binary, multiple_of_p, tree_Expr_non_zero_p,
	fold_negate_const, fold_abs_const, fold_not_const): Likewise.
	* print-tree.c (print_node_brief, print_node): Likewise.
	* stor-layout.c (place_field, layout_type): Likewise.
	* tree-chrec.c (keep_cast): Likewise.
	* tree.c (build_vector, build_real, build_real_from_int_cst,
	build_complex): Likewise.

From-SVN: r120678
parent 95fd24b6
2007-01-11 Roger Sayle <roger@eyesopen.com> 2007-01-11 Roger Sayle <roger@eyesopen.com>
* builtins.c (expand_builtin_pow, expand_builtin_powi,
fold_builtin_cabs, fold_builtin_sqrt, fold_builtin_trunc,
fold_builtin_floor, fold_builtin_ceil, fold_builtin_round,
fold_builtin_int_int_roundingfn, fold_builtin_bitop,
fold_builtin_bswap, real_constp, fold_builtin_pow,
fold_builtin_powi, fold_builtin_signbit, fold_builtin_copysign,
do_mpfr_arg1, do_mpfr_arg2, do_mpfr_arg3, do_mpfr_sincos): Replace
uses of the macro TREE_CONSTANT_OVERFLOW with TREE_OVERFLOW.
* convert.c (convert_to_pointer): Likewise.
* expr.c (highest_pow2_factor, expand_expr_real_1): Likewise.
* fold-const.c (force_fit_type, fold_negate_expr, int_const_binop,
const_binop, fold_convert_const_int_from_int,
fold_convert_const_int_from_real,
fold_convert_const_real_from_real, sign_bit_p,
optimize_minmax_comparison, extract_muldiv_1, fold_div_compare,
fold_sign_changed_comparison, fold_unary, fold_comparison,
fold_binary, multiple_of_p, tree_Expr_non_zero_p,
fold_negate_const, fold_abs_const, fold_not_const): Likewise.
* print-tree.c (print_node_brief, print_node): Likewise.
* stor-layout.c (place_field, layout_type): Likewise.
* tree-chrec.c (keep_cast): Likewise.
* tree.c (build_vector, build_real, build_real_from_int_cst,
build_complex): Likewise.
2007-01-11 Roger Sayle <roger@eyesopen.com>
* tree.h (TREE_CONSTANT_OVERFLOW): Obsolete. For the time being, * tree.h (TREE_CONSTANT_OVERFLOW): Obsolete. For the time being,
treat TREE_CONSTANT_OVERFLOW as a synonym of TREE_OVERFLOW. treat TREE_CONSTANT_OVERFLOW as a synonym of TREE_OVERFLOW.
......
/* Expand builtin functions. /* Expand builtin functions.
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -2688,7 +2689,7 @@ expand_builtin_pow (tree exp, rtx target, rtx subtarget) ...@@ -2688,7 +2689,7 @@ expand_builtin_pow (tree exp, rtx target, rtx subtarget)
arg1 = TREE_VALUE (TREE_CHAIN (arglist)); arg1 = TREE_VALUE (TREE_CHAIN (arglist));
if (TREE_CODE (arg1) != REAL_CST if (TREE_CODE (arg1) != REAL_CST
|| TREE_CONSTANT_OVERFLOW (arg1)) || TREE_OVERFLOW (arg1))
return expand_builtin_mathfn_2 (exp, target, subtarget); return expand_builtin_mathfn_2 (exp, target, subtarget);
/* Handle constant exponents. */ /* Handle constant exponents. */
...@@ -2821,7 +2822,7 @@ expand_builtin_powi (tree exp, rtx target, rtx subtarget) ...@@ -2821,7 +2822,7 @@ expand_builtin_powi (tree exp, rtx target, rtx subtarget)
/* Handle constant power. */ /* Handle constant power. */
if (TREE_CODE (arg1) == INTEGER_CST if (TREE_CODE (arg1) == INTEGER_CST
&& ! TREE_CONSTANT_OVERFLOW (arg1)) && !TREE_OVERFLOW (arg1))
{ {
HOST_WIDE_INT n = TREE_INT_CST_LOW (arg1); HOST_WIDE_INT n = TREE_INT_CST_LOW (arg1);
...@@ -7013,8 +7014,8 @@ fold_builtin_cabs (tree arglist, tree type, tree fndecl) ...@@ -7013,8 +7014,8 @@ fold_builtin_cabs (tree arglist, tree type, tree fndecl)
&& TREE_CODE (arg) == COMPLEX_CST && TREE_CODE (arg) == COMPLEX_CST
&& TREE_CODE (TREE_REALPART (arg)) == REAL_CST && TREE_CODE (TREE_REALPART (arg)) == REAL_CST
&& TREE_CODE (TREE_IMAGPART (arg)) == REAL_CST && TREE_CODE (TREE_IMAGPART (arg)) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (TREE_REALPART (arg)) && !TREE_OVERFLOW (TREE_REALPART (arg))
&& ! TREE_CONSTANT_OVERFLOW (TREE_IMAGPART (arg))) && !TREE_OVERFLOW (TREE_IMAGPART (arg)))
{ {
REAL_VALUE_TYPE r, i; REAL_VALUE_TYPE r, i;
...@@ -7092,7 +7093,7 @@ fold_builtin_sqrt (tree arglist, tree type) ...@@ -7092,7 +7093,7 @@ fold_builtin_sqrt (tree arglist, tree type)
/* Optimize sqrt of constant value. */ /* Optimize sqrt of constant value. */
if (TREE_CODE (arg) == REAL_CST if (TREE_CODE (arg) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (arg)) && !TREE_OVERFLOW (arg))
{ {
REAL_VALUE_TYPE r, x; REAL_VALUE_TYPE r, x;
...@@ -7441,7 +7442,7 @@ fold_builtin_trunc (tree fndecl, tree arglist) ...@@ -7441,7 +7442,7 @@ fold_builtin_trunc (tree fndecl, tree arglist)
/* Optimize trunc of constant value. */ /* Optimize trunc of constant value. */
arg = TREE_VALUE (arglist); arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg)) if (TREE_CODE (arg) == REAL_CST && !TREE_OVERFLOW (arg))
{ {
REAL_VALUE_TYPE r, x; REAL_VALUE_TYPE r, x;
tree type = TREE_TYPE (TREE_TYPE (fndecl)); tree type = TREE_TYPE (TREE_TYPE (fndecl));
...@@ -7467,7 +7468,7 @@ fold_builtin_floor (tree fndecl, tree arglist) ...@@ -7467,7 +7468,7 @@ fold_builtin_floor (tree fndecl, tree arglist)
/* Optimize floor of constant value. */ /* Optimize floor of constant value. */
arg = TREE_VALUE (arglist); arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg)) if (TREE_CODE (arg) == REAL_CST && !TREE_OVERFLOW (arg))
{ {
REAL_VALUE_TYPE x; REAL_VALUE_TYPE x;
...@@ -7506,7 +7507,7 @@ fold_builtin_ceil (tree fndecl, tree arglist) ...@@ -7506,7 +7507,7 @@ fold_builtin_ceil (tree fndecl, tree arglist)
/* Optimize ceil of constant value. */ /* Optimize ceil of constant value. */
arg = TREE_VALUE (arglist); arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg)) if (TREE_CODE (arg) == REAL_CST && !TREE_OVERFLOW (arg))
{ {
REAL_VALUE_TYPE x; REAL_VALUE_TYPE x;
...@@ -7537,7 +7538,7 @@ fold_builtin_round (tree fndecl, tree arglist) ...@@ -7537,7 +7538,7 @@ fold_builtin_round (tree fndecl, tree arglist)
/* Optimize round of constant value. */ /* Optimize round of constant value. */
arg = TREE_VALUE (arglist); arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg)) if (TREE_CODE (arg) == REAL_CST && !TREE_OVERFLOW (arg))
{ {
REAL_VALUE_TYPE x; REAL_VALUE_TYPE x;
...@@ -7569,7 +7570,7 @@ fold_builtin_int_roundingfn (tree fndecl, tree arglist) ...@@ -7569,7 +7570,7 @@ fold_builtin_int_roundingfn (tree fndecl, tree arglist)
/* Optimize lround of constant value. */ /* Optimize lround of constant value. */
arg = TREE_VALUE (arglist); arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg)) if (TREE_CODE (arg) == REAL_CST && !TREE_OVERFLOW (arg))
{ {
const REAL_VALUE_TYPE x = TREE_REAL_CST (arg); const REAL_VALUE_TYPE x = TREE_REAL_CST (arg);
...@@ -7637,7 +7638,7 @@ fold_builtin_bitop (tree fndecl, tree arglist) ...@@ -7637,7 +7638,7 @@ fold_builtin_bitop (tree fndecl, tree arglist)
/* Optimize for constant argument. */ /* Optimize for constant argument. */
arg = TREE_VALUE (arglist); arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == INTEGER_CST && ! TREE_CONSTANT_OVERFLOW (arg)) if (TREE_CODE (arg) == INTEGER_CST && !TREE_OVERFLOW (arg))
{ {
HOST_WIDE_INT hi, width, result; HOST_WIDE_INT hi, width, result;
unsigned HOST_WIDE_INT lo; unsigned HOST_WIDE_INT lo;
...@@ -7729,7 +7730,7 @@ fold_builtin_bswap (tree fndecl, tree arglist) ...@@ -7729,7 +7730,7 @@ fold_builtin_bswap (tree fndecl, tree arglist)
/* Optimize constant value. */ /* Optimize constant value. */
arg = TREE_VALUE (arglist); arg = TREE_VALUE (arglist);
if (TREE_CODE (arg) == INTEGER_CST && ! TREE_CONSTANT_OVERFLOW (arg)) if (TREE_CODE (arg) == INTEGER_CST && !TREE_OVERFLOW (arg))
{ {
HOST_WIDE_INT hi, width, r_hi = 0; HOST_WIDE_INT hi, width, r_hi = 0;
unsigned HOST_WIDE_INT lo, r_lo = 0; unsigned HOST_WIDE_INT lo, r_lo = 0;
...@@ -7786,7 +7787,7 @@ real_dconstp (tree expr, const REAL_VALUE_TYPE *value) ...@@ -7786,7 +7787,7 @@ real_dconstp (tree expr, const REAL_VALUE_TYPE *value)
STRIP_NOPS (expr); STRIP_NOPS (expr);
return ((TREE_CODE (expr) == REAL_CST return ((TREE_CODE (expr) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (expr) && !TREE_OVERFLOW (expr)
&& REAL_VALUES_EQUAL (TREE_REAL_CST (expr), *value)) && REAL_VALUES_EQUAL (TREE_REAL_CST (expr), *value))
|| (TREE_CODE (expr) == COMPLEX_CST || (TREE_CODE (expr) == COMPLEX_CST
&& real_dconstp (TREE_REALPART (expr), value) && real_dconstp (TREE_REALPART (expr), value)
...@@ -7968,7 +7969,7 @@ fold_builtin_pow (tree fndecl, tree arglist, tree type) ...@@ -7968,7 +7969,7 @@ fold_builtin_pow (tree fndecl, tree arglist, tree type)
return omit_one_operand (type, build_real (type, dconst1), arg1); return omit_one_operand (type, build_real (type, dconst1), arg1);
if (TREE_CODE (arg1) == REAL_CST if (TREE_CODE (arg1) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (arg1)) && !TREE_OVERFLOW (arg1))
{ {
REAL_VALUE_TYPE cint; REAL_VALUE_TYPE cint;
REAL_VALUE_TYPE c; REAL_VALUE_TYPE c;
...@@ -8027,7 +8028,7 @@ fold_builtin_pow (tree fndecl, tree arglist, tree type) ...@@ -8027,7 +8028,7 @@ fold_builtin_pow (tree fndecl, tree arglist, tree type)
{ {
/* Attempt to evaluate pow at compile-time. */ /* Attempt to evaluate pow at compile-time. */
if (TREE_CODE (arg0) == REAL_CST if (TREE_CODE (arg0) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (arg0)) && !TREE_OVERFLOW (arg0))
{ {
REAL_VALUE_TYPE x; REAL_VALUE_TYPE x;
bool inexact; bool inexact;
...@@ -8131,7 +8132,7 @@ fold_builtin_powi (tree fndecl ATTRIBUTE_UNUSED, tree arglist, tree type) ...@@ -8131,7 +8132,7 @@ fold_builtin_powi (tree fndecl ATTRIBUTE_UNUSED, tree arglist, tree type)
/* Evaluate powi at compile-time. */ /* Evaluate powi at compile-time. */
if (TREE_CODE (arg0) == REAL_CST if (TREE_CODE (arg0) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (arg0)) && !TREE_OVERFLOW (arg0))
{ {
REAL_VALUE_TYPE x; REAL_VALUE_TYPE x;
x = TREE_REAL_CST (arg0); x = TREE_REAL_CST (arg0);
...@@ -8819,7 +8820,7 @@ fold_builtin_signbit (tree fndecl, tree arglist) ...@@ -8819,7 +8820,7 @@ fold_builtin_signbit (tree fndecl, tree arglist)
/* If ARG is a compile-time constant, determine the result. */ /* If ARG is a compile-time constant, determine the result. */
if (TREE_CODE (arg) == REAL_CST if (TREE_CODE (arg) == REAL_CST
&& !TREE_CONSTANT_OVERFLOW (arg)) && !TREE_OVERFLOW (arg))
{ {
REAL_VALUE_TYPE c; REAL_VALUE_TYPE c;
...@@ -8861,8 +8862,8 @@ fold_builtin_copysign (tree fndecl, tree arglist, tree type) ...@@ -8861,8 +8862,8 @@ fold_builtin_copysign (tree fndecl, tree arglist, tree type)
/* If ARG1 and ARG2 are compile-time constants, determine the result. */ /* If ARG1 and ARG2 are compile-time constants, determine the result. */
if (TREE_CODE (arg1) == REAL_CST if (TREE_CODE (arg1) == REAL_CST
&& TREE_CODE (arg2) == REAL_CST && TREE_CODE (arg2) == REAL_CST
&& !TREE_CONSTANT_OVERFLOW (arg1) && !TREE_OVERFLOW (arg1)
&& !TREE_CONSTANT_OVERFLOW (arg2)) && !TREE_OVERFLOW (arg2))
{ {
REAL_VALUE_TYPE c1, c2; REAL_VALUE_TYPE c1, c2;
...@@ -11739,7 +11740,7 @@ do_mpfr_arg1 (tree arg, tree type, int (*func)(mpfr_ptr, mpfr_srcptr, mp_rnd_t), ...@@ -11739,7 +11740,7 @@ do_mpfr_arg1 (tree arg, tree type, int (*func)(mpfr_ptr, mpfr_srcptr, mp_rnd_t),
/* To proceed, MPFR must exactly represent the target floating point /* To proceed, MPFR must exactly represent the target floating point
format, which only happens when the target base equals two. */ format, which only happens when the target base equals two. */
if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2 if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2
&& TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg)) && TREE_CODE (arg) == REAL_CST && !TREE_OVERFLOW (arg))
{ {
const REAL_VALUE_TYPE *const ra = &TREE_REAL_CST (arg); const REAL_VALUE_TYPE *const ra = &TREE_REAL_CST (arg);
...@@ -11781,8 +11782,8 @@ do_mpfr_arg2 (tree arg1, tree arg2, tree type, ...@@ -11781,8 +11782,8 @@ do_mpfr_arg2 (tree arg1, tree arg2, tree type,
/* To proceed, MPFR must exactly represent the target floating point /* To proceed, MPFR must exactly represent the target floating point
format, which only happens when the target base equals two. */ format, which only happens when the target base equals two. */
if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2 if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2
&& TREE_CODE (arg1) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg1) && TREE_CODE (arg1) == REAL_CST && !TREE_OVERFLOW (arg1)
&& TREE_CODE (arg2) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg2)) && TREE_CODE (arg2) == REAL_CST && !TREE_OVERFLOW (arg2))
{ {
const REAL_VALUE_TYPE *const ra1 = &TREE_REAL_CST (arg1); const REAL_VALUE_TYPE *const ra1 = &TREE_REAL_CST (arg1);
const REAL_VALUE_TYPE *const ra2 = &TREE_REAL_CST (arg2); const REAL_VALUE_TYPE *const ra2 = &TREE_REAL_CST (arg2);
...@@ -11826,9 +11827,9 @@ do_mpfr_arg3 (tree arg1, tree arg2, tree arg3, tree type, ...@@ -11826,9 +11827,9 @@ do_mpfr_arg3 (tree arg1, tree arg2, tree arg3, tree type,
/* To proceed, MPFR must exactly represent the target floating point /* To proceed, MPFR must exactly represent the target floating point
format, which only happens when the target base equals two. */ format, which only happens when the target base equals two. */
if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2 if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2
&& TREE_CODE (arg1) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg1) && TREE_CODE (arg1) == REAL_CST && !TREE_OVERFLOW (arg1)
&& TREE_CODE (arg2) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg2) && TREE_CODE (arg2) == REAL_CST && !TREE_OVERFLOW (arg2)
&& TREE_CODE (arg3) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg3)) && TREE_CODE (arg3) == REAL_CST && !TREE_OVERFLOW (arg3))
{ {
const REAL_VALUE_TYPE *const ra1 = &TREE_REAL_CST (arg1); const REAL_VALUE_TYPE *const ra1 = &TREE_REAL_CST (arg1);
const REAL_VALUE_TYPE *const ra2 = &TREE_REAL_CST (arg2); const REAL_VALUE_TYPE *const ra2 = &TREE_REAL_CST (arg2);
...@@ -11874,7 +11875,8 @@ do_mpfr_sincos (tree arg, tree arg_sinp, tree arg_cosp) ...@@ -11874,7 +11875,8 @@ do_mpfr_sincos (tree arg, tree arg_sinp, tree arg_cosp)
/* To proceed, MPFR must exactly represent the target floating point /* To proceed, MPFR must exactly represent the target floating point
format, which only happens when the target base equals two. */ format, which only happens when the target base equals two. */
if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2 if (REAL_MODE_FORMAT (TYPE_MODE (type))->b == 2
&& TREE_CODE (arg) == REAL_CST && ! TREE_CONSTANT_OVERFLOW (arg)) && TREE_CODE (arg) == REAL_CST
&& !TREE_OVERFLOW (arg))
{ {
const REAL_VALUE_TYPE *const ra = &TREE_REAL_CST (arg); const REAL_VALUE_TYPE *const ra = &TREE_REAL_CST (arg);
......
/* Utility routines for data type conversion for GCC. /* Utility routines for data type conversion for GCC.
Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1997, 1998, Copyright (C) 1987, 1988, 1991, 1992, 1993, 1994, 1995, 1997, 1998,
2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -47,7 +48,7 @@ convert_to_pointer (tree type, tree expr) ...@@ -47,7 +48,7 @@ convert_to_pointer (tree type, tree expr)
/* Propagate overflow to the NULL pointer. */ /* Propagate overflow to the NULL pointer. */
if (integer_zerop (expr)) if (integer_zerop (expr))
return force_fit_type_double (type, 0, 0, 0, TREE_OVERFLOW (expr), return force_fit_type_double (type, 0, 0, 0, TREE_OVERFLOW (expr),
TREE_CONSTANT_OVERFLOW (expr)); false);
switch (TREE_CODE (TREE_TYPE (expr))) switch (TREE_CODE (TREE_TYPE (expr)))
{ {
......
/* Convert tree expression to rtl instructions, for GNU compiler. /* Convert tree expression to rtl instructions, for GNU compiler.
Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Inc. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -6301,7 +6301,7 @@ highest_pow2_factor (tree exp) ...@@ -6301,7 +6301,7 @@ highest_pow2_factor (tree exp)
a MIN_EXPR, or a MAX_EXPR. If the constant overflows, we have an a MIN_EXPR, or a MAX_EXPR. If the constant overflows, we have an
erroneous program, so return BIGGEST_ALIGNMENT to avoid any erroneous program, so return BIGGEST_ALIGNMENT to avoid any
later ICE. */ later ICE. */
if (TREE_CONSTANT_OVERFLOW (exp)) if (TREE_OVERFLOW (exp))
return BIGGEST_ALIGNMENT; return BIGGEST_ALIGNMENT;
else else
{ {
...@@ -6969,7 +6969,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, ...@@ -6969,7 +6969,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
simplified by validate_replace_rtx during virtual register simplified by validate_replace_rtx during virtual register
instantiation, which can result in unrecognizable insns. instantiation, which can result in unrecognizable insns.
Avoid this by forcing all overflows into registers. */ Avoid this by forcing all overflows into registers. */
if (TREE_CONSTANT_OVERFLOW (exp) if (TREE_OVERFLOW (exp)
&& modifier != EXPAND_INITIALIZER) && modifier != EXPAND_INITIALIZER)
temp = force_reg (mode, temp); temp = force_reg (mode, temp);
......
...@@ -41,7 +41,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA ...@@ -41,7 +41,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
force_fit_type takes a constant, an overflowable flag and prior force_fit_type takes a constant, an overflowable flag and prior
overflow indicators. It forces the value to fit the type and sets overflow indicators. It forces the value to fit the type and sets
TREE_OVERFLOW and TREE_CONSTANT_OVERFLOW as appropriate. TREE_OVERFLOW as appropriate.
Note: Since the folders get called on non-gimple code as well as Note: Since the folders get called on non-gimple code as well as
gimple code, we need to handle GIMPLE tuples as well as their gimple code, we need to handle GIMPLE tuples as well as their
...@@ -275,9 +275,6 @@ fit_double_type (unsigned HOST_WIDE_INT l1, HOST_WIDE_INT h1, ...@@ -275,9 +275,6 @@ fit_double_type (unsigned HOST_WIDE_INT l1, HOST_WIDE_INT h1,
OVERFLOWED is nonzero, OVERFLOWED is nonzero,
or OVERFLOWABLE is >0 and signed overflow occurs or OVERFLOWABLE is >0 and signed overflow occurs
or OVERFLOWABLE is <0 and any overflow occurs or OVERFLOWABLE is <0 and any overflow occurs
We set TREE_CONSTANT_OVERFLOWED if,
CONST_OVERFLOWED is nonzero
or we set TREE_OVERFLOWED.
We return a new tree node for the extended double-int. The node We return a new tree node for the extended double-int. The node
is shared if no overflow flags are set. */ is shared if no overflow flags are set. */
...@@ -308,18 +305,6 @@ force_fit_type_double (tree type, unsigned HOST_WIDE_INT low, ...@@ -308,18 +305,6 @@ force_fit_type_double (tree type, unsigned HOST_WIDE_INT low,
TREE_INT_CST_HIGH (t) = high; TREE_INT_CST_HIGH (t) = high;
TREE_TYPE (t) = type; TREE_TYPE (t) = type;
TREE_OVERFLOW (t) = 1; TREE_OVERFLOW (t) = 1;
TREE_CONSTANT_OVERFLOW (t) = 1;
return t;
}
else if (overflowed_const)
{
tree t = make_node (INTEGER_CST);
TREE_INT_CST_LOW (t) = low;
TREE_INT_CST_HIGH (t) = high;
TREE_TYPE (t) = type;
TREE_CONSTANT_OVERFLOW (t) = 1;
return t; return t;
} }
} }
...@@ -1115,16 +1100,16 @@ fold_negate_expr (tree t) ...@@ -1115,16 +1100,16 @@ fold_negate_expr (tree t)
case INTEGER_CST: case INTEGER_CST:
tem = fold_negate_const (t, type); tem = fold_negate_const (t, type);
if (! TREE_OVERFLOW (tem) if (!TREE_OVERFLOW (tem)
|| TYPE_UNSIGNED (type) || TYPE_UNSIGNED (type)
|| ! flag_trapv) || !flag_trapv)
return tem; return tem;
break; break;
case REAL_CST: case REAL_CST:
tem = fold_negate_const (t, type); tem = fold_negate_const (t, type);
/* Two's complement FP formats, such as c4x, may overflow. */ /* Two's complement FP formats, such as c4x, may overflow. */
if (! TREE_OVERFLOW (tem) || ! flag_trapping_math) if (!TREE_OVERFLOW (tem) || !flag_trapping_math)
return tem; return tem;
break; break;
...@@ -1530,8 +1515,8 @@ int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc) ...@@ -1530,8 +1515,8 @@ int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
case EXACT_DIV_EXPR: case EXACT_DIV_EXPR:
/* This is a shortcut for a common special case. */ /* This is a shortcut for a common special case. */
if (int2h == 0 && (HOST_WIDE_INT) int2l > 0 if (int2h == 0 && (HOST_WIDE_INT) int2l > 0
&& ! TREE_CONSTANT_OVERFLOW (arg1) && !TREE_OVERFLOW (arg1)
&& ! TREE_CONSTANT_OVERFLOW (arg2) && !TREE_OVERFLOW (arg2)
&& int1h == 0 && (HOST_WIDE_INT) int1l >= 0) && int1h == 0 && (HOST_WIDE_INT) int1l >= 0)
{ {
if (code == CEIL_DIV_EXPR) if (code == CEIL_DIV_EXPR)
...@@ -1565,8 +1550,8 @@ int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc) ...@@ -1565,8 +1550,8 @@ int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
case FLOOR_MOD_EXPR: case CEIL_MOD_EXPR: case FLOOR_MOD_EXPR: case CEIL_MOD_EXPR:
/* This is a shortcut for a common special case. */ /* This is a shortcut for a common special case. */
if (int2h == 0 && (HOST_WIDE_INT) int2l > 0 if (int2h == 0 && (HOST_WIDE_INT) int2l > 0
&& ! TREE_CONSTANT_OVERFLOW (arg1) && !TREE_OVERFLOW (arg1)
&& ! TREE_CONSTANT_OVERFLOW (arg2) && !TREE_OVERFLOW (arg2)
&& int1h == 0 && (HOST_WIDE_INT) int1l >= 0) && int1h == 0 && (HOST_WIDE_INT) int1l >= 0)
{ {
if (code == CEIL_MOD_EXPR) if (code == CEIL_MOD_EXPR)
...@@ -1617,20 +1602,13 @@ int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc) ...@@ -1617,20 +1602,13 @@ int_const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
{ {
t = copy_node (t); t = copy_node (t);
TREE_OVERFLOW (t) = 1; TREE_OVERFLOW (t) = 1;
TREE_CONSTANT_OVERFLOW (t) = 1;
}
else if (TREE_CONSTANT_OVERFLOW (arg1) | TREE_CONSTANT_OVERFLOW (arg2))
{
t = copy_node (t);
TREE_CONSTANT_OVERFLOW (t) = 1;
} }
} }
else else
t = force_fit_type_double (TREE_TYPE (arg1), low, hi, 1, t = force_fit_type_double (TREE_TYPE (arg1), low, hi, 1,
((!uns || is_sizetype) && overflow) ((!uns || is_sizetype) && overflow)
| TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2), | TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2),
TREE_CONSTANT_OVERFLOW (arg1) false);
| TREE_CONSTANT_OVERFLOW (arg2));
return t; return t;
} }
...@@ -1731,10 +1709,6 @@ const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc) ...@@ -1731,10 +1709,6 @@ const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
t = build_real (type, result); t = build_real (type, result);
TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2); TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1) | TREE_OVERFLOW (arg2);
TREE_CONSTANT_OVERFLOW (t)
= TREE_OVERFLOW (t)
| TREE_CONSTANT_OVERFLOW (arg1)
| TREE_CONSTANT_OVERFLOW (arg2);
return t; return t;
} }
...@@ -1911,7 +1885,7 @@ fold_convert_const_int_from_int (tree type, tree arg1) ...@@ -1911,7 +1885,7 @@ fold_convert_const_int_from_int (tree type, tree arg1)
&& (TYPE_UNSIGNED (type) && (TYPE_UNSIGNED (type)
< TYPE_UNSIGNED (TREE_TYPE (arg1)))) < TYPE_UNSIGNED (TREE_TYPE (arg1))))
| TREE_OVERFLOW (arg1), | TREE_OVERFLOW (arg1),
TREE_CONSTANT_OVERFLOW (arg1)); false);
return t; return t;
} }
...@@ -1991,7 +1965,7 @@ fold_convert_const_int_from_real (enum tree_code code, tree type, tree arg1) ...@@ -1991,7 +1965,7 @@ fold_convert_const_int_from_real (enum tree_code code, tree type, tree arg1)
t = force_fit_type_double (type, low, high, -1, t = force_fit_type_double (type, low, high, -1,
overflow | TREE_OVERFLOW (arg1), overflow | TREE_OVERFLOW (arg1),
TREE_CONSTANT_OVERFLOW (arg1)); false);
return t; return t;
} }
...@@ -2008,8 +1982,6 @@ fold_convert_const_real_from_real (tree type, tree arg1) ...@@ -2008,8 +1982,6 @@ fold_convert_const_real_from_real (tree type, tree arg1)
t = build_real (type, value); t = build_real (type, value);
TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1); TREE_OVERFLOW (t) = TREE_OVERFLOW (arg1);
TREE_CONSTANT_OVERFLOW (t)
= TREE_OVERFLOW (t) | TREE_CONSTANT_OVERFLOW (arg1);
return t; return t;
} }
...@@ -3696,7 +3668,7 @@ sign_bit_p (tree exp, tree val) ...@@ -3696,7 +3668,7 @@ sign_bit_p (tree exp, tree val)
/* Tree VAL must be an integer constant. */ /* Tree VAL must be an integer constant. */
if (TREE_CODE (val) != INTEGER_CST if (TREE_CODE (val) != INTEGER_CST
|| TREE_CONSTANT_OVERFLOW (val)) || TREE_OVERFLOW (val))
return NULL_TREE; return NULL_TREE;
width = TYPE_PRECISION (t); width = TYPE_PRECISION (t);
...@@ -5347,9 +5319,9 @@ optimize_minmax_comparison (enum tree_code code, tree type, tree op0, tree op1) ...@@ -5347,9 +5319,9 @@ optimize_minmax_comparison (enum tree_code code, tree type, tree op0, tree op1)
/* If something does not permit us to optimize, return the original tree. */ /* If something does not permit us to optimize, return the original tree. */
if ((op_code != MIN_EXPR && op_code != MAX_EXPR) if ((op_code != MIN_EXPR && op_code != MAX_EXPR)
|| TREE_CODE (comp_const) != INTEGER_CST || TREE_CODE (comp_const) != INTEGER_CST
|| TREE_CONSTANT_OVERFLOW (comp_const) || TREE_OVERFLOW (comp_const)
|| TREE_CODE (minmax_const) != INTEGER_CST || TREE_CODE (minmax_const) != INTEGER_CST
|| TREE_CONSTANT_OVERFLOW (minmax_const)) || TREE_OVERFLOW (minmax_const))
return NULL_TREE; return NULL_TREE;
/* Now handle all the various comparison codes. We only handle EQ_EXPR /* Now handle all the various comparison codes. We only handle EQ_EXPR
...@@ -5526,7 +5498,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type) ...@@ -5526,7 +5498,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type)
possible later conversion to our or some other type. */ possible later conversion to our or some other type. */
if ((t2 = fold_convert (TREE_TYPE (op0), c)) != 0 if ((t2 = fold_convert (TREE_TYPE (op0), c)) != 0
&& TREE_CODE (t2) == INTEGER_CST && TREE_CODE (t2) == INTEGER_CST
&& ! TREE_CONSTANT_OVERFLOW (t2) && !TREE_OVERFLOW (t2)
&& (0 != (t1 = extract_muldiv (op0, t2, code, && (0 != (t1 = extract_muldiv (op0, t2, code,
code == MULT_EXPR code == MULT_EXPR
? ctype : NULL_TREE)))) ? ctype : NULL_TREE))))
...@@ -5587,7 +5559,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type) ...@@ -5587,7 +5559,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type)
const_binop (LSHIFT_EXPR, const_binop (LSHIFT_EXPR,
size_one_node, size_one_node,
op1, 0))) op1, 0)))
&& ! TREE_OVERFLOW (t1)) && !TREE_OVERFLOW (t1))
return extract_muldiv (build2 (tcode == LSHIFT_EXPR return extract_muldiv (build2 (tcode == LSHIFT_EXPR
? MULT_EXPR : FLOOR_DIV_EXPR, ? MULT_EXPR : FLOOR_DIV_EXPR,
ctype, fold_convert (ctype, op0), t1), ctype, fold_convert (ctype, op0), t1),
...@@ -5704,7 +5676,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type) ...@@ -5704,7 +5676,7 @@ extract_muldiv_1 (tree t, tree c, enum tree_code code, tree wide_type)
if (tcode == code if (tcode == code
&& 0 != (t1 = const_binop (MULT_EXPR, fold_convert (ctype, op1), && 0 != (t1 = const_binop (MULT_EXPR, fold_convert (ctype, op1),
fold_convert (ctype, c), 0)) fold_convert (ctype, c), 0))
&& ! TREE_OVERFLOW (t1)) && !TREE_OVERFLOW (t1))
return fold_build2 (tcode, ctype, fold_convert (ctype, op0), t1); return fold_build2 (tcode, ctype, fold_convert (ctype, op0), t1);
/* If these operations "cancel" each other, we have the main /* If these operations "cancel" each other, we have the main
...@@ -6188,7 +6160,7 @@ fold_div_compare (enum tree_code code, tree type, tree arg0, tree arg1) ...@@ -6188,7 +6160,7 @@ fold_div_compare (enum tree_code code, tree type, tree arg0, tree arg1)
&lpart, &hpart, unsigned_p); &lpart, &hpart, unsigned_p);
hi = force_fit_type_double (TREE_TYPE (arg00), lpart, hpart, hi = force_fit_type_double (TREE_TYPE (arg00), lpart, hpart,
-1, overflow | TREE_OVERFLOW (prod), -1, overflow | TREE_OVERFLOW (prod),
TREE_CONSTANT_OVERFLOW (prod)); false);
} }
else if (tree_int_cst_sgn (arg01) >= 0) else if (tree_int_cst_sgn (arg01) >= 0)
{ {
...@@ -6625,7 +6597,7 @@ fold_sign_changed_comparison (enum tree_code code, tree type, ...@@ -6625,7 +6597,7 @@ fold_sign_changed_comparison (enum tree_code code, tree type,
arg1 = force_fit_type_double (inner_type, TREE_INT_CST_LOW (arg1), arg1 = force_fit_type_double (inner_type, TREE_INT_CST_LOW (arg1),
TREE_INT_CST_HIGH (arg1), 0, TREE_INT_CST_HIGH (arg1), 0,
TREE_OVERFLOW (arg1), TREE_OVERFLOW (arg1),
TREE_CONSTANT_OVERFLOW (arg1)); false);
else else
arg1 = fold_convert (inner_type, arg1); arg1 = fold_convert (inner_type, arg1);
...@@ -7560,7 +7532,7 @@ fold_unary (enum tree_code code, tree type, tree op0) ...@@ -7560,7 +7532,7 @@ fold_unary (enum tree_code code, tree type, tree op0)
tem = force_fit_type_double (type, TREE_INT_CST_LOW (and1), tem = force_fit_type_double (type, TREE_INT_CST_LOW (and1),
TREE_INT_CST_HIGH (and1), 0, TREE_INT_CST_HIGH (and1), 0,
TREE_OVERFLOW (and1), TREE_OVERFLOW (and1),
TREE_CONSTANT_OVERFLOW (and1)); false);
return fold_build2 (BIT_AND_EXPR, type, return fold_build2 (BIT_AND_EXPR, type,
fold_convert (type, and0), tem); fold_convert (type, and0), tem);
} }
...@@ -8285,7 +8257,7 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1) ...@@ -8285,7 +8257,7 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
&& 0 != (tem = const_binop (TREE_CODE (arg0) == PLUS_EXPR && 0 != (tem = const_binop (TREE_CODE (arg0) == PLUS_EXPR
? MINUS_EXPR : PLUS_EXPR, ? MINUS_EXPR : PLUS_EXPR,
arg1, TREE_OPERAND (arg0, 1), 0)) arg1, TREE_OPERAND (arg0, 1), 0))
&& ! TREE_CONSTANT_OVERFLOW (tem)) && !TREE_OVERFLOW (tem))
return fold_build2 (code, type, TREE_OPERAND (arg0, 0), tem); return fold_build2 (code, type, TREE_OPERAND (arg0, 0), tem);
/* Likewise, we can simplify a comparison of a real constant with /* Likewise, we can simplify a comparison of a real constant with
...@@ -8297,7 +8269,7 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1) ...@@ -8297,7 +8269,7 @@ fold_comparison (enum tree_code code, tree type, tree op0, tree op1)
&& TREE_CODE (TREE_OPERAND (arg0, 0)) == REAL_CST && TREE_CODE (TREE_OPERAND (arg0, 0)) == REAL_CST
&& 0 != (tem = const_binop (MINUS_EXPR, TREE_OPERAND (arg0, 0), && 0 != (tem = const_binop (MINUS_EXPR, TREE_OPERAND (arg0, 0),
arg1, 0)) arg1, 0))
&& ! TREE_CONSTANT_OVERFLOW (tem)) && !TREE_OVERFLOW (tem))
return fold_build2 (swap_tree_comparison (code), type, return fold_build2 (swap_tree_comparison (code), type,
TREE_OPERAND (arg0, 1), tem); TREE_OPERAND (arg0, 1), tem);
...@@ -9541,7 +9513,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -9541,7 +9513,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
tree arg11 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg1, tree arg11 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg1,
1))); 1)));
if (TREE_CODE (arg11) == REAL_CST if (TREE_CODE (arg11) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (arg11) && !TREE_OVERFLOW (arg11)
&& operand_equal_p (arg0, arg10, 0)) && operand_equal_p (arg0, arg10, 0))
{ {
tree powfn = TREE_OPERAND (TREE_OPERAND (arg1, 0), 0); tree powfn = TREE_OPERAND (TREE_OPERAND (arg1, 0), 0);
...@@ -9566,7 +9538,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -9566,7 +9538,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
tree arg01 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg0, tree arg01 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg0,
1))); 1)));
if (TREE_CODE (arg01) == REAL_CST if (TREE_CODE (arg01) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (arg01) && !TREE_OVERFLOW (arg01)
&& operand_equal_p (arg1, arg00, 0)) && operand_equal_p (arg1, arg00, 0))
{ {
tree powfn = TREE_OPERAND (TREE_OPERAND (arg0, 0), 0); tree powfn = TREE_OPERAND (TREE_OPERAND (arg0, 0), 0);
...@@ -10208,7 +10180,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -10208,7 +10180,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
tree arg00 = TREE_VALUE (TREE_OPERAND (arg0, 1)); tree arg00 = TREE_VALUE (TREE_OPERAND (arg0, 1));
tree arg01 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg0, 1))); tree arg01 = TREE_VALUE (TREE_CHAIN (TREE_OPERAND (arg0, 1)));
if (TREE_CODE (arg01) == REAL_CST if (TREE_CODE (arg01) == REAL_CST
&& ! TREE_CONSTANT_OVERFLOW (arg01) && !TREE_OVERFLOW (arg01)
&& operand_equal_p (arg1, arg00, 0)) && operand_equal_p (arg1, arg00, 0))
{ {
tree powfn = TREE_OPERAND (TREE_OPERAND (arg0, 0), 0); tree powfn = TREE_OPERAND (TREE_OPERAND (arg0, 0), 0);
...@@ -10367,7 +10339,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -10367,7 +10339,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
if (code == TRUNC_MOD_EXPR if (code == TRUNC_MOD_EXPR
&& !TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (type)
&& TREE_CODE (arg1) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST
&& !TREE_CONSTANT_OVERFLOW (arg1) && !TREE_OVERFLOW (arg1)
&& TREE_INT_CST_HIGH (arg1) < 0 && TREE_INT_CST_HIGH (arg1) < 0
&& !flag_trapv && !flag_trapv
/* Avoid this transformation if C is INT_MIN, i.e. C == -C. */ /* Avoid this transformation if C is INT_MIN, i.e. C == -C. */
...@@ -10781,7 +10753,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -10781,7 +10753,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
? MINUS_EXPR : PLUS_EXPR, ? MINUS_EXPR : PLUS_EXPR,
fold_convert (TREE_TYPE (arg0), arg1), fold_convert (TREE_TYPE (arg0), arg1),
TREE_OPERAND (arg0, 1), 0)) TREE_OPERAND (arg0, 1), 0))
&& ! TREE_CONSTANT_OVERFLOW (tem)) && !TREE_OVERFLOW (tem))
return fold_build2 (code, type, TREE_OPERAND (arg0, 0), tem); return fold_build2 (code, type, TREE_OPERAND (arg0, 0), tem);
/* Similarly for a NEGATE_EXPR. */ /* Similarly for a NEGATE_EXPR. */
...@@ -10789,7 +10761,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -10789,7 +10761,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
&& TREE_CODE (arg1) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST
&& 0 != (tem = negate_expr (arg1)) && 0 != (tem = negate_expr (arg1))
&& TREE_CODE (tem) == INTEGER_CST && TREE_CODE (tem) == INTEGER_CST
&& ! TREE_CONSTANT_OVERFLOW (tem)) && !TREE_OVERFLOW (tem))
return fold_build2 (code, type, TREE_OPERAND (arg0, 0), tem); return fold_build2 (code, type, TREE_OPERAND (arg0, 0), tem);
/* Similarly for a BIT_XOR_EXPR; X ^ C1 == C2 is X == (C1 ^ C2). */ /* Similarly for a BIT_XOR_EXPR; X ^ C1 == C2 is X == (C1 ^ C2). */
...@@ -11293,7 +11265,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -11293,7 +11265,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
unsigned int width = TYPE_PRECISION (arg1_type); unsigned int width = TYPE_PRECISION (arg1_type);
if (TREE_CODE (arg1) == INTEGER_CST if (TREE_CODE (arg1) == INTEGER_CST
&& ! TREE_CONSTANT_OVERFLOW (arg1) && !TREE_OVERFLOW (arg1)
&& width <= 2 * HOST_BITS_PER_WIDE_INT && width <= 2 * HOST_BITS_PER_WIDE_INT
&& (INTEGRAL_TYPE_P (arg1_type) || POINTER_TYPE_P (arg1_type))) && (INTEGRAL_TYPE_P (arg1_type) || POINTER_TYPE_P (arg1_type)))
{ {
...@@ -11452,7 +11424,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1) ...@@ -11452,7 +11424,7 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
&& ! TREE_SIDE_EFFECTS (arg0) && ! TREE_SIDE_EFFECTS (arg0)
&& (0 != (tem = negate_expr (arg1))) && (0 != (tem = negate_expr (arg1)))
&& TREE_CODE (tem) == INTEGER_CST && TREE_CODE (tem) == INTEGER_CST
&& ! TREE_CONSTANT_OVERFLOW (tem)) && !TREE_OVERFLOW (tem))
return fold_build2 (TRUTH_ANDIF_EXPR, type, return fold_build2 (TRUTH_ANDIF_EXPR, type,
build2 (GE_EXPR, type, build2 (GE_EXPR, type,
TREE_OPERAND (arg0, 0), tem), TREE_OPERAND (arg0, 0), tem),
...@@ -12516,7 +12488,7 @@ multiple_of_p (tree type, tree top, tree bottom) ...@@ -12516,7 +12488,7 @@ multiple_of_p (tree type, tree top, tree bottom)
const_binop (LSHIFT_EXPR, const_binop (LSHIFT_EXPR,
size_one_node, size_one_node,
op1, 0))) op1, 0)))
&& ! TREE_OVERFLOW (t1)) && !TREE_OVERFLOW (t1))
return multiple_of_p (type, t1, bottom); return multiple_of_p (type, t1, bottom);
} }
return 0; return 0;
...@@ -12872,10 +12844,7 @@ tree_expr_nonzero_p (tree t) ...@@ -12872,10 +12844,7 @@ tree_expr_nonzero_p (tree t)
return tree_expr_nonzero_p (TREE_OPERAND (t, 0)); return tree_expr_nonzero_p (TREE_OPERAND (t, 0));
case INTEGER_CST: case INTEGER_CST:
/* We used to test for !integer_zerop here. This does not work correctly return !integer_zerop (t);
if TREE_CONSTANT_OVERFLOW (t). */
return (TREE_INT_CST_LOW (t) != 0
|| TREE_INT_CST_HIGH (t) != 0);
case PLUS_EXPR: case PLUS_EXPR:
if (!TYPE_UNSIGNED (type) && !flag_wrapv) if (!TYPE_UNSIGNED (type) && !flag_wrapv)
...@@ -13077,7 +13046,7 @@ fold_negate_const (tree arg0, tree type) ...@@ -13077,7 +13046,7 @@ fold_negate_const (tree arg0, tree type)
t = force_fit_type_double (type, low, high, 1, t = force_fit_type_double (type, low, high, 1,
(overflow | TREE_OVERFLOW (arg0)) (overflow | TREE_OVERFLOW (arg0))
&& !TYPE_UNSIGNED (type), && !TYPE_UNSIGNED (type),
TREE_CONSTANT_OVERFLOW (arg0)); false);
break; break;
} }
...@@ -13123,7 +13092,7 @@ fold_abs_const (tree arg0, tree type) ...@@ -13123,7 +13092,7 @@ fold_abs_const (tree arg0, tree type)
&low, &high); &low, &high);
t = force_fit_type_double (type, low, high, -1, t = force_fit_type_double (type, low, high, -1,
overflow | TREE_OVERFLOW (arg0), overflow | TREE_OVERFLOW (arg0),
TREE_CONSTANT_OVERFLOW (arg0)); false);
} }
break; break;
...@@ -13154,7 +13123,7 @@ fold_not_const (tree arg0, tree type) ...@@ -13154,7 +13123,7 @@ fold_not_const (tree arg0, tree type)
t = force_fit_type_double (type, ~TREE_INT_CST_LOW (arg0), t = force_fit_type_double (type, ~TREE_INT_CST_LOW (arg0),
~TREE_INT_CST_HIGH (arg0), 0, ~TREE_INT_CST_HIGH (arg0), 0,
TREE_OVERFLOW (arg0), TREE_OVERFLOW (arg0),
TREE_CONSTANT_OVERFLOW (arg0)); false);
return t; return t;
} }
......
/* Prints out tree in human readable form - GCC /* Prints out tree in human readable form - GCC
Copyright (C) 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, Copyright (C) 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -115,7 +115,7 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent) ...@@ -115,7 +115,7 @@ print_node_brief (FILE *file, const char *prefix, tree node, int indent)
/* We might as well always print the value of an integer or real. */ /* We might as well always print the value of an integer or real. */
if (TREE_CODE (node) == INTEGER_CST) if (TREE_CODE (node) == INTEGER_CST)
{ {
if (TREE_CONSTANT_OVERFLOW (node)) if (TREE_OVERFLOW (node))
fprintf (file, " overflow"); fprintf (file, " overflow");
fprintf (file, " "); fprintf (file, " ");
...@@ -701,7 +701,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent) ...@@ -701,7 +701,7 @@ print_node (FILE *file, const char *prefix, tree node, int indent)
switch (TREE_CODE (node)) switch (TREE_CODE (node))
{ {
case INTEGER_CST: case INTEGER_CST:
if (TREE_CONSTANT_OVERFLOW (node)) if (TREE_OVERFLOW (node))
fprintf (file, " overflow"); fprintf (file, " overflow");
fprintf (file, " "); fprintf (file, " ");
......
/* C-compiler utilities for types and variables storage layout /* C-compiler utilities for types and variables storage layout
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998, Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1996, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -1195,7 +1195,7 @@ place_field (record_layout_info rli, tree field) ...@@ -1195,7 +1195,7 @@ place_field (record_layout_info rli, tree field)
if (DECL_SIZE (field) == 0) if (DECL_SIZE (field) == 0)
/* Do nothing. */; /* Do nothing. */;
else if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST else if (TREE_CODE (DECL_SIZE (field)) != INTEGER_CST
|| TREE_CONSTANT_OVERFLOW (DECL_SIZE (field))) || TREE_OVERFLOW (DECL_SIZE (field)))
{ {
rli->offset rli->offset
= size_binop (PLUS_EXPR, rli->offset, = size_binop (PLUS_EXPR, rli->offset,
...@@ -1821,7 +1821,7 @@ layout_type (tree type) ...@@ -1821,7 +1821,7 @@ layout_type (tree type)
&& TREE_CODE (TYPE_SIZE_UNIT (element)) == INTEGER_CST && TREE_CODE (TYPE_SIZE_UNIT (element)) == INTEGER_CST
/* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than /* If TYPE_SIZE_UNIT overflowed, then it is certainly larger than
TYPE_ALIGN_UNIT. */ TYPE_ALIGN_UNIT. */
&& !TREE_CONSTANT_OVERFLOW (TYPE_SIZE_UNIT (element)) && !TREE_OVERFLOW (TYPE_SIZE_UNIT (element))
&& !integer_zerop (TYPE_SIZE_UNIT (element)) && !integer_zerop (TYPE_SIZE_UNIT (element))
&& compare_tree_int (TYPE_SIZE_UNIT (element), && compare_tree_int (TYPE_SIZE_UNIT (element),
TYPE_ALIGN_UNIT (element)) < 0) TYPE_ALIGN_UNIT (element)) < 0)
......
/* Chains of recurrences. /* Chains of recurrences.
Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
Contributed by Sebastian Pop <pop@cri.ensmp.fr> Contributed by Sebastian Pop <pop@cri.ensmp.fr>
This file is part of GCC. This file is part of GCC.
...@@ -1293,10 +1293,7 @@ keep_cast: ...@@ -1293,10 +1293,7 @@ keep_cast:
/* Don't propagate overflows. */ /* Don't propagate overflows. */
if (CONSTANT_CLASS_P (res)) if (CONSTANT_CLASS_P (res))
{ TREE_OVERFLOW (res) = 0;
TREE_CONSTANT_OVERFLOW (res) = 0;
TREE_OVERFLOW (res) = 0;
}
/* But reject constants that don't fit in their type after conversion. /* But reject constants that don't fit in their type after conversion.
This can happen if TYPE_MIN_VALUE or TYPE_MAX_VALUE are not the This can happen if TYPE_MIN_VALUE or TYPE_MAX_VALUE are not the
......
/* Language-independent node constructors for parse phase of GNU compiler. /* Language-independent node constructors for parse phase of GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc. Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -997,7 +997,7 @@ tree ...@@ -997,7 +997,7 @@ tree
build_vector (tree type, tree vals) build_vector (tree type, tree vals)
{ {
tree v = make_node (VECTOR_CST); tree v = make_node (VECTOR_CST);
int over1 = 0, over2 = 0; int over = 0;
tree link; tree link;
TREE_VECTOR_CST_ELTS (v) = vals; TREE_VECTOR_CST_ELTS (v) = vals;
...@@ -1012,13 +1012,10 @@ build_vector (tree type, tree vals) ...@@ -1012,13 +1012,10 @@ build_vector (tree type, tree vals)
if (!CONSTANT_CLASS_P (value)) if (!CONSTANT_CLASS_P (value))
continue; continue;
over1 |= TREE_OVERFLOW (value); over |= TREE_OVERFLOW (value);
over2 |= TREE_CONSTANT_OVERFLOW (value);
} }
TREE_OVERFLOW (v) = over1; TREE_OVERFLOW (v) = over;
TREE_CONSTANT_OVERFLOW (v) = over2;
return v; return v;
} }
...@@ -1115,7 +1112,7 @@ build_real (tree type, REAL_VALUE_TYPE d) ...@@ -1115,7 +1112,7 @@ build_real (tree type, REAL_VALUE_TYPE d)
TREE_TYPE (v) = type; TREE_TYPE (v) = type;
TREE_REAL_CST_PTR (v) = dp; TREE_REAL_CST_PTR (v) = dp;
TREE_OVERFLOW (v) = TREE_CONSTANT_OVERFLOW (v) = overflow; TREE_OVERFLOW (v) = overflow;
return v; return v;
} }
...@@ -1149,7 +1146,6 @@ build_real_from_int_cst (tree type, tree i) ...@@ -1149,7 +1146,6 @@ build_real_from_int_cst (tree type, tree i)
v = build_real (type, real_value_from_int_cst (type, i)); v = build_real (type, real_value_from_int_cst (type, i));
TREE_OVERFLOW (v) |= overflow; TREE_OVERFLOW (v) |= overflow;
TREE_CONSTANT_OVERFLOW (v) |= overflow;
return v; return v;
} }
...@@ -1198,8 +1194,6 @@ build_complex (tree type, tree real, tree imag) ...@@ -1198,8 +1194,6 @@ build_complex (tree type, tree real, tree imag)
TREE_IMAGPART (t) = imag; TREE_IMAGPART (t) = imag;
TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real)); TREE_TYPE (t) = type ? type : build_complex_type (TREE_TYPE (real));
TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag); TREE_OVERFLOW (t) = TREE_OVERFLOW (real) | TREE_OVERFLOW (imag);
TREE_CONSTANT_OVERFLOW (t)
= TREE_CONSTANT_OVERFLOW (real) | TREE_CONSTANT_OVERFLOW (imag);
return t; return t;
} }
......
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