diff --git a/CodeGen/CGBuiltin.cpp b/CodeGen/CGBuiltin.cpp
index 89ca831..cc6d03f 100644
--- a/CodeGen/CGBuiltin.cpp
+++ b/CodeGen/CGBuiltin.cpp
@@ -42,7 +42,7 @@
     if (IntrinsicID != Intrinsic::not_intrinsic) {
       SmallVector<Value*, 16> Args;
       
-      Function *F = Intrinsic::getDeclaration(&CGM.getModule(), IntrinsicID);
+      Function *F = CGM.getIntrinsic(IntrinsicID);
       const llvm::FunctionType *FTy = F->getFunctionType();
       
       for (unsigned i = 0, e = E->getNumArgs(); i != e; ++i) {
@@ -121,10 +121,7 @@
 
     Intrinsic::ID inst = (BuiltinID == Builtin::BI__builtin_va_start) ? 
       Intrinsic::vastart : Intrinsic::vaend;
-    Value *F = Intrinsic::getDeclaration(&CGM.getModule(), inst);
-    Value *V = Builder.CreateCall(F, ArgValue);
-
-    return RValue::get(V);
+    return RValue::get(Builder.CreateCall(CGM.getIntrinsic(inst), ArgValue));
   }
   case Builtin::BI__builtin_classify_type: {
     APSInt Result(32);
@@ -156,8 +153,7 @@
   case Builtin::BI__builtin_bswap64: {
     Value *ArgValue = EmitScalarExpr(E->getArg(0));
     const llvm::Type *ArgType = ArgValue->getType();
-    Value *F = Intrinsic::getDeclaration(&CGM.getModule(), Intrinsic::bswap,
-                                         &ArgType, 1);
+    Value *F = CGM.getIntrinsic(Intrinsic::bswap, &ArgType, 1);
     return RValue::get(Builder.CreateCall(F, ArgValue, "tmp"));
   }
   case Builtin::BI__builtin_inff: {
@@ -213,29 +209,19 @@
   case X86::BI__builtin_ia32_pmullw:
     return Builder.CreateMul(Ops[0], Ops[1], "pmul");
   case X86::BI__builtin_ia32_punpckhbw:
-    return EmitShuffleVector(Ops[0], Ops[1],
-                             4, 12, 5, 13, 6, 14, 7, 15,
+    return EmitShuffleVector(Ops[0], Ops[1], 4, 12, 5, 13, 6, 14, 7, 15,
                              "punpckhbw");
   case X86::BI__builtin_ia32_punpckhwd:
-    return EmitShuffleVector(Ops[0], Ops[1],
-                             2, 6, 3, 7,
-                             "punpckhwd");
+    return EmitShuffleVector(Ops[0], Ops[1], 2, 6, 3, 7, "punpckhwd");
   case X86::BI__builtin_ia32_punpckhdq:
-    return EmitShuffleVector(Ops[0], Ops[1],
-                             1, 3,
-                             "punpckhdq");
+    return EmitShuffleVector(Ops[0], Ops[1], 1, 3, "punpckhdq");
   case X86::BI__builtin_ia32_punpcklbw:
-    return EmitShuffleVector(Ops[0], Ops[1],
-                             0, 8, 1, 9, 2, 10, 3, 11,
+    return EmitShuffleVector(Ops[0], Ops[1], 0, 8, 1, 9, 2, 10, 3, 11,
                              "punpcklbw");
   case X86::BI__builtin_ia32_punpcklwd:
-    return EmitShuffleVector(Ops[0], Ops[1],
-                             0, 4, 1, 5,
-                             "punpcklwd");
+    return EmitShuffleVector(Ops[0], Ops[1], 0, 4, 1, 5, "punpcklwd");
   case X86::BI__builtin_ia32_punpckldq:
-    return EmitShuffleVector(Ops[0], Ops[1],
-                             0, 2,
-                             "punpckldq");
+    return EmitShuffleVector(Ops[0], Ops[1], 0, 2, "punpckldq");
   case X86::BI__builtin_ia32_pslldi: 
   case X86::BI__builtin_ia32_psllqi:
   case X86::BI__builtin_ia32_psllwi: 
@@ -247,7 +233,6 @@
     Ops[1] = Builder.CreateZExt(Ops[1], llvm::Type::Int64Ty, "zext");
     const llvm::Type *Ty = llvm::VectorType::get(llvm::Type::Int64Ty, 1);
     Ops[1] = Builder.CreateBitCast(Ops[1], Ty, "bitcast");
-    
     const char *name = 0;
     Intrinsic::ID ID = Intrinsic::not_intrinsic;
     
@@ -286,13 +271,11 @@
       ID = Intrinsic::x86_mmx_psrl_w;
       break;
     }
-    
-    llvm::Function *F = Intrinsic::getDeclaration(&CGM.getModule(), ID);
+    llvm::Function *F = CGM.getIntrinsic(ID);
     return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), name);  
   }
   case X86::BI__builtin_ia32_pshufd: {
-    int i = cast<ConstantInt>(Ops[1])->getZExtValue();
-   
+    unsigned i = cast<ConstantInt>(Ops[1])->getZExtValue();
     return EmitShuffleVector(Ops[0], Ops[0], 
                              i & 0x3, (i & 0xc) >> 2,
                              (i & 0x30) >> 4, (i & 0xc0) >> 6,
@@ -312,7 +295,7 @@
   case X86::BI__builtin_ia32_cmpneqss:
   case X86::BI__builtin_ia32_cmpnltss: 
   case X86::BI__builtin_ia32_cmpnless: {
-    int i = 0;
+    unsigned i = 0;
     const char *name = 0;
     switch (BuiltinID) {
     default: assert(0 && "Unknown compare builtin!");
@@ -351,9 +334,7 @@
     }
 
     Ops.push_back(llvm::ConstantInt::get(llvm::Type::Int8Ty, i));
-    
-    llvm::Function *F = Intrinsic::getDeclaration(&CGM.getModule(),
-                                                  Intrinsic::x86_sse_cmp_ss);
+    llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse_cmp_ss);
     return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), name);
   }
   case X86::BI__builtin_ia32_cmpordps:
