]> granicus.if.org Git - clang/commitdiff
Rename classes and collections that maintain record layout information.
authorDevang Patel <dpatel@apple.com>
Thu, 1 Nov 2007 19:11:01 +0000 (19:11 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 1 Nov 2007 19:11:01 +0000 (19:11 +0000)
Now, at AST level record info is maintained by ASTRecordLayout class.
Now, at code gen  level record info is maintained by CGRecordLayout class.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43619 91177308-0d34-0410-b5e6-96231b3b80d8

AST/ASTContext.cpp
CodeGen/CodeGenFunction.cpp
CodeGen/CodeGenFunction.h
CodeGen/CodeGenTypes.cpp
CodeGen/CodeGenTypes.h
include/clang/AST/ASTContext.h
include/clang/AST/RecordLayout.h

index 3ebc1af0cd8e7b0f4bcc567d0f6d8d14ac7d3d4f..a8900c12a63e1b209894ae51e92fc5219fc733ec 100644 (file)
@@ -246,7 +246,7 @@ ASTContext::getTypeInfo(QualType T, SourceLocation L) {
   case Type::Tagged:
     TagType *TT = cast<TagType>(T);
     if (RecordType *RT = dyn_cast<RecordType>(TT)) {
-      const RecordLayout &Layout = getRecordLayout(RT->getDecl(), L);
+      const ASTRecordLayout &Layout = getASTRecordLayout(RT->getDecl(), L);
       Size = Layout.getSize();
       Align = Layout.getAlignment();
     } else if (EnumDecl *ED = dyn_cast<EnumDecl>(TT->getDecl())) {
@@ -261,20 +261,20 @@ ASTContext::getTypeInfo(QualType T, SourceLocation L) {
   return std::make_pair(Size, Align);
 }
 
-/// getRecordLayout - Get or compute information about the layout of the
+/// getASTRecordLayout - Get or compute information about the layout of the
 /// specified record (struct/union/class), which indicates its size and field
 /// position information.
-const RecordLayout &ASTContext::getRecordLayout(const RecordDecl *D,
-                                                SourceLocation L) {
+const ASTRecordLayout &ASTContext::getASTRecordLayout(const RecordDecl *D,
+                                                      SourceLocation L) {
   assert(D->isDefinition() && "Cannot get layout of forward declarations!");
   
   // Look up this layout, if already laid out, return what we have.
-  const RecordLayout *&Entry = RecordLayoutInfo[D];
+  const ASTRecordLayout *&Entry = ASTRecordLayouts[D];
   if (Entry) return *Entry;
   
-  // Allocate and assign into RecordLayoutInfo here.  The "Entry" reference can
-  // be invalidated (dangle) if the RecordLayoutInfo hashtable is inserted into.
-  RecordLayout *NewEntry = new RecordLayout();
+  // Allocate and assign into ASTRecordLayouts here.  The "Entry" reference can
+  // be invalidated (dangle) if the ASTRecordLayouts hashtable is inserted into.
+  ASTRecordLayout *NewEntry = new ASTRecordLayout();
   Entry = NewEntry;
   
   uint64_t *FieldOffsets = new uint64_t[D->getNumMembers()];
index 03d125f2c4235df2026cd778517e90e0467c2b92..e0d55b59cbab87d54ef41842e0fe5c1d28673620 100644 (file)
@@ -126,14 +126,14 @@ void CodeGenFunction::StartBlock(const char *N) {
     BB->setName(N);
 }
 
-/// getRecordLayoutInfo - Return record layout info.
-const RecordLayoutInfo *CodeGenFunction::getRecordLayoutInfo(CodeGenTypes &CGT,
-                                                       QualType RTy) {
+/// getCGRecordLayout - Return record layout info.
+const CGRecordLayout *CodeGenFunction::getCGRecordLayout(CodeGenTypes &CGT,
+                                                         QualType RTy) {
   assert (isa<RecordType>(RTy) 
           && "Unexpected type. RecordType expected here.");
 
   const llvm::Type *Ty = ConvertType(RTy);
   assert (Ty && "Unable to find llvm::Type");
   
-  return CGT.getRecordLayoutInfo(Ty);
+  return CGT.getCGRecordLayout(Ty);
 }
index 5980e51f47bc1039d597761d84a6a6dd2418ea10..e4bf09b15eac90c32cd7cca0932ae7e4c2b29026 100644 (file)
@@ -73,7 +73,7 @@ namespace clang {
 namespace CodeGen {
   class CodeGenModule;
   class CodeGenTypes;
-  class RecordLayoutInfo;  
+  class CGRecordLayout;  
 
 /// RValue - This trivial value class is used to represent the result of an
 /// expression that is evaluated.  It can be one of three things: either a
@@ -298,8 +298,8 @@ public:
   /// then reuse it.
   void StartBlock(const char *N);
 
-  /// getRecordLayoutInfo - Return record layout info.
-  const RecordLayoutInfo *getRecordLayoutInfo(CodeGenTypes &CGT, QualType RTy);
+  /// getCGRecordLayout - Return record layout info.
+  const CGRecordLayout *getCGRecordLayout(CodeGenTypes &CGT, QualType RTy);
   //===--------------------------------------------------------------------===//
   //                            Declaration Emission
   //===--------------------------------------------------------------------===//
index d19b0a9efd8ec513c30760b4d7dee153fcdb5042..08dcf2465a525059fa9cf484eb876b611e90ca58 100644 (file)
@@ -22,7 +22,7 @@ using namespace clang;
 using namespace CodeGen;
 
 namespace {
-  /// RecordOrganizer - This helper class, used by RecordLayoutInfo, layouts 
+  /// RecordOrganizer - This helper class, used by CGRecordLayout, layouts 
   /// structs and unions. It manages transient information used during layout.
   /// FIXME : At the moment assume 
   ///    - one to one mapping between AST FieldDecls and 
@@ -49,7 +49,7 @@ namespace {
     /// layoutStructFields - Do the actual work and lay out all fields. Create
     /// corresponding llvm struct type.  This should be invoked only after
     /// all fields are added.
-    void layoutStructFields(const RecordLayout &RL);
+    void layoutStructFields(const ASTRecordLayout &RL);
 
     /// layoutUnionFields - Do the actual work and lay out all fields. Create
     /// corresponding llvm struct type.  This should be invoked only after
@@ -78,11 +78,11 @@ CodeGenTypes::CodeGenTypes(ASTContext &Ctx, llvm::Module& M,
 }
 
 CodeGenTypes::~CodeGenTypes() {
-  for(llvm::DenseMap<const llvm::Type *, RecordLayoutInfo *>::iterator
-        I = RecordLayouts.begin(), E = RecordLayouts.end();
+  for(llvm::DenseMap<const llvm::Type *, CGRecordLayout *>::iterator
+        I = CGRecordLayouts.begin(), E = CGRecordLayouts.end();
       I != E; ++I)
     delete I->second;
-  RecordLayouts.clear();
+  CGRecordLayouts.clear();
 }
 
 /// ConvertType - Convert the specified type to its LLVM form.
@@ -258,13 +258,13 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
       RecordOrganizer RO(*this);
       for (unsigned i = 0, e = RD->getNumMembers(); i != e; ++i)
         RO.addField(RD->getMember(i));
-      const RecordLayout &RL = Context.getRecordLayout(RD, SourceLocation());
+      const ASTRecordLayout &RL = Context.getASTRecordLayout(RD, SourceLocation());
       RO.layoutStructFields(RL);
 
       // Get llvm::StructType.
-      RecordLayoutInfo *RLI = new RecordLayoutInfo(RO.getLLVMType());
+      CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType());
       ResultType = RLI->getLLVMType();
-      RecordLayouts[ResultType] = RLI;
+      CGRecordLayouts[ResultType] = RLI;
 
       // Refine any OpaqueType associated with this RecordDecl.
       OpaqueTy->refineAbstractTypeTo(ResultType);
@@ -285,9 +285,9 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
         RO.layoutUnionFields();
 
         // Get llvm::StructType.
-        RecordLayoutInfo *RLI = new RecordLayoutInfo(RO.getLLVMType());
+        CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType());
         ResultType = RLI->getLLVMType();
-        RecordLayouts[ResultType] = RLI;
+        CGRecordLayouts[ResultType] = RLI;
       } else {       
         std::vector<const llvm::Type*> Fields;
         ResultType = llvm::StructType::get(Fields);
@@ -339,12 +339,12 @@ void CodeGenTypes::addFieldInfo(const FieldDecl *FD, unsigned No) {
   FieldInfo[FD] = No;
 }
 
-/// getRecordLayoutInfo - Return record layout info for the given llvm::Type.
-const RecordLayoutInfo *
-CodeGenTypes::getRecordLayoutInfo(const llvm::Type* Ty) const {
-  llvm::DenseMap<const llvm::Type*, RecordLayoutInfo *>::iterator I
-    = RecordLayouts.find(Ty);
-  assert (I != RecordLayouts.end() 
+/// getCGRecordLayout - Return record layout info for the given llvm::Type.
+const CGRecordLayout *
+CodeGenTypes::getCGRecordLayout(const llvm::Type* Ty) const {
+  llvm::DenseMap<const llvm::Type*, CGRecordLayout *>::iterator I
+    = CGRecordLayouts.find(Ty);
+  assert (I != CGRecordLayouts.end() 
           && "Unable to find record layout information for type");
   return I->second;
 }
@@ -364,7 +364,7 @@ void RecordOrganizer::addField(const FieldDecl *FD) {
 ///    - Ignore bit fields
 ///    - Ignore field aligments
 ///    - Ignore packed structs
-void RecordOrganizer::layoutStructFields(const RecordLayout &RL) {
+void RecordOrganizer::layoutStructFields(const ASTRecordLayout &RL) {
   // FIXME : Use SmallVector
   Cursor = 0;
   FieldNo = 0;
index b89713584c640c4f6ba9fabd721de9b25672412b..6712b8e0a6f709c3d90fe01c1988bb4303ffd1b0 100644 (file)
@@ -37,12 +37,12 @@ namespace clang {
 namespace CodeGen {
   class CodeGenTypes;
 
-  /// RecordLayoutInfo - This class handles struct and union layout info while 
+  /// CGRecordLayout - This class handles struct and union layout info while 
   /// lowering AST types to LLVM types.
-  class RecordLayoutInfo {
-    RecordLayoutInfo(); // DO NOT IMPLEMENT
+  class CGRecordLayout {
+    CGRecordLayout(); // DO NOT IMPLEMENT
   public:
-    RecordLayoutInfo(llvm::Type *T) : STy(T) {
+    CGRecordLayout(llvm::Type *T) : STy(T) {
       // FIXME : Collect info about fields that requires adjustments 
       // (i.e. fields that do not directly map to llvm struct fields.)
     }
@@ -66,11 +66,11 @@ class CodeGenTypes {
   
   llvm::DenseMap<const TagDecl*, llvm::Type*> TagDeclTypes;
 
-  /// RecordLayouts - This maps llvm struct type with corresponding 
+  /// CGRecordLayouts - This maps llvm struct type with corresponding 
   /// record layout info. 
-  /// FIXME : If RecordLayoutInfo is less than 16 bytes then use 
+  /// FIXME : If CGRecordLayout is less than 16 bytes then use 
   /// inline it in the map.
-  llvm::DenseMap<const llvm::Type*, RecordLayoutInfo *> RecordLayouts;
+  llvm::DenseMap<const llvm::Type*, CGRecordLayout *> CGRecordLayouts;
 
   /// FieldInfo - This maps struct field with corresponding llvm struct type
   /// field no. This info is populated by record organizer.
@@ -106,7 +106,7 @@ public:
   void DecodeArgumentTypes(const FunctionTypeProto &FTP, 
                            std::vector<const llvm::Type*> &ArgTys);
 
-  const RecordLayoutInfo *getRecordLayoutInfo(const llvm::Type*) const;
+  const CGRecordLayout *getCGRecordLayout(const llvm::Type*) const;
   
   /// getLLVMFieldNo - Return llvm::StructType element number
   /// that corresponds to the field FD.
index e236f2a56b675c05b87eb7cf47d426a29fb91093..2dc904453077ae051e4ce770c23d27612be0ce05 100644 (file)
@@ -42,10 +42,9 @@ class ASTContext {
   llvm::FoldingSet<FunctionTypeNoProto> FunctionTypeNoProtos;
   llvm::FoldingSet<FunctionTypeProto> FunctionTypeProtos;
   llvm::FoldingSet<ObjcQualifiedInterfaceType> ObjcQualifiedInterfaceTypes;
-  
-  /// RecordLayoutInfo - A cache mapping from RecordDecls to RecordLayoutInfo.
+  /// ASTRecordLayouts - A cache mapping from RecordDecls to ASTRecordLayouts.
   ///  This is lazily created.  This is intentionally not serialized.
-  llvm::DenseMap<const RecordDecl*, const RecordLayout*> RecordLayoutInfo;
+  llvm::DenseMap<const RecordDecl*, const ASTRecordLayout*> ASTRecordLayouts;
     
   /// BuiltinVaListType - built-in va list type.
   /// This is initially null and set by Sema::LazilyCreateBuiltin when
@@ -241,10 +240,10 @@ public:
     return getTypeInfo(T, L).second;
   }
   
-  /// getRecordLayout - Get or compute information about the layout of the
+  /// getASTRecordLayout - Get or compute information about the layout of the
   /// specified record (struct/union/class), which indicates its size and field
   /// position information.
-  const RecordLayout &getRecordLayout(const RecordDecl *D, SourceLocation L);
+  const ASTRecordLayout &getASTRecordLayout(const RecordDecl *D, SourceLocation L);
   
   //===--------------------------------------------------------------------===//
   //                            Type Operators
index dec6e3ae91ee17d47db80d6df306b57d59555bdf..d8ffa4ecca4ffe324c9576997367e4a6eb07cd92 100644 (file)
@@ -20,17 +20,17 @@ namespace clang {
   class ASTContext;
   class RecordDecl;
 
-/// RecordLayout - This class contains layout information for one RecordDecl,
+/// ASTRecordLayout - This class contains layout information for one RecordDecl,
 /// which is a struct/union/class.  The decl represented must be a definition,
 /// not a forward declaration.  These objects are managed by ASTContext.
-class RecordLayout {
+class ASTRecordLayout {
   uint64_t Size;        // Size of record in bits.
   unsigned Alignment;   // Alignment of record in bits.
   uint64_t *FieldOffsets;
   friend class ASTContext;
   
-  RecordLayout() {}
-  ~RecordLayout() {
+  ASTRecordLayout() {}
+  ~ASTRecordLayout() {
     delete [] FieldOffsets;
   }
   
@@ -39,8 +39,8 @@ class RecordLayout {
     FieldOffsets = fieldOffsets;
   }
   
-  RecordLayout(const RecordLayout&);   // DO NOT IMPLEMENT
-  void operator=(const RecordLayout&); // DO NOT IMPLEMENT
+  ASTRecordLayout(const ASTRecordLayout&);   // DO NOT IMPLEMENT
+  void operator=(const ASTRecordLayout&); // DO NOT IMPLEMENT
 public:
   
   unsigned getAlignment() const { return Alignment; }