MathExtras: Return the result of find(First|Last)Set in the input type.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 24 May 2013 22:25:20 +0000 (22:25 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 24 May 2013 22:25:20 +0000 (22:25 +0000)
Otherwise ZB_Max returns a wrong result when sizeof(T) > sizeof(size_t).

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

include/llvm/Support/MathExtras.h

index d7b5898b7fcb21de10c36644196d58ccc1290188..272354f85e8527254d5834957a3705e1455d7878 100644 (file)
@@ -177,7 +177,7 @@ inline std::size_t countLeadingZeros<uint64_t>(uint64_t Val, ZeroBehavior ZB) {
 ///   valid arguments.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
 ///   valid arguments.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
-                     !std::numeric_limits<T>::is_signed, std::size_t>::type
+                     !std::numeric_limits<T>::is_signed, T>::type
 findFirstSet(T Val, ZeroBehavior ZB = ZB_Max) {
   if (ZB == ZB_Max && Val == 0)
     return std::numeric_limits<T>::max();
 findFirstSet(T Val, ZeroBehavior ZB = ZB_Max) {
   if (ZB == ZB_Max && Val == 0)
     return std::numeric_limits<T>::max();
@@ -188,7 +188,7 @@ findFirstSet(T Val, ZeroBehavior ZB = ZB_Max) {
 // Disable signed.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
 // Disable signed.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
-                     std::numeric_limits<T>::is_signed, std::size_t>::type
+                     std::numeric_limits<T>::is_signed, T>::type
 findFirstSet(T Val, ZeroBehavior ZB = ZB_Max) LLVM_DELETED_FUNCTION;
 
 /// \brief Get the index of the last set bit starting from the least
 findFirstSet(T Val, ZeroBehavior ZB = ZB_Max) LLVM_DELETED_FUNCTION;
 
 /// \brief Get the index of the last set bit starting from the least
@@ -200,7 +200,7 @@ findFirstSet(T Val, ZeroBehavior ZB = ZB_Max) LLVM_DELETED_FUNCTION;
 ///   valid arguments.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
 ///   valid arguments.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
-                     !std::numeric_limits<T>::is_signed, std::size_t>::type
+                     !std::numeric_limits<T>::is_signed, T>::type
 findLastSet(T Val, ZeroBehavior ZB = ZB_Max) {
   if (ZB == ZB_Max && Val == 0)
     return std::numeric_limits<T>::max();
 findLastSet(T Val, ZeroBehavior ZB = ZB_Max) {
   if (ZB == ZB_Max && Val == 0)
     return std::numeric_limits<T>::max();
@@ -214,7 +214,7 @@ findLastSet(T Val, ZeroBehavior ZB = ZB_Max) {
 // Disable signed.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
 // Disable signed.
 template <typename T>
 typename enable_if_c<std::numeric_limits<T>::is_integer &&
-                     std::numeric_limits<T>::is_signed, std::size_t>::type
+                     std::numeric_limits<T>::is_signed, T>::type
 findLastSet(T Val, ZeroBehavior ZB = ZB_Max) LLVM_DELETED_FUNCTION;
 
 /// \brief Macro compressed bit reversal table for 256 bits.
 findLastSet(T Val, ZeroBehavior ZB = ZB_Max) LLVM_DELETED_FUNCTION;
 
 /// \brief Macro compressed bit reversal table for 256 bits.