Index: clang/lib/Driver/ToolChains/Arch/ARM.cpp =================================================================== --- clang/lib/Driver/ToolChains/Arch/ARM.cpp +++ clang/lib/Driver/ToolChains/Arch/ARM.cpp @@ -469,9 +469,12 @@ // Even though we remove MVE-FP, we still need to check if it was originally // present among the requested extensions, because it implies MVE-I, which // should not be disabled by -mfpu-none. - if (!llvm::is_contained(Features, "+mve") && - !llvm::is_contained(Features, "+mve.fp")) - Features.emplace_back("-fpregs"); + if (!llvm::is_contained(Features, "+mve")) { + if (llvm::is_contained(Features, "+mve.fp")) + Features.emplace_back("+mve"); + else + Features.emplace_back("-fpregs"); + } } // En/disable crc code generation. Index: clang/test/Driver/arm-mfpu.c =================================================================== --- clang/test/Driver/arm-mfpu.c +++ clang/test/Driver/arm-mfpu.c @@ -415,6 +415,7 @@ // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-neon" // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-crypto" // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-mve.fp" +// CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "+mve" // CHECK-MVEFP-FPUNONE-NOT: "-target-feature" "-fpregs"