[cfe-commits] r68478 - /cfe/trunk/lib/CodeGen/CGBlocks.cpp

Anders Carlsson andersca at mac.com
Mon Apr 6 17:20:25 PDT 2009


Author: andersca
Date: Mon Apr  6 19:20:24 2009
New Revision: 68478

URL: http://llvm.org/viewvc/llvm-project?rev=68478&view=rev
Log:
Use the new getFunctionInfo that takes a BlockPointerType parameter, and get rid of getBlockFunctionType from CGBlocks.cpp

Modified:
    cfe/trunk/lib/CodeGen/CGBlocks.cpp

Modified: cfe/trunk/lib/CodeGen/CGBlocks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBlocks.cpp?rev=68478&r1=68477&r2=68478&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGBlocks.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBlocks.cpp Mon Apr  6 19:20:24 2009
@@ -408,29 +408,14 @@
   return GenericExtendedBlockLiteralType;
 }
 
-/// getBlockFunctionType - Given a BlockPointerType, will return the
-/// function type for the block, including the first block literal argument.
-static QualType getBlockFunctionType(ASTContext &Ctx,
-                                     const BlockPointerType *BPT) {
-  const FunctionProtoType *FTy = dyn_cast<FunctionProtoType>(BPT->getPointeeType());
-  const clang::QualType ResType = BPT->getPointeeType()->getAsFunctionType()->getResultType();
-
-  llvm::SmallVector<QualType, 8> Types;
-  Types.push_back(Ctx.getPointerType(Ctx.VoidTy));
-
-  if (FTy)
-    for (FunctionProtoType::arg_type_iterator i = FTy->arg_type_begin(),
-           e = FTy->arg_type_end(); i != e; ++i)
-      Types.push_back(*i);
-
-  return Ctx.getFunctionType(ResType, &Types[0], Types.size(),
-                             FTy && FTy->isVariadic(), 0);
-}
-
 RValue CodeGenFunction::EmitBlockCallExpr(const CallExpr* E) {
   const BlockPointerType *BPT =
     E->getCallee()->getType()->getAsBlockPointerType();
 
+  const CGFunctionInfo &FnInfo = CGM.getTypes().getFunctionInfo(BPT);
+  bool IsVariadic = 
+    BPT->getPointeeType()->getAsFunctionProtoType()->isVariadic();
+  
   llvm::Value *Callee = EmitScalarExpr(E->getCallee());
 
   // Get a pointer to the generic block literal.
@@ -446,8 +431,9 @@
   llvm::Value *Func = Builder.CreateLoad(FuncPtr, false, "tmp");
 
   // Cast the function pointer to the right type.
-  const llvm::Type *BlockFTy =
-    ConvertType(getBlockFunctionType(getContext(), BPT));
+  const llvm::Type *BlockFTy = 
+    CGM.getTypes().GetFunctionType(FnInfo, IsVariadic);
+  
   const llvm::Type *BlockFTyPtr = llvm::PointerType::getUnqual(BlockFTy);
   Func = Builder.CreateBitCast(Func, BlockFTyPtr);
 
@@ -468,8 +454,7 @@
                                   i->getType()));
 
   // And call the block.
-  return EmitCall(CGM.getTypes().getFunctionInfo(E->getType(), Args),
-                  Func, Args);
+  return EmitCall(FnInfo, Func, Args);
 }
 
 llvm::Value *CodeGenFunction::GetAddrOfBlockDecl(const BlockDeclRefExpr *E) {





More information about the cfe-commits mailing list