Rework subreg_get_info
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 23 Nov 2016 14:35:14 +0000 (14:35 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 23 Nov 2016 14:35:14 +0000 (14:35 +0000)
commit07ce14666601681f7638e8e955740566ce3386ec
tree439840ddfbc5c78d1509ca3b8db2e443dd4a4a5b
parent712871dde1fb2d29b4f742fababb645cd3b1dbbe
Rework subreg_get_info

This isn't intended to change the behaviour, just rewrite the
existing logic in a different (and hopefully clearer) way.
The new form -- particularly the part based on the "block"
concept -- is easier to convert to polynomial sizes.

gcc/
2016-11-15  Richard Sandiford  <richard.sandiford@arm.com>
    Alan Hayward  <alan.hayward@arm.com>
    David Sherwood  <david.sherwood@arm.com>

* rtlanal.c (subreg_get_info): Use more local variables.
Remark that for HARD_REGNO_NREGS_HAS_PADDING, each scalar unit
occupies at least one register.  Assume that full hard registers
have consistent endianness.  Share previously-duplicated if block.
Rework the main handling so that it operates on independently-
addressable YMODE-sized blocks.  Use subreg_size_lowpart_offset
to check lowpart offsets, without trying to find an equivalent
integer mode first.  Handle WORDS_BIG_ENDIAN != REG_WORDS_BIG_ENDIAN
as a final register-endianness correction.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r242758
gcc/ChangeLog
gcc/rtlanal.c