ix86_option_override_internal has if (opts->x_ix86_arch_string) opts->x_ix86_tune_string = opts->x_ix86_arch_string; if (!opts->x_ix86_tune_string) { opts->x_ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT]; ix86_tune_defaulted = 1; } /* opts->x_ix86_tune_string is set to opts->x_ix86_arch_string or defaulted. We need to use a sensible tune option. */ if (!strcmp (opts->x_ix86_tune_string, "generic") || !strcmp (opts->x_ix86_tune_string, "x86-64") || !strcmp (opts->x_ix86_tune_string, "i686")) { opts->x_ix86_tune_string = "generic"; } Why is opts->x_ix86_tune_string changed to "generic". If opts->x_ix86_tune_string is "generic". there is no need to change it to "generic". If an option is valid for -march=, it should also be valid for -mtune.
-mtune=i686 is also ignored: [hjl@gnu-6 gcc]$ cat /tmp/t.c #ifndef __tune_i686__ #error "bad" #endif [hjl@gnu-6 gcc]$ gcc -m32 -S /tmp/t.c -mtune=i686 /tmp/t.c:2:2: error: #error "bad" #error "bad" ^ [hjl@gnu-6 gcc]$
-march=i686 is also ignored: [hjl@gnu-6 gcc]$ gcc -m32 -S /tmp/t.c -march=i686 /tmp/t.c:2:2: error: #error "bad" #error "bad" ^ [hjl@gnu-6 gcc]$
Author: hjl Date: Thu Dec 26 16:10:55 2013 New Revision: 206213 URL: http://gcc.gnu.org/viewcvs?rev=206213&root=gcc&view=rev Log: Don't check/change generic/i686 tuning gcc/ PR target/59588 * config/i386/i386.c (ix86_option_override_internal): Don't check generic tuning. Don't change i686 tuning. gcc/testsuite/ PR target/59588 * gcc.target/i386/pr59588-1.c: New file. * gcc.target/i386/pr59588-2.c: Likewise. Added: trunk/gcc/testsuite/gcc.target/i386/pr59588-1.c trunk/gcc/testsuite/gcc.target/i386/pr59588-2.c Modified: trunk/gcc/ChangeLog trunk/gcc/config/i386/i386.c trunk/gcc/testsuite/ChangeLog
Fixed on trunk. No plan to backport to release branches.