On Thu, May 17, 2012 at 1:46 PM, Meador Inge <mead...@codesourcery.com> wrote:
> On 05/17/2012 03:02 PM, Richard Sandiford wrote:
>
>> After agonising over this for a couple of days, I think it's probably
>> the correct fix.  What we're doing now would be valid if the only use of
>> equiv_constant(x) were to substitute for x.  The name and current use
>> of the function obviously require equality though.
>>
>> Patch is OK, thanks.  It might be worth extending fold_rtx and
>> equiv_constant to set a flag that says whether the returned value
>> is equivalent or simply one of many valid replacement values.
>> We'd then be able to replace uses of registers like 142 with 0,
>> while not replacing uses of 0 with 142.  I don't know how much it
>> would buy us though.  That kind of thing is probably more of a job
>> for fwprop.
>
> Thanks for the review.
>
>> Please add UL to the hex constants in the testcase.  Not sure whether
>> it matters for 16-bit int targets or not, but better safe than sorry :-)
>
> Fixed.
>
>> Also, rather than:
>>
>>> +      /* Otherwise see if we already have a constant for the inner REG.
>>> +     Don't bother with paradoxical subregs because we have no way
>>> +     of knowing what the upper bytes are.  */
>>
>> how about:
>>
>>       /* Otherwise see if we already have a constant for the inner REG,
>>        and if that is enough to calculate an equivalent constant for
>>        the subreg.  Note that the upper bits of paradoxical subregs
>>        are undefined, so they cannot be said to equal anything.  */
>
> Sounds good to me.
>
> v2 OK?  If so, would you mind committing for me?  I don't have write access.
>

The test fails on Linux/x86 and Linux/x86-64.

-- 
H.J.

Reply via email to