simon_tatham created this revision. simon_tatham added a reviewer: dmgreen. Herald added subscribers: cfe-commits, kristof.beyls. Herald added a project: clang.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D69025 Files: clang/lib/Driver/ToolChains/Arch/ARM.cpp clang/test/Driver/arm-mfpu.c Index: clang/test/Driver/arm-mfpu.c =================================================================== --- clang/test/Driver/arm-mfpu.c +++ 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" Index: clang/lib/Driver/ToolChains/Arch/ARM.cpp =================================================================== --- clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -465,6 +465,7 @@ "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)); }
Index: clang/test/Driver/arm-mfpu.c =================================================================== --- clang/test/Driver/arm-mfpu.c +++ 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" Index: clang/lib/Driver/ToolChains/Arch/ARM.cpp =================================================================== --- clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -465,6 +465,7 @@ "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)); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits