Doxygenate comments.
[oota-llvm.git] / include / llvm / Target / TargetData.h
index fd52ef380abfd1696298df347c0a24189c80e17e..7c274cec2d3fffebda2bc7c1cae41ec7f272a891 100644 (file)
@@ -2,8 +2,8 @@
 //
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
 //
@@ -23,7 +23,6 @@
 #include "llvm/Pass.h"
 #include "llvm/Support/DataTypes.h"
 #include "llvm/ADT/SmallVector.h"
-#include "llvm/Config/config.h"
 #include <string>
 
 namespace llvm {
@@ -93,7 +92,7 @@ private:
   void setAlignment(AlignTypeEnum align_type, unsigned char abi_align,
                     unsigned char pref_align, uint32_t bit_width);
   unsigned getAlignmentInfo(AlignTypeEnum align_type, uint32_t bit_width,
-                            bool ABIAlign) const;
+                            bool ABIAlign, const Type *Ty) const;
   //! Internal helper method that returns requested alignment for type.
   unsigned char getAlignment(const Type *Ty, bool abi_or_pref) const;
 
@@ -115,9 +114,9 @@ public:
            "Tool did not specify a TargetData to use?");
     abort();
   }
-    
+
   /// Constructs a TargetData from a specification string. See init().
-  explicit TargetData(const std::string &TargetDescription) 
+  explicit TargetData(const std::string &TargetDescription)
     : ImmutablePass(intptr_t(&ID)) {
     init(TargetDescription);
   }
@@ -125,7 +124,7 @@ public:
   /// Initialize target data from properties stored in the module.
   explicit TargetData(const Module *M);
 
-  TargetData(const TargetData &TD) : 
+  TargetData(const TargetData &TD) :
     ImmutablePass(intptr_t(&ID)),
     LittleEndian(TD.isLittleEndian()),
     PointerMemSize(TD.PointerMemSize),
@@ -138,21 +137,11 @@ public:
 
   //! Parse a target data layout string and initialize TargetData alignments.
   void init(const std::string &TargetDescription);
-  
+
   /// Target endianness...
   bool          isLittleEndian()       const { return     LittleEndian; }
   bool          isBigEndian()          const { return    !LittleEndian; }
 
-  /// Host endianness...
-  bool hostIsLittleEndian() const {
-#ifdef LSB_FIRST
-    return true;
-#else
-    return false;
-#endif
-  }
-  bool hostIsBigEndian() const { return !hostIsLittleEndian(); }
-
   /// getStringRepresentation - Return the string representation of the
   /// TargetData.  This representation is in the same format accepted by the
   /// string constructor above.
@@ -211,7 +200,7 @@ public:
 
 
   /// getPrefTypeAlignment - Return the preferred stack/global alignment for
-  /// the specified type.
+  /// the specified type.  This is always at least as good as the ABI alignment.
   unsigned char getPrefTypeAlignment(const Type *Ty) const;
 
   /// getPreferredTypeAlignmentShift - Return the preferred alignment for the
@@ -229,18 +218,23 @@ public:
   ///
   uint64_t getIndexedOffset(const Type *Ty,
                             Value* const* Indices, unsigned NumIndices) const;
-  
+
   /// getStructLayout - Return a StructLayout object, indicating the alignment
   /// of the struct, its size, and the offsets of its fields.  Note that this
   /// information is lazily cached.
   const StructLayout *getStructLayout(const StructType *Ty) const;
-  
+
   /// InvalidateStructLayoutInfo - TargetData speculatively caches StructLayout
   /// objects.  If a TargetData object is alive when types are being refined and
   /// removed, this method must be called whenever a StructType is removed to
   /// avoid a dangling pointer in this cache.
   void InvalidateStructLayoutInfo(const StructType *Ty) const;
 
+  /// getPreferredAlignment - Return the preferred alignment of the specified
+  /// global.  This includes an explicitly requested alignment (if the global
+  /// has one).
+  unsigned getPreferredAlignment(const GlobalVariable *GV) const;
+
   /// getPreferredAlignmentLog - Return the preferred alignment of the
   /// specified global, returned in log form.  This includes an explicitly
   /// requested alignment (if the global has one).
@@ -262,7 +256,7 @@ public:
   uint64_t getSizeInBytes() const {
     return StructSize;
   }
-  
+
   uint64_t getSizeInBits() const {
     return 8*StructSize;
   }
@@ -270,7 +264,7 @@ public:
   unsigned getAlignment() const {
     return StructAlignment;
   }
-    
+
   /// getElementContainingOffset - Given a valid offset into the structure,
   /// return the structure index that contains it.
   ///