aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-05-13 06:46:49 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1995-05-13 06:46:49 -0400
commitbdaae9a01aee53dd13918136baeb693323356aa3 (patch)
tree07c0d5de4230663c5e551dd4b56b48f8b79e3e8e
parente98b85444c0a7b2dfbe8bba7426c88d3230c518a (diff)
downloadgcc-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
-rw-r--r--gcc/combine.c8
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;