diff options
-rw-r--r-- | AST/ASTContext.cpp | 16 | ||||
-rw-r--r-- | CodeGen/CodeGenFunction.cpp | 8 | ||||
-rw-r--r-- | CodeGen/CodeGenFunction.h | 6 | ||||
-rw-r--r-- | CodeGen/CodeGenTypes.cpp | 34 | ||||
-rw-r--r-- | CodeGen/CodeGenTypes.h | 16 | ||||
-rw-r--r-- | include/clang/AST/ASTContext.h | 9 | ||||
-rw-r--r-- | include/clang/AST/RecordLayout.h | 12 |
7 files changed, 50 insertions, 51 deletions
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<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()]; 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<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); } 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<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; 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<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. 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<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 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; } |