IRgen: Lift BitFieldInfo to CGBitFieldInfo at namespace level.

llvm-svn: 100433
This commit is contained in:
Daniel Dunbar 2010-04-05 16:20:44 +00:00
parent b76c4cd5ec
commit cd3d5e76ce
4 changed files with 16 additions and 18 deletions

View File

@ -1471,7 +1471,7 @@ LValue CodeGenFunction::EmitLValueForBitfield(llvm::Value* BaseValue,
unsigned CVRQualifiers) {
const CGRecordLayout &RL =
CGM.getTypes().getCGRecordLayout(Field->getParent());
const CGRecordLayout::BitFieldInfo &Info = RL.getBitFieldInfo(Field);
const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field);
// FIXME: CodeGenTypes should expose a method to get the appropriate type for
// FieldTy (the appropriate type is ABI-dependent).

View File

@ -3126,7 +3126,7 @@ void CGObjCCommonMac::BuildAggrIvarLayout(const ObjCImplementationDecl *OI,
const CGRecordLayout &RL =
CGM.getTypes().getCGRecordLayout(Field->getParent());
if (Field->isBitField()) {
const CGRecordLayout::BitFieldInfo &Info = RL.getBitFieldInfo(Field);
const CGBitFieldInfo &Info = RL.getBitFieldInfo(Field);
const llvm::Type *Ty =
CGM.getTypes().ConvertTypeForMemRecursive(Field->getType());

View File

@ -19,6 +19,16 @@ namespace llvm {
namespace clang {
namespace CodeGen {
class CGBitFieldInfo {
public:
CGBitFieldInfo(unsigned FieldNo, unsigned Start, unsigned Size)
: FieldNo(FieldNo), Start(Start), Size(Size) {}
unsigned FieldNo;
unsigned Start;
unsigned Size;
};
/// CGRecordLayout - This class handles struct and union layout info while
/// lowering AST types to LLVM types.
///
@ -29,18 +39,6 @@ class CGRecordLayout {
CGRecordLayout(const CGRecordLayout&); // DO NOT IMPLEMENT
void operator=(const CGRecordLayout&); // DO NOT IMPLEMENT
public:
struct BitFieldInfo {
BitFieldInfo(unsigned FieldNo,
unsigned Start,
unsigned Size)
: FieldNo(FieldNo), Start(Start), Size(Size) {}
unsigned FieldNo;
unsigned Start;
unsigned Size;
};
private:
/// The LLVMType corresponding to this record layout.
const llvm::Type *LLVMType;
@ -51,7 +49,7 @@ private:
/// Map from (bit-field) struct field to the corresponding llvm struct type
/// field no. This info is populated by record builder.
llvm::DenseMap<const FieldDecl *, BitFieldInfo> BitFields;
llvm::DenseMap<const FieldDecl *, CGBitFieldInfo> BitFields;
/// Whether one of the fields in this record layout is a pointer to data
/// member, or a struct that contains pointer to data member.
@ -80,9 +78,9 @@ public:
/// \brief Return llvm::StructType element number that corresponds to the
/// field FD.
const BitFieldInfo &getBitFieldInfo(const FieldDecl *FD) const {
const CGBitFieldInfo &getBitFieldInfo(const FieldDecl *FD) const {
assert(FD->isBitField() && "Invalid call for non bit-field decl!");
llvm::DenseMap<const FieldDecl *, BitFieldInfo>::const_iterator
llvm::DenseMap<const FieldDecl *, CGBitFieldInfo>::const_iterator
it = BitFields.find(FD);
assert(it != BitFields.end() && "Unable to find bitfield info");
return it->second;

View File

@ -506,7 +506,7 @@ CGRecordLayout *CodeGenTypes::ComputeRecordLayout(const RecordDecl *D) {
const CGRecordLayoutBuilder::LLVMBitFieldInfo &Info =
Builder.LLVMBitFields[i];
CGRecordLayout::BitFieldInfo BFI(Info.FieldNo, Info.Start, Info.Size);
CGBitFieldInfo BFI(Info.FieldNo, Info.Start, Info.Size);
RL->BitFields.insert(std::make_pair(Info.FD, BFI));
}