Commit c04fc4f0 by Eric Botcazou Committed by Eric Botcazou

rtlanal.c (nonzero_bits1): Use unsigned HOST_WIDE_INT in all mask computations.

	* rtlanal.c (nonzero_bits1): Use unsigned HOST_WIDE_INT in all mask
	computations.  Fix formatting issues.
	(num_sign_bit_copies1): Likewise.
	(canonicalize_condition): Likewise.

From-SVN: r162923
parent bd95721f
2010-08-05 Eric Botcazou <ebotcazou@adacore.com>
* rtlanal.c (nonzero_bits1): Use unsigned HOST_WIDE_INT in all mask
computations. Fix formatting issues.
(num_sign_bit_copies1): Likewise.
(canonicalize_condition): Likewise.
2010-08-05 Richard Henderson <rth@redhat.com> 2010-08-05 Richard Henderson <rth@redhat.com>
* toplev.h (ctz_hwi, clz_hwi, ffs_hwi): New. * toplev.h (ctz_hwi, clz_hwi, ffs_hwi): New.
......
...@@ -3802,12 +3802,14 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -3802,12 +3802,14 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case CONST_INT: case CONST_INT:
#ifdef SHORT_IMMEDIATES_SIGN_EXTEND #ifdef SHORT_IMMEDIATES_SIGN_EXTEND
/* If X is negative in MODE, sign-extend the value. */ /* If X is negative in MODE, sign-extend the value. */
if (INTVAL (x) > 0 && mode_width < BITS_PER_WORD if (INTVAL (x) > 0
&& 0 != (INTVAL (x) & ((HOST_WIDE_INT) 1 << (mode_width - 1)))) && mode_width < BITS_PER_WORD
return (INTVAL (x) | ((HOST_WIDE_INT) (-1) << mode_width)); && (UINTVAL (x) & ((unsigned HOST_WIDE_INT) 1 << (mode_width - 1)))
!= 0)
return UINTVAL (x) | ((unsigned HOST_WIDE_INT) (-1) << mode_width);
#endif #endif
return INTVAL (x); return UINTVAL (x);
case MEM: case MEM:
#ifdef LOAD_EXTEND_OP #ifdef LOAD_EXTEND_OP
...@@ -3884,7 +3886,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -3884,7 +3886,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
{ {
inner_nz &= GET_MODE_MASK (GET_MODE (XEXP (x, 0))); inner_nz &= GET_MODE_MASK (GET_MODE (XEXP (x, 0)));
if (inner_nz if (inner_nz
& (((HOST_WIDE_INT) 1 & (((unsigned HOST_WIDE_INT) 1
<< (GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) - 1)))) << (GET_MODE_BITSIZE (GET_MODE (XEXP (x, 0))) - 1))))
inner_nz |= (GET_MODE_MASK (mode) inner_nz |= (GET_MODE_MASK (mode)
& ~GET_MODE_MASK (GET_MODE (XEXP (x, 0)))); & ~GET_MODE_MASK (GET_MODE (XEXP (x, 0))));
...@@ -3903,9 +3905,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -3903,9 +3905,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case XOR: case IOR: case XOR: case IOR:
case UMIN: case UMAX: case SMIN: case SMAX: case UMIN: case UMAX: case SMIN: case SMAX:
{ {
unsigned HOST_WIDE_INT nonzero0 = unsigned HOST_WIDE_INT nonzero0
cached_nonzero_bits (XEXP (x, 0), mode, = cached_nonzero_bits (XEXP (x, 0), mode,
known_x, known_mode, known_ret); known_x, known_mode, known_ret);
/* Don't call nonzero_bits for the second time if it cannot change /* Don't call nonzero_bits for the second time if it cannot change
anything. */ anything. */
...@@ -3925,21 +3927,21 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -3925,21 +3927,21 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
computing the width (position of the highest-order nonzero bit) computing the width (position of the highest-order nonzero bit)
and the number of low-order zero bits for each value. */ and the number of low-order zero bits for each value. */
{ {
unsigned HOST_WIDE_INT nz0 = unsigned HOST_WIDE_INT nz0
cached_nonzero_bits (XEXP (x, 0), mode, = cached_nonzero_bits (XEXP (x, 0), mode,
known_x, known_mode, known_ret); known_x, known_mode, known_ret);
unsigned HOST_WIDE_INT nz1 = unsigned HOST_WIDE_INT nz1
cached_nonzero_bits (XEXP (x, 1), mode, = cached_nonzero_bits (XEXP (x, 1), mode,
known_x, known_mode, known_ret); known_x, known_mode, known_ret);
int sign_index = GET_MODE_BITSIZE (GET_MODE (x)) - 1; int sign_index = GET_MODE_BITSIZE (GET_MODE (x)) - 1;
int width0 = floor_log2 (nz0) + 1; int width0 = floor_log2 (nz0) + 1;
int width1 = floor_log2 (nz1) + 1; int width1 = floor_log2 (nz1) + 1;
int low0 = floor_log2 (nz0 & -nz0); int low0 = floor_log2 (nz0 & -nz0);
int low1 = floor_log2 (nz1 & -nz1); int low1 = floor_log2 (nz1 & -nz1);
HOST_WIDE_INT op0_maybe_minusp unsigned HOST_WIDE_INT op0_maybe_minusp
= (nz0 & ((HOST_WIDE_INT) 1 << sign_index)); = nz0 & ((unsigned HOST_WIDE_INT) 1 << sign_index);
HOST_WIDE_INT op1_maybe_minusp unsigned HOST_WIDE_INT op1_maybe_minusp
= (nz1 & ((HOST_WIDE_INT) 1 << sign_index)); = nz1 & ((unsigned HOST_WIDE_INT) 1 << sign_index);
unsigned int result_width = mode_width; unsigned int result_width = mode_width;
int result_low = 0; int result_low = 0;
...@@ -3959,7 +3961,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -3959,7 +3961,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case DIV: case DIV:
if (width1 == 0) if (width1 == 0)
break; break;
if (! op0_maybe_minusp && ! op1_maybe_minusp) if (!op0_maybe_minusp && !op1_maybe_minusp)
result_width = width0; result_width = width0;
break; break;
case UDIV: case UDIV:
...@@ -3970,7 +3972,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -3970,7 +3972,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case MOD: case MOD:
if (width1 == 0) if (width1 == 0)
break; break;
if (! op0_maybe_minusp && ! op1_maybe_minusp) if (!op0_maybe_minusp && !op1_maybe_minusp)
result_width = MIN (width0, width1); result_width = MIN (width0, width1);
result_low = MIN (low0, low1); result_low = MIN (low0, low1);
break; break;
...@@ -3985,10 +3987,10 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -3985,10 +3987,10 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
} }
if (result_width < mode_width) if (result_width < mode_width)
nonzero &= ((HOST_WIDE_INT) 1 << result_width) - 1; nonzero &= ((unsigned HOST_WIDE_INT) 1 << result_width) - 1;
if (result_low > 0) if (result_low > 0)
nonzero &= ~(((HOST_WIDE_INT) 1 << result_low) - 1); nonzero &= ~(((unsigned HOST_WIDE_INT) 1 << result_low) - 1);
#ifdef POINTERS_EXTEND_UNSIGNED #ifdef POINTERS_EXTEND_UNSIGNED
/* If pointers extend unsigned and this is an addition or subtraction /* If pointers extend unsigned and this is an addition or subtraction
...@@ -4009,7 +4011,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4009,7 +4011,7 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case ZERO_EXTRACT: case ZERO_EXTRACT:
if (CONST_INT_P (XEXP (x, 1)) if (CONST_INT_P (XEXP (x, 1))
&& INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT) && INTVAL (XEXP (x, 1)) < HOST_BITS_PER_WIDE_INT)
nonzero &= ((HOST_WIDE_INT) 1 << INTVAL (XEXP (x, 1))) - 1; nonzero &= ((unsigned HOST_WIDE_INT) 1 << INTVAL (XEXP (x, 1))) - 1;
break; break;
case SUBREG: case SUBREG:
...@@ -4074,9 +4076,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4074,9 +4076,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
unsigned int width = GET_MODE_BITSIZE (inner_mode); unsigned int width = GET_MODE_BITSIZE (inner_mode);
int count = INTVAL (XEXP (x, 1)); int count = INTVAL (XEXP (x, 1));
unsigned HOST_WIDE_INT mode_mask = GET_MODE_MASK (inner_mode); unsigned HOST_WIDE_INT mode_mask = GET_MODE_MASK (inner_mode);
unsigned HOST_WIDE_INT op_nonzero = unsigned HOST_WIDE_INT op_nonzero
cached_nonzero_bits (XEXP (x, 0), mode, = cached_nonzero_bits (XEXP (x, 0), mode,
known_x, known_mode, known_ret); known_x, known_mode, known_ret);
unsigned HOST_WIDE_INT inner = op_nonzero & mode_mask; unsigned HOST_WIDE_INT inner = op_nonzero & mode_mask;
unsigned HOST_WIDE_INT outer = 0; unsigned HOST_WIDE_INT outer = 0;
...@@ -4092,8 +4094,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4092,8 +4094,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
/* If the sign bit may have been nonzero before the shift, we /* If the sign bit may have been nonzero before the shift, we
need to mark all the places it could have been copied to need to mark all the places it could have been copied to
by the shift as possibly nonzero. */ by the shift as possibly nonzero. */
if (inner & ((HOST_WIDE_INT) 1 << (width - 1 - count))) if (inner & ((unsigned HOST_WIDE_INT) 1 << (width - 1 - count)))
inner |= (((HOST_WIDE_INT) 1 << count) - 1) << (width - count); inner |= (((unsigned HOST_WIDE_INT) 1 << count) - 1)
<< (width - count);
} }
else if (code == ASHIFT) else if (code == ASHIFT)
inner <<= count; inner <<= count;
...@@ -4108,14 +4111,15 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4108,14 +4111,15 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case FFS: case FFS:
case POPCOUNT: case POPCOUNT:
/* This is at most the number of bits in the mode. */ /* This is at most the number of bits in the mode. */
nonzero = ((HOST_WIDE_INT) 2 << (floor_log2 (mode_width))) - 1; nonzero = ((unsigned HOST_WIDE_INT) 2 << (floor_log2 (mode_width))) - 1;
break; break;
case CLZ: case CLZ:
/* If CLZ has a known value at zero, then the nonzero bits are /* If CLZ has a known value at zero, then the nonzero bits are
that value, plus the number of bits in the mode minus one. */ that value, plus the number of bits in the mode minus one. */
if (CLZ_DEFINED_VALUE_AT_ZERO (mode, nonzero)) if (CLZ_DEFINED_VALUE_AT_ZERO (mode, nonzero))
nonzero |= ((HOST_WIDE_INT) 1 << (floor_log2 (mode_width))) - 1; nonzero
|= ((unsigned HOST_WIDE_INT) 1 << (floor_log2 (mode_width))) - 1;
else else
nonzero = -1; nonzero = -1;
break; break;
...@@ -4124,7 +4128,8 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4124,7 +4128,8 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
/* If CTZ has a known value at zero, then the nonzero bits are /* If CTZ has a known value at zero, then the nonzero bits are
that value, plus the number of bits in the mode minus one. */ that value, plus the number of bits in the mode minus one. */
if (CTZ_DEFINED_VALUE_AT_ZERO (mode, nonzero)) if (CTZ_DEFINED_VALUE_AT_ZERO (mode, nonzero))
nonzero |= ((HOST_WIDE_INT) 1 << (floor_log2 (mode_width))) - 1; nonzero
|= ((unsigned HOST_WIDE_INT) 1 << (floor_log2 (mode_width))) - 1;
else else
nonzero = -1; nonzero = -1;
break; break;
...@@ -4135,9 +4140,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4135,9 +4140,9 @@ nonzero_bits1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case IF_THEN_ELSE: case IF_THEN_ELSE:
{ {
unsigned HOST_WIDE_INT nonzero_true = unsigned HOST_WIDE_INT nonzero_true
cached_nonzero_bits (XEXP (x, 1), mode, = cached_nonzero_bits (XEXP (x, 1), mode,
known_x, known_mode, known_ret); known_x, known_mode, known_ret);
/* Don't call nonzero_bits for the second time if it cannot change /* Don't call nonzero_bits for the second time if it cannot change
anything. */ anything. */
...@@ -4310,9 +4315,9 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4310,9 +4315,9 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
case CONST_INT: case CONST_INT:
/* If the constant is negative, take its 1's complement and remask. /* If the constant is negative, take its 1's complement and remask.
Then see how many zero bits we have. */ Then see how many zero bits we have. */
nonzero = INTVAL (x) & GET_MODE_MASK (mode); nonzero = UINTVAL (x) & GET_MODE_MASK (mode);
if (bitwidth <= HOST_BITS_PER_WIDE_INT if (bitwidth <= HOST_BITS_PER_WIDE_INT
&& (nonzero & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) && (nonzero & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)
nonzero = (~nonzero) & GET_MODE_MASK (mode); nonzero = (~nonzero) & GET_MODE_MASK (mode);
return (nonzero == 0 ? bitwidth : bitwidth - floor_log2 (nonzero) - 1); return (nonzero == 0 ? bitwidth : bitwidth - floor_log2 (nonzero) - 1);
...@@ -4414,7 +4419,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4414,7 +4419,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
return bitwidth; return bitwidth;
if (num0 > 1 if (num0 > 1
&& (((HOST_WIDE_INT) 1 << (bitwidth - 1)) & nonzero)) && (((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1)) & nonzero))
num0--; num0--;
return num0; return num0;
...@@ -4435,7 +4440,8 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4435,7 +4440,8 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
&& num1 > 1 && num1 > 1
&& bitwidth <= HOST_BITS_PER_WIDE_INT && bitwidth <= HOST_BITS_PER_WIDE_INT
&& CONST_INT_P (XEXP (x, 1)) && CONST_INT_P (XEXP (x, 1))
&& !(INTVAL (XEXP (x, 1)) & ((HOST_WIDE_INT) 1 << (bitwidth - 1)))) && (UINTVAL (XEXP (x, 1))
& ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) == 0)
return num1; return num1;
/* Similarly for IOR when setting high-order bits. */ /* Similarly for IOR when setting high-order bits. */
...@@ -4443,7 +4449,8 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4443,7 +4449,8 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
&& num1 > 1 && num1 > 1
&& bitwidth <= HOST_BITS_PER_WIDE_INT && bitwidth <= HOST_BITS_PER_WIDE_INT
&& CONST_INT_P (XEXP (x, 1)) && CONST_INT_P (XEXP (x, 1))
&& (INTVAL (XEXP (x, 1)) & ((HOST_WIDE_INT) 1 << (bitwidth - 1)))) && (UINTVAL (XEXP (x, 1))
& ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)
return num1; return num1;
return MIN (num0, num1); return MIN (num0, num1);
...@@ -4458,7 +4465,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4458,7 +4465,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
&& bitwidth <= HOST_BITS_PER_WIDE_INT) && bitwidth <= HOST_BITS_PER_WIDE_INT)
{ {
nonzero = nonzero_bits (XEXP (x, 0), mode); nonzero = nonzero_bits (XEXP (x, 0), mode);
if ((((HOST_WIDE_INT) 1 << (bitwidth - 1)) & nonzero) == 0) if ((((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1)) & nonzero) == 0)
return (nonzero == 1 || nonzero == 0 ? bitwidth return (nonzero == 1 || nonzero == 0 ? bitwidth
: bitwidth - floor_log2 (nonzero) - 1); : bitwidth - floor_log2 (nonzero) - 1);
} }
...@@ -4501,9 +4508,10 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4501,9 +4508,10 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
if (result > 0 if (result > 0
&& (bitwidth > HOST_BITS_PER_WIDE_INT && (bitwidth > HOST_BITS_PER_WIDE_INT
|| (((nonzero_bits (XEXP (x, 0), mode) || (((nonzero_bits (XEXP (x, 0), mode)
& ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)
&& ((nonzero_bits (XEXP (x, 1), mode) && ((nonzero_bits (XEXP (x, 1), mode)
& ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)))) & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1)))
!= 0))))
result--; result--;
return MAX (1, result); return MAX (1, result);
...@@ -4515,7 +4523,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4515,7 +4523,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
if (bitwidth > HOST_BITS_PER_WIDE_INT) if (bitwidth > HOST_BITS_PER_WIDE_INT)
return 1; return 1;
else if ((nonzero_bits (XEXP (x, 0), mode) else if ((nonzero_bits (XEXP (x, 0), mode)
& ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)
return 1; return 1;
else else
return cached_num_sign_bit_copies (XEXP (x, 0), mode, return cached_num_sign_bit_copies (XEXP (x, 0), mode,
...@@ -4528,7 +4536,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4528,7 +4536,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
if (bitwidth > HOST_BITS_PER_WIDE_INT) if (bitwidth > HOST_BITS_PER_WIDE_INT)
return 1; return 1;
else if ((nonzero_bits (XEXP (x, 1), mode) else if ((nonzero_bits (XEXP (x, 1), mode)
& ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)
return 1; return 1;
else else
return cached_num_sign_bit_copies (XEXP (x, 1), mode, return cached_num_sign_bit_copies (XEXP (x, 1), mode,
...@@ -4543,7 +4551,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4543,7 +4551,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
if (result > 1 if (result > 1
&& (bitwidth > HOST_BITS_PER_WIDE_INT && (bitwidth > HOST_BITS_PER_WIDE_INT
|| (nonzero_bits (XEXP (x, 1), mode) || (nonzero_bits (XEXP (x, 1), mode)
& ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)) & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0))
result--; result--;
return result; return result;
...@@ -4554,7 +4562,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4554,7 +4562,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
if (result > 1 if (result > 1
&& (bitwidth > HOST_BITS_PER_WIDE_INT && (bitwidth > HOST_BITS_PER_WIDE_INT
|| (nonzero_bits (XEXP (x, 1), mode) || (nonzero_bits (XEXP (x, 1), mode)
& ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)) & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0))
result--; result--;
return result; return result;
...@@ -4598,7 +4606,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4598,7 +4606,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
Then see how many zero bits we have. */ Then see how many zero bits we have. */
nonzero = STORE_FLAG_VALUE; nonzero = STORE_FLAG_VALUE;
if (bitwidth <= HOST_BITS_PER_WIDE_INT if (bitwidth <= HOST_BITS_PER_WIDE_INT
&& (nonzero & ((HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0) && (nonzero & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))) != 0)
nonzero = (~nonzero) & GET_MODE_MASK (mode); nonzero = (~nonzero) & GET_MODE_MASK (mode);
return (nonzero == 0 ? bitwidth : bitwidth - floor_log2 (nonzero) - 1); return (nonzero == 0 ? bitwidth : bitwidth - floor_log2 (nonzero) - 1);
...@@ -4617,7 +4625,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x, ...@@ -4617,7 +4625,7 @@ num_sign_bit_copies1 (const_rtx x, enum machine_mode mode, const_rtx known_x,
return 1; return 1;
nonzero = nonzero_bits (x, mode); nonzero = nonzero_bits (x, mode);
return nonzero & ((HOST_WIDE_INT) 1 << (bitwidth - 1)) return nonzero & ((unsigned HOST_WIDE_INT) 1 << (bitwidth - 1))
? 1 : bitwidth - floor_log2 (nonzero) - 1; ? 1 : bitwidth - floor_log2 (nonzero) - 1;
} }
...@@ -4803,7 +4811,7 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest, ...@@ -4803,7 +4811,7 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest,
&& (GET_MODE_BITSIZE (inner_mode) && (GET_MODE_BITSIZE (inner_mode)
<= HOST_BITS_PER_WIDE_INT) <= HOST_BITS_PER_WIDE_INT)
&& (STORE_FLAG_VALUE && (STORE_FLAG_VALUE
& ((HOST_WIDE_INT) 1 & ((unsigned HOST_WIDE_INT) 1
<< (GET_MODE_BITSIZE (inner_mode) - 1)))) << (GET_MODE_BITSIZE (inner_mode) - 1))))
#ifdef FLOAT_STORE_FLAG_VALUE #ifdef FLOAT_STORE_FLAG_VALUE
|| (code == LT || (code == LT
...@@ -4823,7 +4831,7 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest, ...@@ -4823,7 +4831,7 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest,
<= HOST_BITS_PER_WIDE_INT) <= HOST_BITS_PER_WIDE_INT)
&& GET_MODE_CLASS (inner_mode) == MODE_INT && GET_MODE_CLASS (inner_mode) == MODE_INT
&& (STORE_FLAG_VALUE && (STORE_FLAG_VALUE
& ((HOST_WIDE_INT) 1 & ((unsigned HOST_WIDE_INT) 1
<< (GET_MODE_BITSIZE (inner_mode) - 1)))) << (GET_MODE_BITSIZE (inner_mode) - 1))))
#ifdef FLOAT_STORE_FLAG_VALUE #ifdef FLOAT_STORE_FLAG_VALUE
|| (code == GE || (code == GE
...@@ -4906,9 +4914,9 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest, ...@@ -4906,9 +4914,9 @@ canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest,
/* When cross-compiling, const_val might be sign-extended from /* When cross-compiling, const_val might be sign-extended from
BITS_PER_WORD to HOST_BITS_PER_WIDE_INT */ BITS_PER_WORD to HOST_BITS_PER_WIDE_INT */
case GE: case GE:
if ((HOST_WIDE_INT) (const_val & max_val) if ((const_val & max_val)
!= (((HOST_WIDE_INT) 1 != ((unsigned HOST_WIDE_INT) 1
<< (GET_MODE_BITSIZE (GET_MODE (op0)) - 1)))) << (GET_MODE_BITSIZE (GET_MODE (op0)) - 1)))
code = GT, op1 = gen_int_mode (const_val - 1, GET_MODE (op0)); code = GT, op1 = gen_int_mode (const_val - 1, GET_MODE (op0));
break; break;
......
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