1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00

[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
This commit is contained in:
Simon Tatham 2021-04-21 11:19:37 +01:00
parent 2a2d25a7be
commit 49b1d59516
2 changed files with 4 additions and 1 deletions

View File

@ -1716,7 +1716,9 @@ StringRef Triple::getARMCPUForArch(StringRef MArch) const {
break;
case llvm::Triple::Win32:
// FIXME: this is invalid for WindowsCE
return "cortex-a9";
if (ARM::parseArchVersion(MArch) <= 7)
return "cortex-a9";
break;
case llvm::Triple::IOS:
case llvm::Triple::MacOSX:
case llvm::Triple::TvOS:

View File

@ -1511,6 +1511,7 @@ TEST(TripleTest, getARMCPUForArch) {
{
llvm::Triple Triple("arm--win32");
EXPECT_EQ("cortex-a9", Triple.getARMCPUForArch());
EXPECT_EQ("generic", Triple.getARMCPUForArch("armv8-a"));
}
// Some alternative architectures
{