Commit 0a33d11e by Richard Henderson Committed by Richard Henderson

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
parent c93d7fae
2001-05-21 Richard Henderson <rth@redhat.com> 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 * combine.c (simplify_comparison): Update op1 after constant
extension. extension.
* recog.c (const_int_operand): Accept only constants valid * recog.c (const_int_operand): Accept only constants valid
......
...@@ -3394,7 +3394,16 @@ subst (x, from, to, in_dest, unique_copy) ...@@ -3394,7 +3394,16 @@ subst (x, from, to, in_dest, unique_copy)
} }
else if (fmt[i] == 'e') 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 /* In general, don't install a subreg involving two
modes not tieable. It can worsen register modes not tieable. It can worsen register
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment