Reviewers: William Hesse, iposva,

Message:
Blocks now take arguments.  For jumps, branches, and bind with an active
frame, each argument will be one of the arguments to one of the phi
functions at the merge.  For binding a label, the arguments also serve
as the lhs of the phi assignments in the labeled block.

The biggest change is that the deferred code now explicitly binds its
entry label and jumps to its exit rather than having the infrastructure
do it.  The "advantage" is that we have an opportunity to be explicit
about the calling convention for the deferred code and use symbolic
names.

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.


Please review this at http://codereview.chromium.org/15079

SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/

Affected files:
   M     src/codegen-ia32.h
   M     src/codegen-ia32.cc
   M     src/codegen.cc
   M     src/jump-target-ia32.cc
   M     src/jump-target.h
   M     src/register-allocator-ia32.h
   M     src/register-allocator-ia32.cc
   M     src/virtual-frame-ia32.h
   M     src/virtual-frame-ia32.cc



--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to