From: Richard Kenner Date: Sun, 10 Oct 1993 14:57:01 +0000 (-0400) Subject: (subst, case SUREG):Only call force_to_mode if both inner and output X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ff12fdac9b0679941912411b85263c7eba027a64;p=gcc.git (subst, case SUREG):Only call force_to_mode if both inner and output modes are MODE_INT. From-SVN: r5709 --- diff --git a/gcc/combine.c b/gcc/combine.c index abc224cb97d..4d05b01ad88 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3177,11 +3177,13 @@ subst (x, from, to, in_dest, unique_copy) ) return gen_lowpart_for_combine (mode, SUBREG_REG (x)); - /* If we are narrowing the object, we need to see if we can simplify - the expression for the object knowing that we only need the + /* If we are narrowing an integral object, we need to see if we can + simplify the expression for the object knowing that we only need the low-order bits. */ - if (GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) + if (GET_MODE_CLASS (mode) == MODE_INT + && GET_MODE_CLASS (GET_MODE (SUBREG_REG (x))) == MODE_INT + && GET_MODE_SIZE (mode) < GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) && subreg_lowpart_p (x)) return force_to_mode (SUBREG_REG (x), mode, GET_MODE_MASK (mode), NULL_RTX);