[LLVMbugs] [Bug 6809] New: Improve waymarking algorithm

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Apr 9 14:02:47 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=6809

           Summary: Improve waymarking algorithm
           Product: libraries
           Version: trunk
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Core LLVM classes
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: ggreif at gmail.com
                CC: llvmbugs at cs.uiuc.edu


http://llvm.org/docs/ProgrammersManual.html#UserLayout describes the waymarking
algorithm as presently used. I propose two enhancements to this scheme, both
aimed at higher speed of the Use::getUser() method.

1) When looking at the serial protocol, we see that each binary number starts
with a 1 binary digit. While visually appealing, it is clearly redundant. This
will reduce each call to getUser() by one iteration in the general case.

2) On 64-bit architectures we can allocate 3 bits for waymarking purposes. This
allows 8 bit patterns, and we could come up with clever encodings that give us
statistically optimal results for the n < N (with some reasonable fixed N)
operand counts. A naive one could be:
s
S1 (next one is the User)
S2 (two farter is the User)
S3 (three farter is the User)
00
01
10
11

It would be interesting to study the probability densities of use_iterators,
(i.e. histograms of getUser() iterations).

This algorithm could be similarly QuickChecked in a reference implementation
and transcribed into C++.

Template metaprogramming could select the right algorithm for the host
architecture at LLVM compilation time. We have a wide variety of buildbots that
would validate the implementation for both 32 and 64 bits.

3) This is applicable tweak for both ideas above: Pre-compute waymarks for
(say) 16 Uses and memcpy() it on initialization, instead of computing waymarks
for each case as currently done.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list