diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/combine.c | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6fc185a..9ca0341 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-09-07 Igor Shevlyakov <igor@microunity.com> + + * combine.c (simplify_shift_const): Calculate rotate count + correctly for vector operands. + 2002-09-07 Ansgar Esztermann <ansgar@thphy.uni-duesseldorf.de> * c-typeck.c (c_tree_expr_nonnegative_p): New function. diff --git a/gcc/combine.c b/gcc/combine.c index 10ee904..606b200 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -9046,7 +9046,14 @@ simplify_shift_const (x, code, result_mode, varop, orig_count) /* Convert ROTATERT to ROTATE. */ if (code == ROTATERT) - code = ROTATE, count = GET_MODE_BITSIZE (result_mode) - count; + { + unsigned int bitsize = GET_MODE_BITSIZE (result_mode);; + code = ROTATE; + if (VECTOR_MODE_P (result_mode)) + count = bitsize / GET_MODE_NUNITS (result_mode) - count; + else + count = bitsize - count; + } /* We need to determine what mode we will do the shift in. If the shift is a right shift or a ROTATE, we must always do it in the mode |