https://bugs.kde.org/show_bug.cgi?id=384987

            Bug ID: 384987
           Summary: VEX register allocator: allocate caller-save registers
                    for short lived vregs
           Product: valgrind
           Version: 3.14 SVN
          Platform: Compiled Sources
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: vex
          Assignee: jsew...@acm.org
          Reporter: iv...@ivosh.net
  Target Milestone: ---

This is a performance improvement based on Peter Bergner's suggestion:
Allocate caller-saved registers for short lived vregs and callee-save registers
for vregs which span accross helper calls.

This idea is quite simple but MOV coalescing went in the way.
The first patch enhances MOV coalescing so it keeps better track of what
registers form the coalescing chain. The second patch actually changes
find_free_rreg().

With just a minor additional complexity, we get more compact generated code.
This not only helps for better performance; it should also help with i-cache
misses.

Measuring instruction count, running inner Memcheck:

perf/bz2:
vanilla:       45,112,349,784 total; reg alloc 165,978,807; ratio 15.5 (97,397
-> 1,506,163)
coalesce only: 45,120,691,777 total; reg alloc 167,035,575; ratio 15.5 (97,610
-> 1,509,396)
both patches:  44,943,765,809 total; reg alloc 167,403,237; ratio 15.3 (97,607
-> 1,493,722)

/bin/true:
vanilla:       3,514,906,884 total; reg alloc 60,779,126
coalesce only: 3,506,029,832 total; reg alloc 61,242,900
both patches:  3,503,495,437 total; reg alloc 61,395,160

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to