Reapply patch for adding support for address spaces and added a isVolatile field to memcpy, memmove, and memset.

llvm-svn: 100305
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp
index 4eb95af..07d219f 100644
--- a/clang/lib/CodeGen/CGDecl.cpp
+++ b/clang/lib/CodeGen/CGDecl.cpp
@@ -564,11 +564,15 @@
       if (Loc->getType() != BP)
         Loc = Builder.CreateBitCast(Loc, BP, "tmp");
       
+      llvm::Value *NotVolatile =
+        llvm::ConstantInt::get(llvm::Type::getInt1Ty(VMContext), 0);
+
       // If the initializer is all zeros, codegen with memset.
       if (isa<llvm::ConstantAggregateZero>(Init)) {
         llvm::Value *Zero =
-        llvm::ConstantInt::get(llvm::Type::getInt8Ty(VMContext), 0);
-        Builder.CreateCall4(CGM.getMemSetFn(), Loc, Zero, SizeVal, AlignVal);
+          llvm::ConstantInt::get(llvm::Type::getInt8Ty(VMContext), 0);
+        Builder.CreateCall5(CGM.getMemSetFn(Loc->getType(), SizeVal->getType()),
+                            Loc, Zero, SizeVal, AlignVal, NotVolatile);
       } else {
         // Otherwise, create a temporary global with the initializer then 
         // memcpy from the global to the alloca.
@@ -582,8 +586,10 @@
         llvm::Value *SrcPtr = GV;
         if (SrcPtr->getType() != BP)
           SrcPtr = Builder.CreateBitCast(SrcPtr, BP, "tmp");
-        
-        Builder.CreateCall4(CGM.getMemCpyFn(), Loc, SrcPtr, SizeVal, AlignVal);
+
+        Builder.CreateCall5(CGM.getMemCpyFn(Loc->getType(), SrcPtr->getType(),
+                                            SizeVal->getType()),
+                            Loc, SrcPtr, SizeVal, AlignVal, NotVolatile);
       }
     } else if (Ty->isReferenceType()) {
       RValue RV = EmitReferenceBindingToExpr(Init, /*IsInitializer=*/true);