]> granicus.if.org Git - clang/commitdiff
IRgen: Inline GenerateCXXGlobal[VarDecl]InitFunc into sole caller.
authorDaniel Dunbar <daniel@zuster.org>
Sat, 20 Mar 2010 04:15:29 +0000 (04:15 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Sat, 20 Mar 2010 04:15:29 +0000 (04:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99038 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDeclCXX.cpp
lib/CodeGen/CodeGenFunction.h

index 0de3b0be4b1a192f6cf57f8d560cb0d6c04ade37..22a103ce35fd730e8def9f8cba5f8dbd8aa9b82a 100644 (file)
@@ -64,7 +64,7 @@ static void EmitDeclInit(CodeGenFunction &CGF, const VarDecl &D,
         llvm::Type::getInt8PtrTy(CGM.getLLVMContext());
       DeclPtr = llvm::Constant::getNullValue(Int8PtrTy);
      } else
-      DtorFn = CGM.GetAddrOfCXXDestructor(Dtor, Dtor_Complete);                                
+      DtorFn = CGM.GetAddrOfCXXDestructor(Dtor, Dtor_Complete);
 
     CGF.EmitCXXGlobalDtorRegistration(DtorFn, DeclPtr);
   }
@@ -89,9 +89,8 @@ void CodeGenFunction::EmitCXXGlobalVarDeclInit(const VarDecl &D,
                    "global variable that binds reference to a non-lvalue");
 }
 
-void
-CodeGenFunction::EmitCXXGlobalDtorRegistration(llvm::Constant *DtorFn,
-                                               llvm::Constant *DeclPtr) {
+void CodeGenFunction::EmitCXXGlobalDtorRegistration(llvm::Constant *DtorFn,
+                                                    llvm::Constant *DeclPtr) {
   const llvm::Type *Int8PtrTy = 
     llvm::Type::getInt8Ty(VMContext)->getPointerTo();
 
@@ -124,8 +123,7 @@ CodeGenFunction::EmitCXXGlobalDtorRegistration(llvm::Constant *DtorFn,
   Builder.CreateCall(AtExitFn, &Args[0], llvm::array_endof(Args));
 }
 
-void
-CodeGenModule::EmitCXXGlobalVarDeclInitFunc(const VarDecl *D) {
+void CodeGenModule::EmitCXXGlobalVarDeclInitFunc(const VarDecl *D) {
   const llvm::FunctionType *FTy
     = llvm::FunctionType::get(llvm::Type::getVoidTy(VMContext),
                               false);
@@ -135,13 +133,18 @@ CodeGenModule::EmitCXXGlobalVarDeclInitFunc(const VarDecl *D) {
     llvm::Function::Create(FTy, llvm::GlobalValue::InternalLinkage,
                            "__cxx_global_var_init", &TheModule);
 
-  CodeGenFunction(*this).GenerateCXXGlobalVarDeclInitFunc(Fn, D);
+  StartFunction(GlobalDecl(), getContext().VoidTy, Fn, FunctionArgList(),
+                SourceLocation());
+
+  llvm::Constant *DeclPtr = CGM.GetAddrOfGlobalVar(D);
+  EmitCXXGlobalVarDeclInit(*D, DeclPtr);
+
+  FinishFunction();
 
   CXXGlobalInits.push_back(Fn);
 }
 
-void
-CodeGenModule::EmitCXXGlobalInitFunc() {
+void CodeGenModule::EmitCXXGlobalInitFunc() {
   if (CXXGlobalInits.empty())
     return;
 
@@ -155,33 +158,15 @@ CodeGenModule::EmitCXXGlobalInitFunc() {
     llvm::Function::Create(FTy, llvm::GlobalValue::InternalLinkage,
                            "__cxx_global_initialization", &TheModule);
 
-  CodeGenFunction(*this).GenerateCXXGlobalInitFunc(Fn,
-                                                   &CXXGlobalInits[0],
-                                                   CXXGlobalInits.size());
-  AddGlobalCtor(Fn);
-}
-
-void CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn,
-                                                       const VarDecl *D) {
   StartFunction(GlobalDecl(), getContext().VoidTy, Fn, FunctionArgList(),
                 SourceLocation());
 
-  llvm::Constant *DeclPtr = CGM.GetAddrOfGlobalVar(D);
-  EmitCXXGlobalVarDeclInit(*D, DeclPtr);
+  for (unsigned i = 0, e = CXXGlobalInits.size(); i != e; ++i)
+    Builder.CreateCall(CXXGlobalInits[i]);
 
   FinishFunction();
-}
 
-void CodeGenFunction::GenerateCXXGlobalInitFunc(llvm::Function *Fn,
-                                                llvm::Constant **Decls,
-                                                unsigned NumDecls) {
-  StartFunction(GlobalDecl(), getContext().VoidTy, Fn, FunctionArgList(),
-                SourceLocation());
-
-  for (unsigned i = 0; i != NumDecls; ++i)
-    Builder.CreateCall(Decls[i]);
-
-  FinishFunction();
+  AddGlobalCtor(Fn);
 }
 
 static llvm::Constant *getGuardAcquireFn(CodeGenFunction &CGF) {
index 88d641330009d1d7327a8e77493095b6033adf9e..d9b1457811466ac429bddf8af7d0e2b97e717f70 100644 (file)
@@ -1225,14 +1225,6 @@ public:
   void EmitCXXGlobalDtorRegistration(llvm::Constant *DtorFn,
                                      llvm::Constant *DeclPtr);
 
-  /// GenerateCXXGlobalInitFunc - Generates code for initializing global
-  /// variables.
-  void GenerateCXXGlobalInitFunc(llvm::Function *Fn,
-                                 llvm::Constant **Decls,
-                                 unsigned NumDecls);
-
-  void GenerateCXXGlobalVarDeclInitFunc(llvm::Function *Fn, const VarDecl *D);
-
   void EmitCXXConstructExpr(llvm::Value *Dest, const CXXConstructExpr *E);
 
   RValue EmitCXXExprWithTemporaries(const CXXExprWithTemporaries *E,