[cfe-commits] r154061 - in /cfe/trunk: include/clang/Basic/DiagnosticDriverKinds.td lib/Driver/Tools.cpp test/Driver/arm-mfpmath.c
Chad Rosier
mcrosier at apple.com
Wed Apr 4 15:13:40 PDT 2012
Author: mcrosier
Date: Wed Apr 4 17:13:40 2012
New Revision: 154061
URL: http://llvm.org/viewvc/llvm-project?rev=154061&view=rev
Log:
[driver] When using the -mfpmath= option, add an error message when trying to
enable neonfp on a CPU that doesn't support NEON.
rdar://11108618
Modified:
cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
cfe/trunk/lib/Driver/Tools.cpp
cfe/trunk/test/Driver/arm-mfpmath.c
Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=154061&r1=154060&r2=154061&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Wed Apr 4 17:13:40 2012
@@ -71,6 +71,8 @@
"invalid float ABI '%0'">;
def err_drv_invalid_libcxx_deployment : Error<
"invalid deployment target for -stdlib=libc++ (requires %0 or later)">;
+def err_drv_invalid_feature : Error<
+ "invalid feature '%0' for CPU '%1'">;
def err_drv_I_dash_not_supported : Error<
"'%0' not supported, please use -iquote instead">;
Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=154061&r1=154060&r2=154061&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr 4 17:13:40 2012
@@ -547,17 +547,23 @@
// Handle -mfpmath=.
static void addFPMathArgs(const Driver &D, const Arg *A, const ArgList &Args,
- ArgStringList &CmdArgs) {
+ ArgStringList &CmdArgs, StringRef CPU) {
StringRef FPMath = A->getValue(Args);
// Set the target features based on the FPMath.
if (FPMath == "neon") {
CmdArgs.push_back("-target-feature");
CmdArgs.push_back("+neonfp");
+
+ if (CPU != "cortex-a8" && CPU != "cortex-a9" && CPU != "cortex-a9-mp")
+ D.Diag(diag::err_drv_invalid_feature) << "-mfpmath=neon" << CPU;
+
} else if (FPMath == "vfp" || FPMath == "vfp2" || FPMath == "vfp3" ||
FPMath == "vfp4") {
CmdArgs.push_back("-target-feature");
CmdArgs.push_back("-neonfp");
+
+ // FIXME: Add warnings when disabling a feature not present for a given CPU.
} else
D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);
}
@@ -710,7 +716,7 @@
// Honor -mfpmath=.
if (const Arg *A = Args.getLastArg(options::OPT_mfpmath_EQ))
- addFPMathArgs(D, A, Args, CmdArgs);
+ addFPMathArgs(D, A, Args, CmdArgs, getARMTargetCPU(Args, Triple));
// Setting -msoft-float effectively disables NEON because of the GCC
// implementation, although the same isn't true of VFP or VFP3.
@@ -2681,7 +2687,7 @@
// Honor -mfpmath=.
if (const Arg *A = Args.getLastArg(options::OPT_mfpmath_EQ))
- addFPMathArgs(D, A, Args, CmdArgs);
+ addFPMathArgs(D, A, Args, CmdArgs, getARMTargetCPU(Args, Triple));
}
void ClangAs::ConstructJob(Compilation &C, const JobAction &JA,
Modified: cfe/trunk/test/Driver/arm-mfpmath.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-mfpmath.c?rev=154061&r1=154060&r2=154061&view=diff
==============================================================================
--- cfe/trunk/test/Driver/arm-mfpmath.c (original)
+++ cfe/trunk/test/Driver/arm-mfpmath.c Wed Apr 4 17:13:40 2012
@@ -23,3 +23,7 @@
// RUN: %clang -target arm-apple-darwin10 -mfpmath=foo %s -### -c -o %t.o 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-ERROR %s
// CHECK-ERROR: clang compiler does not support '-mfpmath=foo'
+
+// RUN: %clang -target arm-apple-darwin10 -mcpu=arm1136j-s -mfpmath=neon %s -### -c -o %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-MCPU-ERROR %s
+// CHECK-MCPU-ERROR: error: invalid feature '-mfpmath=neon' for CPU 'arm1136j-s'
More information about the cfe-commits
mailing list