"H.J. Lu" <hjl.to...@gmail.com> writes:
> On Tue, Oct 30, 2012 at 4:38 AM, H.J. Lu <hjl.to...@gmail.com> wrote:
>> On Tue, Oct 30, 2012 at 4:09 AM, Richard Sandiford
>> <rdsandif...@googlemail.com> wrote:
>>> The address in this case is:
>>>
>>> (plus:SI (mult:SI (reg/v:SI 223 [orig:154 j ] [154])
>>>         (const_int 8 [0x8]))
>>>     (subreg:SI (plus:DI (reg/f:DI 20 frame)
>>>             (const_int 32 [0x20])) 0))
>>>
>>> which after Uros's subreg simplification patch shouldn't be allowed:
>>> the subreg ought to be on the frame register rather than the plus.
>>>
>>> The attached patch seems to work for the testcase.  Does it work
>>> more generally?
>>>
>>> Richard
>>>
>>>
>>> gcc/
>>>         * lra-eliminations.c (lra_eliminate_regs_1): Use simplify_gen_subreg
>>>         rather than gen_rtx_SUBREG.
>>>
>>> Index: gcc/lra-eliminations.c
>>> ===================================================================
>>> --- gcc/lra-eliminations.c      (revision 192983)
>>> +++ gcc/lra-eliminations.c      (working copy)
>>> @@ -550,7 +550,8 @@
>>>               return x;
>>>             }
>>>           else
>>> -           return gen_rtx_SUBREG (GET_MODE (x), new_rtx, SUBREG_BYTE (x));
>>> +           return simplify_gen_subreg (GET_MODE (x), new_rtx,
>>> +                                       GET_MODE (new_rtx), SUBREG_BYTE 
>>> (x));
>>>         }
>>>
>>>        return x;
>>
>> I am running the full test.
>>
>
> It works.  Can you check in your patch?  I will check in
> my testcase.

Thanks.  Vlad, is the patch OK?

Richard

Reply via email to