Revert changes in r218863, r218864

Summary: The changes introduced in the above two commits are giving
a rough time to one of the build bots. Reverting the changes for the
moment so that the bot can go green again.

Change-Id: Id19f6cb2a8bc292631fac2262268927563d820c2
llvm-svn: 218970
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 28e92f9..99e34e4 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -581,24 +581,14 @@
     D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);
 }
 
-// Select the float ABI as determined by -msoft-float, -mhard-float,
-// -mfpu=... and -mfloat-abi=...
+// Select the float ABI as determined by -msoft-float, -mhard-float, and
+// -mfloat-abi=.
 StringRef tools::arm::getARMFloatABI(const Driver &D, const ArgList &Args,
-                                     const llvm::Triple &Triple,
-                                     bool *ExplicitNoFloat) {
-
-  // FIXME: -msoft-float and -mhard-float identify the nature of floating point
-  // ops, whereas -mfloat-abi=... identifies the floating point argument passing
-  // convention. But here we are mushing them together into FloatABI = soft/
-  // softfp/hard, which is a bit confusing. For example, this means -msoft-float
-  // and -mfloat-abi=soft are equivalent options to clang. But when we pass
-  // arguments to the backend (AddARMTargetArgs), these two options take their
-  // original interpretations.
+                                     const llvm::Triple &Triple) {
   StringRef FloatABI;
-  const Arg *A = Args.getLastArg(options::OPT_msoft_float,
-                                 options::OPT_mhard_float,
-                                 options::OPT_mfloat_abi_EQ);
-  if (A) {
+  if (Arg *A = Args.getLastArg(options::OPT_msoft_float,
+                               options::OPT_mhard_float,
+                               options::OPT_mfloat_abi_EQ)) {
     if (A->getOption().matches(options::OPT_msoft_float))
       FloatABI = "soft";
     else if (A->getOption().matches(options::OPT_mhard_float))
@@ -613,31 +603,6 @@
     }
   }
 
-  // Some -mfpu=... options are incompatible with some mfloat-abi=... options
-  if (Arg *B = Args.getLastArg(options::OPT_mfpu_EQ)) {
-    StringRef FPU = B->getValue();
-    if (FPU == "none") {
-      // Signal incompatible -mfloat-abi=... options
-      if (FloatABI == "hard")
-        D.Diag(diag::warn_drv_implied_soft_float_conflict)
-          << B->getAsString(Args) << A->getAsString(Args);
-      else if (FloatABI == "softfp")
-        D.Diag(diag::warn_drv_implied_soft_float_assumed)
-          << B->getAsString(Args) << A->getAsString(Args);
-      // Assume soft-float
-      FloatABI = "soft";
-    } else if (FloatABI.empty() || FloatABI == "soft") {
-      // Need -mhard-float for floating point ops
-      FloatABI = "softfp";
-    } 
-  }
-
-  // This allows us to differentiate between a user specified soft-float and
-  // an inferred soft-float. The latter may be overridden under other conditions
-  // but the former has higher priority.
-  if (FloatABI == "soft" && ExplicitNoFloat)
-    *ExplicitNoFloat = true;
-
   // If unspecified, choose the default based on the platform.
   if (FloatABI.empty()) {
     switch (Triple.getOS()) {
@@ -716,8 +681,7 @@
                                  const ArgList &Args,
                                  std::vector<const char *> &Features,
                                  bool ForAS) {
-  bool ExplicitNoFloat = false;
-  StringRef FloatABI = tools::arm::getARMFloatABI(D, Args, Triple, &ExplicitNoFloat);
+  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
@@ -752,14 +716,6 @@
     Features.push_back("-neon");
     // Also need to explicitly disable features which imply NEON.
     Features.push_back("-crypto");
-    // Disable remaining floating-point features if soft-float is explicitly
-    // requested.
-    if (ExplicitNoFloat) {
-      Features.push_back("-vfp2");
-      Features.push_back("-vfp3");
-      Features.push_back("-vfp4");
-      Features.push_back("-fp-armv8");
-    }
   }
 
   // En/disable crc