aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2017-11-29 12:22:06 +0000
committerWilco Dijkstra <wilco@gcc.gnu.org>2017-11-29 12:22:06 +0000
commite69a816d8f323ba1f2660480da8e73ef3b30780d (patch)
tree231273b6d07fa122a9132d96525cae3b118d0c9d /gcc/tree.c
parent65d5e454e5944531df80d0a9b5dcf2344c146fb8 (diff)
downloadgcc-e69a816d8f323ba1f2660480da8e73ef3b30780d.zip
gcc-e69a816d8f323ba1f2660480da8e73ef3b30780d.tar.gz
gcc-e69a816d8f323ba1f2660480da8e73ef3b30780d.tar.bz2
[AArch64] Fix ICE due to store_pair_lanes
The recently added store_pair_lanes causes ICEs in output_operand. This is due to aarch64_classify_address treating it like a 128-bit STR rather than a STP. The valid immediate offsets don't fully overlap, causing it to return false. Eg. offset 264 is a valid 8-byte STP offset but not a valid 16-byte STR offset since it isn't a multiple of 16. The original instruction isn't passed in the printing code, so the context is unclear. The solution is to add a new operand formatting specifier which is used for LDP/STP instructions like this. This, like the Uml constraint that applies to store_pair_lanes, uses PARALLEL when calling aarch64_classify_address so that it knows it is an STP. Also add the 'z' specifier for future use by load/store pair instructions. gcc/ * config/aarch64/aarch64.c (aarch64_print_operand): Add new cases for printing LDP/STP memory addresses. (aarch64_print_address_internal): Renamed from aarch64_print_operand_address, added parameter, add Pmode check. (aarch64_print_ldpstp_address): New function for LDP/STP addresses. (aarch64_print_operand_address): Indirect to aarch64_print_address_internal. * config/aarch64/aarch64-simd.md (store_pair_lanes): Use new 'y' operand output specifier. From-SVN: r255230
Diffstat (limited to 'gcc/tree.c')
0 files changed, 0 insertions, 0 deletions