Browse Source

Convert RecordLayout::DataSize to CharUnits from bits, eliminating two
unnecessary calls to RoundUpToAlignment. No changes to functionality
intended.



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

Ken Dyck 14 years ago
parent
commit
ec29903513

+ 6 - 6
include/clang/AST/RecordLayout.h

@@ -36,8 +36,8 @@ class ASTRecordLayout {
   /// Size - Size of record in characters.
   /// Size - Size of record in characters.
   CharUnits Size;
   CharUnits Size;
 
 
-  /// DataSize - Size of record in bits without tail padding.
-  uint64_t DataSize;
+  /// DataSize - Size of record in characters without tail padding.
+  CharUnits DataSize;
 
 
   /// FieldOffsets - Array of field offsets in bits.
   /// FieldOffsets - Array of field offsets in bits.
   uint64_t *FieldOffsets;
   uint64_t *FieldOffsets;
@@ -83,13 +83,13 @@ class ASTRecordLayout {
   friend class ASTContext;
   friend class ASTContext;
 
 
   ASTRecordLayout(const ASTContext &Ctx, CharUnits size, unsigned alignment,
   ASTRecordLayout(const ASTContext &Ctx, CharUnits size, unsigned alignment,
-                  unsigned datasize, const uint64_t *fieldoffsets,
+                  CharUnits datasize, const uint64_t *fieldoffsets,
                   unsigned fieldcount);
                   unsigned fieldcount);
 
 
   // Constructor for C++ records.
   // Constructor for C++ records.
   typedef CXXRecordLayoutInfo::BaseOffsetsMapTy BaseOffsetsMapTy;
   typedef CXXRecordLayoutInfo::BaseOffsetsMapTy BaseOffsetsMapTy;
   ASTRecordLayout(const ASTContext &Ctx,
   ASTRecordLayout(const ASTContext &Ctx,
-                  CharUnits size, unsigned alignment, uint64_t datasize,
+                  CharUnits size, unsigned alignment, CharUnits datasize,
                   const uint64_t *fieldoffsets, unsigned fieldcount,
                   const uint64_t *fieldoffsets, unsigned fieldcount,
                   CharUnits nonvirtualsize, CharUnits nonvirtualalign,
                   CharUnits nonvirtualsize, CharUnits nonvirtualalign,
                   CharUnits SizeOfLargestEmptySubobject,
                   CharUnits SizeOfLargestEmptySubobject,
@@ -123,8 +123,8 @@ public:
   }
   }
 
 
   /// getDataSize() - Get the record data size, which is the record size
   /// getDataSize() - Get the record data size, which is the record size
-  /// without tail padding, in bits.
-  uint64_t getDataSize() const {
+  /// without tail padding, in characters.
+  CharUnits getDataSize() const {
     return DataSize;
     return DataSize;
   }
   }
 
 

+ 2 - 2
lib/AST/RecordLayout.cpp

@@ -28,7 +28,7 @@ void ASTRecordLayout::Destroy(ASTContext &Ctx) {
 }
 }
 
 
 ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx, CharUnits size,
 ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx, CharUnits size,
-                                 unsigned alignment, unsigned datasize,
+                                 unsigned alignment, CharUnits datasize,
                                  const uint64_t *fieldoffsets,
                                  const uint64_t *fieldoffsets,
                                  unsigned fieldcount)
                                  unsigned fieldcount)
   : Size(size), DataSize(datasize), FieldOffsets(0), Alignment(alignment),
   : Size(size), DataSize(datasize), FieldOffsets(0), Alignment(alignment),
@@ -42,7 +42,7 @@ ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx, CharUnits size,
 // Constructor for C++ records.
 // Constructor for C++ records.
 ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx,
 ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx,
                                  CharUnits size, unsigned alignment,
                                  CharUnits size, unsigned alignment,
-                                 uint64_t datasize,
+                                 CharUnits datasize,
                                  const uint64_t *fieldoffsets,
                                  const uint64_t *fieldoffsets,
                                  unsigned fieldcount,
                                  unsigned fieldcount,
                                  CharUnits nonvirtualsize,
                                  CharUnits nonvirtualsize,

+ 7 - 6
lib/AST/RecordLayoutBuilder.cpp

@@ -1207,7 +1207,7 @@ void RecordLayoutBuilder::Layout(const ObjCInterfaceDecl *D) {
 
 
     // We start laying out ivars not at the end of the superclass
     // We start laying out ivars not at the end of the superclass
     // structure, but at the next byte following the last field.
     // structure, but at the next byte following the last field.
-    Size = llvm::RoundUpToAlignment(SL.getDataSize(), 8);
+    Size = Context.toBits(SL.getDataSize());
     DataSize = Size;
     DataSize = Size;
   }
   }
 
 
