diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1999-11-22 23:56:34 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 1999-11-22 23:56:34 +0000 |
commit | 54f3b5c2f14c4041de7a05c245988a2a5e17fb14 (patch) | |
tree | b53937dbff310868363d7902d40a1327a0ded2f2 /gcc/combine.c | |
parent | b49df33399b7267485bf2b6f519e32e1b3443d9f (diff) | |
download | gcc-54f3b5c2f14c4041de7a05c245988a2a5e17fb14.zip gcc-54f3b5c2f14c4041de7a05c245988a2a5e17fb14.tar.gz gcc-54f3b5c2f14c4041de7a05c245988a2a5e17fb14.tar.bz2 |
combine.c (combine_simplify_rtx): When handling a SUBREG, take SUBREG_WORD into account.
* combine.c (combine_simplify_rtx): When handling a SUBREG,
take SUBREG_WORD into account.
(if_then_else_cond): Likewise.
From-SVN: r30623
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 4a1cb0e..a853129 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3698,7 +3698,12 @@ combine_simplify_rtx (x, op0_mode, last, in_dest) since we are saying that the high bits don't matter. */ if (CONSTANT_P (SUBREG_REG (x)) && GET_MODE (SUBREG_REG (x)) == VOIDmode && GET_MODE_SIZE (mode) > GET_MODE_SIZE (op0_mode)) - return SUBREG_REG (x); + { + if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) > UNITS_PER_WORD + && (WORDS_BIG_ENDIAN || SUBREG_WORD (x) != 0)) + return operand_subword (SUBREG_REG (x), SUBREG_WORD (x), 0, mode); + return SUBREG_REG (x); + } /* Note that we cannot do any narrowing for non-constants since we might have been counting on using the fact that some bits were @@ -7112,6 +7117,12 @@ if_then_else_cond (x, ptrue, pfalse) && 0 != (cond0 = if_then_else_cond (SUBREG_REG (x), &true0, &false0))) { + if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) > UNITS_PER_WORD + && (WORDS_BIG_ENDIAN || SUBREG_WORD (x) != 0)) + { + true0 = operand_subword (true0, SUBREG_WORD (x), 0, mode); + false0 = operand_subword (false0, SUBREG_WORD (x), 0, mode); + } *ptrue = force_to_mode (true0, mode, GET_MODE_MASK (mode), NULL_RTX, 0); *pfalse = force_to_mode (false0, mode, GET_MODE_MASK (mode), NULL_RTX, 0); |