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 -~----------~----~----~----~------~----~------~--~---
