diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-05-13 06:46:49 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-05-13 06:46:49 -0400 |
commit | bdaae9a01aee53dd13918136baeb693323356aa3 (patch) | |
tree | 07c0d5de4230663c5e551dd4b56b48f8b79e3e8e /gcc | |
parent | e98b85444c0a7b2dfbe8bba7426c88d3230c518a (diff) | |
download | gcc-bdaae9a01aee53dd13918136baeb693323356aa3.zip gcc-bdaae9a01aee53dd13918136baeb693323356aa3.tar.gz gcc-bdaae9a01aee53dd13918136baeb693323356aa3.tar.bz2 |
(simplify_shift_count, case LSHIFTRT): Don't merge shifts of different
modes if first is any right shift.
From-SVN: r9674
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/combine.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 68e91f9..3b58b34 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -7898,7 +7898,7 @@ simplify_shift_const (x, code, result_mode, varop, count) ASHIFTRT. If the mode of this shift is not the mode of the outer shift, - we can't do this if either shift is ASHIFTRT or ROTATE. + we can't do this if either shift is a right shift or ROTATE. Finally, we can't do any of these if the mode is too wide unless the codes are the same. @@ -7909,7 +7909,8 @@ simplify_shift_const (x, code, result_mode, varop, count) if (code == first_code) { if (GET_MODE (varop) != result_mode - && (code == ASHIFTRT || code == ROTATE)) + && (code == ASHIFTRT || code == LSHIFTRT + || code == ROTATE)) break; count += first_count; @@ -7921,7 +7922,8 @@ simplify_shift_const (x, code, result_mode, varop, count) || (code == ROTATE && first_code == ASHIFTRT) || GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT || (GET_MODE (varop) != result_mode - && (first_code == ASHIFTRT || first_code == ROTATE + && (first_code == ASHIFTRT || first_code == LSHIFTRT + || first_code == ROTATE || code == ROTATE))) break; |