RESOLVED FIXED 70278
DFG bytecode parser should understand inline stacks
https://bugs.webkit.org/show_bug.cgi?id=70278
Summary DFG bytecode parser should understand inline stacks
Filip Pizlo
Reported 2011-10-17 15:46:25 PDT
The lowest-overhead way to do inlining is to have it occur on-the-fly as part of bytecode parsing. The parser will simply switch from parsing the original code block to the code block being inlined. This requires having a notion of an inline stack in the parser, and the ability to remap operand according to the meta-data in the inline stack.
Attachments
the patch (33.87 KB, patch)
2011-10-17 15:57 PDT, Filip Pizlo
oliver: review+
Filip Pizlo
Comment 1 2011-10-17 15:57:24 PDT
Created attachment 111337 [details] the patch
WebKit Review Bot
Comment 2 2011-10-17 15:59:08 PDT
Attachment 111337 [details] did not pass style-queue: Failed to run "['Tools/Scripts/update-webkit', '--chromium']" exit_code: 2 Updating OpenSource From git://git.webkit.org/WebKit 11b4b08..e267723 master -> origin/master D LayoutTests/fast/writing-mode/borders-expected.html D LayoutTests/fast/writing-mode/borders.html M LayoutTests/ChangeLog M Source/WebCore/ChangeLog M Source/WebCore/rendering/RenderBlock.cpp W: -empty_dir: trunk/LayoutTests/fast/writing-mode/borders-expected.html W: -empty_dir: trunk/LayoutTests/fast/writing-mode/borders.html r97661 = 37e4051614e94ab874cbe577a72eda95cbcfda20 (refs/remotes/trunk) M LayoutTests/platform/mac/fast/table/028-vertical-expected.png M LayoutTests/platform/mac/fast/table/028-vertical-expected.txt M LayoutTests/platform/mac/fast/table/height-percent-test-vertical-expected.png M LayoutTests/platform/mac/fast/table/height-percent-test-vertical-expected.txt M LayoutTests/platform/mac/fast/backgrounds/background-leakage-transforms-expected.txt M LayoutTests/platform/mac/fast/writing-mode/fallback-orientation-expected.txt M LayoutTests/ChangeLog M Source/WebCore/ChangeLog M Source/WebCore/rendering/RenderBox.cpp r97662 = e267723a03ccda5733d1d2e3c9f19ca60337f019 (refs/remotes/trunk) First, rewinding head to replay your work on top of it... Fast-forwarded master to refs/remotes/trunk. Updating chromium port dependencies using gclient... Error: Can't switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don't match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again. Re-trying 'depot_tools/gclient sync' Error: Can't switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don't match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again. Re-trying 'depot_tools/gclient sync' Error: Can't switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don't match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again. Error: 'depot_tools/gclient sync' failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107. Re-trying 'depot_tools/gclient sync' No such file or directory at Tools/Scripts/update-webkit line 104. If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 3 2011-10-17 16:03:05 PDT
This seems performance-neutral so far. Benchmark report for SunSpider, V8, and Kraken. VMs tested: "TipOfTree" at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc "InlineStack" at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. TipOfTree InlineStack SunSpider: 3d-cube 7.2205+-0.1513 ? 7.2677+-0.2177 ? 3d-morph 7.5988+-0.0636 ! 7.8181+-0.1492 ! definitely 1.0289x slower 3d-raytrace 7.4270+-0.2080 7.4245+-0.1597 access-binary-trees 1.8440+-0.0969 1.6934+-0.0679 might be 1.0889x faster access-fannkuch 6.3934+-0.1075 6.2947+-0.0921 might be 1.0157x faster access-nbody 3.2616+-0.0681 ? 3.3369+-0.0850 ? might be 1.0231x slower access-nsieve 2.6203+-0.0732 2.5963+-0.0808 bitops-3bit-bits-in-byte 1.7243+-0.0400 ? 1.7362+-0.0295 ? bitops-bits-in-byte 2.7257+-0.0612 ? 2.7913+-0.0787 ? might be 1.0241x slower bitops-bitwise-and 3.4017+-0.1555 3.3368+-0.1267 might be 1.0195x faster bitops-nsieve-bits 5.2809+-0.1064 ? 5.4964+-0.1392 ? might be 1.0408x slower controlflow-recursive 2.1204+-0.0597 ? 2.1476+-0.0552 ? might be 1.0128x slower crypto-aes 6.7542+-0.1925 6.6802+-0.1621 might be 1.0111x faster crypto-md5 2.8105+-0.0872 2.7963+-0.0890 crypto-sha1 2.5244+-0.0795 ? 2.5391+-0.0825 ? date-format-tofte 10.2752+-0.2823 9.9658+-0.2151 might be 1.0310x faster date-format-xparb 8.9344+-0.2005 8.6349+-0.1990 might be 1.0347x faster math-cordic 6.5539+-0.1290 6.4514+-0.1097 might be 1.0159x faster math-partial-sums 7.6067+-0.1294 ? 7.8538+-0.3118 ? might be 1.0325x slower math-spectral-norm 2.8247+-0.0407 ? 2.8671+-0.0506 ? might be 1.0150x slower regexp-dna 10.7199+-0.1800 10.7125+-0.2426 string-base64 5.3415+-0.0999 ? 5.3796+-0.1241 ? string-fasta 6.4785+-0.1476 6.4336+-0.1339 string-tagcloud 10.9209+-0.1997 ? 11.0666+-0.1537 ? might be 1.0133x slower string-unpack-code 19.9217+-0.3454 ? 19.9705+-0.1953 ? string-validate-input 6.3603+-0.1937 ? 6.3996+-0.1801 ? <arithmetic> * 6.1402+-0.0199 ? 6.1420+-0.0214 ? <geometric> 5.0836+-0.0271 5.0815+-0.0210 <harmonic> 4.2036+-0.0418 4.1898+-0.0316 TipOfTree InlineStack V8: crypto 72.4464+-1.1142 ? 72.8270+-0.6869 ? deltablue 220.1600+-0.9873 ? 221.4059+-1.2341 ? earley-boyer 90.1134+-1.6313 89.9995+-1.6972 raytrace 57.0296+-0.2720 ? 57.2557+-0.3214 ? regexp 102.8816+-0.4624 ? 103.6077+-0.6321 ? richards 178.9582+-0.6043 ? 179.7995+-0.3924 ? splay 96.5100+-0.9840 95.1582+-0.8484 might be 1.0142x faster <arithmetic> 116.8713+-0.3375 ? 117.1505+-0.4165 ? <geometric> * 105.5076+-0.3589 ? 105.6790+-0.4455 ? <harmonic> 96.3346+-0.3947 ? 96.4731+-0.4496 ? TipOfTree InlineStack Kraken: ai-astar 493.6155+-3.8328 492.1463+-2.8087 audio-beat-detection 189.8595+-0.9593 ? 189.8930+-1.2548 ? audio-dft 261.6987+-1.6363 ? 264.6344+-3.3935 ? might be 1.0112x slower audio-fft 123.8973+-1.2454 123.1248+-0.6818 audio-oscillator 250.5794+-1.7787 250.0582+-1.7051 imaging-darkroom 414.5912+-1.0350 ? 414.6210+-1.2052 ? imaging-desaturate 217.3752+-0.4283 ? 217.4867+-0.9803 ? imaging-gaussian-blur 552.6816+-3.6620 ? 552.9712+-1.1946 ? json-parse-financial 55.4810+-0.2754 55.2085+-0.4757 json-stringify-tinderbox 67.8895+-0.3746 67.7780+-0.9214 stanford-crypto-aes 130.0658+-1.6892 ? 131.1331+-1.5111 ? stanford-crypto-ccm 102.9781+-0.5390 ? 103.4665+-1.4906 ? stanford-crypto-pbkdf2 190.1582+-1.3107 ? 193.3028+-2.3632 ? might be 1.0165x slower stanford-crypto-sha256-iterative 70.7091+-0.4266 70.1000+-0.3308 <arithmetic> * 222.9700+-0.5295 ? 223.2803+-0.4987 ? <geometric> 175.2175+-0.3656 ? 175.4024+-0.5088 ? <harmonic> 137.8468+-0.2869 137.7530+-0.4848 TipOfTree InlineStack All benchmarks: <arithmetic> 87.2197+-0.1975 ? 87.3547+-0.1881 ? <geometric> 22.9237+-0.0805 ? 22.9312+-0.0733 ? <harmonic> 7.3906+-0.0716 7.3671+-0.0545 TipOfTree InlineStack Geomean of preferred means: <scaled-result> 52.4690+-0.1223 ? 52.5265+-0.1103 ?
Filip Pizlo
Comment 4 2011-10-17 16:54:28 PDT
Note You need to log in before you can comment on or make changes to this bug.