"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