[all-commits] [llvm/llvm-project] 77e170: [ARM][Driver][Windows] Allow command-line upgrade ...

Simon Tatham via All-commits all-commits at lists.llvm.org
Wed Apr 21 03:20:37 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 77e170db8678e582af986ffe27e12df196e4357b
      https://github.com/llvm/llvm-project/commit/77e170db8678e582af986ffe27e12df196e4357b
  Author: Simon Tatham <simon.tatham at arm.com>
  Date:   2021-04-21 (Wed, 21 Apr 2021)

  Changed paths:
    A clang/test/Driver/woa-crypto.c
    M llvm/lib/Support/Triple.cpp
    M llvm/unittests/ADT/TripleTest.cpp

  Log Message:
  -----------
  [ARM][Driver][Windows] Allow command-line upgrade to Armv8.

If you gave clang the options `--target=arm-pc-windows-msvc` and
`-march=armv8-a+crypto` together, the crypto extension would not be
enabled in the compilation, and you'd see the following warning
message suggesting that the 'armv8-a' had been ignored:

  clang: warning: ignoring extension 'crypto' because the 'armv7-a' architecture does not support it [-Winvalid-command-line-argument]

This happens because Triple::getARMCPUForArch(), for the Win32 OS,
unconditionally returns "cortex-a9" (an Armv7 CPU) regardless of
MArch, which overrides the architecture setting on the command line.

I don't think that the combination of Windows and AArch32 _should_
unconditionally outlaw the use of the crypto extension. MSVC itself
doesn't think so: you can perfectly well compile Thumb crypto code
using its AArch32-targeted compiler.

All the other default CPUs in the same switch statement are
conditional on a particular MArch setting; this is the only one that
returns a particular CPU _regardless_ of MArch. So I've fixed this one
by adding a condition, so that if you ask for an architecture *above*
v7, the default of Cortex-A9 no longer overrides it.

Reviewed By: mstorsjo

Differential Revision: https://reviews.llvm.org/D100937




More information about the All-commits mailing list