From: Devang Patel Date: Thu, 1 Nov 2007 19:11:01 +0000 (+0000) Subject: Rename classes and collections that maintain record layout information. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=88a981b47c7face1b1fdaa9074256245107b9ca9;p=clang Rename classes and collections that maintain record layout information. 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 --- diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp index 3ebc1af0cd..a8900c12a6 100644 --- a/AST/ASTContext.cpp +++ b/AST/ASTContext.cpp @@ -246,7 +246,7 @@ ASTContext::getTypeInfo(QualType T, SourceLocation L) { case Type::Tagged: TagType *TT = cast(T); if (RecordType *RT = dyn_cast(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(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()]; diff --git a/CodeGen/CodeGenFunction.cpp b/CodeGen/CodeGenFunction.cpp index 03d125f2c4..e0d55b59cb 100644 --- a/CodeGen/CodeGenFunction.cpp +++ b/CodeGen/CodeGenFunction.cpp @@ -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(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); } diff --git a/CodeGen/CodeGenFunction.h b/CodeGen/CodeGenFunction.h index 5980e51f47..e4bf09b15e 100644 --- a/CodeGen/CodeGenFunction.h +++ b/CodeGen/CodeGenFunction.h @@ -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 //===--------------------------------------------------------------------===// diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp index d19b0a9efd..08dcf2465a 100644 --- a/CodeGen/CodeGenTypes.cpp +++ b/CodeGen/CodeGenTypes.cpp @@ -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::iterator - I = RecordLayouts.begin(), E = RecordLayouts.end(); + for(llvm::DenseMap::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 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::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::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; diff --git a/CodeGen/CodeGenTypes.h b/CodeGen/CodeGenTypes.h index b89713584c..6712b8e0a6 100644 --- a/CodeGen/CodeGenTypes.h +++ b/CodeGen/CodeGenTypes.h @@ -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 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 RecordLayouts; + llvm::DenseMap 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 &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. diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h index e236f2a56b..2dc9044530 100644 --- a/include/clang/AST/ASTContext.h +++ b/include/clang/AST/ASTContext.h @@ -42,10 +42,9 @@ class ASTContext { llvm::FoldingSet FunctionTypeNoProtos; llvm::FoldingSet FunctionTypeProtos; llvm::FoldingSet 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 RecordLayoutInfo; + llvm::DenseMap 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 diff --git a/include/clang/AST/RecordLayout.h b/include/clang/AST/RecordLayout.h index dec6e3ae91..d8ffa4ecca 100644 --- a/include/clang/AST/RecordLayout.h +++ b/include/clang/AST/RecordLayout.h @@ -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; }