https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126844

            Bug ID: 126844
           Summary: gcc -march=native tuning defaults to baseline on
                    aarch64 systems with > 2 core types
           Product: gcc
           Version: 16.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: driver
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vivek at etla dot org
  Target Milestone: ---

Created attachment 65324
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=65324&action=edit
/proc/cpuinfo from the system that revealed the bug

gcc -march=native tuning for an aarch64 system with 3 core types does not
curently work. 

This is for three reasons:

 - Commit 00c22ba69d8e738a4789b30165ff9c925c508fc1 introduced a regression
 - Commit 06f64b95bafc06c318efc7b6d7c03cd34fe4be78 introduced a regression
 - The aarch64 driver only allowed for two different core types

----

Problem 1: commit 00c22ba69d8e738a4789b30165ff9c925c508fc1 added a 
leading 'V' to aarch64-arches.def names (so they could be used to
form valid C identifiers).

It also altered _most_ paths that inaspected those names to ignore
the new leading 'V', but it was not stripped from the call to 

   get_arch_from_id

in 

   host_detect_local_cpu in the -march path, which broke.

----

Problem 2: commit 06f64b95bafc06c318efc7b6d7c03cd34fe4be78 made

  host_detect_local_cpu

give up if `processed_exts` was unset, but `processed_exts` was never 
set if -mtune=… was passed

----

Problem 3: The aarch64 driver was only written to support 1 and 2 core type
setups (where a core type was defined by the implementer and part-id).

This was probably true when the driver was written, but there's at least
one shipping device with 3 core types.

----

This was discovered while testing on a system where there were 3 core types:
a520, a720, & x4.

I have written tests and fixes for these problems which I will attach now.

Reply via email to