aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ModuleDebugInfoPrinter.cpp
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2015-03-03 00:49:28 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2015-03-03 00:49:28 +0000
commitda2dbf21a9b3602f7a0f871dec15f03d273bc07b (patch)
treea95911ea036806e76b808fbca5c77d73499f3aa3 /llvm/lib/Analysis/ModuleDebugInfoPrinter.cpp
parent72029c6f2fdc73ca9a323052d97d3a65609a6651 (diff)
downloadllvm-da2dbf21a9b3602f7a0f871dec15f03d273bc07b.zip
llvm-da2dbf21a9b3602f7a0f871dec15f03d273bc07b.tar.gz
llvm-da2dbf21a9b3602f7a0f871dec15f03d273bc07b.tar.bz2
LowerBitSets: Use byte arrays instead of bit sets to represent in-memory bit sets.
By loading from indexed offsets into a byte array and applying a mask, a program can test bits from the bit set with a relatively short instruction sequence. For example, suppose we have 15 bit sets to lay out: A (16 bits), B (15 bits), C (14 bits), D (13 bits), E (12 bits), F (11 bits), G (10 bits), H (9 bits), I (7 bits), J (6 bits), K (5 bits), L (4 bits), M (3 bits), N (2 bits), O (1 bit) These bits can be laid out in a 16-byte array like this: Byte Offset 0123456789ABCDEF Bit 7 HHHHHHHHHIIIIIII 6 GGGGGGGGGGJJJJJJ 5 FFFFFFFFFFFKKKKK 4 EEEEEEEEEEEELLLL 3 DDDDDDDDDDDDDMMM 2 CCCCCCCCCCCCCCNN 1 BBBBBBBBBBBBBBBO 0 AAAAAAAAAAAAAAAA For example, to test bit X of A, we evaluate ((bits[X] & 1) != 0), or to test bit X of I, we evaluate ((bits[9 + X] & 0x80) != 0). This can be done in 1-2 machine instructions on x86, or 4-6 instructions on ARM. This uses the LPT multiprocessor scheduling algorithm to lay out the bits efficiently. Saves ~450KB of instructions in a recent build of Chromium. Differential Revision: http://reviews.llvm.org/D7954 llvm-svn: 231043
Diffstat (limited to 'llvm/lib/Analysis/ModuleDebugInfoPrinter.cpp')
0 files changed, 0 insertions, 0 deletions