From 853d88280aa4989f22b716b55f80b0d36ae5fc27 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 16 Aug 2000 00:56:04 -0700 Subject: [PATCH] combine.c (simplify_shift_const): Revert previous two changes. * combine.c (simplify_shift_const): Revert previous two changes. If SHIFT_COUNT_TRUNCATED, crop the shift count before the main loop. From-SVN: r35742 --- gcc/ChangeLog | 6 ++++++ gcc/combine.c | 27 ++++++++++++--------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 40df92ab810..0a319c69032 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2000-08-16 Richard Henderson + + * combine.c (simplify_shift_const): Revert previous two + changes. If SHIFT_COUNT_TRUNCATED, crop the shift count + before the main loop. + 2000-08-15 Richard Henderson * combine.c (simplify_shift_const): Bound shift count when diff --git a/gcc/combine.c b/gcc/combine.c index e4be714abb5..9e7083bb407 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -8851,6 +8851,14 @@ simplify_shift_const (x, code, result_mode, varop, input_count) count = input_count; + /* Make sure and truncate the "natural" shift on the way in. We don't + want to do this inside the loop as it makes it more difficult to + combine shifts. */ +#ifdef SHIFT_COUNT_TRUNCATED + if (SHIFT_COUNT_TRUNCATED) + count %= GET_MODE_BITSIZE (mode); +#endif + /* Unless one of the branches of the `if' in this loop does a `continue', we will `break' the loop after the `if'. */ @@ -8879,11 +8887,10 @@ 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. 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. + 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. Since these shifts are being produced by the compiler by combining multiple operations, each of which are defined, we know what the @@ -8891,11 +8898,6 @@ 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) @@ -9149,8 +9151,6 @@ simplify_shift_const (x, code, result_mode, varop, input_count) break; count += first_count; - if (count >= GET_MODE_BITSIZE (shift_mode)) - count = GET_MODE_BITSIZE (shift_mode) - 1; varop = XEXP (varop, 0); continue; } @@ -9204,9 +9204,6 @@ simplify_shift_const (x, code, result_mode, varop, input_count) else count = signed_count; - if (count >= GET_MODE_BITSIZE (shift_mode)) - count = GET_MODE_BITSIZE (shift_mode) - 1; - varop = XEXP (varop, 0); continue; } -- 2.30.2