Improve TI mode address offsets - these may either use LDP of 64-bit or LDR of 128...
authorWilco Dijkstra <wdijkstr@arm.com>
Wed, 7 Dec 2016 14:44:45 +0000 (14:44 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Wed, 7 Dec 2016 14:44:45 +0000 (14:44 +0000)
commit8734dfacbbd841ccf1fb9682a631896013442807
treeadf987aeed65942cde7f7134d237e7d4564799c4
parentda88ea0265af5c877429a0c096cfdc0d4b3fecaa
Improve TI mode address offsets - these may either use LDP of 64-bit or LDR of 128-bit...

Improve TI mode address offsets - these may either use LDP of 64-bit or
LDR of 128-bit, so we need to use the correct intersection of offsets.
When splitting a large offset into base and offset, use a signed 9-bit
unscaled offset.

Remove the Ump constraint on movti and movtf instructions as this blocks
the reload optimizer from merging address CSEs (is this supposed to work
only on 'm' constraints?).  The result is improved codesize, especially
wrf and gamess in SPEC2006.

    gcc/
* config/aarch64/aarch64.md (movti_aarch64): Change Ump to m.
(movtf_aarch64): Likewise.
* config/aarch64/aarch64.c (aarch64_classify_address):
Use correct intersection of offsets.
(aarch64_legitimize_address_displacement): Use 9-bit signed offsets.
(aarch64_legitimize_address): Use 9-bit signed offsets for TI/TF mode.
Use 7-bit signed scaled mode for modes > 16 bytes.

From-SVN: r243346
gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.md