A significant refactoring of the type size stuff to also 
compute type alignment.  This info is needed for struct layout.

llvm-svn: 39850
diff --git a/clang/CodeGen/CodeGenModule.cpp b/clang/CodeGen/CodeGenModule.cpp
index d091dd7..262469e 100644
--- a/clang/CodeGen/CodeGenModule.cpp
+++ b/clang/CodeGen/CodeGenModule.cpp
@@ -26,7 +26,7 @@
 
 
 CodeGenModule::CodeGenModule(ASTContext &C, llvm::Module &M)
-  : Context(C), TheModule(M), Types(C.Target) {}
+  : Context(C), TheModule(M), Types(C) {}
 
 llvm::Constant *CodeGenModule::GetAddrOfGlobalDecl(const Decl *D) {
   // See if it is already in the map.
@@ -68,7 +68,8 @@
   if (D->getInit() == 0) {
     Init = llvm::Constant::getNullValue(GV->getType()->getElementType());
   } else if (D->getType()->isIntegerType()) {
-    llvm::APSInt Value(getContext().getTypeSize(D->getInit()->getType()));
+    llvm::APSInt Value(getContext().getTypeSize(D->getInit()->getType(),
+                                                SourceLocation()));
     if (D->getInit()->isIntegerConstantExpr(Value))
       Init = llvm::ConstantInt::get(Value);
   }
@@ -103,7 +104,9 @@
 llvm::Function *CodeGenModule::getMemCpyFn() {
   if (MemCpyFn) return MemCpyFn;
   llvm::Intrinsic::ID IID;
-  switch (Context.Target.getPointerWidth(SourceLocation())) {
+  uint64_t Size; unsigned Align;
+  Context.Target.getPointerInfo(Size, Align, SourceLocation());
+  switch (Size) {
   default: assert(0 && "Unknown ptr width");
   case 32: IID = llvm::Intrinsic::memcpy_i32; break;
   case 64: IID = llvm::Intrinsic::memcpy_i64; break;