[COMMITTED][AArch64] Tighten direct call pattern to repair -fno-plt
Jiong Wang
jiong.wang@arm.com
Thu Aug 6 16:16:00 GMT 2015
James Greenhalgh writes:
> On Thu, Jul 16, 2015 at 11:21:25AM +0100, Jiong Wang wrote:
>>
>> Jeff Law writes:
>>
>> > On 06/23/2015 02:29 AM, Ramana Radhakrishnan wrote:
>> >
>> >>> If you try disabling the REG_EQUAL note generation [*], you'll probably find a
>> >>> performance regression on arm32 (and probably on aarch64 as well?
>> >>> we only
>> >>
>> >> IMHO disabling the REG_EQUAL note generation is the wrong way to go about this.
>> > Agreed.
>> >
>> >> Irrespective of combine, as a first step we should fix the predicates
>> >> and the call expanders to prevent this sort of replacement in the
>> >> backends. Tightening the predicates in the call patterns will achieve
>> >> the same for you and then we can investigate the use of GOT_PREL. My
>> >> recollection of this is that you need to work out when it's more
>> >> beneficial to use GOT_PREL over GOT but it's been a while since I
>> >> looked in that area.
>> > Also agreed. This is primarily a backend issue with the call patterns.
>> >
>> > This is similar to the situation on the PA with the 32bit SOM runtime
>> > where direct and indirect calls have different calling conventions.
>> > Those different calling conventions combined with the early loading of
>> > the parameter registers in effect restricts us from being able to
>> > transform an indirect call into a direct call (combine) or vice-versa (cse).
>> >
>> > The way we handled this was to split the calls into two patterns, one
>> > for direct one for indirect and tightening their predicates appropriately.
>> >
>> > Jeff
>>
>> Attachment is the patch which repair -fno-plt support for AArch64.
>>
>> aarch64_is_noplt_call_p will only be true if:
>>
>> * gcc is generating position independent code.
>> * function symbol has declaration.
>> * either -fno-plt or "(no_plt)" attribute specified.
>> * it's a external function.
>>
>> OK for trunk?
>
> OK.
>
> Thanks,
> James
>
>>
>> 2015-07-16 Jiong Wang <jiong.wang@arm.com>
>>
>> gcc/
>> * config/aarch64/aarch64-protos.h (aarch64_is_noplt_call_p): New
>> declaration.
>> * config/aarch64/aarch64.c (aarch64_is_noplt_call_p): New function.
>> * config/aarch64/aarch64.md (call_value_symbol): Check noplt
>> scenarios.
>> (call_symbol): Ditto.
>>
>> gcc/testsuite/
>> * gcc.target/aarch64/noplt_1.c: New testcase.
>> * gcc.target/aarch64/noplt_2.c: Ditto.
>>
>
> ((Though do check the ChangeLog formatting when you commit :-).))
Thanks for review.
I realized I need to apply the same trick as I have done at
https://gcc.gnu.org/ml/gcc-patches/2015-07/msg01653.html,
then the included testcase can work well on any of tiny, small, large
model.
Committed the following patch:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: new-1.patch
Type: text/x-diff
Size: 5446 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20150806/e61114d2/attachment.bin>
More information about the Gcc-patches
mailing list