This is actually an old patch from the C6X 40-bit-int patchkit which
fell through the cracks. It turns out to be necessary for ptx to get
correct behaviour for BImode.
gcc/
* stor-layout.c (get_mode_bounds): Use GET_MODE_PRECISION, not
GET_MODE_BITSIZE. Handle BImode specially.
------------------------------------------------------------------------
===================================================================
@@ -2827,11 +2827,26 @@ get_mode_bounds (enum machine_mode mode,
enum machine_mode target_mode,
rtx *mmin, rtx *mmax)
{
- unsigned size = GET_MODE_BITSIZE (mode);
+ unsigned size = GET_MODE_PRECISION (mode);
unsigned HOST_WIDE_INT min_val, max_val;
gcc_assert (size <= HOST_BITS_PER_WIDE_INT);
+ /* gen_int_mode performs an unwanted canonicalization for BImode. */
+ if (mode == BImode)
+ {
+ if (sign)
+ {
+ *mmin = constm1_rtx;
+ *mmax = const0_rtx;
+ }
+ else
+ {
+ *mmin = const0_rtx;
+ *mmax = const1_rtx;
+ }
+ return;
+ }
if (sign)
{
min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1));