On 02/20/2018 05:19 PM, Richard Sandiford wrote:
> Jakub Jelinek <[email protected]> writes:
>> On Tue, Feb 20, 2018 at 03:58:07PM +0000, Richard Sandiford wrote:
>>> Martin Liška <[email protected]> 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