Chromium Code Reviews
DescriptionVM: [DBC] Fix lazy deoptimization after calls that return no values.
On DBC calls return value on the stack instead of a dedicate register but not all calls have a return value (e.g. CheckStack does not) and such calls don't push anything. Implementation of a lazy deopt however assumed that value is always present and tried to manually preserve it by popping and pushing it back after the frame was rewritten. This of course damaged the frame if we performed a lazy deoptimization after the call that did not push anything.
Instead of manually preserving result value value use frame translation to handle it. This allows to handle calls that return value and those that do not uniformly in the Deopt bytecode. Compiler takes care of creating the right deoptimization environment instead.
BUG=
R=zra@google.com
Committed: https://github.com/dart-lang/sdk/commit/1fcc7384aa28aa2ca17b8ec304dd2c4e083c36cd
Patch Set 1 #
Total comments: 2
Patch Set 2 : remove static #Patch Set 3 : Turn one test into a reload test #Patch Set 4 : Add test #
Total comments: 2
Messages
Total messages: 8 (2 generated)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||