* combine.c (simplify_shift_const): Obey SHIFT_COUNT_TRUNCATED.

From-SVN: r35622
This commit is contained in:
Richard Henderson 2000-08-11 00:38:23 -07:00 committed by Richard Henderson
parent 9c683c2adc
commit f94d0f60d3
2 changed files with 14 additions and 4 deletions

View File

@ -1,3 +1,7 @@
2000-08-11 Richard Henderson <rth@cygnus.com>
* combine.c (simplify_shift_const): Obey SHIFT_COUNT_TRUNCATED.
Thu Aug 10 22:47:09 2000 Ovidiu Predescu <ovidiu@cup.hp.com>
* configure.in:

View File

@ -8879,10 +8879,11 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
? result_mode : mode);
/* Handle cases where the count is greater than the size of the mode
minus 1. For ASHIFT, use the size minus one as the count (this can
occur when simplifying (lshiftrt (ashiftrt ..))). For rotates,
take the count modulo the size. For other shifts, the result is
zero.
minus 1. If SHIFT_COUNT_TRUNCATED, there aren't really any such
cases. Otherwise, for ASHIFT, use the size minus one as the count
(this can occur when simplifying (lshiftrt (ashiftrt ..))). For
rotates, take the count modulo the size. For other shifts, the
result is zero.
Since these shifts are being produced by the compiler by combining
multiple operations, each of which are defined, we know what the
@ -8890,6 +8891,11 @@ simplify_shift_const (x, code, result_mode, varop, input_count)
if (count > GET_MODE_BITSIZE (shift_mode) - 1)
{
#ifdef SHIFT_COUNT_TRUNCATED
if (SHIFT_COUNT_TRUNCATED)
count %= GET_MODE_BITSIZE (shift_mode);
else
#endif
if (code == ASHIFTRT)
count = GET_MODE_BITSIZE (shift_mode) - 1;
else if (code == ROTATE || code == ROTATERT)