Reviewers: William Hesse, Description: Experimental: fix a pair of bugs in the frame's sync state. In two cases we could erroneously mark elements as synced, causing them to be lost if we hit a spill.
Please review this at http://codereview.chromium.org/14105 SVN Base: http://v8.googlecode.com/svn/branches/experimental/toiger/ Affected files: M src/virtual-frame-ia32.cc Index: src/virtual-frame-ia32.cc =================================================================== --- src/virtual-frame-ia32.cc (revision 970) +++ src/virtual-frame-ia32.cc (working copy) @@ -475,6 +475,12 @@ } else { // Source is constant. __ Set(target.reg(), Immediate(source.handle())); + if (target.is_synced()) { + if (i > stack_pointer_) { + SyncRange(stack_pointer_ + 1, i); + } + SyncElementAt(i); + } } Use(target.reg()); elements_[i] = target; @@ -624,12 +630,13 @@ cgen_->allocator()->Unuse(temp); } else { - // For constants and registers, add a copy of the element to the - // top of the frame. + // For constants and registers, add an (unsynced) copy of the element to + // the top of the frame. ASSERT(element.is_register() || element.is_constant()); if (element.is_register()) { Use(element.reg()); } + element.clear_sync(); elements_.Add(element); } } --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
