move PR1488 into this file.
authorChris Lattner <sabre@nondot.org>
Wed, 15 Oct 2008 16:02:15 +0000 (16:02 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 15 Oct 2008 16:02:15 +0000 (16:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57579 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/README.txt

index a7fa80288c62a7a5a08e987c9cf09618796fd097..173c0bc5f3934660dabf2f2385f9f399f7b28b94 100644 (file)
@@ -283,6 +283,39 @@ unsigned long reverse(unsigned v) {
 
 //===---------------------------------------------------------------------===//
 
+These idioms should be recognized as popcount (see PR1488):
+
+unsigned countbits_slow(unsigned v) {
+  unsigned c;
+  for (c = 0; v; v >>= 1)
+    c += v & 1;
+  return c;
+}
+unsigned countbits_fast(unsigned v){
+  unsigned c;
+  for (c = 0; v; c++)
+    v &= v - 1; // clear the least significant bit set
+  return c;
+}
+
+BITBOARD = unsigned long long
+int PopCnt(register BITBOARD a) {
+  register int c=0;
+  while(a) {
+    c++;
+    a &= a - 1;
+  }
+  return c;
+}
+unsigned int popcount(unsigned int input) {
+  unsigned int count = 0;
+  for (unsigned int i =  0; i < 4 * 8; i++)
+    count += (input >> i) & i;
+  return count;
+}
+
+//===---------------------------------------------------------------------===//
+
 These should turn into single 16-bit (unaligned?) loads on little/big endian
 processors.