Provide an isPowerOf2ByteWidth method for the IntegerType class. This will
authorReid Spencer <rspencer@reidspencer.com>
Thu, 18 Jan 2007 02:59:54 +0000 (02:59 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Thu, 18 Jan 2007 02:59:54 +0000 (02:59 +0000)
mostly be used by back ends that wish to distinguish between integer types
that fit evenly within a natural integer type and those that don't.

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

include/llvm/DerivedTypes.h
lib/VMCore/Type.cpp

index ccef4cbeabd8494a4b1f6b4102b98c8caf70284b..c93c514da6aa4e234eebe9f73b90385e9fe42118 100644 (file)
@@ -101,6 +101,12 @@ public:
   /// @brief Get the number of bits in this IntegerType
   unsigned getBitWidth() const { return getSubclassData(); }
 
+  /// This method determines if the width of this IntegerType is a power-of-2
+  /// in terms of 8 bit bytes. 
+  /// @returns true if this is a power-of-2 byte width.
+  /// @brief Is this a power-of-2 byte-width IntegerType ?
+  bool isPowerOf2ByteWidth() const;
+
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const IntegerType *T) { return true; }
   static inline bool classof(const Type *T) {
index 00e97520b7f362416ce8129b8a8d7fb6271d8d95..b41d1a0414e89975580fa76a5b799fec0a41769a 100644 (file)
@@ -975,6 +975,11 @@ const IntegerType *IntegerType::get(unsigned NumBits) {
   return ITy;
 }
 
+bool IntegerType::isPowerOf2ByteWidth() const {
+  unsigned BitWidth = getBitWidth();
+  return (BitWidth > 7 && Log2_32(BitWidth) == Log2_32_Ceil(BitWidth));
+}
+
 // FunctionValType - Define a class to hold the key that goes into the TypeMap
 //
 namespace llvm {