On 06/27/2013 12:15 PM, Richard Sandiford wrote: > Vladimir Makarov <vmaka...@redhat.com> writes: >> Richard, is it ok to commit to the trunk? > Looks good to me, but I gave up the right to approve it. I think you > need ROTATERT too though (see arm_legitimate_index_p). > > Also, sorry for the nitpick, but once the full condition overflows one line, > I think each == test should be on its own line. > > Thanks for the comments. Here is the new version of the patch:
2013-06-27 Vladimir Makarov <vmaka...@redhat.com> * rtlanal.c (must_be_index_p, set_address_index): Add ASHIFTRT, LSHIFTRT, and ROTATERT.
Index: rtlanal.c =================================================================== --- rtlanal.c (revision 200174) +++ rtlanal.c (working copy) @@ -5480,7 +5480,11 @@ must_be_base_p (rtx x) static bool must_be_index_p (rtx x) { - return GET_CODE (x) == MULT || GET_CODE (x) == ASHIFT; + return (GET_CODE (x) == MULT + || GET_CODE (x) == ASHIFT + || GET_CODE (x) == ASHIFTRT + || GET_CODE (x) == LSHIFTRT + || GET_CODE (x) == ROTATERT); } /* Set the segment part of address INFO to LOC, given that INNER is the @@ -5519,7 +5523,11 @@ set_address_base (struct address_info *i static void set_address_index (struct address_info *info, rtx *loc, rtx *inner) { - if ((GET_CODE (*inner) == MULT || GET_CODE (*inner) == ASHIFT) + if ((GET_CODE (*inner) == MULT + || GET_CODE (*inner) == ASHIFT + || GET_CODE (*inner) == ASHIFTRT + || GET_CODE (*inner) == LSHIFTRT + || GET_CODE (*inner) == ROTATERT) && CONSTANT_P (XEXP (*inner, 1))) inner = strip_address_mutations (&XEXP (*inner, 0)); gcc_checking_assert (REG_P (*inner)