Move GenericBlockLiteralType into CGM.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64452 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp
index cb096fc..2168351 100644
--- a/lib/CodeGen/CGBlocks.cpp
+++ b/lib/CodeGen/CGBlocks.cpp
@@ -47,34 +47,35 @@
   return BlockDescriptorType;
 }
 
-static const llvm::Type *getGenericBlockLiteralType(CodeGenModule &CGM) {
-  static const llvm::Type *Ty = 0;
-    
-  if (!Ty) {
-    const llvm::Type *Int8PtrTy = 
-      llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
+const llvm::Type *
+CodeGenModule::getGenericBlockLiteralType() {
+  if (GenericBlockLiteralType)
+    return GenericBlockLiteralType;
+
+  const llvm::Type *Int8PtrTy = 
+    llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
         
-    const llvm::Type *BlockDescPtrTy = 
-      llvm::PointerType::getUnqual(CGM.getBlockDescriptorType());
+  const llvm::Type *BlockDescPtrTy = 
+    llvm::PointerType::getUnqual(getBlockDescriptorType());
         
-    // struct __block_literal_generic {
-    //   void *isa;
-    //   int flags;
-    //   int reserved;
-    //   void (*invoke)(void *);
-    //   struct __block_descriptor *descriptor;
-    // };
-    Ty = llvm::StructType::get(Int8PtrTy,
-                               llvm::Type::Int32Ty,
-                               llvm::Type::Int32Ty,
-                               Int8PtrTy,
-                               BlockDescPtrTy,
-                               NULL);
+  // struct __block_literal_generic {
+  //   void *isa;
+  //   int flags;
+  //   int reserved;
+  //   void (*invoke)(void *);
+  //   struct __block_descriptor *descriptor;
+  // };
+  GenericBlockLiteralType = llvm::StructType::get(Int8PtrTy,
+                                                  llvm::Type::Int32Ty,
+                                                  llvm::Type::Int32Ty,
+                                                  Int8PtrTy,
+                                                  BlockDescPtrTy,
+                                                  NULL);
         
-    CGM.getModule().addTypeName("struct.__block_literal_generic", Ty);
-  }
+  getModule().addTypeName("struct.__block_literal_generic",
+                          GenericBlockLiteralType);
   
-  return Ty;
+  return GenericBlockLiteralType;
 }
 
 /// getBlockFunctionType - Given a BlockPointerType, will return the 
@@ -103,7 +104,7 @@
 
   // Get a pointer to the generic block literal.
   const llvm::Type *BlockLiteralTy =
-    llvm::PointerType::getUnqual(getGenericBlockLiteralType(CGM));
+    llvm::PointerType::getUnqual(CGM.getGenericBlockLiteralType());
 
   // Bitcast the callee to a block literal.
   llvm::Value *BlockLiteral = 
@@ -164,7 +165,7 @@
   // Block literal size. For global blocks we just use the size of the generic
   // block literal struct.
   uint64_t BlockLiteralSize = 
-    TheTargetData.getTypeStoreSizeInBits(getGenericBlockLiteralType(*this)) / 8;
+    TheTargetData.getTypeStoreSizeInBits(getGenericBlockLiteralType()) / 8;
   DescriptorFields[1] = llvm::ConstantInt::get(UnsignedLongTy,BlockLiteralSize);
   
   llvm::Constant *DescriptorStruct =