• 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
liveness-analyzer.h 3.78 KB