Commit b3728b0e by Jim Wilson

(nonzero_bits): Ifdef out calls to num_sign_bit_copies.

Add dummy define/undef for num_sign_bit_copies.

From-SVN: r13314
parent 7b1bcb49
...@@ -7072,6 +7072,13 @@ simplify_and_const_int (x, mode, varop, constop) ...@@ -7072,6 +7072,13 @@ simplify_and_const_int (x, mode, varop, constop)
return x; return x;
} }
/* We let num_sign_bit_copies recur into nonzero_bits as that is useful.
We don't let nonzero_bits recur into num_sign_bit_copies, because that
is less useful. We can't allow both, because that results in exponential
run time recusion. There is a nullstone testcase that triggered
this. This macro avoids accidental uses of num_sign_bit_copies. */
#define num_sign_bit_copies()
/* Given an expression, X, compute which bits in X can be non-zero. /* Given an expression, X, compute which bits in X can be non-zero.
We don't care about bits outside of those defined in MODE. We don't care about bits outside of those defined in MODE.
...@@ -7246,18 +7253,26 @@ nonzero_bits (x, mode) ...@@ -7246,18 +7253,26 @@ nonzero_bits (x, mode)
break; break;
case NEG: case NEG:
#if 0
/* Disabled to avoid exponential mutual recursion between nonzero_bits
and num_sign_bit_copies. */
if (num_sign_bit_copies (XEXP (x, 0), GET_MODE (x)) if (num_sign_bit_copies (XEXP (x, 0), GET_MODE (x))
== GET_MODE_BITSIZE (GET_MODE (x))) == GET_MODE_BITSIZE (GET_MODE (x)))
nonzero = 1; nonzero = 1;
#endif
if (GET_MODE_SIZE (GET_MODE (x)) < mode_width) if (GET_MODE_SIZE (GET_MODE (x)) < mode_width)
nonzero |= (GET_MODE_MASK (mode) & ~ GET_MODE_MASK (GET_MODE (x))); nonzero |= (GET_MODE_MASK (mode) & ~ GET_MODE_MASK (GET_MODE (x)));
break; break;
case ABS: case ABS:
#if 0
/* Disabled to avoid exponential mutual recursion between nonzero_bits
and num_sign_bit_copies. */
if (num_sign_bit_copies (XEXP (x, 0), GET_MODE (x)) if (num_sign_bit_copies (XEXP (x, 0), GET_MODE (x))
== GET_MODE_BITSIZE (GET_MODE (x))) == GET_MODE_BITSIZE (GET_MODE (x)))
nonzero = 1; nonzero = 1;
#endif
break; break;
case TRUNCATE: case TRUNCATE:
...@@ -7457,6 +7472,9 @@ nonzero_bits (x, mode) ...@@ -7457,6 +7472,9 @@ nonzero_bits (x, mode)
return nonzero; return nonzero;
} }
/* See the macro definition above. */
#undef num_sign_bit_copies
/* Return the number of bits at the high-order end of X that are known to /* Return the number of bits at the high-order end of X that are known to
be equal to the sign bit. X will be used in mode MODE; if MODE is be equal to the sign bit. X will be used in mode MODE; if MODE is
VOIDmode, X will be used in its own mode. The returned value will always VOIDmode, X will be used in its own mode. The returned value will always
......
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