OSDN Git Service

Add getABITypeSize, getABITypeSizeInBits
authorDale Johannesen <dalej@apple.com>
Mon, 1 Oct 2007 16:03:14 +0000 (16:03 +0000)
committerDale Johannesen <dalej@apple.com>
Mon, 1 Oct 2007 16:03:14 +0000 (16:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42488 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/TargetData.h
lib/Target/TargetData.cpp

index f2e55f1..026749f 100644 (file)
@@ -159,10 +159,23 @@ public:
   /// type.
   uint64_t getTypeSize(const Type *Ty) const;
 
+  /// getABITypeSize - Return the number of bytes allocated for the specified
+  /// type when used as an element in a larger object, including alignment
+  /// padding.
+  uint64_t getABITypeSize(const Type *Ty) const {
+    unsigned char Align = getABITypeAlignment(Ty);
+    return (getTypeSize(Ty) + Align - 1)/Align*Align;
+  }
+
   /// getTypeSizeInBits - Return the number of bits necessary to hold the
   /// specified type.
   uint64_t getTypeSizeInBits(const Type* Ty) const;
 
+  /// getABITypeSizeInBits - Return the number of bytes allocated for the
+  /// specified type when used as an element in a larger object, including
+  ///  alignment padding.
+  uint64_t getABITypeSizeInBits(const Type* Ty) const;
+
   /// getABITypeAlignment - Return the minimum ABI-required alignment for the
   /// specified type.
   unsigned char getABITypeAlignment(const Type *Ty) const;
index 3028426..0bdb23b 100644 (file)
@@ -471,7 +471,12 @@ uint64_t TargetData::getTypeSizeInBits(const Type *Ty) const {
     return getTypeSize(Ty) * 8;
 }
 
-
+uint64_t TargetData::getABITypeSizeInBits(const Type *Ty) const {
+  if (Ty->isInteger())
+    return cast<IntegerType>(Ty)->getBitWidth();
+  else
+    return getABITypeSize(Ty) * 8;
+}
 /*!
   \param abi_or_pref Flag that determines which alignment is returned. true
   returns the ABI alignment, false returns the preferred alignment.