diff options
author | Chris Lattner <sabre@nondot.org> | 2008-10-15 16:02:15 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-10-15 16:02:15 +0000 |
commit | 843dacc937f811922768b357e5218a965553f66c (patch) | |
tree | 8a624ad0dd79507c5b01c6104dba026acb67e5fb /llvm/lib | |
parent | 185c72103b77b1ff2491ee6c50b5dc039f716b43 (diff) | |
download | bcm5719-llvm-843dacc937f811922768b357e5218a965553f66c.tar.gz bcm5719-llvm-843dacc937f811922768b357e5218a965553f66c.zip |
move PR1488 into this file.
llvm-svn: 57579
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/README.txt | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/lib/Target/README.txt b/llvm/lib/Target/README.txt index a7fa80288c6..173c0bc5f39 100644 --- a/llvm/lib/Target/README.txt +++ b/llvm/lib/Target/README.txt @@ -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. |