diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index bdcea84..cce3ae63 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -485,8 +485,8 @@
     this->UIntMaxType = TargetInfo::UnsignedLongLong;
     this->Int64Type = TargetInfo::SignedLongLong;
     this->SizeType = TargetInfo::UnsignedInt;
-    this->DescriptionString = "E-p:32:32:32-"
-                              "i64:64:64-n32";
+    this->DescriptionString = "E-p:32:32-"
+                              "i64:64-n32";
   }
 };
 
@@ -625,8 +625,8 @@
     this->IntPtrType = TargetInfo::SignedInt;
     // RegParmMax is inherited from the underlying architecture
     this->LongDoubleFormat = &llvm::APFloat::IEEEdouble;
-    this->DescriptionString = "e-i64:64:64"
-                              "-p:32:32:32-v128:32:32";
+    this->DescriptionString = "e-i64:64"
+                              "-p:32:32-v128:32";
   }
   virtual typename Target::CallingConvCheckResult checkCallingConvention(
       CallingConv CC) const {
@@ -1179,8 +1179,8 @@
 class PPC32TargetInfo : public PPCTargetInfo {
 public:
   PPC32TargetInfo(const llvm::Triple &Triple) : PPCTargetInfo(Triple) {
-    DescriptionString = "E-p:32:32:32-"
-                        "i64:64:64-n32";
+    DescriptionString = "E-p:32:32-"
+                        "i64:64-n32";
 
     switch (getTriple().getOS()) {
     case llvm::Triple::Linux:
@@ -1225,11 +1225,11 @@
       LongDoubleWidth = LongDoubleAlign = 64;
       LongDoubleFormat = &llvm::APFloat::IEEEdouble;
       DescriptionString = "E-"
-                          "i64:64:64-"
+                          "i64:64-"
                           "n32:64";
     } else
       DescriptionString = "E-"
-                          "i64:64:64-f128:128:128-"
+                          "i64:64-f128:128-"
                           "n32:64";
 
     // PPC64 supports atomics up to 8 bytes.
@@ -1253,7 +1253,7 @@
     PtrDiffType = SignedInt;    // for http://llvm.org/bugs/show_bug.cgi?id=15726
     LongLongAlign = 32;
     SuitableAlign = 128;
-    DescriptionString = "E-p:32:32:32"
+    DescriptionString = "E-p:32:32"
                         "-n32";
   }
   virtual BuiltinVaListKind getBuiltinVaListKind() const {
@@ -1269,7 +1269,7 @@
     HasAlignMac68kSupport = true;
     SuitableAlign = 128;
     DescriptionString = "E-"
-                        "i64:64:64-n32:64";
+                        "i64:64-n32:64";
   }
 };
 } // end anonymous namespace.
@@ -1376,8 +1376,8 @@
       PointerWidth = PointerAlign = 32;
       SizeType     = PtrDiffType = IntPtrType = TargetInfo::UnsignedInt;
       DescriptionString
-        = "e-p:32:32:32-i64:64:64"
-          "-v16:16:16-v32:32:32-"
+        = "e-p:32:32-i64:64"
+          "-v16:16-v32:32-"
           "n16:32:64";
   }
   };
@@ -1388,8 +1388,8 @@
       PointerWidth = PointerAlign = 64;
       SizeType     = PtrDiffType = IntPtrType = TargetInfo::UnsignedLongLong;
       DescriptionString
-        = "e-i64:64:64"
-          "-v16:16:16-v32:32:32-"
+        = "e-i64:64"
+          "-v16:16-v32:32-"
           "n16:32:64";
   }
   };
@@ -1408,27 +1408,27 @@
 
 static const char *DescriptionStringR600 =
   "e"
-  "-p:32:32:32"
-  "-i64:64:64"
-  "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v96:128:128"
-  "-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-v2048:2048:2048"
+  "-p:32:32"
+  "-i64:64"
+  "-v16:16-v24:32-v32:32-v48:64-v96:128"
+  "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048"
   "-n32:64";
 
 static const char *DescriptionStringR600DoubleOps =
   "e"
-  "-p:32:32:32"
-  "-i64:64:64"
-  "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v96:128:128"
-  "-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-v2048:2048:2048"
+  "-p:32:32"
+  "-i64:64"
+  "-v16:16-v24:32-v32:32-v48:64-v96:128"
+  "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048"
   "-n32:64";
 
 static const char *DescriptionStringSI =
   "e"
   ""
-  "-p3:32:32:32"
-  "-i64:64:64"
-  "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-v96:128:128"
-  "-v192:256:256-v256:256:256-v512:512:512-v1024:1024:1024-v2048:2048:2048"
+  "-p3:32:32"
+  "-i64:64"
+  "-v16:16-v24:32-v32:32-v48:64-v96:128"
+  "-v192:256-v256:256-v512:512-v1024:1024-v2048:2048"
   "-n32:64";
 
 class R600TargetInfo : public TargetInfo {
@@ -2933,9 +2933,9 @@
     LongDoubleWidth = 96;
     LongDoubleAlign = 32;
     SuitableAlign = 128;
-    DescriptionString = "e-p:32:32:32"
+    DescriptionString = "e-p:32:32"
                         "-f64:32:64-"
-                        "f80:32:32-n8:16:32-S128";
+                        "f80:32-n8:16:32-S128";
     SizeType = UnsignedInt;
     PtrDiffType = SignedInt;
     IntPtrType = SignedInt;
@@ -3029,9 +3029,9 @@
     MaxVectorAlign = 256;
     SizeType = UnsignedLong;
     IntPtrType = SignedLong;
-    DescriptionString = "e-p:32:32:32"
+    DescriptionString = "e-p:32:32"
                         "-f64:32:64-"
-                        "f80:128:128-n8:16:32-S128";
+                        "f80:128-n8:16:32-S128";
     HasAlignMac68kSupport = true;
   }
 
@@ -3047,9 +3047,9 @@
     TLSSupported = false;
     WCharType = UnsignedShort;
     DoubleAlign = LongLongAlign = 64;
-    DescriptionString = "e-p:32:32:32-"
-                        "i64:64:64-"
-                        "f80:32:32-n8:16:32-S32";
+    DescriptionString = "e-p:32:32-"
+                        "i64:64-"
+                        "f80:32-n8:16:32-S32";
   }
   virtual void getTargetDefines(const LangOptions &Opts,
                                 MacroBuilder &Builder) const {
@@ -3116,9 +3116,9 @@
     TLSSupported = false;
     WCharType = UnsignedShort;
     DoubleAlign = LongLongAlign = 64;
-    DescriptionString = "e-p:32:32:32-"
-                        "i64:64:64-"
-                        "f80:32:32-n8:16:32-S32";
+    DescriptionString = "e-p:32:32-"
+                        "i64:64-"
+                        "f80:32-n8:16:32-S32";
   }
   virtual void getTargetDefines(const LangOptions &Opts,
                                 MacroBuilder &Builder) const {
@@ -3225,8 +3225,8 @@
     RegParmMax = 6;
 
     DescriptionString = "e-"
-                        "i64:64:64-"
-                        "s:64:64-f80:128:128-n8:16:32:64-S128";
+                        "i64:64-"
+                        "s:64-f80:128-n8:16:32:64-S128";
 
     // Use fpret only for long double.
     RealTypeUsesObjCFPRet = (1 << TargetInfo::LongDouble);
@@ -3399,8 +3399,8 @@
     PointerWidth = PointerAlign = 64;
     SuitableAlign = 128;
     DescriptionString = "e-"
-                        "i64:64:64-i128:128:128-"
-                        "f128:128:128-n32:64-S128";
+                        "i64:64-i128:128-"
+                        "f128:128-n32:64-S128";
 
     WCharType = UnsignedInt;
     LongDoubleFormat = &llvm::APFloat::IEEEquad;
@@ -3713,12 +3713,12 @@
     if (IsThumb) {
       // Thumb1 add sp, #imm requires the immediate value be multiple of 4,
       // so set preferred for small types to 32.
-      DescriptionString = ("e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-"
-                           "i64:64:64-"
+      DescriptionString = ("e-p:32:32-i1:8:32-i8:8:32-i16:16:32-"
+                           "i64:64-"
                            "v128:64:128-a:0:32-n32-S64");
     } else {
-      DescriptionString = ("e-p:32:32:32-"
-                           "i64:64:64-"
+      DescriptionString = ("e-p:32:32-"
+                           "i64:64-"
                            "v128:64:128-n32-S64");
     }
 
@@ -3767,11 +3767,11 @@
       if (IsThumb) {
         // Thumb1 add sp, #imm requires the immediate value be multiple of 4,
         // so set preferred for small types to 32.
-        DescriptionString = ("e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32"
+        DescriptionString = ("e-p:32:32-i1:8:32-i8:8:32-i16:16:32"
                              "-f64:32:64"
                              "-v64:32:64-v128:32:128-a:0:32-n32-S32");
       } else {
-        DescriptionString = ("e-p:32:32:32"
+        DescriptionString = ("e-p:32:32"
                              "-f64:32:64"
                              "-v64:32:64-v128:32:128-a:0:32-n32-S32");
       }
@@ -4228,8 +4228,8 @@
 public:
   HexagonTargetInfo(const llvm::Triple &Triple) : TargetInfo(Triple) {
     BigEndian = false;
-    DescriptionString = ("e-p:32:32:32-"
-                         "i64:64:64-i1:32:32"
+    DescriptionString = ("e-p:32:32-"
+                         "i64:64-i1:32"
                          "-a:0-n32");
 
     // {} in inline assembly are packet specifiers, not assembly variant
@@ -4486,8 +4486,8 @@
 public:
   SparcV8TargetInfo(const llvm::Triple &Triple) : SparcTargetInfo(Triple) {
     // FIXME: Support Sparc quad-precision long double?
-    DescriptionString = "E-p:32:32:32-"
-                        "i64:64:64-n32-S64";
+    DescriptionString = "E-p:32:32-"
+                        "i64:64-n32-S64";
   }
 
   virtual void getTargetDefines(const LangOptions &Opts,
@@ -4503,7 +4503,7 @@
   SparcV9TargetInfo(const llvm::Triple &Triple) : SparcTargetInfo(Triple) {
     // FIXME: Support Sparc quad-precision long double?
     DescriptionString = "E-"
-                        "i64:64:64-n32:64-S128";
+                        "i64:64-n32:64-S128";
     // This is an LP64 platform.
     LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
 
@@ -4678,7 +4678,7 @@
       IntPtrType = SignedInt;
       PtrDiffType = SignedInt;
       SigAtomicType = SignedLong;
-      DescriptionString = "e-p:16:16:16-i32:16:32-n8:16";
+      DescriptionString = "e-p:16:16-i32:16:32-n8:16";
    }
     virtual void getTargetDefines(const LangOptions &Opts,
                                   MacroBuilder &Builder) const {
@@ -4774,10 +4774,10 @@
       FloatFormat = &llvm::APFloat::IEEEsingle;
       DoubleFormat = &llvm::APFloat::IEEEsingle;
       LongDoubleFormat = &llvm::APFloat::IEEEsingle;
-      DescriptionString = "E-p:32:32:32-i8:8:32-"
-                          "i16:16:32-i64:32:32"
-                          "-f64:32:32-v64:32:32-"
-                          "v128:32:32-a:0:32-n32";
+      DescriptionString = "E-p:32:32-i8:8:32-"
+                          "i16:16:32-i64:32"
+                          "-f64:32-v64:32-"
+                          "v128:32-a:0:32-n32";
       AddrSpaceMap = &TCEOpenCLAddrSpaceMap;
       UseAddrSpaceMapMangling = true;
     }
@@ -5114,8 +5114,8 @@
 
 class Mips32EBTargetInfo : public Mips32TargetInfoBase {
   virtual void setDescriptionString() {
-    DescriptionString = "E-p:32:32:32-i8:8:32-i16:16:32-"
-                        "i64:64:64-n32-S64";
+    DescriptionString = "E-p:32:32-i8:8:32-i16:16:32-"
+                        "i64:64-n32-S64";
   }
 
 public:
@@ -5132,8 +5132,8 @@
 
 class Mips32ELTargetInfo : public Mips32TargetInfoBase {
   virtual void setDescriptionString() {
-    DescriptionString = "e-p:32:32:32-i8:8:32-i16:16:32-"
-                        "i64:64:64-n32-S64";
+    DescriptionString = "e-p:32:32-i8:8:32-i16:16:32-"
+                        "i64:64-n32-S64";
   }
 
 public:
@@ -5242,12 +5242,12 @@
 class Mips64EBTargetInfo : public Mips64TargetInfoBase {
   virtual void setDescriptionString() {
     if (ABI == "n32")
-      DescriptionString = "E-p:32:32:32-i8:8:32-i16:16:32-"
-                          "i64:64:64-f128:128:128-"
+      DescriptionString = "E-p:32:32-i8:8:32-i16:16:32-"
+                          "i64:64-f128:128-"
                           "n32:64-S128";
     else
       DescriptionString = "E-i8:8:32-i16:16:32-"
-                          "i64:64:64-f128:128:128-"
+                          "i64:64-f128:128-"
                           "n32:64-S128";
 
   }
@@ -5266,12 +5266,12 @@
 class Mips64ELTargetInfo : public Mips64TargetInfoBase {
   virtual void setDescriptionString() {
     if (ABI == "n32")
-      DescriptionString = "e-p:32:32:32-i8:8:32-i16:16:32-"
-                          "i64:64:64-f128:128:128"
+      DescriptionString = "e-p:32:32-i8:8:32-i16:16:32-"
+                          "i64:64-f128:128"
                           "-n32:64-S128";
     else
       DescriptionString = "e-i8:8:32-i16:16:32-"
-                          "i64:64:64-f128:128:128-"
+                          "i64:64-f128:128-"
                           "n32:64-S128";
   }
 public:
@@ -5418,10 +5418,10 @@
       SizeType     = TargetInfo::UnsignedInt;
       PtrDiffType = IntPtrType = TargetInfo::SignedInt;
       DescriptionString
-        = "e-p:32:32:32-i64:64:64"
-          "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-"
-          "v96:128:128-v192:256:256-v256:256:256-"
-          "v512:512:512-v1024:1024:1024";
+        = "e-p:32:32-i64:64"
+          "-v16:16-v24:32-v32:32-v48:64-"
+          "v96:128-v192:256-v256:256-"
+          "v512:512-v1024:1024";
     }
     virtual void getTargetDefines(const LangOptions &Opts,
                                   MacroBuilder &Builder) const {
@@ -5436,10 +5436,10 @@
       SizeType     = TargetInfo::UnsignedLong;
       PtrDiffType = IntPtrType = TargetInfo::SignedLong;
       DescriptionString
-        = "e-i64:64:64"
-          "-v16:16:16-v24:32:32-v32:32:32-v48:64:64-"
-          "v96:128:128-v192:256:256-v256:256:256-"
-          "v512:512:512-v1024:1024:1024";
+        = "e-i64:64"
+          "-v16:16-v24:32-v32:32-v48:64-"
+          "v96:128-v192:256-v256:256-"
+          "v512:512-v1024:1024";
     }
     virtual void getTargetDefines(const LangOptions &Opts,
                                   MacroBuilder &Builder) const {
@@ -5464,9 +5464,9 @@
     WCharType = UnsignedChar;
     WIntType = UnsignedInt;
     UseZeroLengthBitfieldAlignment = true;
-    DescriptionString = "e-p:32:32:32-a:0:32-n32"
-                        "-i1:8:32-i8:8:32-i16:16:32-i64:32:32"
-                        "-f16:16:32-f64:32:32";
+    DescriptionString = "e-p:32:32-a:0:32-n32"
+                        "-i1:8:32-i8:8:32-i16:16:32-i64:32"
+                        "-f16:16:32-f64:32";
   }
   virtual void getTargetDefines(const LangOptions &Opts,
                                 MacroBuilder &Builder) const {
