diff --git a/include/clang/Driver/Options.td b/include/clang/Driver/Options.td
index 714943d..42b3a41 100644
--- a/include/clang/Driver/Options.td
+++ b/include/clang/Driver/Options.td
@@ -1227,6 +1227,8 @@
 def mno_rdseed : Flag<["-"], "mno-rdseed">, Group<m_x86_Features_Group>;
 def mno_adx : Flag<["-"], "mno-adx">, Group<m_x86_Features_Group>;
 def mno_sha : Flag<["-"], "mno-sha">, Group<m_x86_Features_Group>;
+def malign_double : Flag<["-"], "malign-double">,  Group<m_x86_Features_Group>; // @LOCALMOD
+def mnoalign_double : Flag<["-"], "mno-align-double">,  Group<m_x86_Features_Group>; // @LOCALMOD
 
 def munaligned_access : Flag<["-"], "munaligned-access">, Group<m_arm_Features_Group>,
   HelpText<"Allow memory accesses to be unaligned (AArch32/AArch64 only)">;
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index f8a2882..4cfd0cf 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -758,8 +758,7 @@
     if (Triple.getArch() == llvm::Triple::arm) {
       // Handled in ARM's setABI().
     } else if (Triple.getArch() == llvm::Triple::x86) {
-      // @LOCALMOD MERGETODO: upstream this if it actually works.
-      this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32-S128";
+      // Handled in X86_32's setDescriptionString.
     } else if (Triple.getArch() == llvm::Triple::x86_64) {
       this->DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32:64-S128";
     } else if (Triple.getArch() == llvm::Triple::mipsel) {
@@ -3460,13 +3459,23 @@
 
 // X86-32 generic target
 class X86_32TargetInfo : public X86TargetInfo {
+  // @LOCALMOD-START
+  virtual void setDescriptionString() {
+    if (getTriple().isOSNaCl())
+      DescriptionString = "e-m:e-p:32:32-i64:64-n8:16:32-S128";
+    else if (HasAlignedDouble)
+      DescriptionString = "e-m:e-p:32:32-i64:64-f80:32-n8:16:32-S128";
+    else
+      DescriptionString = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128";
+  }
+  bool HasAlignedDouble;
+  // @LOCALMOD-END
 public:
   X86_32TargetInfo(const llvm::Triple &Triple) : X86TargetInfo(Triple) {
     DoubleAlign = LongLongAlign = 32;
     LongDoubleWidth = 96;
     LongDoubleAlign = 32;
     SuitableAlign = 128;
-    DescriptionString = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128";
     SizeType = UnsignedInt;
     PtrDiffType = SignedInt;
     IntPtrType = SignedInt;
@@ -3511,6 +3520,21 @@
 
     return X86TargetInfo::validateOperandSize(Constraint, Size);
   }
+  // @LOCALMOD-START
+  bool handleTargetFeatures(std::vector<std::string> &Features,
+                            DiagnosticsEngine &Diags) override {
+    HasAlignedDouble = false;
+    auto it = std::find(Features.begin(), Features.end(), "+align-double");
+    if (it != Features.end()) {
+      HasAlignedDouble = true;
+      Features.erase(it);
+    }
+
+    setDescriptionString();
+
+    return X86TargetInfo::handleTargetFeatures(Features, Diags);
+  }
+  // @LOCALMOD-END
 };
 
 class NetBSDI386TargetInfo : public NetBSDTargetInfo<X86_32TargetInfo> {
@@ -3550,6 +3574,11 @@
 };
 
 class DarwinI386TargetInfo : public DarwinTargetInfo<X86_32TargetInfo> {
+  // @LOCALMOD-START
+  void setDescriptionString() override {
+    DescriptionString = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128";
+  }
+  // @LOCALMOD-END
 public:
   DarwinI386TargetInfo(const llvm::Triple &Triple)
       : DarwinTargetInfo<X86_32TargetInfo>(Triple) {
@@ -3559,7 +3588,6 @@
     MaxVectorAlign = 256;
     SizeType = UnsignedLong;
     IntPtrType = SignedLong;
-    DescriptionString = "e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128";
     HasAlignMac68kSupport = true;
   }
 
@@ -3567,15 +3595,19 @@
 
 // x86-32 Windows target
 class WindowsX86_32TargetInfo : public WindowsTargetInfo<X86_32TargetInfo> {
+  // @LOCALMOD-START
+  void setDescriptionString() override {
+    if (getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF())
+      DescriptionString = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-S32";
+    else
+      DescriptionString = "e-m:e-p:32:32-i64:64-f80:32-n8:16:32-S32";
+  }
+  // @LOCALMOD-END
 public:
   WindowsX86_32TargetInfo(const llvm::Triple &Triple)
       : WindowsTargetInfo<X86_32TargetInfo>(Triple) {
     WCharType = UnsignedShort;
     DoubleAlign = LongLongAlign = 64;
-    bool IsWinCOFF =
-        getTriple().isOSWindows() && getTriple().isOSBinFormatCOFF();
-    DescriptionString = IsWinCOFF ? "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-S32"
-                                  : "e-m:e-p:32:32-i64:64-f80:32-n8:16:32-S32";
   }
   void getTargetDefines(const LangOptions &Opts,
                         MacroBuilder &Builder) const override {
@@ -3648,13 +3680,17 @@
 
 // x86-32 Cygwin target
 class CygwinX86_32TargetInfo : public X86_32TargetInfo {
+  // @LOCALMOD-START
+  void setDescriptionString() override {
+    DescriptionString = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-S32";
+  }
+  // @LOCALMOD-END
 public:
   CygwinX86_32TargetInfo(const llvm::Triple &Triple)
       : X86_32TargetInfo(Triple) {
     TLSSupported = false;
     WCharType = UnsignedShort;
     DoubleAlign = LongLongAlign = 64;
-    DescriptionString = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-S32";
   }
   void getTargetDefines(const LangOptions &Opts,
                         MacroBuilder &Builder) const override {
diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp
index 567fd8c..05e81f5 100644
--- a/lib/Driver/Tools.cpp
+++ b/lib/Driver/Tools.cpp
@@ -1712,6 +1712,13 @@
           << A->getOption().getName() << Value;
     }
   }
+
+  // @LOCALMOD-START
+  if (Args.getLastArg(options::OPT_malign_double)) {
+    CmdArgs.push_back("-mllvm");
+    CmdArgs.push_back("-malign-double");
+  }
+  // @LOCALMOD-END
 }
 
 static inline bool HasPICArg(const ArgList &Args) {
diff --git a/test/Driver/malign-double.c b/test/Driver/malign-double.c
new file mode 100644
index 0000000..81c0879
--- /dev/null
+++ b/test/Driver/malign-double.c
@@ -0,0 +1,13 @@
+// RUN: %clang -### -c -malign-double %s -target i686-unknown-linux 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-I686 %s
+
+// CHECK-I686: -cc1
+// CHECK-I686: +align-double
+// CHECK-I686: "-mllvm" "-malign-double"
+
+// RUN: %clang -### -c -malign-double %s -target x86-64-unknown-linux 2>&1 \
+// RUN:   | FileCheck -check-prefix=CHECK-X86_64 %s
+
+// CHECK-X86_64: -cc1
+// CHECK-X86_64-NOT: +align-double
+// CHECK-X86_64-NOT: "-mllvm" "-malign-double"
