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

Reply via email to