• jarin's avatar
    [turbofan] Variable liveness analysis for deopt. · ca3abde2
    jarin authored
    This change introduces a liveness analyzer for local variables in frame states.
    
    The main idea is to use the AstGraphBuilder::Environment class to build the control flow graph, and record local variable loads, stores and checkpoints in the CFG basic blocks (LivenessAnalyzerBlock class).
    
    After the graph building finishes, we run a simple data flow analysis over the CFG to figure out liveness of each local variable at each checkpoint. Finally, we run a pass over all the checkpoints and replace dead local variables in the frame states with the 'undefined' value.
    
    Performance numbers for Embenchen are below.
    
    ----------- box2d.js
    Current --turbo-deoptimization: EmbenchenBox2d(RunTime): 11265 ms.
    d8-master --turbo-deoptimization: EmbenchenBox2d(RunTime): 11768 ms.
    d8-master: EmbenchenBox2d(RunTime): 10996 ms.
    ----------- bullet.js
    Current --turbo-deoptimization: EmbenchenBullet(RunTime): 17049 ms.
    d8-master --turbo-deoptimization: EmbenchenBullet(RunTime): 17384 ms.
    d8-master: EmbenchenBullet(RunTime): 16153 ms.
    ----------- copy.js
    Current --turbo-deoptimization: EmbenchenCopy(RunTime): 4877 ms.
    d8-master --turbo-deoptimization: EmbenchenCopy(RunTime): 4938 ms.
    d8-master: EmbenchenCopy(RunTime): 4940 ms.
    ----------- corrections.js
    Current --turbo-deoptimization: EmbenchenCorrections(RunTime): 7068 ms.
    d8-master --turbo-deoptimization: EmbenchenCorrections(RunTime): 6718 ms.
    d8-master: EmbenchenCorrections(RunTime): 6858 ms.
    ----------- fannkuch.js
    Current --turbo-deoptimization: EmbenchenFannkuch(RunTime): 4167 ms.
    d8-master --turbo-deoptimization: EmbenchenFannkuch(RunTime): 4608 ms.
    d8-master: EmbenchenFannkuch(RunTime): 4149 ms.
    ----------- fasta.js
    Current --turbo-deoptimization: EmbenchenFasta(RunTime): 9981 ms.
    d8-master --turbo-deoptimization: EmbenchenFasta(RunTime): 9848 ms.
    d8-master: EmbenchenFasta(RunTime): 9640 ms.
    ----------- lua_binarytrees.js
    Current --turbo-deoptimization: EmbenchenLuaBinaryTrees(RunTime): 11571 ms.
    d8-master --turbo-deoptimization: EmbenchenLuaBinaryTrees(RunTime): 13089 ms.
    d8-master: EmbenchenLuaBinaryTrees(RunTime): 10957 ms.
    ----------- memops.js
    Current --turbo-deoptimization: EmbenchenMemOps(RunTime): 7766 ms.
    d8-master --turbo-deoptimization: EmbenchenMemOps(RunTime): 7346 ms.
    d8-master: EmbenchenMemOps(RunTime): 7738 ms.
    ----------- primes.js
    Current --turbo-deoptimization: EmbenchenPrimes(RunTime): 7459 ms.
    d8-master --turbo-deoptimization: EmbenchenPrimes(RunTime): 7453 ms.
    d8-master: EmbenchenPrimes(RunTime): 7451 ms.
    ----------- skinning.js
    Current --turbo-deoptimization: EmbenchenSkinning(RunTime): 15564 ms.
    d8-master --turbo-deoptimization: EmbenchenSkinning(RunTime): 15611 ms.
    d8-master: EmbenchenSkinning(RunTime): 15583 ms.
    ----------- zlib.js
    Current --turbo-deoptimization: EmbenchenZLib(RunTime): 10825 ms.
    d8-master --turbo-deoptimization: EmbenchenZLib(RunTime): 11180 ms.
    d8-master: EmbenchenZLib(RunTime): 10823 ms.
    
    BUG=
    
    Review URL: https://codereview.chromium.org/949743002
    
    Cr-Commit-Position: refs/heads/master@{#27232}
    ca3abde2
Name
Last commit
Last update
..
blink_tests Loading commit data...
gcmole Loading commit data...
generate_shim_headers Loading commit data...
gyp Loading commit data...
ninja Loading commit data...
oom_dump Loading commit data...
perf_tests Loading commit data...
profviz Loading commit data...
release Loading commit data...
sanitizers Loading commit data...
sodium Loading commit data...
testrunner Loading commit data...
unittests Loading commit data...
v8.xcodeproj Loading commit data...
vim Loading commit data...
visual_studio Loading commit data...
DEPS Loading commit data...
SourceMap.js Loading commit data...
android-build.sh Loading commit data...
android-ll-prof.sh Loading commit data...
android-run.py Loading commit data...
android-sync.sh Loading commit data...
bash-completion.sh Loading commit data...
check-name-clashes.py Loading commit data...
check-static-initializers.sh Loading commit data...
codemap.js Loading commit data...
concatenate-files.py Loading commit data...
consarray.js Loading commit data...
cpu.sh Loading commit data...
cross_build_gcc.sh Loading commit data...
csvparser.js Loading commit data...
detect-builtins.js Loading commit data...
disasm.py Loading commit data...
draw_instruction_graph.sh Loading commit data...
external-reference-check.py Loading commit data...
find-commit-for-patch.py Loading commit data...
find_depot_tools.py Loading commit data...
freebsd-tick-processor Loading commit data...
fuzz-harness.sh Loading commit data...
gc-nvp-trace-processor.py Loading commit data...
gdb-v8-support.py Loading commit data...
gdbinit Loading commit data...
gen-postmortem-metadata.py Loading commit data...
generate-builtins-tests.py Loading commit data...
generate-ten-powers.scm Loading commit data...
grokdump.py Loading commit data...
js2c.py Loading commit data...
jsmin.py Loading commit data...
linux-tick-processor Loading commit data...
ll_prof.py Loading commit data...
logreader.js Loading commit data...
mac-nm Loading commit data...
mac-tick-processor Loading commit data...
mingw-generate-makefiles.sh Loading commit data...
nacl-run.py Loading commit data...
parser-shell.cc Loading commit data...
parser-shell.gyp Loading commit data...
plot-timer-events Loading commit data...
presubmit.py Loading commit data...
process-heap-prof.py Loading commit data...
profile.js Loading commit data...
profile_view.js Loading commit data...
run-deopt-fuzzer.py Loading commit data...
run-llprof.sh Loading commit data...
run-tests.py Loading commit data...
run-valgrind.py Loading commit data...
run.py Loading commit data...
run_perf.py Loading commit data...
shell-utils.h Loading commit data...
splaytree.js Loading commit data...
stats-viewer.py Loading commit data...
test-server.py Loading commit data...
tick-processor.html Loading commit data...
tickprocessor-driver.js Loading commit data...
tickprocessor.js Loading commit data...
trace-maps-processor.py Loading commit data...
try_perf.py Loading commit data...
v8-info.sh Loading commit data...
v8-rolls.sh Loading commit data...
v8heapconst.py Loading commit data...
v8heapconst.py.tmpl Loading commit data...
whitespace.txt Loading commit data...
windows-tick-processor.bat Loading commit data...