[cfe-commits] r55573 - in /cfe/trunk/lib/CodeGen: CGExprAgg.cpp CGObjC.cpp CGStmt.cpp CodeGenFunction.cpp CodeGenFunction.h

Anders Carlsson andersca at mac.com
Sat Aug 30 12:51:14 PDT 2008


Author: andersca
Date: Sat Aug 30 14:51:14 2008
New Revision: 55573

URL: http://llvm.org/viewvc/llvm-project?rev=55573&view=rev
Log:
Stub out CodeGenFunction::EmitObjCForCollectionStmt.

Add CodeGenFunction::EmitMemSetToZero and make AggExprEmitter::EmitAggregateClear use it.

Modified:
    cfe/trunk/lib/CodeGen/CGExprAgg.cpp
    cfe/trunk/lib/CodeGen/CGObjC.cpp
    cfe/trunk/lib/CodeGen/CGStmt.cpp
    cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
    cfe/trunk/lib/CodeGen/CodeGenFunction.h

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

==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Sat Aug 30 14:51:14 2008
@@ -114,24 +114,7 @@
 void AggExprEmitter::EmitAggregateClear(llvm::Value *DestPtr, QualType Ty) {
   assert(!Ty->isAnyComplexType() && "Shouldn't happen for complex");
 
-  // Aggregate assignment turns into llvm.memset.
-  const llvm::Type *BP = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
-  if (DestPtr->getType() != BP)
-    DestPtr = Builder.CreateBitCast(DestPtr, BP, "tmp");
-
-  // Get size and alignment info for this aggregate.
-  std::pair<uint64_t, unsigned> TypeInfo = CGF.getContext().getTypeInfo(Ty);
-
-  // FIXME: Handle variable sized types.
-  const llvm::Type *IntPtr = llvm::IntegerType::get(CGF.LLVMPointerWidth);
-
-  Builder.CreateCall4(CGF.CGM.getMemSetFn(), 
-                      DestPtr,
-                      llvm::ConstantInt::getNullValue(llvm::Type::Int8Ty),
-                      // TypeInfo.first describes size in bits.
-                      llvm::ConstantInt::get(IntPtr, TypeInfo.first/8),
-                      llvm::ConstantInt::get(llvm::Type::Int32Ty, 
-                                             TypeInfo.second/8));
+  CGF.EmitMemSetToZero(DestPtr, Ty);
 }
 
 void AggExprEmitter::EmitAggregateCopy(llvm::Value *DestPtr,

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

==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp Sat Aug 30 14:51:14 2008
@@ -16,6 +16,7 @@
 #include "CodeGenModule.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/DeclObjC.h"
+#include "llvm/ADT/STLExtras.h"
 
 using namespace clang;
 using namespace CodeGen;
@@ -260,4 +261,9 @@
                                            false, Args);
 }
 
+void CodeGenFunction::EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S)
+{
+  ErrorUnsupported(&S, "for ... in statement");
+}
+
 CGObjCRuntime::~CGObjCRuntime() {}

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

==============================================================================
--- cfe/trunk/lib/CodeGen/CGStmt.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGStmt.cpp Sat Aug 30 14:51:14 2008
@@ -92,8 +92,8 @@
   case Stmt::ObjCAtSynchronizedStmtClass:
     ErrorUnsupported(S, "@synchronized statement");
     break;
-  case Stmt::ObjCForCollectionStmtClass:
-    ErrorUnsupported(S, "for ... in statement");
+  case Stmt::ObjCForCollectionStmtClass: 
+    EmitObjCForCollectionStmt(cast<ObjCForCollectionStmt>(*S));
     break;
   }
 }

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

==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Sat Aug 30 14:51:14 2008
@@ -201,6 +201,26 @@
   return LabelIDs.insert(std::make_pair(L, LabelIDs.size())).first->second;
 }
 
+void CodeGenFunction::EmitMemSetToZero(llvm::Value *DestPtr, QualType Ty)
+{
+  const llvm::Type *BP = llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
+  if (DestPtr->getType() != BP)
+    DestPtr = Builder.CreateBitCast(DestPtr, BP, "tmp");
+
+  // Get size and alignment info for this aggregate.
+  std::pair<uint64_t, unsigned> TypeInfo = getContext().getTypeInfo(Ty);
+
+  // FIXME: Handle variable sized types.
+  const llvm::Type *IntPtr = llvm::IntegerType::get(LLVMPointerWidth);
+
+  Builder.CreateCall4(CGM.getMemSetFn(), DestPtr,
+                      llvm::ConstantInt::getNullValue(llvm::Type::Int8Ty),
+                      // TypeInfo.first describes size in bits.
+                      llvm::ConstantInt::get(IntPtr, TypeInfo.first/8),
+                      llvm::ConstantInt::get(llvm::Type::Int32Ty, 
+                                             TypeInfo.second/8));
+}
+
 void CodeGenFunction::EmitIndirectSwitches() {
   llvm::BasicBlock *Default;
   

Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=55573&r1=55572&r2=55573&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Sat Aug 30 14:51:14 2008
@@ -193,6 +193,9 @@
 
   unsigned GetIDForAddrOfLabel(const LabelStmt *L);
 
+  /// EmitMemSetToZero - Generate code to memset a value of the given type to 0;
+  void EmitMemSetToZero(llvm::Value *DestPtr, QualType Ty);
+  
   //===--------------------------------------------------------------------===//
   //                            Declaration Emission
   //===--------------------------------------------------------------------===//
@@ -230,6 +233,8 @@
   void EmitCaseStmtRange(const CaseStmt &S);
   void EmitAsmStmt(const AsmStmt &S);
   
+  void EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S);
+  
   //===--------------------------------------------------------------------===//
   //                         LValue Expression Emission
   //===--------------------------------------------------------------------===//





More information about the cfe-commits mailing list