@@ -368,47 +349,23 @@
   case X86::BI__builtin_ia32_cmpgeps:
   case X86::BI__builtin_ia32_cmpngeps:
   case X86::BI__builtin_ia32_cmpnleps: {
-    int i = 0;
+    unsigned i = 0;
     const char *name = 0;
     bool ShouldSwap = false;
     switch (BuiltinID) {
     default: assert(0 && "Unknown compare builtin!");
-    case X86::BI__builtin_ia32_cmpeqps:
-      i = 0;
-      name = "cmpeqps";
-      break;
-    case X86::BI__builtin_ia32_cmpltps:
-      i = 1;
-      name = "cmpltps";
-      break;
-    case X86::BI__builtin_ia32_cmpleps:
-      i = 2;
-      name = "cmpleps";
-      break;
-    case X86::BI__builtin_ia32_cmpunordps:
-      i = 3;
-      name = "cmpunordps";
-      break;
-    case X86::BI__builtin_ia32_cmpneqps:
-      i = 4;
-      name = "cmpneqps";
-      break;
-    case X86::BI__builtin_ia32_cmpnltps:
-      i = 5;
-      name = "cmpntlps";
-      break;
-    case X86::BI__builtin_ia32_cmpnleps:
-      i = 6;
-      name = "cmpnleps";
-      break;
-    case X86::BI__builtin_ia32_cmpordps:
-      i = 7;
-      name = "cmpordps";
-      break;
+    case X86::BI__builtin_ia32_cmpeqps:    i = 0; name = "cmpeqps"; break;
+    case X86::BI__builtin_ia32_cmpltps:    i = 1; name = "cmpltps"; break;
+    case X86::BI__builtin_ia32_cmpleps:    i = 2; name = "cmpleps"; break;
+    case X86::BI__builtin_ia32_cmpunordps: i = 3; name = "cmpunordps"; break;
+    case X86::BI__builtin_ia32_cmpneqps:   i = 4; name = "cmpneqps"; break;
+    case X86::BI__builtin_ia32_cmpnltps:   i = 5; name = "cmpntlps"; break;
+    case X86::BI__builtin_ia32_cmpnleps:   i = 6; name = "cmpnleps"; break;
+    case X86::BI__builtin_ia32_cmpordps:   i = 7; name = "cmpordps"; break;
     case X86::BI__builtin_ia32_cmpgtps:
+      ShouldSwap = true;
       i = 1;
       name = "cmpgtps";
-      ShouldSwap = true;
       break;
     case X86::BI__builtin_ia32_cmpgeps:
       i = 2;
@@ -431,16 +388,13 @@
       std::swap(Ops[0], Ops[1]);
     
     Ops.push_back(llvm::ConstantInt::get(llvm::Type::Int8Ty, i));
-    
-    llvm::Function *F = Intrinsic::getDeclaration(&CGM.getModule(),
-                                                  Intrinsic::x86_sse_cmp_ps);
+    llvm::Function *F = CGM.getIntrinsic(Intrinsic::x86_sse_cmp_ps);
     return Builder.CreateCall(F, &Ops[0], &Ops[0] + Ops.size(), name);
   }
   case X86::BI__builtin_ia32_movss:
     return EmitShuffleVector(Ops[0], Ops[1], 4, 1, 2, 3, "movss");
   case X86::BI__builtin_ia32_shufps:
-    int i = cast<ConstantInt>(Ops[2])->getZExtValue();
-
+    unsigned i = cast<ConstantInt>(Ops[2])->getZExtValue();
     return EmitShuffleVector(Ops[0], Ops[1], 
                              i & 0x3, (i & 0xc) >> 2, 
                              ((i & 0x30) >> 4) + 4, 
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index 76bf403..a09932e 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -570,6 +570,11 @@
                                            Name, &getModule());
 }
 
