On Tue, Sep 24, 2019 at 1:24 AM Kyrill Tkachov <kyrylo.tkac...@foss.arm.com> wrote: > > Hi Matt, > > On 9/24/19 5:04 AM, Matt Turner wrote: > > When -march=native is passed to host_detect_local_cpu to the backend, > > it overrides all command lines after it. That means > > > > $ gcc -march=native -march=armv8-a > > > > is treated as > > > > $ gcc -march=armv8-a -march=native > > > > Prune joined switches with Negative and RejectNegative to allow > > -march=armv8-a to override previous -march=native on command-line. > > > > This is the same fix as was applied for i386 in SVN revision 269164 > > but for > > aarch64 and arm. > > > The fix is ok for arm and LGTM for aarch64 FWIW.
Thanks! > How has this been tested? The problem was noticed in this bug report: https://bugs.gentoo.org/693522 I remembered seeing the i386 fix and I separately encountered the problem on ARM when building the pixman library which has iwMMXt code which requires march=iwmmxt (Could I bribe someone into fixing that by giving gcc an -miwmmxt flag?) I verified the fix works by patching gcc and seeing that nss (the package from the Gentoo bug report) successfully builds with CFLAGS="-march=native -O2 -pipe" SVN revision 269164 also added some tests to the gcc test suite, but I am not sufficiently familiar with building gcc and running the test suite to verify that any test I speculatively add actually works. > However... > > > > gcc/ > > > > PR driver/69471 > > * config/aarch64/aarch64.opt (march=): Add Negative(march=). > > (mtune=): Add Negative(mtune=). > > * config/arm/arm.opt: Likewise. > > --- > > gcc/config/aarch64/aarch64.opt | 5 +++-- > > gcc/config/arm/arm.opt | 4 ++-- > > 2 files changed, 5 insertions(+), 4 deletions(-) > > > > diff --git a/gcc/config/aarch64/aarch64.opt > > b/gcc/config/aarch64/aarch64.opt > > index 865b6a6d8ca..908dca23b3c 100644 > > --- a/gcc/config/aarch64/aarch64.opt > > +++ b/gcc/config/aarch64/aarch64.opt > > @@ -119,7 +119,8 @@ EnumValue > > Enum(aarch64_tls_size) String(48) Value(48) > > > > march= > > -Target RejectNegative ToLower Joined Var(aarch64_arch_string) > > +Target RejectNegative Negative(march=) ToLower Joined > > Var(aarch64_arch_string) > > + > > Use features of architecture ARCH. > > > > mcpu= > > > ... Looks like we'll need something similar for -mcpu. On arm and > aarch64 the -mcpu is the most commonly used option and that can also > take a "native" value that would suffer from the same issue I presume. Thank you. I've sent a second version with this addressed in reply to my initial patch. If the patch is okay, I think we'd appreciate it if it were backported to the gcc-8 branch as well.