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