diff options
author | Nico Weber <nicolasweber@gmx.de> | 2015-04-29 21:16:40 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2015-04-29 21:16:40 +0000 |
commit | 6e0ebaea1fe18543bf5a371bba769a86f37d688d (patch) | |
tree | e3e72ff47c4a95f5c269229536b6eb462f3760da /clang/lib/Driver/Tools.cpp | |
parent | 59f0e3182d30c0e2899f4b894fafce54203f6dd0 (diff) | |
download | bcm5719-llvm-6e0ebaea1fe18543bf5a371bba769a86f37d688d.tar.gz bcm5719-llvm-6e0ebaea1fe18543bf5a371bba769a86f37d688d.zip |
Revert r236060, it caused PR23375.
llvm-svn: 236159
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 6fb9b54a018..10837996a3a 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -714,6 +714,29 @@ static void getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, const ArgList &Args, std::vector<const char *> &Features, bool ForAS) { + StringRef FloatABI = tools::arm::getARMFloatABI(D, Args, Triple); + if (!ForAS) { + // FIXME: Note, this is a hack, the LLVM backend doesn't actually use these + // yet (it uses the -mfloat-abi and -msoft-float options), and it is + // stripped out by the ARM target. We should probably pass this a new + // -target-option, which is handled by the -cc1/-cc1as invocation. + // + // FIXME2: For consistency, it would be ideal if we set up the target + // machine state the same when using the frontend or the assembler. We don't + // currently do that for the assembler, we pass the options directly to the + // backend and never even instantiate the frontend TargetInfo. If we did, + // and used its handleTargetFeatures hook, then we could ensure the + // assembler and the frontend behave the same. + + // Use software floating point operations? + if (FloatABI == "soft") + Features.push_back("+soft-float"); + + // Use software floating point argument passing? + if (FloatABI != "hard") + Features.push_back("+soft-float-abi"); + } + // Honor -mfpu=. if (const Arg *A = Args.getLastArg(options::OPT_mfpu_EQ)) getARMFPUFeatures(D, A, Args, Features); @@ -722,7 +745,6 @@ static void getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, // Setting -msoft-float effectively disables NEON because of the GCC // implementation, although the same isn't true of VFP or VFP3. - StringRef FloatABI = tools::arm::getARMFloatABI(D, Args, Triple); if (FloatABI == "soft") { Features.push_back("-neon"); // Also need to explicitly disable features which imply NEON. |