Index: llvm/tools/clang/lib/CodeGen/TargetABIInfo.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/TargetABIInfo.cpp	(revision 79415)
+++ llvm/tools/clang/lib/CodeGen/TargetABIInfo.cpp	(working copy)
@@ -16,6 +16,7 @@
 #include "CodeGenFunction.h"
 #include "clang/AST/RecordLayout.h"
 #include "llvm/Type.h"
+#include "llvm/ADT/Triple.h"
 
 using namespace clang;
 using namespace CodeGen;
@@ -239,9 +240,26 @@
   virtual llvm::Value *EmitVAArg(llvm::Value *VAListAddr, QualType Ty,
                                  CodeGenFunction &CGF) const;
 
-  X86_32ABIInfo(ASTContext &Context, bool d, bool p)
-    : ABIInfo(), Context(Context), IsDarwinVectorABI(d), 
-      IsSmallStructInRegABI(p) {}
+  X86_32ABIInfo(ASTContext &Context)
+    : ABIInfo(), Context(Context) {
+       
+    llvm::Triple triple = llvm::Triple(Context.Target.getTargetTriple());
+    switch (triple.getOS()) {
+        default:
+            IsDarwinVectorABI = false;
+            IsSmallStructInRegABI = false;
+            break;
+        case llvm::Triple::Darwin:
+            IsDarwinVectorABI = true;
+        case llvm::Triple::Cygwin:
+        case llvm::Triple::MinGW32:
+        case llvm::Triple::FreeBSD:
+        case llvm::Triple::OpenBSD:
+        // FIXME: Netware should be in this list but isn't enumerated by
+        // llvm::Triple
+            IsSmallStructInRegABI = true;
+    } 
+  }
 };
 }
 
@@ -1525,17 +1543,10 @@
   // to free it.
   const char *TargetPrefix = getContext().Target.getTargetPrefix();
   if (strcmp(TargetPrefix, "x86") == 0) {
-    bool IsDarwin = strstr(getContext().Target.getTargetTriple(), "darwin");
-    bool isRegStructReturnABI = IsDarwin ||
-       strstr(getContext().Target.getTargetTriple(), "cygwin") ||
-       strstr(getContext().Target.getTargetTriple(), "mingw") ||
-       strstr(getContext().Target.getTargetTriple(), "netware") ||
-       strstr(getContext().Target.getTargetTriple(), "freebsd") ||
-       strstr(getContext().Target.getTargetTriple(), "openbsd");
     switch (getContext().Target.getPointerWidth(0)) {
     case 32:
       return *(TheABIInfo = 
-          new X86_32ABIInfo(Context, IsDarwin, isRegStructReturnABI));
+          new X86_32ABIInfo(Context));
     case 64:
       return *(TheABIInfo = new X86_64ABIInfo());
     }
