Improve TI mode address offsets - these may either use LDP of 64-bit or
commitb831fe19696f3f4c17a807e046f6f071a395efe9
authorwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Dec 2016 14:44:45 +0000 (7 14:44 +0000)
committerwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Dec 2016 14:44:45 +0000 (7 14:44 +0000)
treeadf987aeed65942cde7f7134d237e7d4564799c4
parent182fc3569082ad410e964506214f5ca3f9b69cec
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@243346 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/aarch64/aarch64.md