On 11/15/2016 05:42 AM, Richard Sandiford wrote:
LOAD_EXTEND_OP only applies to scalar integer modes that are narrower
than a word.  However, callers weren't consistent about which of these
checks they made beforehand, and also weren't consistent about whether
"smaller" was based on (bit)size or precision (IMO it's the latter).
This patch adds a wrapper to try to make the macro easier to use.
It's unclear to me how GET_MODE_PRECISION is different from GET_MODE_SIZE or GET_MODE_BITSIZE. But I haven't really thought about it, particularly in the context of vector modes and such. I'm certainly willing to trust your judgment on this.




LOAD_EXTEND_OP is often used to disable transformations that aren't
beneficial when extends from memory are free, so being stricter about
the check accidentally exposed more optimisation opportunities.
Right.


"SUBREG_BYTE (...) == 0" and subreg_lowpart_p are implied by
paradoxical_subreg_p, so the patch also removes some redundant tests.
Always helpful.


The patch doesn't change reload, since different checks could have
unforeseen consequences.
I think the same concepts apply in reload, but I understand the hesitation to twiddle that code and deal with possible fallout.


Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK to install?

Thanks,
Richard


[ This patch is part of the SVE series posted here:
  https://gcc.gnu.org/ml/gcc/2016-11/msg00030.html ]

gcc/
2016-11-15  Richard Sandiford  <richard.sandif...@arm.com>
            Alan Hayward  <alan.hayw...@arm.com>
            David Sherwood  <david.sherw...@arm.com>

        * rtl.h (load_extend_op): Declare.
        * rtlanal.c (load_extend_op): New function.
        (nonzero_bits1): Use it.
        (num_sign_bit_copies1): Likewise.
        * cse.c (cse_insn): Likewise.
        * fold-const.c (fold_single_bit_test): Likewise.
        (fold_unary_loc): Likewise.
        * fwprop.c (free_load_extend): Likewise.
        * postreload.c (reload_cse_simplify_set): Likewise.
        (reload_cse_simplify_operands): Likewise.
        * combine.c (try_combine): Likewise.
        (simplify_set): Likewise.  Remove redundant SUBREG_BYTE and
        subreg_lowpart_p checks.
OK.
jeff

Reply via email to