Reviewers: Kasper Lund, fschneider,
Message:
The failure is not simple to reproduce. I ran DeltaBlue 564 times and it
didn't
recur (it happened about 1 in 10 or 20 before).
There are more things we can now get rid of (forward bailout stack and some
other stuff). I left that out of this change list but will continue to
clean
this part of the code up in the next few days.
Description:
Fix issue 977, occasional failure of the DeltaBlue benchmark.
Before, when we deoptimized after a branch we jumped to before the branch
was taken in the unoptimized code with a token value that indicated when
edge to take. There was a lot of machinery to track this value through the
short-circuit logical operations and logical negation, and to handle it
properly at inline function return sites. There was also machinery to
prevent incorrectly seeing this environment with the extra value never
actually materialized in the unoptimized code.
Instead, now we deoptimize directly to one of the targets of the branch.
Much but not yet all of the extra machinery has been removed or simplified.
The cost is that branching control structures (the looping statements, if
statements, conditional expressions, and the short-circuit binary logical
operations) need extra AST IDs to identify the branch targets.
Please review this at http://codereview.chromium.org/5908001/
SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge/build/ia32
Affected files:
M src/ast-inl.h
M src/ast.h
M src/full-codegen.cc
M src/hydrogen-instructions.h
M src/hydrogen.h
M src/hydrogen.cc
M src/ia32/lithium-ia32.cc
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev