diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index e403e20..bb7f485 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -834,75 +834,101 @@ DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args,
   // Add the arch options based on the particular spelling of -arch, to match
   // how the driver driver works.
   if (BoundArch) {
-    StringRef Name = BoundArch;
+    llvm::Triple::CPUArch CPUArch =
+      llvm::Triple::getCPUArchTypeForDarwinArchName(BoundArch);
+
     const Option MCpu = Opts.getOption(options::OPT_mcpu_EQ);
     const Option MArch = Opts.getOption(options::OPT_march_EQ);
 
     // This code must be kept in sync with LLVM's getArchTypeForDarwinArch,
     // which defines the list of which architectures we accept.
-    if (Name == "ppc")
-      ;
-    else if (Name == "ppc601")
+    switch(CPUArch) {
+    case llvm::Triple::CA_PPC:
+      break;
+    case llvm::Triple::CA_PPC601:
       DAL->AddJoinedArg(0, MCpu, "601");
-    else if (Name == "ppc603")
+      break;
+    case llvm::Triple::CA_PPC603:
       DAL->AddJoinedArg(0, MCpu, "603");
-    else if (Name == "ppc604")
+      break;
+    case llvm::Triple::CA_PPC604:
       DAL->AddJoinedArg(0, MCpu, "604");
-    else if (Name == "ppc604e")
+      break;
+    case llvm::Triple::CA_PPC604e:
       DAL->AddJoinedArg(0, MCpu, "604e");
-    else if (Name == "ppc750")
+      break;
+    case llvm::Triple::CA_PPC750:
       DAL->AddJoinedArg(0, MCpu, "750");
-    else if (Name == "ppc7400")
+      break;
+    case llvm::Triple::CA_PPC7400:
       DAL->AddJoinedArg(0, MCpu, "7400");
-    else if (Name == "ppc7450")
+      break;
+    case llvm::Triple::CA_PPC7450:
       DAL->AddJoinedArg(0, MCpu, "7450");
-    else if (Name == "ppc970")
+      break;
+    case llvm::Triple::CA_PPC970:
       DAL->AddJoinedArg(0, MCpu, "970");
-
-    else if (Name == "ppc64")
+      break;
+    case llvm::Triple::CA_PPC64:
       DAL->AddFlagArg(0, Opts.getOption(options::OPT_m64));
-
-    else if (Name == "i386")
-      ;
-    else if (Name == "i486")
+      break;
+    case llvm::Triple::CA_I386:
+      break;
+    case llvm::Triple::CA_I486:
       DAL->AddJoinedArg(0, MArch, "i486");
-    else if (Name == "i586")
+      break;
+    case llvm::Triple::CA_I586:
       DAL->AddJoinedArg(0, MArch, "i586");
-    else if (Name == "i686")
+      break;
+    case llvm::Triple::CA_I686:
       DAL->AddJoinedArg(0, MArch, "i686");
-    else if (Name == "pentium")
+      break;
+    case llvm::Triple::CA_Pentium:
       DAL->AddJoinedArg(0, MArch, "pentium");
-    else if (Name == "pentium2")
+      break;
+    case llvm::Triple::CA_Pentium2:
       DAL->AddJoinedArg(0, MArch, "pentium2");
-    else if (Name == "pentpro")
+      break;
+    case llvm::Triple::CA_Pentpro:
       DAL->AddJoinedArg(0, MArch, "pentiumpro");
-    else if (Name == "pentIIm3")
+      break;
+    case llvm::Triple::CA_PentIIm3:
       DAL->AddJoinedArg(0, MArch, "pentium2");
-
-    else if (Name == "x86_64")
+      break;
+    case llvm::Triple::CA_X86_64:
       DAL->AddFlagArg(0, Opts.getOption(options::OPT_m64));
-
-    else if (Name == "arm")
+      break;
+    case llvm::Triple::CA_ARM:
       DAL->AddJoinedArg(0, MArch, "armv4t");
-    else if (Name == "armv4t")
+      break;
+    case llvm::Triple::CA_ARMv4t:
       DAL->AddJoinedArg(0, MArch, "armv4t");
-    else if (Name == "armv5")
+      break;
+    case llvm::Triple::CA_ARMv5:
       DAL->AddJoinedArg(0, MArch, "armv5tej");
-    else if (Name == "xscale")
+      break;
+    case llvm::Triple::CA_XScale:
       DAL->AddJoinedArg(0, MArch, "xscale");
-    else if (Name == "armv6")
+      break;
+    case llvm::Triple::CA_ARMv6:
       DAL->AddJoinedArg(0, MArch, "armv6k");
-    else if (Name == "armv7")
+      break;
+    case llvm::Triple::CA_ARMv7:
       DAL->AddJoinedArg(0, MArch, "armv7a");
-    else if (Name == "armv7f")
+      break;
+    case llvm::Triple::CA_ARMv7f:
       DAL->AddJoinedArg(0, MArch, "armv7f");
-    else if (Name == "armv7k")
+      break;
+    case llvm::Triple::CA_ARMv7k:
       DAL->AddJoinedArg(0, MArch, "armv7k");
-    else if (Name == "armv7s")
+      break;
+    case llvm::Triple::CA_ARMv7s:
       DAL->AddJoinedArg(0, MArch, "armv7s");
-
-    else
+      break;
+    case llvm::Triple::CA_UnknownCPUArch:
       llvm_unreachable("invalid Darwin arch");
+      break;
+    }
   }
 
   // Add an explicit version min argument for the deployment target. We do this
