Reviewers: iposva, Description: Before emitting code to merge frames, forget the sync flag (telling that an element is mirrored in memory) for elements whose target is a register. This avoids generating some duplicate merge blocks.
Please review this at http://codereview.chromium.org/40005 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/virtual-frame.cc Index: src/virtual-frame.cc =================================================================== --- src/virtual-frame.cc (revision 1401) +++ src/virtual-frame.cc (working copy) @@ -230,14 +230,19 @@ void VirtualFrame::PrepareMergeTo(VirtualFrame* expected) { - // No code needs to be generated to invalidate valid elements. No - // code needs to be generated to move values to memory if they are - // already synced. + // Perform state changes on this frame that will make merge to the + // expected frame simpler or else increase the likelihood that his + // frame will match another. for (int i = 0; i < elements_.length(); i++) { FrameElement source = elements_[i]; FrameElement target = expected->elements_[i]; + if (!target.is_valid() || (target.is_memory() && !source.is_memory() && source.is_synced())) { + // No code needs to be generated to invalidate valid elements. + // No code needs to be generated to move values to memory if + // they are already synced. We perform those moves here, before + // merging. if (source.is_register()) { // If the frame is the code generator's current frame, we have // to decrement both the frame-internal and global register @@ -249,6 +254,12 @@ } } elements_[i] = target; + } else if (target.is_register() && !source.is_memory()) { + // If an element's target is a register, and the element is not + // in memory, then the sync state of the element is irrelevant. + // We clear the sync bit. + ASSERT(source.is_valid()); + elements_[i].clear_sync(); } } } --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
