• Kevin Modzelewski's avatar
    Basic (new) deopt support · 25ac9de4
    Kevin Modzelewski authored
    Old deopt worked by compiling two copies of every BB, one with
    speculations and one without, and stitching the two together.
    This has a number of issues:
    - doubles the amount of code LLVM has to jit
    - can't ever get back on the optimized path
    - doesn't support 'deopt if branch taken'
    - horrifically complex
    - doesn't support deopt from within try blocks
    
    We actually ran into that last issue (see test from previous commit).  So
    rather than wade in and try to fix old-deopt, just start switching to new-deopt.
    
    (new) deopt works by using the frame introspection features, gathering up all
    the locals, and passing them to the interpreter.
    25ac9de4
runtime_hooks.cpp 10.3 KB