@@ -1684,7 +1684,8 @@ ASTContext::getASTRecordLayout(const RecordDecl *D) const {
     CharUnits RecordSize = toCharUnitsFromBits(Builder->Size);
     CharUnits RecordSize = toCharUnitsFromBits(Builder->Size);
     NewEntry =
     NewEntry =
       new (*this) ASTRecordLayout(*this, RecordSize, Builder->Alignment,
       new (*this) ASTRecordLayout(*this, RecordSize, Builder->Alignment,
-                                  DataSize, Builder->FieldOffsets.data(),
+                                  toCharUnitsFromBits(DataSize), 
+                                  Builder->FieldOffsets.data(),
                                   Builder->FieldOffsets.size(),
                                   Builder->FieldOffsets.size(),
                                   toCharUnitsFromBits(NonVirtualSize),
                                   toCharUnitsFromBits(NonVirtualSize),
                                   toCharUnitsFromBits(NonVirtualAlign),
                                   toCharUnitsFromBits(NonVirtualAlign),
@@ -1700,7 +1701,7 @@ ASTContext::getASTRecordLayout(const RecordDecl *D) const {
 
 
     NewEntry =
     NewEntry =
       new (*this) ASTRecordLayout(*this, RecordSize, Builder.Alignment,
       new (*this) ASTRecordLayout(*this, RecordSize, Builder.Alignment,
-                                  Builder.Size,
+                                  toCharUnitsFromBits(Builder.Size),
                                   Builder.FieldOffsets.data(),
                                   Builder.FieldOffsets.data(),
                                   Builder.FieldOffsets.size());
                                   Builder.FieldOffsets.size());
   }
   }
@@ -1760,7 +1761,7 @@ ASTContext::getObjCLayout(const ObjCInterfaceDecl *D,
 
 
   const ASTRecordLayout *NewEntry =
   const ASTRecordLayout *NewEntry =
     new (*this) ASTRecordLayout(*this, RecordSize, Builder.Alignment,
     new (*this) ASTRecordLayout(*this, RecordSize, Builder.Alignment,
-                                Builder.DataSize,
+                                toCharUnitsFromBits(Builder.DataSize),
                                 Builder.FieldOffsets.data(),
                                 Builder.FieldOffsets.data(),
                                 Builder.FieldOffsets.size());
                                 Builder.FieldOffsets.size());
 
 
@@ -1857,7 +1858,7 @@ static void DumpCXXRecordLayout(llvm::raw_ostream &OS,
   }
   }
 
 
   OS << "  sizeof=" << Layout.getSize().getQuantity();
   OS << "  sizeof=" << Layout.getSize().getQuantity();
-  OS << ", dsize=" << Layout.getDataSize() / 8;
+  OS << ", dsize=" << Layout.getDataSize().getQuantity();
   OS << ", align=" << Layout.getAlignment() / 8 << '\n';
   OS << ", align=" << Layout.getAlignment() / 8 << '\n';
   OS << "  nvsize=" << Layout.getNonVirtualSize().getQuantity();
   OS << "  nvsize=" << Layout.getNonVirtualSize().getQuantity();
   OS << ", nvalign=" << Layout.getNonVirtualAlign().getQuantity() << '\n';
   OS << ", nvalign=" << Layout.getNonVirtualAlign().getQuantity() << '\n';
@@ -1878,7 +1879,7 @@ void ASTContext::DumpRecordLayout(const RecordDecl *RD,
   OS << "\nLayout: ";
   OS << "\nLayout: ";
   OS << "<ASTRecordLayout\n";
   OS << "<ASTRecordLayout\n";
   OS << "  Size:" << toBits(Info.getSize()) << "\n";
   OS << "  Size:" << toBits(Info.getSize()) << "\n";
-  OS << "  DataSize:" << Info.getDataSize() << "\n";
+  OS << "  DataSize:" << toBits(Info.getDataSize()) << "\n";
   OS << "  Alignment:" << Info.getAlignment() << "\n";
   OS << "  Alignment:" << Info.getAlignment() << "\n";
   OS << "  FieldOffsets: [";
   OS << "  FieldOffsets: [";
   for (unsigned i = 0, e = Info.getFieldCount(); i != e; ++i) {
   for (unsigned i = 0, e = Info.getFieldCount(); i != e; ++i) {

+ 1 - 1
lib/CodeGen/CGObjCMac.cpp

@@ -4950,7 +4950,7 @@ void CGObjCNonFragileABIMac::GetClassSizeInfo(const ObjCImplementationDecl *OID,
     CGM.getContext().getASTObjCImplementationLayout(OID);
     CGM.getContext().getASTObjCImplementationLayout(OID);
 
 
   // InstanceSize is really instance end.
   // InstanceSize is really instance end.
-  InstanceSize = llvm::RoundUpToAlignment(RL.getDataSize(), 8) / 8;
+  InstanceSize = RL.getDataSize().getQuantity();
 
 
   // If there are no fields, the start is the same as the end.
   // If there are no fields, the start is the same as the end.
   if (!RL.getFieldCount())
   if (!RL.getFieldCount())