From: Jim Wilson Date: Tue, 19 Dec 1995 02:45:11 +0000 (-0800) Subject: (simplify_rtx, case SUBREG): For SUBREG of a constant, X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f82da7d270d2bf27905b338f28622c3546ad9306;p=gcc.git (simplify_rtx, case SUBREG): For SUBREG of a constant, use <= instead of < when comparing mode sizes. (force_to_mode, case NOT): Use full mask inside the NOT operation. From-SVN: r10814 --- diff --git a/gcc/combine.c b/gcc/combine.c index 9f1086b1855..d37fcb223e0 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3307,7 +3307,7 @@ simplify_rtx (x, op0_mode, last, in_dest) always valid. On a big-endian machine, it's valid only if the constant's mode fits in one word. */ if (CONSTANT_P (SUBREG_REG (x)) && subreg_lowpart_p (x) - && GET_MODE_SIZE (mode) < GET_MODE_SIZE (op0_mode) + && GET_MODE_SIZE (mode) <= GET_MODE_SIZE (op0_mode) && (! WORDS_BIG_ENDIAN || GET_MODE_BITSIZE (op0_mode) <= BITS_PER_WORD)) return gen_lowpart_for_combine (mode, SUBREG_REG (x)); @@ -6171,6 +6171,10 @@ force_to_mode (x, mode, mask, reg, just_select) return force_to_mode (x, mode, mask, reg, next_select); } + /* (and (not FOO) CONST) is (not (or FOO (not CONST))), so we must + use the full mask inside the NOT. */ + mask = fuller_mask; + unop: op0 = gen_lowpart_for_combine (op_mode, force_to_mode (XEXP (x, 0), mode, mask,