{"push_id":589706718,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"27821d7200beedd84a46c989e653a509ac1f7f7b","before":"f89c6af16b1ba1d0a0b8290e90f08c8fcd5ad1eb","commits":[{"sha":"27821d7200beedd84a46c989e653a509ac1f7f7b","author":{"email":"4b8373d016f277527198385ba72fda0feb5da015@pcc.me.uk","name":"Peter Collingbourne"},"message":"LowerBitSets: Use byte arrays instead of bit sets to represent in-memory bit sets.\n\nBy loading from indexed offsets into a byte array and applying a mask, a\nprogram can test bits from the bit set with a relatively short instruction\nsequence. For example, suppose we have 15 bit sets to lay out:\n\nA (16 bits), B (15 bits), C (14 bits), D (13 bits), E (12 bits),\nF (11 bits), G (10 bits), H (9 bits), I (7 bits), J (6 bits), K (5 bits),\nL (4 bits), M (3 bits), N (2 bits), O (1 bit)\n\nThese bits can be laid out in a 16-byte array like this:\n\n      Byte Offset\n    0123456789ABCDEF\nBit\n  7 HHHHHHHHHIIIIIII\n  6 GGGGGGGGGGJJJJJJ\n  5 FFFFFFFFFFFKKKKK\n  4 EEEEEEEEEEEELLLL\n  3 DDDDDDDDDDDDDMMM\n  2 CCCCCCCCCCCCCCNN\n  1 BBBBBBBBBBBBBBBO\n  0 AAAAAAAAAAAAAAAA\n\nFor example, to test bit X of A, we evaluate ((bits[X] & 1) != 0), or to\ntest bit X of I, we evaluate ((bits[9 + X] & 0x80) != 0). This can be done\nin 1-2 machine instructions on x86, or 4-6 instructions on ARM.\n\nThis uses the LPT multiprocessor scheduling algorithm to lay out the bits\nefficiently.\n\nSaves ~450KB of instructions in a recent build of Chromium.\n\nDifferential Revision: http://reviews.llvm.org/D7954\n\ngit-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231043 91177308-0d34-0410-b5e6-96231b3b80d8","distinct":true,"url":"https://api.github.com/repos/llvm-project/llvm/commits/27821d7200beedd84a46c989e653a509ac1f7f7b"}]}