https://bugs.kde.org/show_bug.cgi?id=384526
Bug ID: 384526
Summary: reduce number of spill instructions in VEX register
allocator v3
Product: valgrind
Version: 3.14 SVN
Platform: Compiled Sources
OS: Linux
Status: UNCONFIRMED
Severity: normal
Priority: NOR
Component: vex
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
VEX register allocator v2 has a clever optimization which reduces a number of
spill instructions generated.
Let's have the following vcode:
...
97: orq %vR250,%vR570
98: movslq %vR570d,%vR569
99: movq %vR329,%vR571
100: orq %vR569,%vR571
101: callnz[0,RLPri_None]
and the following vreg ranges:
%vR250: [ 12, 214)
%vR329: [ 72, 162)
%vR569: [ 98, 101)
%vR570: [ 95, 99)
%vR571: [ 99, 101)
Now reg. alloc. v2 produces the following rcode:
82 orq %rbx,%r8
83 movslq %r8d,%rdi
84 movq 0xB28(%rbp),%r8
85 movq %r8,%rsi
86 orq %rdi,%rsi
87 movq %r9,0xAE0(%rbp)
88 callnz[0,RLPri_None] 0x5805E8E0
However current regalloc v3 produces more rcode:
82 orq %rbx,%r8
83 movslq %r8d,%rdi
84 movq 0xB28(%rbp),%r8
85 movq %r8,%rsi
86 orq %rdi,%rsi
87 movq %r9,0xAE0(%rbp)
88 movq %r8,0xB28(%rbp)
89 callnz[0,RLPri_None] 0x5805E8E0
It can be seen that spilling %r8 (instruction #88) is useless because its value
is still equal to that one in the spill slot.
--
You are receiving this mail because:
You are watching all bug changes.