Status: New
Owner: ----
New issue 2124 by [email protected]: Register Allocator in some condition
doesn't handle FixedTemp correctly
http://code.google.com/p/v8/issues/detail?id=2124
I'm not sure if it will hit in current v8.
One way to trigger the problem is to apply the appended patch (on ia32),
which it matters is that "double-to-i" now requests:
UseTempRegister(xmm)+FixedTemp(xmm1).
For navier-stokes.js then it probably generates wrong code like:
644 label () ((0) = v263;) () ()
646 gap () (v394(WR) = v263(-);) () ()
648 double-to-i v373(R)= v394(WR) ...
Later becomes: (double-to-i needs FixedTemp xmm1)
644 label () ((0) = [xmm7|R];) () ()
646 gap () ([xmm2|R] = [xmm7|R];) () ([xmm2|R] = [xmm1|R];)
648 double-to-i [esi|R]= [xmm2|R] ...
Where 646 I think should be:
646 gap () ([xmm1|R] = [xmm7|R];) () ([xmm2|R] = [xmm1|R];)
The reason is that the at 646 & 648, v394(WR) refers to the same LOperand*,
even after LiveRange split between 646 & 648.
So that aliased LOperand* got allocated twice, first by parent range:646+
(xmm1), then overwritten by child range:648+ (xmm2).
Zheng Liu
[email protected]
Attachments:
example 12.3 KB
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev