On Apr 6, 2012, at 3:13 PM, Sandeep Patel wrote: > Is this really necessary as a driver-level option? > > Can't this be inferred from other existing tuning choice (e.g. which > core IP is used)?
No, that's why it was added. > How likely is somebody going to want to change this? One of our internal teams requires the ability to use VFP as opposed to NEON. Chad > deep > > On Wed, Apr 4, 2012 at 8:39 PM, Chad Rosier <[email protected]> wrote: >> Author: mcrosier >> Date: Wed Apr 4 15:39:32 2012 >> New Revision: 154046 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=154046&view=rev >> Log: >> [driver] Create a new -mfpmath= option, which is used to control whether >> clang >> uses Neon instructions for single-precision FP. >> >> -mfpmath=neon is analogous to passing llc -mattr=+neonfp. >> -mfpmath=[vfp|vfp2|vfp3|vfp4] is analogous to passing llc -mattr=-neonfp. >> >> rdar://11108618 >> >> Added: >> cfe/trunk/test/Driver/arm-mfpmath.c >> Modified: >> cfe/trunk/include/clang/Driver/Options.td >> cfe/trunk/lib/Basic/Targets.cpp >> cfe/trunk/lib/Driver/Tools.cpp >> >> Modified: cfe/trunk/include/clang/Driver/Options.td >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=154046&r1=154045&r2=154046&view=diff >> ============================================================================== >> --- cfe/trunk/include/clang/Driver/Options.td (original) >> +++ cfe/trunk/include/clang/Driver/Options.td Wed Apr 4 15:39:32 2012 >> @@ -606,6 +606,7 @@ >> def mdynamic_no_pic : Joined<"-mdynamic-no-pic">, Group<m_Group>, >> Flags<[NoArgumentUnused]>; >> def mfix_and_continue : Flag<"-mfix-and-continue">, >> Group<clang_ignored_m_Group>; >> def mfloat_abi_EQ : Joined<"-mfloat-abi=">, Group<m_Group>; >> +def mfpmath_EQ : Joined<"-mfpmath=">, Group<m_Group>; >> def mfpu_EQ : Joined<"-mfpu=">, Group<m_Group>; >> def mglobal_merge : Flag<"-mglobal-merge">, Group<m_Group>; >> def mhard_float : Flag<"-mhard-float">, Group<m_Group>; >> >> Modified: cfe/trunk/lib/Basic/Targets.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=154046&r1=154045&r2=154046&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Basic/Targets.cpp (original) >> +++ cfe/trunk/lib/Basic/Targets.cpp Wed Apr 4 15:39:32 2012 >> @@ -2730,7 +2730,8 @@ >> StringRef Name, >> bool Enabled) const { >> if (Name == "soft-float" || Name == "soft-float-abi" || >> - Name == "vfp2" || Name == "vfp3" || Name == "neon" || Name == >> "d16") { >> + Name == "vfp2" || Name == "vfp3" || Name == "neon" || Name == "d16" >> || >> + Name == "neonfp") { >> Features[Name] = Enabled; >> } else >> return false; >> >> Modified: cfe/trunk/lib/Driver/Tools.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=154046&r1=154045&r2=154046&view=diff >> ============================================================================== >> --- cfe/trunk/lib/Driver/Tools.cpp (original) >> +++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr 4 15:39:32 2012 >> @@ -504,6 +504,23 @@ >> } >> } >> >> +// Handle -mfpmath=. >> +static void addFPMathArgs(const Driver &D, const Arg *A, const ArgList >> &Args, >> + ArgStringList &CmdArgs) { >> + 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"); >> + } else if (FPMath == "vfp" || FPMath == "vfp2" || FPMath == "vfp3" || >> + FPMath == "vfp4") { >> + CmdArgs.push_back("-target-feature"); >> + CmdArgs.push_back("-neonfp"); >> + } else >> + D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args); >> +} >> + >> void Clang::AddARMTargetArgs(const ArgList &Args, >> ArgStringList &CmdArgs, >> bool KernelOrKext) const { >> @@ -686,6 +703,10 @@ >> D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args); >> } >> >> + // Honor -mfpmath=. >> + if (const Arg *A = Args.getLastArg(options::OPT_mfpmath_EQ)) >> + addFPMathArgs(D, A, Args, CmdArgs); >> + >> // Setting -msoft-float effectively disables NEON because of the GCC >> // implementation, although the same isn't true of VFP or VFP3. >> if (FloatABI == "soft") { >> @@ -2688,6 +2709,10 @@ >> } else >> D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args); >> } >> + >> + // Honor -mfpmath=. >> + if (const Arg *A = Args.getLastArg(options::OPT_mfpmath_EQ)) >> + addFPMathArgs(D, A, Args, CmdArgs); >> } >> >> void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, >> >> Added: cfe/trunk/test/Driver/arm-mfpmath.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/arm-mfpmath.c?rev=154046&view=auto >> ============================================================================== >> --- cfe/trunk/test/Driver/arm-mfpmath.c (added) >> +++ cfe/trunk/test/Driver/arm-mfpmath.c Wed Apr 4 15:39:32 2012 >> @@ -0,0 +1,25 @@ >> +// Test different values of -mfpmath. >> + >> +// RUN: %clang -target arm-apple-darwin10 -mfpmath=vfp %s -### -c -o %t.o >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-VFP %s >> +// CHECK-VFP: "-target-feature" "-neonfp" >> + >> +// RUN: %clang -target arm-apple-darwin10 -mfpmath=vfp2 %s -### -c -o %t.o >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-VFP2 %s >> +// CHECK-VFP2: "-target-feature" "-neonfp" >> + >> +// RUN: %clang -target arm-apple-darwin10 -mfpmath=vfp3 %s -### -c -o %t.o >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-VFP3 %s >> +// CHECK-VFP3: "-target-feature" "-neonfp" >> + >> +// RUN: %clang -target arm-apple-darwin10 -mfpmath=vfp4 %s -### -c -o %t.o >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-VFP4 %s >> +// CHECK-VFP4: "-target-feature" "-neonfp" >> + >> +// RUN: %clang -target arm-apple-darwin10 -mfpmath=neon %s -### -c -o %t.o >> 2>&1 \ >> +// RUN: | FileCheck --check-prefix=CHECK-NEON %s >> +// CHECK-NEON: "-target-feature" "+neonfp" >> + >> +// 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' >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
