[PATCH] Redirect call within specific target attribute among MV clones (PR ipa/82625).
Martin Liška
mliska@suse.cz
Mon Oct 8 10:46:00 GMT 2018
On 10/8/18 12:29 PM, Richard Biener wrote:
> On Mon, Oct 8, 2018 at 12:14 PM Martin Liška <mliska@suse.cz> wrote:
>>
>> On 10/8/18 11:55 AM, Richard Earnshaw (lists) wrote:
>>> On 08/10/18 10:47, Martin Liška wrote:
>>>> On 10/8/18 10:46 AM, Renlin Li wrote:
>>>>> Hi Martin,
>>>>>
>>>>> pr82625.C failed on compiler builds which don't support "default" and "avx" target.
>>>>> For example, arm/aarch64 native linux gcc compiler.
>>>>>
>>>>>
>>>>> As I found in this gcc wiki: https://gcc.gnu.org/wiki/FunctionMultiVersioning
>>>>> '''
>>>>> This support is available in GCC 4.8 and later. Support is only available in C++ for i386 targets.
>>>>> '''
>>>>>
>>>>> Should the test be guarded with a target selector or require function multi-versioning instead of ifunc?
>>>>
>>>> Hi.
>>>>
>>>> Sure, sorry for the breakage. I'm going to install following tested patch.
>>>>
>>>> Martin
>>>>
>>>>>
>>>>> Regards,
>>>>> Renlin
>>>>>
>>>>>
>>>>> On 10/04/2018 02:56 PM, Martin Liška wrote:
>>>>>> Hi.
>>>>>>
>>>>>> When having a pair of target clones where foo calls bar, if the target
>>>>>> attribute are equal we can redirect the call and not use ifunc dispatcher.
>>>>>>
>>>>>> Patch survives regression tests on x86_64-linux-gnu.
>>>>>> Ready for trunk?
>>>>>>
>>>>>> Martin
>>>>>>
>>>>>> gcc/ChangeLog:
>>>>>>
>>>>>> 2018-10-04 Martin Liska <mliska@suse.cz>
>>>>>>
>>>>>> PR ipa/82625
>>>>>> * multiple_target.c (redirect_to_specific_clone): New function.
>>>>>> (ipa_target_clone): Use it.
>>>>>> * tree-inline.c: Fix comment.
>>>>>>
>>>>>> gcc/testsuite/ChangeLog:
>>>>>>
>>>>>> 2018-10-04 Martin Liska <mliska@suse.cz>
>>>>>>
>>>>>> PR ipa/82625
>>>>>> * g++.dg/ext/pr82625.C: New test.
>>>>>> ---
>>>>>> gcc/multiple_target.c | 51 ++++++++++++++++++++++++++++++
>>>>>> gcc/testsuite/g++.dg/ext/pr82625.C | 36 +++++++++++++++++++++
>>>>>> gcc/tree-inline.c | 2 +-
>>>>>> 3 files changed, 88 insertions(+), 1 deletion(-)
>>>>>> create mode 100644 gcc/testsuite/g++.dg/ext/pr82625.C
>>>>>>
>>>>>>
>>>>
>>>>
>>>> 0001-Limit-a-MV-test-just-for-x86-target.patch
>>>>
>>>>
>>>> From e3053abe58eba832262db0af77980012010a642c Mon Sep 17 00:00:00 2001
>>>> From: marxin <mliska@suse.cz>
>>>> Date: Mon, 8 Oct 2018 11:07:29 +0200
>>>> Subject: [PATCH] Limit a MV test just for x86 target.
>>>>
>>>> gcc/testsuite/ChangeLog:
>>>>
>>>> 2018-10-08 Martin Liska <mliska@suse.cz>
>>>>
>>>> * g++.dg/ext/pr82625.C: Add dg-compile filter.
>>>> ---
>>>> gcc/testsuite/g++.dg/ext/pr82625.C | 1 +
>>>> 1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/gcc/testsuite/g++.dg/ext/pr82625.C b/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> index 47bd2df1104..59b174f8c51 100644
>>>> --- a/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> +++ b/gcc/testsuite/g++.dg/ext/pr82625.C
>>>> @@ -1,6 +1,7 @@
>>>> /* { dg-do compile } */
>>>> /* { dg-require-ifunc "" } */
>>>> /* { dg-options "-O2 -fdump-tree-optimized" } */
>>>> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
>>>>
>>>> __attribute__ ((target ("default")))
>>>> static unsigned foo(const char *buf, unsigned size) {
>>>>
>>>
>>> Which begs the question why is this not put under g++.target?
>>>
>>> R.
>>>
>>
>> Agree, apparently we have quite some tests that should be moved:
>> gcc/testsuite/g++.dg/ext/pr57362.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr57548.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr82625.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr85329-2.C:/* { dg-require-ifunc "" } */
>> gcc/testsuite/g++.dg/ext/pr85329.C:/* { dg-require-ifunc "" } */
>> ...
>> gcc/testsuite/g++.dg/ext/mv*.C
>
> You cannot move C++ tests to gcc.target/
I realized that we don't have ./gcc/testsuite/g++.target/i386 yet :/
Martin
>
>> I'll prepare patch for it.
>> Martin
>>
More information about the Gcc-patches
mailing list