+llvm::Function *CodeGenModule::getIntrinsic(unsigned IID,const llvm::Type **Tys,
+                                            unsigned NumTys) {
+  return llvm::Intrinsic::getDeclaration(&getModule(),
+                                         (llvm::Intrinsic::ID)IID, Tys, NumTys);
+}
 
 llvm::Function *CodeGenModule::getMemCpyFn() {
   if (MemCpyFn) return MemCpyFn;
@@ -581,9 +586,10 @@
   case 32: IID = llvm::Intrinsic::memcpy_i32; break;
   case 64: IID = llvm::Intrinsic::memcpy_i64; break;
   }
-  return MemCpyFn = llvm::Intrinsic::getDeclaration(&TheModule, IID);
+  return MemCpyFn = getIntrinsic(IID);
 }
 
+
 llvm::Constant *CodeGenModule::
 GetAddrOfConstantCFString(const std::string &str) {
   llvm::StringMapEntry<llvm::Constant *> &Entry = 
diff --git a/CodeGen/CodeGenModule.h b/CodeGen/CodeGenModule.h
index 4d4b18a..5c61ad8 100644
--- a/CodeGen/CodeGenModule.h
+++ b/CodeGen/CodeGenModule.h
@@ -80,7 +80,8 @@
   llvm::Constant *GetAddrOfConstantCFString(const std::string& str);
   llvm::Constant *GetAddrOfConstantString(const std::string& str);
   llvm::Function *getMemCpyFn();
-  
+  llvm::Function *getIntrinsic(unsigned IID, const llvm::Type **Tys = 0, 
+                               unsigned NumTys = 0);
   
   void EmitFunction(const FunctionDecl *FD);
   void EmitGlobalVar(const FileVarDecl *D);
