diff options
author | Simon Tatham <simon.tatham@arm.com> | 2019-10-16 13:23:39 +0000 |
---|---|---|
committer | Simon Tatham <simon.tatham@arm.com> | 2019-10-16 13:23:39 +0000 |
commit | fdccf28697e5debe861247d218cbbecf9fd4323e (patch) | |
tree | 28c9671bd7abbf33abdede6289c395698042d190 | |
parent | 2f6da767f13b8fd81f840c211d405fea32ac9db7 (diff) | |
download | bcm5719-llvm-fdccf28697e5debe861247d218cbbecf9fd4323e.tar.gz bcm5719-llvm-fdccf28697e5debe861247d218cbbecf9fd4323e.zip |
[Driver,ARM] Make -mfloat-abi=soft turn off MVE.
Since `-mfloat-abi=soft` is taken to mean turning off all uses of the
FP registers, it should turn off the MVE vector instructions as well
as NEON and scalar FP. But it wasn't doing so.
So the options `-march=armv8.1-m.main+mve.fp+fp.dp -mfloat-abi=soft`
would cause the underlying LLVM to //not// support MVE (because it
knows the real target feature relationships and turned off MVE when
the `fpregs` feature was removed), but the clang layer still thought
it //was// supported, and would misleadingly define the feature macro
`__ARM_FEATURE_MVE`.
The ARM driver code already has a long list of feature names to turn
off when `-mfloat-abi=soft` is selected. The fix is to add the missing
entries `mve` and `mve.fp` to that list.
Reviewers: dmgreen
Subscribers: kristof.beyls, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D69025
llvm-svn: 375001
-rw-r--r-- | clang/lib/Driver/ToolChains/Arch/ARM.cpp | 1 | ||||
-rw-r--r-- | clang/test/Driver/arm-mfpu.c | 6 |
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChains/Arch/ARM.cpp b/clang/lib/Driver/ToolChains/Arch/ARM.cpp index da51b9267c3..b99a1b4d369 100644 --- a/clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ b/clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -465,6 +465,7 @@ fp16_fml_fallthrough: "vfp4", "vfp4sp", "vfp4d16", "vfp4d16sp", "fp-armv8", "fp-armv8sp", "fp-armv8d16", "fp-armv8d16sp", "fullfp16", "neon", "crypto", "dotprod", "fp16fml", + "mve", "mve.fp", "fp64", "d32", "fpregs"}) Features.push_back(Args.MakeArgString("-" + Feature)); } diff --git a/clang/test/Driver/arm-mfpu.c b/clang/test/Driver/arm-mfpu.c index 9a87b638567..b709622f720 100644 --- a/clang/test/Driver/arm-mfpu.c +++ b/clang/test/Driver/arm-mfpu.c @@ -397,3 +397,9 @@ // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+fp-armv8" // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+neon" // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+crypto" + +// RUN: %clang -target arm-none-none-eabi %s -march=armv8.1-m.main+mve.fp+fp.dp -mfloat-abi=soft -### -c 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-SOFTFLOATABI-INHIBITS-MVE %s +// CHECK-SOFTFLOATABI-INHIBITS-MVE-NOT: "-target-feature" "+mve" +// CHECK-SOFTFLOATABI-INHIBITS-MVE-DAG: "-target-feature" "-mve" +// CHECK-SOFTFLOATABI-INHIBITS-MVE-DAG: "-target-feature" "-mve.fp" |