* combine.c (simplify_set): Remove an unnecessary subreg.

From-SVN: r53873
This commit is contained in:
Kazu Hirata 2002-05-25 19:47:11 +00:00 committed by Kazu Hirata
parent b47cae3dee
commit 8c1d52a397
2 changed files with 28 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2002-05-25 Kazu Hirata <kazu@cs.umass.edu>
* combine.c (simplify_set): Remove an unnecessary subreg.
2002-05-25 Marek Michalkiewicz <marekm@amelek.gda.pl>
* config/avr/avr.c (avr_handle_progmem_attribute): Handle TYPE_DECL.

View File

@ -5160,6 +5160,30 @@ simplify_set (x)
src = SET_SRC (x), dest = SET_DEST (x);
}
#ifdef HAVE_cc0
/* If we have (set (cc0) (subreg ...)), we try to remove the subreg
in SRC. */
if (dest == cc0_rtx
&& GET_CODE (src) == SUBREG
&& subreg_lowpart_p (src)
&& (GET_MODE_BITSIZE (GET_MODE (src))
< GET_MODE_BITSIZE (GET_MODE (SUBREG_REG (src)))))
{
rtx inner = SUBREG_REG (src);
enum machine_mode inner_mode = GET_MODE (inner);
/* Here we make sure that we don't have a sign bit on. */
if (GET_MODE_BITSIZE (inner_mode) <= HOST_BITS_PER_WIDE_INT
&& (nonzero_bits (inner, inner_mode)
< ((unsigned HOST_WIDE_INT) 1
<< (GET_MODE_BITSIZE (inner_mode) - 1))))
{
SUBST (SET_SRC (x), inner);
src = SET_SRC (x);
}
}
#endif
#ifdef LOAD_EXTEND_OP
/* If we have (set FOO (subreg:M (mem:N BAR) 0)) with M wider than N, this
would require a paradoxical subreg. Replace the subreg with a