From 2d917903294885f0f65accf65a231e89a4b2778f Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Fri, 7 Jun 1996 19:36:34 -0700 Subject: [PATCH] (simplify_binary_operation... (simplify_binary_operation, case MULT): Check for case where width is larger than HOST_BITS_PER_WIDE_INT, and upper most bit is set. We can not generate a simple shift in this case. From-SVN: r12238 --- gcc/cse.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gcc/cse.c b/gcc/cse.c index 67b75ddefcf..2da71d92030 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -3878,6 +3878,11 @@ simplify_binary_operation (code, mode, op0, op1) we are still generating RTL. This test is a kludge. */ if (GET_CODE (op1) == CONST_INT && (val = exact_log2 (INTVAL (op1))) >= 0 + /* If the mode is larger than the host word size, and the + uppermost bit is set, then this isn't a power of two due + to implicit sign extension. */ + && (width <= HOST_BITS_PER_WIDE_INT + || val != HOST_BITS_PER_WIDE_INT - 1) && ! rtx_equal_function_value_matters) return gen_rtx (ASHIFT, mode, op0, GEN_INT (val));