[Bug target/59587] New: cpu_names in i386.c is accessed with wrong index
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Dec 23 22:11:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59587
Bug ID: 59587
Summary: cpu_names in i386.c is accessed with wrong index
Product: gcc
Version: 4.9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: ubizjak at gmail dot com
i386.c has
static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
{
"generic",
...
"btver2"
};
...
if (!opts->x_ix86_tune_string)
{
opts->x_ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
ix86_tune_defaulted = 1;
}
...
fprintf (file, "%*sarch = %d (%s)\n",
indent, "",
ptr->arch,
((ptr->arch < TARGET_CPU_DEFAULT_max)
? cpu_names[ptr->arch]
: "<unknown>"));
fprintf (file, "%*stune = %d (%s)\n",
indent, "",
ptr->tune,
((ptr->tune < TARGET_CPU_DEFAULT_max)
? cpu_names[ptr->tune]
: "<unknown>"));
But ptr->arch and ptr->tune are set by
ptr->arch = ix86_arch;
ptr->schedule = ix86_schedule;
ptr->tune = ix86_tune;
ix86_arch is set by
/* Which instruction set architecture to use. */
enum processor_type ix86_arch;
ix86_arch = processor_alias_table[i].processor;
and ix86_tune is set by
/* Which cpu are we optimizing for. */
enum processor_type ix86_tune;
ix86_tune = processor_alias_table[i].processor;
We are using enum processor_type as index to access array of
enum target_cpu_default
enum target_cpu_default
{
TARGET_CPU_DEFAULT_generic = 0,
...
TARGET_CPU_DEFAULT_max
};
x86 backend only uses TARGET_CPU_DEFAULT_generic to set up the
default tuning:
#ifndef TARGET_CPU_DEFAULT
#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
#endif
...
if (!opts->x_ix86_tune_string)
{
opts->x_ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
ix86_tune_defaulted = 1;
}
We never define a different TARGET_CPU_DEFAULT. When GCC is
configured with --with-arch=/--with-cpu=, we have
[hjl@gnu-6 build-x86_64-linux]$ cat gcc/configargs.h
/* Generated automatically. */
static const char configuration_arguments[] =
"/export/gnu/import/git/gcc/configure --enable-languages=c,c++,fortran
--disable-bootstrap --prefix=/usr/gcc-4.9.0 --with-local-prefix=/usr/local
--enable-gnu-indirect-function --with-fpmath=sse";
static const char thread_model[] = "posix";
static const struct {
const char *name, *value;
} configure_default_options[] = { { "cpu", "generic" }, { "arch", "x86-64" } };
[hjl@gnu-6 build-x86_64-linux]$
which passes -march=/-mtune= to toplev.c.
More information about the Gcc-bugs
mailing list