combine.c (subst): Do not substitute for a register as a destination...

* combine.c (subst): Do not substitute for a register as
        a destination subreg/strict_low_part/zero_extract.

From-SVN: r42429
This commit is contained in:
Richard Henderson 2001-05-21 23:58:17 -07:00 committed by Richard Henderson
parent c93d7fae7b
commit 0a33d11eab
2 changed files with 13 additions and 1 deletions

View File

@ -1,5 +1,8 @@
2001-05-21 Richard Henderson <rth@redhat.com>
* combine.c (subst): Do not substitute for a register as
a destination subreg/strict_low_part/zero_extract.
* combine.c (simplify_comparison): Update op1 after constant
extension.
* recog.c (const_int_operand): Accept only constants valid

View File

@ -3394,7 +3394,16 @@ subst (x, from, to, in_dest, unique_copy)
}
else if (fmt[i] == 'e')
{
if (COMBINE_RTX_EQUAL_P (XEXP (x, i), from))
/* If this is a register being set, ignore it. */
new = XEXP (x, i);
if (in_dest
&& (code == SUBREG || code == STRICT_LOW_PART
|| code == ZERO_EXTRACT)
&& i == 0
&& GET_CODE (new) == REG)
;
else if (COMBINE_RTX_EQUAL_P (XEXP (x, i), from))
{
/* In general, don't install a subreg involving two
modes not tieable. It can worsen register