mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-30 06:54:37 +08:00
* combine.c (simplify_set): Remove an unnecessary subreg.
From-SVN: r53873
This commit is contained in:
parent
b47cae3dee
commit
8c1d52a397
@ -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.
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user