Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(495)

Issue 15079: Experimental: this is a substantial change to allow the virtual frame... (Closed)

Created:
12 years ago by Kevin Millikin (Chromium)
Modified:
9 years, 7 months ago
Reviewers:
iposva, William Hesse
CC:
v8-dev
Visibility:
Public.

Description

Experimental: this is a substantial change to allow the virtual frame to flow correctly to deferred code. The same mechanism is used for all labeled blocks (potential merge points), not just deferred ones: all live mergable values are held on the frame. At a jump or branch, local results are allowed to be passed as arguments to the target block, with the semantics of being pushed on the frame before performing the jump or branch. At a bind, the arguments to the block are named, with the semantics of performing the bind and then popping the arguments from the frame. "Returns" from deferred code are handled the same way (the return value is an argument to the block labeled with the deferred code exit label). There is obviously still some things to clean up here. Committed: http://code.google.com/p/v8/source/detail?r=1016

Patch Set 1 #

Patch Set 2 : '' #

Total comments: 7
Unified diffs Side-by-side diffs Delta from patch set Stats (+378 lines, -208 lines) Patch
M src/codegen.cc View 1 1 chunk +2 lines, -6 lines 0 comments Download
M src/codegen-ia32.h View 1 1 chunk +7 lines, -0 lines 0 comments Download
M src/codegen-ia32.cc View 1 21 chunks +139 lines, -71 lines 0 comments Download
M src/jump-target.h View 1 3 chunks +4 lines, -2 lines 0 comments Download
M src/jump-target-ia32.cc View 1 7 chunks +86 lines, -34 lines 0 comments Download
M src/register-allocator-ia32.h View 1 8 chunks +30 lines, -17 lines 3 comments Download
M src/register-allocator-ia32.cc View 1 4 chunks +39 lines, -5 lines 4 comments Download
M src/virtual-frame-ia32.h View 1 3 chunks +14 lines, -11 lines 0 comments Download
M src/virtual-frame-ia32.cc View 1 13 chunks +57 lines, -62 lines 0 comments Download

Messages

Total messages: 3 (0 generated)
Kevin Millikin (Chromium)
Blocks now take arguments. For jumps, branches, and bind with an active frame, each argument ...
12 years ago (2008-12-19 14:24:12 UTC) #1
William Hesse
Only one potential error found by me. http://codereview.chromium.org/15079/diff/401/601 File src/register-allocator-ia32.cc (right): http://codereview.chromium.org/15079/diff/401/601#newcode95 Line 95: } ...
12 years ago (2008-12-22 13:55:21 UTC) #2
Kevin Millikin (Chromium)
12 years ago (2008-12-22 14:39:59 UTC) #3
http://codereview.chromium.org/15079/diff/401/601
File src/register-allocator-ia32.cc (right):

http://codereview.chromium.org/15079/diff/401/601#newcode95
Line 95: }
On 2008/12/22 13:55:21, William Hesse wrote:
> I think we are missing the case where this.reg() is target,
> but target occurs multiple times in the frame.  We need to spill target in
that
> case, I think.

Yes, according to the comment in the header we do.  Fixed.

We still need to handle the case that the target register is multiply referenced
outside the frame (or otherwise unallocatable, which amounts to the same thing).

http://codereview.chromium.org/15079/diff/401/601#newcode109
Line 109: Use(edi);
On 2008/12/22 13:55:21, William Hesse wrote:
> Aren't we going to need to unuse edi before the ValidRegisters check at
> JumpTarget works?
> 

We can't jump before Enter is called on the frame.  That seems reasonable.

http://codereview.chromium.org/15079/diff/401/607
File src/register-allocator-ia32.h (right):

http://codereview.chromium.org/15079/diff/401/607#newcode100
Line 100: // it.
On 2008/12/22 13:55:21, William Hesse wrote:
> How can we move a result into a register that isn't spilled? Are you referring
> to the case that the result is already in a register?  Then it isn't being
> moved.  Otherwise, aren't we messing up the value already in the register?

Yes, the comment refers to the case where the result is in a register.  In that
case, the current register is as arbitrary as any other.

Powered by Google App Engine
This is Rietveld 408576698