diff options
| -rw-r--r-- | llvm/include/llvm/ADT/APInt.h | 7 | ||||
| -rw-r--r-- | llvm/lib/Support/APInt.cpp | 2 | ||||
| -rw-r--r-- | llvm/test/Transforms/ConstProp/2007-11-23-cttz.ll | 8 | 
3 files changed, 12 insertions, 5 deletions
diff --git a/llvm/include/llvm/ADT/APInt.h b/llvm/include/llvm/ADT/APInt.h index dc5d34f3b1f..7e06d3d1aec 100644 --- a/llvm/include/llvm/ADT/APInt.h +++ b/llvm/include/llvm/ADT/APInt.h @@ -896,10 +896,9 @@ public:    /// countLeadingZeros - This function is an APInt version of the    /// countLeadingZeros_{32,64} functions in MathExtras.h. It counts the number    /// of zeros from the most significant bit to the first one bit. -  /// @returns getNumWords() * APINT_BITS_PER_WORD if the value is zero. +  /// @returns BitWidth if the value is zero.    /// @returns the number of zeros from the most significant bit to the first    /// one bits. -  /// @brief Count the number of leading one bits.    uint32_t countLeadingZeros() const;    /// countLeadingOnes - This function counts the number of contiguous 1 bits @@ -911,8 +910,8 @@ public:    /// countTrailingZeros - This function is an APInt version of the     /// countTrailingZoers_{32,64} functions in MathExtras.h. It counts  -  /// the number of zeros from the least significant bit to the first one bit. -  /// @returns getNumWords() * APINT_BITS_PER_WORD if the value is zero. +  /// the number of zeros from the least significant bit to the first set bit. +  /// @returns BitWidth if the value is zero.    /// @returns the number of zeros from the least significant bit to the first    /// one bit.    /// @brief Count the number of trailing zero bits. diff --git a/llvm/lib/Support/APInt.cpp b/llvm/lib/Support/APInt.cpp index 7af0101ece8..3c83e8a749d 100644 --- a/llvm/lib/Support/APInt.cpp +++ b/llvm/lib/Support/APInt.cpp @@ -745,7 +745,7 @@ uint32_t APInt::countLeadingZeros() const {    uint32_t remainder = BitWidth % APINT_BITS_PER_WORD;    if (remainder)      Count -= APINT_BITS_PER_WORD - remainder; -  return Count; +  return std::min(Count, BitWidth);  }  static uint32_t countLeadingOnes_64(uint64_t V, uint32_t skip) { diff --git a/llvm/test/Transforms/ConstProp/2007-11-23-cttz.ll b/llvm/test/Transforms/ConstProp/2007-11-23-cttz.ll new file mode 100644 index 00000000000..995ce2febf8 --- /dev/null +++ b/llvm/test/Transforms/ConstProp/2007-11-23-cttz.ll @@ -0,0 +1,8 @@ +; RUN: llvm-as < %s | opt -constprop | llvm-dis | grep {ret i13 13} +; PR1816 +declare i13 @llvm.cttz.i13(i13) + +define i13 @test() { +	%X = call i13 @llvm.cttz.i13(i13 0) +	ret i13 %X +}  | 

