From c4c429a1a5947ba9be64d3070741d98362872265 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Wed, 24 Oct 2007 00:56:23 +0000 Subject: [PATCH] Constify methods and reuse RecordOrganizer object. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43284 91177308-0d34-0410-b5e6-96231b3b80d8 --- CodeGen/CodeGenFunction.cpp | 2 +- CodeGen/CodeGenFunction.h | 2 +- CodeGen/CodeGenTypes.cpp | 21 ++++++++++++++------- CodeGen/CodeGenTypes.h | 8 +++++--- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/CodeGen/CodeGenFunction.cpp b/CodeGen/CodeGenFunction.cpp index 07953483cd..03d125f2c4 100644 --- a/CodeGen/CodeGenFunction.cpp +++ b/CodeGen/CodeGenFunction.cpp @@ -127,7 +127,7 @@ void CodeGenFunction::StartBlock(const char *N) { } /// getRecordLayoutInfo - Return record layout info. -RecordLayoutInfo *CodeGenFunction::getRecordLayoutInfo(CodeGenTypes &CGT, +const RecordLayoutInfo *CodeGenFunction::getRecordLayoutInfo(CodeGenTypes &CGT, QualType RTy) { assert (isa(RTy) && "Unexpected type. RecordType expected here."); diff --git a/CodeGen/CodeGenFunction.h b/CodeGen/CodeGenFunction.h index c14687e07e..5980e51f47 100644 --- a/CodeGen/CodeGenFunction.h +++ b/CodeGen/CodeGenFunction.h @@ -299,7 +299,7 @@ public: void StartBlock(const char *N); /// getRecordLayoutInfo - Return record layout info. - RecordLayoutInfo *getRecordLayoutInfo(CodeGenTypes &CGT, QualType RTy); + const RecordLayoutInfo *getRecordLayoutInfo(CodeGenTypes &CGT, QualType RTy); //===--------------------------------------------------------------------===// // Declaration Emission //===--------------------------------------------------------------------===// diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp index 04394e38fe..ec8b69ecb4 100644 --- a/CodeGen/CodeGenTypes.cpp +++ b/CodeGen/CodeGenTypes.cpp @@ -182,13 +182,13 @@ const llvm::Type *CodeGenTypes::ConvertType(QualType T) { RecordTypesToResolve[RD] = OpaqueTy; // Layout fields. - RecordOrganizer *RO = new RecordOrganizer(); + RecordOrganizer RO; for (unsigned i = 0, e = RD->getNumMembers(); i != e; ++i) - RO->addField(RD->getMember(i)); - RO->layoutFields(*this); + RO.addField(RD->getMember(i)); + RO.layoutFields(*this); // Get llvm::StructType. - RecordLayoutInfo *RLI = new RecordLayoutInfo(RO); + RecordLayoutInfo *RLI = new RecordLayoutInfo(&RO); ResultType = RLI->getLLVMType(); RecordLayouts[ResultType] = RLI; @@ -199,7 +199,7 @@ const llvm::Type *CodeGenTypes::ConvertType(QualType T) { && "Expected RecordDecl in RecordTypesToResolve"); RecordTypesToResolve.erase(OpaqueI); - delete RO; + RO.clear(); } else if (TD->getKind() == Decl::Union) { const RecordDecl *RD = cast(TD); // Just use the largest element of the union, breaking ties with the @@ -260,13 +260,14 @@ unsigned CodeGenTypes::getLLVMFieldNo(const FieldDecl *FD) { return I->second; } - /// addFieldInfo - Assign field number to field FD. +/// addFieldInfo - Assign field number to field FD. void CodeGenTypes::addFieldInfo(const FieldDecl *FD, unsigned No) { FieldInfo[FD] = No; } /// getRecordLayoutInfo - Return record layout info for the given llvm::Type. -RecordLayoutInfo *CodeGenTypes::getRecordLayoutInfo(const llvm::Type* Ty) { +const RecordLayoutInfo * +CodeGenTypes::getRecordLayoutInfo(const llvm::Type* Ty) const { llvm::DenseMap::iterator I = RecordLayouts.find(Ty); assert (I != RecordLayouts.end() @@ -315,3 +316,9 @@ void RecordOrganizer::layoutFields(CodeGenTypes &CGT) { } STy = llvm::StructType::get(Fields); } + +/// Clear private data so that this object can be reused. +void RecordOrganizer::clear() { + STy = NULL; + FieldDecls.clear(); +} diff --git a/CodeGen/CodeGenTypes.h b/CodeGen/CodeGenTypes.h index 7ab3afe2e1..f2f1bf37dc 100644 --- a/CodeGen/CodeGenTypes.h +++ b/CodeGen/CodeGenTypes.h @@ -58,10 +58,12 @@ namespace CodeGen { /// getLLVMType - Return associated llvm struct type. This may be NULL /// if fields are not laid out. - llvm::Type *getLLVMType() { + llvm::Type *getLLVMType() const { return STy; } + /// Clear private data so that this object can be reused. + void clear(); private: llvm::Type *STy; llvm::SmallVector FieldDecls; @@ -75,7 +77,7 @@ namespace CodeGen { RecordLayoutInfo(RecordOrganizer *RO); /// getLLVMType - Return llvm type associated with this record. - llvm::Type *getLLVMType() { + llvm::Type *getLLVMType() const { return STy; } @@ -117,7 +119,7 @@ public: void DecodeArgumentTypes(const FunctionTypeProto &FTP, std::vector &ArgTys); - RecordLayoutInfo *getRecordLayoutInfo(const llvm::Type*); + const RecordLayoutInfo *getRecordLayoutInfo(const llvm::Type*) const; /// getLLVMFieldNo - Return llvm::StructType element number /// that corresponds to the field FD. -- 2.40.0