Hi Andre,

On 07/06/18 18:01, Andre Simoes Dias Vieira wrote:
Hi,

The address printing for LDP/STP patterns that don't use parallel was not 
working properly when dealing with a post-index addressing mode. The post-index 
address printing uses the mode's size to determine the post-index immediate. To 
fix an earlier issue with range checking of these instructions this mode was 
being hard-coded to DFmode for the operand modifier 'y', which was added for 
this particular pattern.  This was done because the range of LDP/STP for two 
64-bit operands is the same as a single 64-bit load/store. Instead of 
hard-coding the mode early on we introduce a new address query type 
'ADDR_QUERY_LDP_STP_N' to be used for such cases. This will halve the mode used 
for computing the range check, but leave the original mode of the operand as 
is, making sure the post-index printing is correct.

Bootstrapped and tested on aarch64-none-linux-gnu.

Is this OK for trunk?

This looks ok to me, but you'll need approval from a maintainer (CC'ed them for 
you).

Thanks,
Kyrill


gcc
2018-06-07  Andre Vieira <andre.simoesdiasvie...@arm.com>

        * config/aarch64/aarch64-protos.h (aarch64_addr_query_type): Add new
        enum value 'ADDR_QUERY_LDP_STP_N'.
        * config/aarch64/aarch64.c (aarch64_addr_query_type): Likewise.
        (aarch64_print_address_internal): Add declaration.
        (aarch64_print_ldpstp_address): Remove.
        (aarch64_classify_address): Adapt mode for 'ADDR_QUERY_LDP_STP_N'.
        (aarch64_print_operand): Change printing of 'y'.
        * config/aarch64/predicates.md (aarch64_mem_pair_lanes_operand): Use
        new enum value 'ADDR_QUERY_LDP_STP_N', don't hardcode mode and use
        'true' rather than '1'.
        * gcc/config/aarch64/constraints.md (Uml): Likewise.

Reply via email to