On 02/20/2018 05:26 PM, Martin Liška wrote:
> On 02/20/2018 05:19 PM, Richard Sandiford wrote:
>> Jakub Jelinek <ja...@redhat.com> writes:
>>> On Tue, Feb 20, 2018 at 03:58:07PM +0000, Richard Sandiford wrote:
>>>> Martin Liška <mli...@suse.cz> writes:
>>>>> Hi.
>>>>>
>>>>> Following patch adds "native" as a possible option for -march value on
>>>>> i386 target.  I have similar patches for other targets. Would it be
>>>>> possible to install the patch in current stage?
>>>>
>>>> [...]
>>>>
>>>>> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
>>>>> index d54e7301e84..361d4df2663 100644
>>>>> --- a/gcc/config/i386/i386.c
>>>>> +++ b/gcc/config/i386/i386.c
>>>>> @@ -4193,6 +4193,9 @@ ix86_option_override_internal (bool main_args_p,
>>>>>           || ((processor_alias_table[i].flags & PTA_64BIT) != 0)))
>>>>>     candidates.safe_push (processor_alias_table[i].name);
>>>>>  
>>>>> +      /* Add also "native" as possible value.  */
>>>>> +      candidates.safe_push ("native");
>>>>> +
>>>>>        char *s;
>>>>>        const char *hint
>>>>>   = candidates_list_and_hint (opts->x_ix86_arch_string, s, candidates);
>>>>
>>>> We should probably only do this if the driver supports -march=native.
>>>> I think for x86 that means HAVE_LOCAL_CPU_DETECT.
>>>
>>> Isn't the option available always?  It just doesn't do anything if
>>> /* If we are compiling with GCC where %EBX register is fixed, then the
>>>    driver will just ignore -march and -mtune "native" target and will leave
>>>    to the newly built compiler to generate code for its default target.  */
>>
>> It's only available for x86 hosts:
>>
>> /* -march=native handling only makes sense with compiler running on
>>    an x86 or x86_64 chip.  If changing this condition, also change
>>    the condition in driver-i386.c.  */
>> #if defined(__i386__) || defined(__x86_64__)
>> /* In driver-i386.c.  */
>> extern const char *host_detect_local_cpu (int argc, const char **argv);
>> #define EXTRA_SPEC_FUNCTIONS \
>>   { "local_cpu_detect", host_detect_local_cpu },
>> #define HAVE_LOCAL_CPU_DETECT
>> #endif
>>
>> Non-native hosts are obviously a niche case for x86, but it still
>> seems better to be consistent.
>>
>> Richard
>>
> 
> So would it enough to wrap 'candidates.safe_push ("native");' by
> #ifdef HAVE_LOCAL_CPU_DETECT
> ?
> 
> Thanks,
> Martin
> 

There's updated version of the patch I've just tested.

Martin
>From 8f1783a9017ec06c578fd644e46168ec5763d5ca Mon Sep 17 00:00:00 2001
From: marxin <mli...@suse.cz>
Date: Tue, 20 Feb 2018 14:21:05 +0100
Subject: [PATCH 3/3] Add "native" as a valid option value for -march= on i386
 (PR driver/83193).

gcc/ChangeLog:

2018-02-20  Martin Liska  <mli...@suse.cz>

	PR driver/83193
	* config/i386/i386.c (ix86_option_override_internal):
	Add "native" as a possible value.
---
 gcc/config/i386/i386.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index d54e7301e84..9f2c5218ae5 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -4193,6 +4193,11 @@ ix86_option_override_internal (bool main_args_p,
 		|| ((processor_alias_table[i].flags & PTA_64BIT) != 0)))
 	  candidates.safe_push (processor_alias_table[i].name);
 
+#ifdef HAVE_LOCAL_CPU_DETECT
+      /* Add also "native" as possible value.  */
+      candidates.safe_push ("native");
+#endif
+
       char *s;
       const char *hint
 	= candidates_list_and_hint (opts->x_ix86_arch_string, s, candidates);
-- 
2.16.1

Reply via email to