Add count{Leading,Trailing}Ones_{32,64} functions with simple implementations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47084 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/llvm/Support/MathExtras.h b/include/llvm/Support/MathExtras.h
index 56d112e..f57beed 100644
--- a/include/llvm/Support/MathExtras.h
+++ b/include/llvm/Support/MathExtras.h
@@ -163,6 +163,14 @@
   return Count;
 }
 
+/// CountLeadingOnes_32 - this function performs the operation of
+/// counting the number of ones from the most significant bit to the first zero
+/// bit.  Ex. CountLeadingOnes_32(0xFF0FFF00) == 8.
+/// Returns 32 if the word is all ones.
+inline unsigned CountLeadingOnes_32(uint32_t Value) {
+  return CountLeadingZeros_32(~Value);
+}
+
 /// CountLeadingZeros_64 - This function performs the platform optimal form
 /// of counting the number of zeros from the most significant bit to the first 
 /// one bit (64 bit edition.)
@@ -207,6 +215,14 @@
   return Count;
 }
 
+/// CountLeadingOnes_64 - This function performs the operation
+/// of counting the number of ones from the most significant bit to the first 
+/// zero bit (64 bit edition.)
+/// Returns 64 if the word is all ones.
+inline unsigned CountLeadingOnes_64(uint64_t Value) {
+  return CountLeadingZeros_64(~Value);
+}
+
 /// CountTrailingZeros_32 - this function performs the platform optimal form of
 /// counting the number of zeros from the least significant bit to the first one
 /// bit.  Ex. CountTrailingZeros_32(0xFF00FF00) == 8.
@@ -224,6 +240,14 @@
 #endif
 }
 
+/// CountTrailingOnes_32 - this function performs the operation of
+/// counting the number of ones from the least significant bit to the first zero
+/// bit.  Ex. CountTrailingOnes_32(0x00FF00FF) == 8.
+/// Returns 32 if the word is all ones.
+inline unsigned CountTrailingOnes_32(uint32_t Value) {
+  return CountTrailingZeros_32(~Value);
+}
+
 /// CountTrailingZeros_64 - This function performs the platform optimal form
 /// of counting the number of zeros from the least significant bit to the first 
 /// one bit (64 bit edition.)
@@ -243,6 +267,14 @@
 #endif
 }
 
+/// CountTrailingOnes_64 - This function performs the operation
+/// of counting the number of ones from the least significant bit to the first 
+/// zero bit (64 bit edition.)
+/// Returns 64 if the word is all ones.
+inline unsigned CountTrailingOnes_64(uint64_t Value) {
+  return CountTrailingZeros_64(~Value);
+}
+
 /// CountPopulation_32 - this function counts the number of set bits in a value.
 /// Ex. CountPopulation(0xF000F000) = 8
 /// Returns 0 if the word is zero.