Bug 70278 - DFG bytecode parser should understand inline stacks
Summary: DFG bytecode parser should understand inline stacks
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks: 69996
  Show dependency treegraph
 
Reported: 2011-10-17 15:46 PDT by Filip Pizlo
Modified: 2011-10-17 16:54 PDT (History)
1 user (show)

See Also:


Attachments
the patch (33.87 KB, patch)
2011-10-17 15:57 PDT, Filip Pizlo
oliver: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 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.
Comment 1 Filip Pizlo 2011-10-17 15:57:24 PDT
Created attachment 111337 [details]
the patch
Comment 2 WebKit Review Bot 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.
Comment 3 Filip Pizlo 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       ?
Comment 4 Filip Pizlo 2011-10-17 16:54:28 PDT
Landed in http://trac.webkit.org/changeset/97675