This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [AArch64] Generate load-pairs when the last load clobbers the address register [2/2]


On 11/07/18 17:48, Jackson Woodruff wrote:
> Hi Sudi,
> 
> On 07/10/2018 02:29 PM, Sudakshina Das wrote:
>> Hi Jackson
>>
>>
>> On Tuesday 10 July 2018 09:37 AM, Jackson Woodruff wrote:
>>> Hi all,
>>>
>>> This patch resolves PR86014.  It does so by noticing that the last
>>> load may clobber the address register without issue (regardless of
>>> where it exists in the final ldp/stp sequence). That check has been
>>> changed so that the last register may be clobbered and the testcase
>>> (gcc.target/aarch64/ldp_stp_10.c) now passes.
>>>
>>> Bootstrap and regtest OK.
>>>
>>> OK for trunk?
>>>
>>> Jackson
>>>
>>> Changelog:
>>>
>>> gcc/
>>>
>>> 2018-06-25  Jackson Woodruff  <jackson.woodruff@arm.com>
>>>
>>>         PR target/86014
>>>         * config/aarch64/aarch64.c
>>> (aarch64_operands_adjust_ok_for_ldpstp):
>>>         Remove address clobber check on last register.
>>>
>> This looks good to me but you will need a maintainer to approve it.
>> The only
>> thing I would add is that if you could move the comment on top of the
>> for loop
>> to this patch. That is, keep the original
>> /* Check if the addresses are clobbered by load.  */
>> in your [1/2] and make the comment change in [2/2].
> Thanks, change made.  OK for trunk?
> 
> Thanks,
> 
> Jackson
> 
> pr86014.patch
> 
> 
> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index da44b33b2bc12f9aa2122cf5194e244437fb31a5..8a027974e9772cacf5f5cb8ec61e8ef62187e879 100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -17071,9 +17071,10 @@ aarch64_operands_adjust_ok_for_ldpstp (rtx *operands, bool load,
>  	return false;
>      }
>  
> -  /* Check if addresses are clobbered by load.  */
> +  /* Only the last register in the order in which they occur
> +     may be clobbered by the load.  */
>    if (load)
> -    for (int i = 0; i < num_instructions; i++)
> +    for (int i = 0; i < num_instructions - 1; i++)
>        if (reg_mentioned_p (reg[i], mem[i]))
>  	return false;
>  
> 

Can we have a new test for this?

Also, if rclass (which you calculate later) is FP_REGS, then the test is
redundant since mems can never use FP registers as a base register.

R.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]