svn commit: r353739 - in head/contrib/llvm/tools/clang/lib/Driver/ToolChains: . Arch
Dimitry Andric
dim at FreeBSD.org
Fri Oct 18 20:05:29 UTC 2019
Author: dim
Date: Fri Oct 18 20:05:27 2019
New Revision: 353739
URL: https://svnweb.freebsd.org/changeset/base/353739
Log:
Pull in r374154 from upstream clang trunk (by Simon Atanasyan):
[mips] Set default float ABI to "soft" on FreeBSD
Initial patch by Kyle Evans.
Fix PR43596
Requested by: kevans
MFC after: 1 month
X-MFC-With: r353358
Modified:
head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp
head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h
head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp
head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp
Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp Fri Oct 18 20:02:46 2019 (r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.cpp Fri Oct 18 20:05:27 2019 (r353739)
@@ -149,7 +149,8 @@ StringRef mips::getGnuCompatibleMipsABIName(StringRef
// Select the MIPS float ABI as determined by -msoft-float, -mhard-float,
// and -mfloat-abi=.
-mips::FloatABI mips::getMipsFloatABI(const Driver &D, const ArgList &Args) {
+mips::FloatABI mips::getMipsFloatABI(const Driver &D, const ArgList &Args,
+ const llvm::Triple &Triple) {
mips::FloatABI ABI = mips::FloatABI::Invalid;
if (Arg *A =
Args.getLastArg(options::OPT_msoft_float, options::OPT_mhard_float,
@@ -172,10 +173,15 @@ mips::FloatABI mips::getMipsFloatABI(const Driver &D,
// If unspecified, choose the default based on the platform.
if (ABI == mips::FloatABI::Invalid) {
- // Assume "hard", because it's a default value used by gcc.
- // When we start to recognize specific target MIPS processors,
- // we will be able to select the default more correctly.
- ABI = mips::FloatABI::Hard;
+ if (Triple.isOSFreeBSD()) {
+ // For FreeBSD, assume "soft" on all flavors of MIPS.
+ ABI = mips::FloatABI::Soft;
+ } else {
+ // Assume "hard", because it's a default value used by gcc.
+ // When we start to recognize specific target MIPS processors,
+ // we will be able to select the default more correctly.
+ ABI = mips::FloatABI::Hard;
+ }
}
assert(ABI != mips::FloatABI::Invalid && "must select an ABI");
@@ -267,7 +273,7 @@ void mips::getMIPSTargetFeatures(const Driver &D, cons
D.Diag(diag::warn_drv_unsupported_longcalls) << (ABICallsArg ? 0 : 1);
}
- mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args);
+ mips::FloatABI FloatABI = mips::getMipsFloatABI(D, Args, Triple);
if (FloatABI == mips::FloatABI::Soft) {
// FIXME: Note, this is a hack. We need to pass the selected float
// mode to the MipsTargetInfoBase to define appropriate macros there.
Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h Fri Oct 18 20:02:46 2019 (r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Arch/Mips.h Fri Oct 18 20:05:27 2019 (r353739)
@@ -38,7 +38,8 @@ void getMIPSTargetFeatures(const Driver &D, const llvm
const llvm::opt::ArgList &Args,
std::vector<StringRef> &Features);
StringRef getGnuCompatibleMipsABIName(StringRef ABI);
-mips::FloatABI getMipsFloatABI(const Driver &D, const llvm::opt::ArgList &Args);
+mips::FloatABI getMipsFloatABI(const Driver &D, const llvm::opt::ArgList &Args,
+ const llvm::Triple &Triple);
std::string getMipsABILibSuffix(const llvm::opt::ArgList &Args,
const llvm::Triple &Triple);
bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value);
Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp Fri Oct 18 20:02:46 2019 (r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp Fri Oct 18 20:05:27 2019 (r353739)
@@ -1646,7 +1646,7 @@ void Clang::AddMIPSTargetArgs(const ArgList &Args,
CmdArgs.push_back("-target-abi");
CmdArgs.push_back(ABIName.data());
- mips::FloatABI ABI = mips::getMipsFloatABI(D, Args);
+ mips::FloatABI ABI = mips::getMipsFloatABI(D, Args, Triple);
if (ABI == mips::FloatABI::Soft) {
// Floating point operations and argument passing are soft.
CmdArgs.push_back("-msoft-float");
Modified: head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp Fri Oct 18 20:02:46 2019 (r353738)
+++ head/contrib/llvm/tools/clang/lib/Driver/ToolChains/Gnu.cpp Fri Oct 18 20:05:27 2019 (r353739)
@@ -819,7 +819,8 @@ void tools::gnutools::Assembler::ConstructJob(Compilat
A->render(Args, CmdArgs);
} else if (mips::shouldUseFPXX(
Args, getToolChain().getTriple(), CPUName, ABIName,
- mips::getMipsFloatABI(getToolChain().getDriver(), Args)))
+ mips::getMipsFloatABI(getToolChain().getDriver(), Args,
+ getToolChain().getTriple())))
CmdArgs.push_back("-mfpxx");
// Pass on -mmips16 or -mno-mips16. However, the assembler equivalent of
More information about the svn-src-all
mailing list