RESOLVED FIXED 124812
Infer one-time scopes
https://bugs.webkit.org/show_bug.cgi?id=124812
Summary Infer one-time scopes
Filip Pizlo
Reported 2013-11-23 18:33:39 PST
...
Attachments
work in progress (23.86 KB, patch)
2013-11-23 20:48 PST, Filip Pizlo
no flags
more things (43.47 KB, patch)
2013-11-24 15:50 PST, Filip Pizlo
no flags
the patch (57.50 KB, patch)
2013-11-24 17:04 PST, Filip Pizlo
eflews.bot: commit-queue-
the patch (57.77 KB, patch)
2013-11-24 17:22 PST, Filip Pizlo
no flags
the patch (60.33 KB, patch)
2013-11-27 19:10 PST, Filip Pizlo
no flags
patch for landing? (46.17 KB, patch)
2013-11-27 21:50 PST, Filip Pizlo
no flags
Filip Pizlo
Comment 1 2013-11-23 20:48:52 PST
Created attachment 217756 [details] work in progress
Filip Pizlo
Comment 2 2013-11-24 15:50:08 PST
Created attachment 217766 [details] more things
Filip Pizlo
Comment 3 2013-11-24 17:04:41 PST
Created attachment 217768 [details] the patch
EFL EWS Bot
Comment 4 2013-11-24 17:12:29 PST
EFL EWS Bot
Comment 5 2013-11-24 17:13:36 PST
Comment on attachment 217768 [details] the patch Attachment 217768 [details] did not pass efl-wk2-ews (efl-wk2): Output: http://webkit-queues.appspot.com/results/35218342
Filip Pizlo
Comment 6 2013-11-24 17:22:20 PST
Created attachment 217769 [details] the patch
Oliver Hunt
Comment 7 2013-11-24 17:45:12 PST
Comment on attachment 217769 [details] the patch rs=me. I'm looking at this and wondering if we want to have channeling back to the unlinked code to say if we think attempting to watch pointing isn't worth it in future?
Filip Pizlo
Comment 8 2013-11-24 17:50:25 PST
(In reply to comment #7) > (From update of attachment 217769 [details]) > rs=me. Lol wat? Is it r=me or did you mean rs=me? > I'm looking at this and wondering if we want to have channeling back to the unlinked code to say if we think attempting to watch pointing isn't worth it in future? I don't think that the watchpointing costs anything. In steady state, an activation allocation does a fast path check to see that the watchpoint is already invalidated and then does nothing. This is one load+branch. If we ever got around to inlining activation allocation, then the DFG could even omit the watchpoint check in almost all cases because it would observe that the watchpoint is already invalidated. This is the same principle that makes other kinds of watchpointing free: (a) if the path that fires the watchpoint is hot then it probably would have already executed before getting DFG-optimized and the DFG would observe that it doesn't have to emit any code because the watchpoint can't "uninvalidate"; (b) the fast path check for watchpoint invalidation is really cheap so even if you have to emit it, it's probably in the noise. So the only thing that channeling this back to unlinked code would do is make us miss cases where the current instance of a piece of code has a closure that is one-shot even though some past instance was multi-shot.
Oliver Hunt
Comment 9 2013-11-24 18:13:54 PST
(In reply to comment #8) > (In reply to comment #7) > > (From update of attachment 217769 [details] [details]) > > rs=me. > > Lol wat? Is it r=me or did you mean rs=me? > Haha, r=me. or rs=rage Feel free to choose :) What is the cost of a wathcpoint being triggered these days?
Filip Pizlo
Comment 10 2013-11-24 18:21:19 PST
(In reply to comment #9) > (In reply to comment #8) > > (In reply to comment #7) > > > (From update of attachment 217769 [details] [details] [details]) > > > rs=me. > > > > Lol wat? Is it r=me or did you mean rs=me? > > > Haha, r=me. > > or > > rs=rage > > Feel free to choose :) > > What is the cost of a wathcpoint being triggered these days? Two answers: Actual cost: zero in all benchmarks I know of. We virtually watch things in the LLInt and Baseline JIT. For example, every global variable has a state where we are "watching" it and this corresponds to just after the first assignment to the global. We then virtually invalidate it one the second assignment. The virtual invalidation is basically free; both the LLint and baseline JIT inline it and it just involves a branch and a store (pretty cheap considering other overheads in those engines). So, by the time you're in the DFG, watchpoints are either already invalidated (in which case there is no further invalidation cost) or they haven't been invalidated *and they never will be*. I.e. it's very unlikely for a truly mutable value to have been only set once by the time we get into the DFG. Theoretical cost: firing a watchpoint usually means splattering a jump instruction on each invalidation point and flushing some icaches. It ain't free. The dominant cost is probably the cost of recompilation. You can imagine a program that assigns a bunch of stuff for the second time after the first DFG compilation, causing a second DFG compilation. That could cost us. But I haven't seen it happen...
Filip Pizlo
Comment 11 2013-11-24 19:11:36 PST
Comment on attachment 217769 [details] the patch Nooope. This actually results in the watchpoint being invalidated whenever we run code from the cache. I need to move the watchpoint out of SymbolTable.
Filip Pizlo
Comment 12 2013-11-24 20:47:33 PST
(In reply to comment #11) > (From update of attachment 217769 [details]) > Nooope. This actually results in the watchpoint being invalidated whenever we run code from the cache. I need to move the watchpoint out of SymbolTable. Actually ... I think this will *just work* once I apply https://bugs.webkit.org/show_bug.cgi?id=124824.
Filip Pizlo
Comment 13 2013-11-25 18:50:42 PST
OK - yeah, this totally works after I ensure that SymbolTables are cloned (https://bugs.webkit.org/show_bug.cgi?id=124824). Here's the performance, note the speed-ups in asm.js workloads. It's important to note that the primary purpose of this patch is *not* to have a speed-up. It's an enabler for constant closure variable inference. The fact that it's a speed-up already is pretty cool though. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740) "OneShotClosure" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159740) Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. 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 OneShotClosure SunSpider: 3d-cube 7.5713+-0.0586 ! 7.7229+-0.0608 ! definitely 1.0200x slower 3d-morph 8.8579+-0.0741 8.7897+-0.0720 3d-raytrace 8.7592+-0.1628 ? 8.8390+-0.1069 ? access-binary-trees 1.9928+-0.0127 ? 2.0025+-0.0112 ? access-fannkuch 7.9314+-0.1398 ? 7.9500+-0.0648 ? access-nbody 4.2195+-0.0074 ? 4.2248+-0.0070 ? access-nsieve 4.9850+-0.0291 ? 5.0058+-0.0209 ? bitops-3bit-bits-in-byte 1.8067+-0.0077 1.8052+-0.0014 bitops-bits-in-byte 7.2157+-0.0761 ? 7.2684+-0.0352 ? bitops-bitwise-and 2.9373+-0.0199 2.9146+-0.0356 bitops-nsieve-bits 4.5981+-0.0107 ? 4.6156+-0.0200 ? controlflow-recursive 3.1256+-0.0104 ? 3.1492+-0.0180 ? crypto-aes 5.4101+-0.0269 ! 5.4799+-0.0161 ! definitely 1.0129x slower crypto-md5 3.1096+-0.0217 ? 3.1138+-0.0092 ? crypto-sha1 2.9519+-0.0153 ? 2.9634+-0.0166 ? date-format-tofte 11.1999+-0.1028 ? 11.3538+-0.1139 ? might be 1.0137x slower date-format-xparb 8.6572+-0.2649 8.5946+-0.1464 math-cordic 4.2146+-0.0130 4.2111+-0.0086 math-partial-sums 10.1713+-0.0669 10.1329+-0.1217 math-spectral-norm 2.7195+-0.0091 ? 2.7237+-0.0067 ? regexp-dna 12.8214+-0.0917 ? 12.9185+-0.0695 ? string-base64 5.4529+-0.0487 5.4474+-0.0299 string-fasta 10.1685+-0.1193 ? 10.1800+-0.0628 ? string-tagcloud 14.7793+-0.1383 ? 14.8674+-0.0696 ? string-unpack-code 29.8436+-0.1539 ! 31.4094+-0.6887 ! definitely 1.0525x slower string-validate-input 6.8875+-0.0531 ! 7.0241+-0.0715 ! definitely 1.0198x slower <arithmetic> * 7.3995+-0.0220 ! 7.4888+-0.0319 ! definitely 1.0121x slower <geometric> 5.9376+-0.0153 ! 5.9720+-0.0110 ! definitely 1.0058x slower <harmonic> 4.8557+-0.0094 ? 4.8719+-0.0069 ? might be 1.0033x slower TipOfTree OneShotClosure LongSpider: 3d-cube 2703.6911+-5.1639 ? 2705.2078+-5.7551 ? 3d-morph 1503.9913+-1.0547 ? 1504.3099+-0.5120 ? 3d-raytrace 1532.7155+-27.1282 ? 1536.9038+-37.7426 ? access-binary-trees 2214.8490+-28.9112 2210.5071+-9.0686 access-fannkuch 668.1636+-0.3095 667.0806+-2.8580 access-nbody 1496.0519+-0.7766 1495.8079+-1.0155 access-nsieve 1545.6492+-3.3063 1545.3567+-3.5099 bitops-3bit-bits-in-byte 122.0382+-1.5032 121.6812+-0.6140 bitops-bits-in-byte 638.6634+-2.4622 ? 639.7084+-1.8781 ? bitops-nsieve-bits 1059.5476+-20.6393 1046.5556+-0.4456 might be 1.0124x faster controlflow-recursive 1490.1838+-1.1999 ? 1491.2281+-1.1711 ? crypto-aes 1657.4204+-13.1218 1650.7580+-4.9355 crypto-md5 1189.5926+-16.0090 1183.4123+-1.0479 crypto-sha1 1620.0481+-4.2877 1615.9520+-5.1804 date-format-tofte 1176.7482+-6.5750 ? 1184.6930+-15.1147 ? date-format-xparb 1456.9124+-19.7117 ? 1468.2665+-14.4047 ? math-cordic 1735.8039+-2.4339 ? 1756.1163+-50.6096 ? might be 1.0117x slower math-partial-sums 1313.4159+-1.6790 1313.0176+-15.0448 math-spectral-norm 1826.9231+-1.4185 1826.1909+-0.5086 string-base64 504.5985+-2.0241 ? 505.1897+-1.7492 ? string-fasta 995.7686+-8.7513 ? 1002.5400+-6.4549 ? string-tagcloud 379.5819+-6.1538 379.4218+-2.5465 <arithmetic> 1310.5617+-2.1037 ? 1311.3593+-2.9540 ? might be 1.0006x slower <geometric> * 1116.9702+-1.8255 ? 1117.3612+-1.9354 ? might be 1.0004x slower <harmonic> 801.9628+-3.1782 801.5110+-1.6658 might be 1.0006x faster TipOfTree OneShotClosure V8Spider: crypto 79.8400+-0.7819 79.4116+-0.1977 deltablue 97.6271+-0.5112 ? 97.7724+-0.8289 ? earley-boyer 70.9846+-0.2851 ? 71.1164+-0.5930 ? raytrace 39.5626+-0.1295 ? 39.7617+-0.1278 ? regexp 98.5962+-0.2371 ! 100.6687+-0.0982 ! definitely 1.0210x slower richards 133.4647+-1.1364 ? 133.5138+-1.9033 ? splay 45.7088+-0.4910 45.5637+-0.4150 <arithmetic> 80.8263+-0.1189 ? 81.1155+-0.3498 ? might be 1.0036x slower <geometric> * 74.8500+-0.1056 ? 75.0742+-0.2586 ? might be 1.0030x slower <harmonic> 68.8617+-0.1375 ? 69.0266+-0.2115 ? might be 1.0024x slower TipOfTree OneShotClosure Octane and V8v7: encrypt 0.46539+-0.00056 0.46537+-0.00059 decrypt 8.61278+-0.10320 8.56494+-0.01297 deltablue x2 0.56811+-0.00829 0.56580+-0.00723 earley 0.86179+-0.00996 0.85311+-0.00737 might be 1.0102x faster boyer 12.28732+-0.03527 ? 12.36198+-0.14571 ? raytrace x2 4.25234+-0.03819 ? 4.28571+-0.05769 ? regexp x2 33.38518+-0.14569 ? 34.17660+-0.77651 ? might be 1.0237x slower richards x2 0.43053+-0.00741 0.42879+-0.00598 splay x2 0.62881+-0.00292 ! 0.67835+-0.03390 ! definitely 1.0788x slower navier-stokes x2 10.93098+-0.01050 ^ 10.74471+-0.00447 ^ definitely 1.0173x faster closure 0.41954+-0.00045 ! 0.42786+-0.00080 ! definitely 1.0198x slower jquery 6.01172+-0.02131 ! 6.14123+-0.01382 ! definitely 1.0215x slower gbemu x2 71.46555+-1.23004 ? 71.81298+-0.78129 ? mandreel x2 144.69750+-0.21674 ? 145.00739+-0.22634 ? pdfjs x2 100.70562+-0.32917 ! 101.73275+-0.42501 ! definitely 1.0102x slower box2d x2 35.21347+-0.19488 ? 35.63574+-0.47073 ? might be 1.0120x slower V8v7: <arithmetic> 7.66370+-0.01653 ? 7.75033+-0.09537 ? might be 1.0113x slower <geometric> * 2.50570+-0.00760 ? 2.52927+-0.01950 ? might be 1.0094x slower <harmonic> 1.02763+-0.00543 ? 1.03971+-0.01165 ? might be 1.0118x slower Octane including V8v7: <arithmetic> 32.04672+-0.10358 ! 32.26739+-0.05829 ! definitely 1.0069x slower <geometric> * 6.96319+-0.01762 ! 7.03006+-0.02895 ! definitely 1.0096x slower <harmonic> 1.42556+-0.00639 ? 1.44389+-0.01382 ? might be 1.0129x slower TipOfTree OneShotClosure Kraken: ai-astar 493.505+-0.500 ? 493.921+-0.421 ? audio-beat-detection 237.374+-1.829 ? 237.832+-0.990 ? audio-dft 289.340+-0.735 ? 289.343+-0.916 ? audio-fft 143.141+-0.263 142.956+-0.148 audio-oscillator 243.913+-0.711 ? 246.344+-3.731 ? imaging-darkroom 291.706+-8.118 290.361+-6.557 imaging-desaturate 158.351+-0.092 ? 159.246+-2.047 ? imaging-gaussian-blur 362.795+-0.399 362.731+-0.194 json-parse-financial 80.461+-0.327 80.377+-0.252 json-stringify-tinderbox 106.854+-2.260 ? 109.055+-0.863 ? might be 1.0206x slower stanford-crypto-aes 90.845+-0.555 90.000+-0.871 stanford-crypto-ccm 101.297+-1.320 99.726+-1.234 might be 1.0158x faster stanford-crypto-pbkdf2 261.004+-1.818 ? 261.205+-1.283 ? stanford-crypto-sha256-iterative 114.809+-0.376 ! 115.932+-0.472 ! definitely 1.0098x slower <arithmetic> * 212.528+-0.764 ? 212.788+-0.586 ? might be 1.0012x slower <geometric> 182.922+-0.652 ? 183.148+-0.468 ? might be 1.0012x slower <harmonic> 158.187+-0.643 ? 158.307+-0.414 ? might be 1.0008x slower TipOfTree OneShotClosure JSRegress: adapt-to-double-divide 22.7615+-0.1060 22.6735+-0.1096 aliased-arguments-getbyval 0.9530+-0.0029 ! 0.9620+-0.0050 ! definitely 1.0095x slower allocate-big-object 2.6239+-0.0298 ? 2.6641+-0.0943 ? might be 1.0153x slower arity-mismatch-inlining 0.8865+-0.0039 ! 0.8956+-0.0026 ! definitely 1.0102x slower array-access-polymorphic-structure 9.7423+-0.1081 ? 9.8772+-0.0965 ? might be 1.0138x slower array-nonarray-polymorhpic-access 56.4944+-0.2788 56.3676+-0.3042 array-with-double-add 5.7447+-0.0591 ? 5.7655+-0.0545 ? array-with-double-increment 4.2768+-0.0422 ? 4.3302+-0.0150 ? might be 1.0125x slower array-with-double-mul-add 6.7851+-0.0756 ? 6.8312+-0.0309 ? array-with-double-sum 8.0033+-0.0466 7.9885+-0.0655 array-with-int32-add-sub 10.4787+-0.1581 10.4335+-0.1180 array-with-int32-or-double-sum 8.0835+-0.1019 8.0323+-0.0831 ArrayBuffer-DataView-alloc-large-long-lived 122.3827+-1.0212 ? 122.5661+-1.2554 ? ArrayBuffer-DataView-alloc-long-lived 34.1578+-0.7951 33.6167+-0.1725 might be 1.0161x faster ArrayBuffer-Int32Array-byteOffset 7.0278+-0.0816 6.9931+-0.0103 ArrayBuffer-Int8Array-alloc-huge-long-lived 215.5672+-2.2279 ? 215.9768+-3.3175 ? ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented 166.4188+-0.9604 ! 169.3677+-1.6704 ! definitely 1.0177x slower ArrayBuffer-Int8Array-alloc-large-long-lived 122.1009+-2.9445 ? 123.7447+-1.8271 ? might be 1.0135x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 49.7888+-0.2816 ! 54.1200+-0.5532 ! definitely 1.0870x slower ArrayBuffer-Int8Array-alloc-long-lived 32.6590+-0.5204 ? 33.1573+-0.2388 ? might be 1.0153x slower ArrayBuffer-Int8Array-alloc 29.7232+-0.2568 ? 29.7573+-0.1870 ? asmjs_bool_bug 10.1716+-0.1390 10.0934+-0.0953 basic-set 21.6522+-0.1298 ? 21.7772+-0.1838 ? big-int-mul 5.6363+-0.0267 ? 5.6424+-0.0547 ? boolean-test 4.3988+-0.0448 ? 4.4545+-0.0636 ? might be 1.0127x slower branch-fold 4.9467+-0.0161 4.9430+-0.0556 cast-int-to-double 12.3768+-0.1395 ? 12.5320+-0.1578 ? might be 1.0125x slower cell-argument 15.5064+-0.1248 ? 15.5950+-0.1253 ? cfg-simplify 3.9435+-0.0074 ? 3.9482+-0.0077 ? cmpeq-obj-to-obj-other 12.6204+-0.2944 ? 12.6567+-0.5886 ? constant-test 8.7994+-0.1028 ? 8.8936+-0.0994 ? might be 1.0107x slower DataView-custom-properties 129.5010+-0.9075 128.8144+-0.5721 delay-tear-off-arguments-strictmode 3.5068+-0.0095 ? 3.5123+-0.0048 ? destructuring-arguments-length 174.5923+-2.5584 173.6766+-1.7415 destructuring-arguments 8.7296+-0.1162 ? 8.7482+-0.1089 ? destructuring-swap 8.5469+-0.0678 ? 8.6567+-0.0734 ? might be 1.0128x slower direct-arguments-getbyval 0.8412+-0.0176 ? 0.8493+-0.0396 ? double-pollution-getbyval 11.0731+-0.1106 ? 11.1012+-0.0922 ? double-pollution-putbyoffset 6.5065+-0.0486 6.4815+-0.0612 empty-string-plus-int 10.8124+-0.0329 ! 10.9680+-0.0330 ! definitely 1.0144x slower emscripten-cube2hash 51.8496+-0.2716 ! 55.0846+-0.6865 ! definitely 1.0624x slower emscripten-memops 9249.1299+-31.3622 ^ 7773.6842+-1.8794 ^ definitely 1.1898x faster external-arguments-getbyval 2.0032+-0.0091 ? 2.0149+-0.0104 ? external-arguments-putbyval 3.0466+-0.0545 ? 3.0606+-0.0235 ? Float32Array-matrix-mult 6.3671+-0.0338 6.3595+-0.0328 Float32Array-to-Float64Array-set 94.6681+-0.5339 ? 94.9547+-0.6135 ? Float64Array-alloc-long-lived 101.1448+-0.4746 ? 102.1419+-1.0407 ? Float64Array-to-Int16Array-set 117.5357+-0.6822 ? 117.8154+-1.5060 ? fold-double-to-int 25.9809+-0.5501 ! 36.6639+-0.1387 ! definitely 1.4112x slower for-of-iterate-array-entries 8.5360+-0.0613 ? 8.5742+-0.0804 ? for-of-iterate-array-keys 3.4720+-0.0466 ? 3.4908+-0.0385 ? for-of-iterate-array-values 2.9759+-0.0244 ? 2.9765+-0.0484 ? function-dot-apply 3.1594+-0.0103 ? 3.1799+-0.0495 ? function-test 5.0785+-0.0944 5.0389+-0.0514 get-by-id-chain-from-try-block 7.5553+-0.0301 ? 7.5619+-0.0848 ? get-by-id-proto-or-self 26.0687+-0.2480 ? 26.1275+-0.1581 ? get-by-id-self-or-proto 23.6326+-0.6337 ? 23.6905+-0.7016 ? get_callee_monomorphic 4.7673+-0.1198 4.7303+-0.1285 get_callee_polymorphic 4.4747+-0.0076 ? 4.4974+-0.0358 ? global-var-const-infer-fire-from-opt 0.9516+-0.0091 ? 0.9574+-0.0070 ? global-var-const-infer 0.7522+-0.0024 ? 0.7572+-0.0037 ? HashMap-put-get-iterate-keys 44.7619+-0.9343 44.1545+-0.1804 might be 1.0138x faster HashMap-put-get-iterate 62.7998+-0.5412 ^ 61.9374+-0.2661 ^ definitely 1.0139x faster HashMap-string-put-get-iterate 55.5746+-0.8860 ? 55.7375+-0.2901 ? imul-double-only 17.7288+-0.0662 ? 17.7837+-0.1176 ? imul-int-only 15.0396+-0.2188 ? 15.0510+-0.2166 ? imul-mixed 22.1761+-0.0582 ? 22.2026+-0.1319 ? in-four-cases 25.9134+-0.0794 ? 26.0685+-0.2276 ? in-one-case-false 12.0300+-0.0305 ? 12.0662+-0.1001 ? in-one-case-true 12.0038+-0.0967 ? 12.0594+-0.1830 ? in-two-cases 12.8641+-0.1102 ? 12.8798+-0.1216 ? indexed-properties-in-objects 4.7329+-0.0367 4.7075+-0.0497 infer-one-time-closure-ten-vars 96.2601+-0.1294 ^ 92.3286+-0.1121 ^ definitely 1.0426x faster infer-one-time-closure-two-vars 28.7906+-0.1296 ? 28.7945+-0.1244 ? infer-one-time-closure 28.7024+-0.1026 ? 28.7948+-0.1078 ? infer-one-time-deep-closure 84.8430+-0.1152 ^ 56.9038+-0.1035 ^ definitely 1.4910x faster inline-arguments-access 1.5147+-0.0061 ? 1.5207+-0.0047 ? inline-arguments-local-escape 22.4906+-0.2077 ? 22.8959+-0.2455 ? might be 1.0180x slower inline-get-scoped-var 6.9669+-0.1486 ? 7.0623+-0.0708 ? might be 1.0137x slower inlined-put-by-id-transition 15.4374+-0.2340 15.2985+-0.1957 int-or-other-abs-then-get-by-val 9.4216+-0.0490 9.3885+-0.1483 int-or-other-abs-zero-then-get-by-val 41.2471+-0.4491 40.3351+-0.5973 might be 1.0226x faster int-or-other-add-then-get-by-val 9.7139+-0.0982 9.6545+-0.0539 int-or-other-add 10.9760+-0.1059 10.9149+-0.0667 int-or-other-div-then-get-by-val 6.2450+-0.0972 ? 6.3073+-0.1162 ? int-or-other-max-then-get-by-val 8.7412+-0.2089 ? 8.8167+-0.1677 ? int-or-other-min-then-get-by-val 7.1146+-0.0236 7.1058+-0.0689 int-or-other-mod-then-get-by-val 6.1356+-0.0197 6.1326+-0.0697 int-or-other-mul-then-get-by-val 6.4273+-0.1159 6.4248+-0.0679 int-or-other-neg-then-get-by-val 7.8420+-0.0891 7.8318+-0.0622 int-or-other-neg-zero-then-get-by-val 41.6566+-0.5574 ^ 39.7040+-0.2088 ^ definitely 1.0492x faster int-or-other-sub-then-get-by-val 10.2182+-0.0837 10.1040+-0.0709 might be 1.0113x faster int-or-other-sub 8.0451+-0.0721 ? 8.0858+-0.0534 ? int-overflow-local 6.6569+-0.1131 ? 6.7200+-0.0302 ? Int16Array-alloc-long-lived 66.9303+-0.9628 ? 67.3642+-1.2042 ? Int16Array-bubble-sort-with-byteLength 48.9026+-0.0874 ? 49.0868+-0.1505 ? Int16Array-bubble-sort 48.4094+-0.1188 ? 48.5192+-0.1208 ? Int16Array-load-int-mul 2.0529+-0.0073 ? 2.0558+-0.0041 ? Int16Array-to-Int32Array-set 89.2501+-1.0251 ! 93.2549+-1.0906 ! definitely 1.0449x slower Int32Array-alloc-huge-long-lived 703.8271+-2.3584 ? 714.7537+-21.6199 ? might be 1.0155x slower Int32Array-alloc-huge 810.9773+-6.4076 802.8170+-8.8403 might be 1.0102x faster Int32Array-alloc-large-long-lived 972.0261+-10.1262 ? 972.8335+-7.1647 ? Int32Array-alloc-large 44.5977+-0.9395 ? 45.8318+-0.6680 ? might be 1.0277x slower Int32Array-alloc-long-lived 79.5661+-0.4773 79.2518+-0.6356 Int32Array-alloc 4.4897+-0.0379 ? 4.4932+-0.0105 ? Int32Array-Int8Array-view-alloc 14.8669+-0.1029 ? 15.1068+-0.1423 ? might be 1.0161x slower int52-spill 12.2416+-0.1965 ? 12.5038+-0.2038 ? might be 1.0214x slower Int8Array-alloc-long-lived 66.4291+-0.6228 ? 66.8872+-0.8774 ? Int8Array-load-with-byteLength 5.0474+-0.0031 5.0137+-0.0678 Int8Array-load 5.0962+-0.0615 5.0521+-0.0458 integer-divide 15.3937+-0.0949 ? 15.4865+-0.1624 ? integer-modulo 2.1891+-0.2145 2.1070+-0.0099 might be 1.0390x faster large-int-captured 9.1935+-0.1804 9.1581+-0.0859 large-int-neg 25.9562+-0.1702 ? 26.0513+-0.1309 ? large-int 23.5679+-0.2996 23.3032+-0.1711 might be 1.0114x faster lots-of-fields 10.9445+-0.0625 ? 11.0014+-0.0936 ? make-indexed-storage 4.2509+-0.0167 4.2338+-0.0098 make-rope-cse 5.9967+-0.0612 ? 6.0595+-0.1166 ? might be 1.0105x slower marsaglia-larger-ints 119.9557+-1.4569 118.9668+-0.0924 marsaglia-osr-entry 52.6856+-0.0993 52.6714+-0.0953 marsaglia 519.7085+-0.2545 519.6917+-0.2704 method-on-number 31.4656+-0.6985 30.9481+-0.3884 might be 1.0167x faster negative-zero-divide 0.3982+-0.0026 ? 0.4018+-0.0020 ? negative-zero-modulo 0.3950+-0.0273 0.3844+-0.0023 might be 1.0278x faster negative-zero-negate 0.3662+-0.0023 ? 0.3678+-0.0022 ? nested-function-parsing-random 380.4197+-2.1140 ! 389.9795+-0.6575 ! definitely 1.0251x slower nested-function-parsing 48.1334+-0.3215 ! 55.1116+-0.1179 ! definitely 1.1450x slower new-array-buffer-dead 3.7521+-0.0281 ? 3.7751+-0.0695 ? new-array-buffer-push 10.6194+-0.1366 10.5319+-0.1753 new-array-dead 28.5981+-0.1371 28.5362+-0.0919 new-array-push 6.8473+-0.0654 ? 6.9198+-0.1337 ? might be 1.0106x slower number-test 4.3251+-0.0381 ? 4.3484+-0.0068 ? object-closure-call 13.2772+-0.0526 13.1896+-0.0856 object-test 4.7714+-0.0357 ? 4.7885+-0.0357 ? poly-stricteq 79.8627+-0.8227 79.8276+-0.3474 polymorphic-structure 21.1588+-0.1153 ? 21.2311+-0.1305 ? polyvariant-monomorphic-get-by-id 12.0118+-0.1360 11.9553+-0.1296 put-by-id 19.5739+-0.4032 19.4899+-0.2858 put-by-val-large-index-blank-indexing-type 11.2603+-0.2421 11.0281+-0.1301 might be 1.0211x faster rare-osr-exit-on-local 20.2075+-0.0892 ? 20.2468+-0.1238 ? register-pressure-from-osr 32.3813+-0.3933 32.2131+-0.1101 simple-activation-demo 35.0721+-0.0691 35.0336+-0.0793 slow-array-profile-convergence 4.0309+-0.0406 ? 4.1446+-0.1861 ? might be 1.0282x slower slow-convergence 3.4580+-0.0417 3.4332+-0.0119 sparse-conditional 1.3538+-0.0179 1.3457+-0.0045 splice-to-remove 77.4692+-0.2402 ^ 77.0371+-0.1217 ^ definitely 1.0056x faster stepanov_container 11645.6466+-33.1074 ^ 10839.5263+-145.1165 ^ definitely 1.0744x faster string-concat-object 2.9939+-0.0228 2.9797+-0.0106 string-concat-pair-object 2.9107+-0.0104 ? 2.9234+-0.0121 ? string-concat-pair-simple 16.9617+-0.3941 16.8659+-0.3276 string-concat-simple 17.4087+-0.4532 17.0738+-0.3152 might be 1.0196x faster string-cons-repeat 10.5340+-0.0251 10.5234+-0.0415 string-cons-tower 11.0584+-0.0273 ^ 10.9979+-0.0181 ^ definitely 1.0055x faster string-equality 43.2507+-0.1243 ? 43.4960+-0.3866 ? string-get-by-val-big-char 13.3955+-0.1778 ? 13.5055+-0.0798 ? string-get-by-val-out-of-bounds-insane 5.7509+-0.1285 ? 5.8274+-0.1487 ? might be 1.0133x slower string-get-by-val-out-of-bounds 5.2910+-0.0514 ? 5.2956+-0.0568 ? string-get-by-val 4.9002+-0.0261 4.8793+-0.0081 string-hash 2.7575+-0.0205 2.7456+-0.0082 string-long-ident-equality 38.2377+-0.3184 38.1741+-0.0897 string-repeat-arith 48.7239+-0.1453 ? 48.8014+-0.2497 ? string-sub 98.3621+-0.4328 97.6805+-0.9969 string-test 4.3132+-0.0074 4.2936+-0.0349 string-var-equality 87.5703+-1.3191 ? 87.9372+-0.7991 ? structure-hoist-over-transitions 3.3506+-0.0088 ? 3.3694+-0.0100 ? switch-char-constant 3.4672+-0.0063 3.4615+-0.0065 switch-char 8.1233+-0.0841 8.0630+-0.1177 switch-constant 9.2469+-0.1221 9.2298+-0.1202 switch-string-basic-big-var 20.1557+-0.0925 20.1500+-0.1726 switch-string-basic-big 21.4802+-0.1505 ? 22.7984+-2.2999 ? might be 1.0614x slower switch-string-basic-var 20.1364+-0.1254 ? 20.2666+-0.1744 ? switch-string-basic 22.6436+-0.7883 21.3086+-0.7920 might be 1.0627x faster switch-string-big-length-tower-var 29.8803+-0.1209 29.8740+-0.1178 switch-string-length-tower-var 21.7255+-0.1830 ? 21.7628+-0.1642 ? switch-string-length-tower 16.9520+-0.1037 16.9519+-0.0940 switch-string-short 16.8775+-0.1210 ? 16.9990+-0.1883 ? switch 15.5398+-0.1167 ? 15.5692+-0.1063 ? tear-off-arguments-simple 2.1959+-0.0056 ! 2.2208+-0.0141 ! definitely 1.0113x slower tear-off-arguments 3.5329+-0.0064 ? 3.5451+-0.0075 ? temporal-structure 16.8838+-0.0810 ? 16.9399+-0.0761 ? to-int32-boolean 22.2733+-0.1311 22.2541+-0.1531 undefined-test 4.5688+-0.0326 4.5660+-0.0215 weird-inlining-const-prop 2.2857+-0.0098 ? 2.2982+-0.0144 ? <arithmetic> 157.3890+-0.2841 ^ 144.9922+-0.7820 ^ definitely 1.0855x faster <geometric> * 14.5568+-0.0178 ? 14.5696+-0.0132 ? might be 1.0009x slower <harmonic> 5.3446+-0.0213 ? 5.3543+-0.0105 ? might be 1.0018x slower TipOfTree OneShotClosure All benchmarks: <arithmetic> 223.7458+-0.3086 ^ 215.6978+-0.6267 ^ definitely 1.0373x faster <geometric> 20.8508+-0.0224 ! 20.8962+-0.0174 ! definitely 1.0022x slower <harmonic> 4.7888+-0.0140 ? 4.8146+-0.0156 ? might be 1.0054x slower TipOfTree OneShotClosure Geomean of preferred means: <scaled-result> 48.6915+-0.0572 ! 48.9108+-0.0710 ! definitely 1.0045x slower
Filip Pizlo
Comment 14 2013-11-25 18:53:06 PST
(In reply to comment #13) > OK - yeah, this totally works after I ensure that SymbolTables are cloned (https://bugs.webkit.org/show_bug.cgi?id=124824). Here's the performance, note the speed-ups in asm.js workloads. > > It's important to note that the primary purpose of this patch is *not* to have a speed-up. It's an enabler for constant closure variable inference. The fact that it's a speed-up already is pretty cool though. > > > Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). > > VMs tested: > "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740) > "OneShotClosure" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159740) > > Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. > 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 OneShotClosure > SunSpider: > 3d-cube 7.5713+-0.0586 ! 7.7229+-0.0608 ! definitely 1.0200x slower > 3d-morph 8.8579+-0.0741 8.7897+-0.0720 > 3d-raytrace 8.7592+-0.1628 ? 8.8390+-0.1069 ? > access-binary-trees 1.9928+-0.0127 ? 2.0025+-0.0112 ? > access-fannkuch 7.9314+-0.1398 ? 7.9500+-0.0648 ? > access-nbody 4.2195+-0.0074 ? 4.2248+-0.0070 ? > access-nsieve 4.9850+-0.0291 ? 5.0058+-0.0209 ? > bitops-3bit-bits-in-byte 1.8067+-0.0077 1.8052+-0.0014 > bitops-bits-in-byte 7.2157+-0.0761 ? 7.2684+-0.0352 ? > bitops-bitwise-and 2.9373+-0.0199 2.9146+-0.0356 > bitops-nsieve-bits 4.5981+-0.0107 ? 4.6156+-0.0200 ? > controlflow-recursive 3.1256+-0.0104 ? 3.1492+-0.0180 ? > crypto-aes 5.4101+-0.0269 ! 5.4799+-0.0161 ! definitely 1.0129x slower > crypto-md5 3.1096+-0.0217 ? 3.1138+-0.0092 ? > crypto-sha1 2.9519+-0.0153 ? 2.9634+-0.0166 ? > date-format-tofte 11.1999+-0.1028 ? 11.3538+-0.1139 ? might be 1.0137x slower > date-format-xparb 8.6572+-0.2649 8.5946+-0.1464 > math-cordic 4.2146+-0.0130 4.2111+-0.0086 > math-partial-sums 10.1713+-0.0669 10.1329+-0.1217 > math-spectral-norm 2.7195+-0.0091 ? 2.7237+-0.0067 ? > regexp-dna 12.8214+-0.0917 ? 12.9185+-0.0695 ? > string-base64 5.4529+-0.0487 5.4474+-0.0299 > string-fasta 10.1685+-0.1193 ? 10.1800+-0.0628 ? > string-tagcloud 14.7793+-0.1383 ? 14.8674+-0.0696 ? > string-unpack-code 29.8436+-0.1539 ! 31.4094+-0.6887 ! definitely 1.0525x slower > string-validate-input 6.8875+-0.0531 ! 7.0241+-0.0715 ! definitely 1.0198x slower > > <arithmetic> * 7.3995+-0.0220 ! 7.4888+-0.0319 ! definitely 1.0121x slower > <geometric> 5.9376+-0.0153 ! 5.9720+-0.0110 ! definitely 1.0058x slower > <harmonic> 4.8557+-0.0094 ? 4.8719+-0.0069 ? might be 1.0033x slower The SunSpider regression is due to https://bugs.webkit.org/show_bug.cgi?id=124824, which I include in this measurement, and I think I have a fix. > > TipOfTree OneShotClosure > LongSpider: > 3d-cube 2703.6911+-5.1639 ? 2705.2078+-5.7551 ? > 3d-morph 1503.9913+-1.0547 ? 1504.3099+-0.5120 ? > 3d-raytrace 1532.7155+-27.1282 ? 1536.9038+-37.7426 ? > access-binary-trees 2214.8490+-28.9112 2210.5071+-9.0686 > access-fannkuch 668.1636+-0.3095 667.0806+-2.8580 > access-nbody 1496.0519+-0.7766 1495.8079+-1.0155 > access-nsieve 1545.6492+-3.3063 1545.3567+-3.5099 > bitops-3bit-bits-in-byte 122.0382+-1.5032 121.6812+-0.6140 > bitops-bits-in-byte 638.6634+-2.4622 ? 639.7084+-1.8781 ? > bitops-nsieve-bits 1059.5476+-20.6393 1046.5556+-0.4456 might be 1.0124x faster > controlflow-recursive 1490.1838+-1.1999 ? 1491.2281+-1.1711 ? > crypto-aes 1657.4204+-13.1218 1650.7580+-4.9355 > crypto-md5 1189.5926+-16.0090 1183.4123+-1.0479 > crypto-sha1 1620.0481+-4.2877 1615.9520+-5.1804 > date-format-tofte 1176.7482+-6.5750 ? 1184.6930+-15.1147 ? > date-format-xparb 1456.9124+-19.7117 ? 1468.2665+-14.4047 ? > math-cordic 1735.8039+-2.4339 ? 1756.1163+-50.6096 ? might be 1.0117x slower > math-partial-sums 1313.4159+-1.6790 1313.0176+-15.0448 > math-spectral-norm 1826.9231+-1.4185 1826.1909+-0.5086 > string-base64 504.5985+-2.0241 ? 505.1897+-1.7492 ? > string-fasta 995.7686+-8.7513 ? 1002.5400+-6.4549 ? > string-tagcloud 379.5819+-6.1538 379.4218+-2.5465 > > <arithmetic> 1310.5617+-2.1037 ? 1311.3593+-2.9540 ? might be 1.0006x slower > <geometric> * 1116.9702+-1.8255 ? 1117.3612+-1.9354 ? might be 1.0004x slower > <harmonic> 801.9628+-3.1782 801.5110+-1.6658 might be 1.0006x faster > > TipOfTree OneShotClosure > V8Spider: > crypto 79.8400+-0.7819 79.4116+-0.1977 > deltablue 97.6271+-0.5112 ? 97.7724+-0.8289 ? > earley-boyer 70.9846+-0.2851 ? 71.1164+-0.5930 ? > raytrace 39.5626+-0.1295 ? 39.7617+-0.1278 ? > regexp 98.5962+-0.2371 ! 100.6687+-0.0982 ! definitely 1.0210x slower > richards 133.4647+-1.1364 ? 133.5138+-1.9033 ? > splay 45.7088+-0.4910 45.5637+-0.4150 > > <arithmetic> 80.8263+-0.1189 ? 81.1155+-0.3498 ? might be 1.0036x slower > <geometric> * 74.8500+-0.1056 ? 75.0742+-0.2586 ? might be 1.0030x slower > <harmonic> 68.8617+-0.1375 ? 69.0266+-0.2115 ? might be 1.0024x slower > > TipOfTree OneShotClosure > Octane and V8v7: > encrypt 0.46539+-0.00056 0.46537+-0.00059 > decrypt 8.61278+-0.10320 8.56494+-0.01297 > deltablue x2 0.56811+-0.00829 0.56580+-0.00723 > earley 0.86179+-0.00996 0.85311+-0.00737 might be 1.0102x faster > boyer 12.28732+-0.03527 ? 12.36198+-0.14571 ? > raytrace x2 4.25234+-0.03819 ? 4.28571+-0.05769 ? > regexp x2 33.38518+-0.14569 ? 34.17660+-0.77651 ? might be 1.0237x slower > richards x2 0.43053+-0.00741 0.42879+-0.00598 > splay x2 0.62881+-0.00292 ! 0.67835+-0.03390 ! definitely 1.0788x slower > navier-stokes x2 10.93098+-0.01050 ^ 10.74471+-0.00447 ^ definitely 1.0173x faster > closure 0.41954+-0.00045 ! 0.42786+-0.00080 ! definitely 1.0198x slower > jquery 6.01172+-0.02131 ! 6.14123+-0.01382 ! definitely 1.0215x slower > gbemu x2 71.46555+-1.23004 ? 71.81298+-0.78129 ? > mandreel x2 144.69750+-0.21674 ? 145.00739+-0.22634 ? > pdfjs x2 100.70562+-0.32917 ! 101.73275+-0.42501 ! definitely 1.0102x slower > box2d x2 35.21347+-0.19488 ? 35.63574+-0.47073 ? might be 1.0120x slower > > V8v7: > <arithmetic> 7.66370+-0.01653 ? 7.75033+-0.09537 ? might be 1.0113x slower > <geometric> * 2.50570+-0.00760 ? 2.52927+-0.01950 ? might be 1.0094x slower > <harmonic> 1.02763+-0.00543 ? 1.03971+-0.01165 ? might be 1.0118x slower > > Octane including V8v7: > <arithmetic> 32.04672+-0.10358 ! 32.26739+-0.05829 ! definitely 1.0069x slower > <geometric> * 6.96319+-0.01762 ! 7.03006+-0.02895 ! definitely 1.0096x slower > <harmonic> 1.42556+-0.00639 ? 1.44389+-0.01382 ? might be 1.0129x slower I think this was a fluke; here's a rerun. Note that splay just has its usual wonkiness. TipOfTree OneShotClosure Octane and V8v7: encrypt 0.46813+-0.00603 0.46747+-0.00519 decrypt 8.62154+-0.10678 8.56783+-0.01162 deltablue x2 0.57090+-0.00960 0.56268+-0.00253 might be 1.0146x faster earley 0.85546+-0.00489 ? 0.85839+-0.00646 ? boyer 12.37733+-0.09864 ? 12.41143+-0.23295 ? raytrace x2 4.31331+-0.05178 ? 4.32453+-0.08173 ? regexp x2 33.42525+-0.20828 ! 33.84932+-0.13013 ! definitely 1.0127x slower richards x2 0.43041+-0.00687 ? 0.43278+-0.01188 ? splay x2 0.63683+-0.00784 ? 0.66795+-0.02938 ? might be 1.0489x slower navier-stokes x2 10.98589+-0.11800 10.80932+-0.14694 might be 1.0163x faster closure 0.41934+-0.00040 ! 0.43101+-0.00539 ! definitely 1.0278x slower jquery 6.07970+-0.09544 ? 6.16716+-0.08235 ? might be 1.0144x slower gbemu x2 72.55122+-0.58218 71.87743+-1.01660 mandreel x2 145.23576+-1.53236 144.96594+-0.35981 pdfjs x2 101.33431+-1.30216 ? 101.72435+-0.35442 ? box2d x2 35.30093+-0.15306 35.10096+-0.17036 V8v7: <arithmetic> 7.69048+-0.02836 ? 7.72489+-0.02516 ? might be 1.0045x slower <geometric> * 2.51853+-0.00976 ? 2.52966+-0.02085 ? might be 1.0044x slower <harmonic> 1.03214+-0.00796 ? 1.03964+-0.01437 ? might be 1.0073x slower Octane including V8v7: <arithmetic> 32.24581+-0.12979 32.21284+-0.10055 might be 1.0010x faster <geometric> * 7.00271+-0.01513 ? 7.02597+-0.03955 ? might be 1.0033x slower <harmonic> 1.43101+-0.00942 ? 1.44512+-0.01789 ? might be 1.0099x slower > > TipOfTree OneShotClosure > Kraken: > ai-astar 493.505+-0.500 ? 493.921+-0.421 ? > audio-beat-detection 237.374+-1.829 ? 237.832+-0.990 ? > audio-dft 289.340+-0.735 ? 289.343+-0.916 ? > audio-fft 143.141+-0.263 142.956+-0.148 > audio-oscillator 243.913+-0.711 ? 246.344+-3.731 ? > imaging-darkroom 291.706+-8.118 290.361+-6.557 > imaging-desaturate 158.351+-0.092 ? 159.246+-2.047 ? > imaging-gaussian-blur 362.795+-0.399 362.731+-0.194 > json-parse-financial 80.461+-0.327 80.377+-0.252 > json-stringify-tinderbox 106.854+-2.260 ? 109.055+-0.863 ? might be 1.0206x slower > stanford-crypto-aes 90.845+-0.555 90.000+-0.871 > stanford-crypto-ccm 101.297+-1.320 99.726+-1.234 might be 1.0158x faster > stanford-crypto-pbkdf2 261.004+-1.818 ? 261.205+-1.283 ? > stanford-crypto-sha256-iterative 114.809+-0.376 ! 115.932+-0.472 ! definitely 1.0098x slower > > <arithmetic> * 212.528+-0.764 ? 212.788+-0.586 ? might be 1.0012x slower > <geometric> 182.922+-0.652 ? 183.148+-0.468 ? might be 1.0012x slower > <harmonic> 158.187+-0.643 ? 158.307+-0.414 ? might be 1.0008x slower > > TipOfTree OneShotClosure > JSRegress: > adapt-to-double-divide 22.7615+-0.1060 22.6735+-0.1096 > aliased-arguments-getbyval 0.9530+-0.0029 ! 0.9620+-0.0050 ! definitely 1.0095x slower > allocate-big-object 2.6239+-0.0298 ? 2.6641+-0.0943 ? might be 1.0153x slower > arity-mismatch-inlining 0.8865+-0.0039 ! 0.8956+-0.0026 ! definitely 1.0102x slower > array-access-polymorphic-structure 9.7423+-0.1081 ? 9.8772+-0.0965 ? might be 1.0138x slower > array-nonarray-polymorhpic-access 56.4944+-0.2788 56.3676+-0.3042 > array-with-double-add 5.7447+-0.0591 ? 5.7655+-0.0545 ? > array-with-double-increment 4.2768+-0.0422 ? 4.3302+-0.0150 ? might be 1.0125x slower > array-with-double-mul-add 6.7851+-0.0756 ? 6.8312+-0.0309 ? > array-with-double-sum 8.0033+-0.0466 7.9885+-0.0655 > array-with-int32-add-sub 10.4787+-0.1581 10.4335+-0.1180 > array-with-int32-or-double-sum 8.0835+-0.1019 8.0323+-0.0831 > ArrayBuffer-DataView-alloc-large-long-lived > 122.3827+-1.0212 ? 122.5661+-1.2554 ? > ArrayBuffer-DataView-alloc-long-lived 34.1578+-0.7951 33.6167+-0.1725 might be 1.0161x faster > ArrayBuffer-Int32Array-byteOffset 7.0278+-0.0816 6.9931+-0.0103 > ArrayBuffer-Int8Array-alloc-huge-long-lived > 215.5672+-2.2279 ? 215.9768+-3.3175 ? > ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented > 166.4188+-0.9604 ! 169.3677+-1.6704 ! definitely 1.0177x slower > ArrayBuffer-Int8Array-alloc-large-long-lived > 122.1009+-2.9445 ? 123.7447+-1.8271 ? might be 1.0135x slower > ArrayBuffer-Int8Array-alloc-long-lived-buffer > 49.7888+-0.2816 ! 54.1200+-0.5532 ! definitely 1.0870x slower > ArrayBuffer-Int8Array-alloc-long-lived 32.6590+-0.5204 ? 33.1573+-0.2388 ? might be 1.0153x slower > ArrayBuffer-Int8Array-alloc 29.7232+-0.2568 ? 29.7573+-0.1870 ? > asmjs_bool_bug 10.1716+-0.1390 10.0934+-0.0953 > basic-set 21.6522+-0.1298 ? 21.7772+-0.1838 ? > big-int-mul 5.6363+-0.0267 ? 5.6424+-0.0547 ? > boolean-test 4.3988+-0.0448 ? 4.4545+-0.0636 ? might be 1.0127x slower > branch-fold 4.9467+-0.0161 4.9430+-0.0556 > cast-int-to-double 12.3768+-0.1395 ? 12.5320+-0.1578 ? might be 1.0125x slower > cell-argument 15.5064+-0.1248 ? 15.5950+-0.1253 ? > cfg-simplify 3.9435+-0.0074 ? 3.9482+-0.0077 ? > cmpeq-obj-to-obj-other 12.6204+-0.2944 ? 12.6567+-0.5886 ? > constant-test 8.7994+-0.1028 ? 8.8936+-0.0994 ? might be 1.0107x slower > DataView-custom-properties 129.5010+-0.9075 128.8144+-0.5721 > delay-tear-off-arguments-strictmode 3.5068+-0.0095 ? 3.5123+-0.0048 ? > destructuring-arguments-length 174.5923+-2.5584 173.6766+-1.7415 > destructuring-arguments 8.7296+-0.1162 ? 8.7482+-0.1089 ? > destructuring-swap 8.5469+-0.0678 ? 8.6567+-0.0734 ? might be 1.0128x slower > direct-arguments-getbyval 0.8412+-0.0176 ? 0.8493+-0.0396 ? > double-pollution-getbyval 11.0731+-0.1106 ? 11.1012+-0.0922 ? > double-pollution-putbyoffset 6.5065+-0.0486 6.4815+-0.0612 > empty-string-plus-int 10.8124+-0.0329 ! 10.9680+-0.0330 ! definitely 1.0144x slower > emscripten-cube2hash 51.8496+-0.2716 ! 55.0846+-0.6865 ! definitely 1.0624x slower > emscripten-memops 9249.1299+-31.3622 ^ 7773.6842+-1.8794 ^ definitely 1.1898x faster Sweet. > external-arguments-getbyval 2.0032+-0.0091 ? 2.0149+-0.0104 ? > external-arguments-putbyval 3.0466+-0.0545 ? 3.0606+-0.0235 ? > Float32Array-matrix-mult 6.3671+-0.0338 6.3595+-0.0328 > Float32Array-to-Float64Array-set 94.6681+-0.5339 ? 94.9547+-0.6135 ? > Float64Array-alloc-long-lived 101.1448+-0.4746 ? 102.1419+-1.0407 ? > Float64Array-to-Int16Array-set 117.5357+-0.6822 ? 117.8154+-1.5060 ? > fold-double-to-int 25.9809+-0.5501 ! 36.6639+-0.1387 ! definitely 1.4112x slower > for-of-iterate-array-entries 8.5360+-0.0613 ? 8.5742+-0.0804 ? > for-of-iterate-array-keys 3.4720+-0.0466 ? 3.4908+-0.0385 ? > for-of-iterate-array-values 2.9759+-0.0244 ? 2.9765+-0.0484 ? > function-dot-apply 3.1594+-0.0103 ? 3.1799+-0.0495 ? > function-test 5.0785+-0.0944 5.0389+-0.0514 > get-by-id-chain-from-try-block 7.5553+-0.0301 ? 7.5619+-0.0848 ? > get-by-id-proto-or-self 26.0687+-0.2480 ? 26.1275+-0.1581 ? > get-by-id-self-or-proto 23.6326+-0.6337 ? 23.6905+-0.7016 ? > get_callee_monomorphic 4.7673+-0.1198 4.7303+-0.1285 > get_callee_polymorphic 4.4747+-0.0076 ? 4.4974+-0.0358 ? > global-var-const-infer-fire-from-opt 0.9516+-0.0091 ? 0.9574+-0.0070 ? > global-var-const-infer 0.7522+-0.0024 ? 0.7572+-0.0037 ? > HashMap-put-get-iterate-keys 44.7619+-0.9343 44.1545+-0.1804 might be 1.0138x faster > HashMap-put-get-iterate 62.7998+-0.5412 ^ 61.9374+-0.2661 ^ definitely 1.0139x faster > HashMap-string-put-get-iterate 55.5746+-0.8860 ? 55.7375+-0.2901 ? > imul-double-only 17.7288+-0.0662 ? 17.7837+-0.1176 ? > imul-int-only 15.0396+-0.2188 ? 15.0510+-0.2166 ? > imul-mixed 22.1761+-0.0582 ? 22.2026+-0.1319 ? > in-four-cases 25.9134+-0.0794 ? 26.0685+-0.2276 ? > in-one-case-false 12.0300+-0.0305 ? 12.0662+-0.1001 ? > in-one-case-true 12.0038+-0.0967 ? 12.0594+-0.1830 ? > in-two-cases 12.8641+-0.1102 ? 12.8798+-0.1216 ? > indexed-properties-in-objects 4.7329+-0.0367 4.7075+-0.0497 > infer-one-time-closure-ten-vars 96.2601+-0.1294 ^ 92.3286+-0.1121 ^ definitely 1.0426x faster > infer-one-time-closure-two-vars 28.7906+-0.1296 ? 28.7945+-0.1244 ? > infer-one-time-closure 28.7024+-0.1026 ? 28.7948+-0.1078 ? Yeah, notice how this isn't necessarily a speed-up even for heavy closure variable use. > infer-one-time-deep-closure 84.8430+-0.1152 ^ 56.9038+-0.1035 ^ definitely 1.4910x faster That's what I'm talking about! > inline-arguments-access 1.5147+-0.0061 ? 1.5207+-0.0047 ? > inline-arguments-local-escape 22.4906+-0.2077 ? 22.8959+-0.2455 ? might be 1.0180x slower > inline-get-scoped-var 6.9669+-0.1486 ? 7.0623+-0.0708 ? might be 1.0137x slower > inlined-put-by-id-transition 15.4374+-0.2340 15.2985+-0.1957 > int-or-other-abs-then-get-by-val 9.4216+-0.0490 9.3885+-0.1483 > int-or-other-abs-zero-then-get-by-val 41.2471+-0.4491 40.3351+-0.5973 might be 1.0226x faster > int-or-other-add-then-get-by-val 9.7139+-0.0982 9.6545+-0.0539 > int-or-other-add 10.9760+-0.1059 10.9149+-0.0667 > int-or-other-div-then-get-by-val 6.2450+-0.0972 ? 6.3073+-0.1162 ? > int-or-other-max-then-get-by-val 8.7412+-0.2089 ? 8.8167+-0.1677 ? > int-or-other-min-then-get-by-val 7.1146+-0.0236 7.1058+-0.0689 > int-or-other-mod-then-get-by-val 6.1356+-0.0197 6.1326+-0.0697 > int-or-other-mul-then-get-by-val 6.4273+-0.1159 6.4248+-0.0679 > int-or-other-neg-then-get-by-val 7.8420+-0.0891 7.8318+-0.0622 > int-or-other-neg-zero-then-get-by-val 41.6566+-0.5574 ^ 39.7040+-0.2088 ^ definitely 1.0492x faster > int-or-other-sub-then-get-by-val 10.2182+-0.0837 10.1040+-0.0709 might be 1.0113x faster > int-or-other-sub 8.0451+-0.0721 ? 8.0858+-0.0534 ? > int-overflow-local 6.6569+-0.1131 ? 6.7200+-0.0302 ? > Int16Array-alloc-long-lived 66.9303+-0.9628 ? 67.3642+-1.2042 ? > Int16Array-bubble-sort-with-byteLength 48.9026+-0.0874 ? 49.0868+-0.1505 ? > Int16Array-bubble-sort 48.4094+-0.1188 ? 48.5192+-0.1208 ? > Int16Array-load-int-mul 2.0529+-0.0073 ? 2.0558+-0.0041 ? > Int16Array-to-Int32Array-set 89.2501+-1.0251 ! 93.2549+-1.0906 ! definitely 1.0449x slower > Int32Array-alloc-huge-long-lived 703.8271+-2.3584 ? 714.7537+-21.6199 ? might be 1.0155x slower > Int32Array-alloc-huge 810.9773+-6.4076 802.8170+-8.8403 might be 1.0102x faster > Int32Array-alloc-large-long-lived 972.0261+-10.1262 ? 972.8335+-7.1647 ? > Int32Array-alloc-large 44.5977+-0.9395 ? 45.8318+-0.6680 ? might be 1.0277x slower > Int32Array-alloc-long-lived 79.5661+-0.4773 79.2518+-0.6356 > Int32Array-alloc 4.4897+-0.0379 ? 4.4932+-0.0105 ? > Int32Array-Int8Array-view-alloc 14.8669+-0.1029 ? 15.1068+-0.1423 ? might be 1.0161x slower > int52-spill 12.2416+-0.1965 ? 12.5038+-0.2038 ? might be 1.0214x slower > Int8Array-alloc-long-lived 66.4291+-0.6228 ? 66.8872+-0.8774 ? > Int8Array-load-with-byteLength 5.0474+-0.0031 5.0137+-0.0678 > Int8Array-load 5.0962+-0.0615 5.0521+-0.0458 > integer-divide 15.3937+-0.0949 ? 15.4865+-0.1624 ? > integer-modulo 2.1891+-0.2145 2.1070+-0.0099 might be 1.0390x faster > large-int-captured 9.1935+-0.1804 9.1581+-0.0859 > large-int-neg 25.9562+-0.1702 ? 26.0513+-0.1309 ? > large-int 23.5679+-0.2996 23.3032+-0.1711 might be 1.0114x faster > lots-of-fields 10.9445+-0.0625 ? 11.0014+-0.0936 ? > make-indexed-storage 4.2509+-0.0167 4.2338+-0.0098 > make-rope-cse 5.9967+-0.0612 ? 6.0595+-0.1166 ? might be 1.0105x slower > marsaglia-larger-ints 119.9557+-1.4569 118.9668+-0.0924 > marsaglia-osr-entry 52.6856+-0.0993 52.6714+-0.0953 > marsaglia 519.7085+-0.2545 519.6917+-0.2704 > method-on-number 31.4656+-0.6985 30.9481+-0.3884 might be 1.0167x faster > negative-zero-divide 0.3982+-0.0026 ? 0.4018+-0.0020 ? > negative-zero-modulo 0.3950+-0.0273 0.3844+-0.0023 might be 1.0278x faster > negative-zero-negate 0.3662+-0.0023 ? 0.3678+-0.0022 ? > nested-function-parsing-random 380.4197+-2.1140 ! 389.9795+-0.6575 ! definitely 1.0251x slower > nested-function-parsing 48.1334+-0.3215 ! 55.1116+-0.1179 ! definitely 1.1450x slower > new-array-buffer-dead 3.7521+-0.0281 ? 3.7751+-0.0695 ? > new-array-buffer-push 10.6194+-0.1366 10.5319+-0.1753 > new-array-dead 28.5981+-0.1371 28.5362+-0.0919 > new-array-push 6.8473+-0.0654 ? 6.9198+-0.1337 ? might be 1.0106x slower > number-test 4.3251+-0.0381 ? 4.3484+-0.0068 ? > object-closure-call 13.2772+-0.0526 13.1896+-0.0856 > object-test 4.7714+-0.0357 ? 4.7885+-0.0357 ? > poly-stricteq 79.8627+-0.8227 79.8276+-0.3474 > polymorphic-structure 21.1588+-0.1153 ? 21.2311+-0.1305 ? > polyvariant-monomorphic-get-by-id 12.0118+-0.1360 11.9553+-0.1296 > put-by-id 19.5739+-0.4032 19.4899+-0.2858 > put-by-val-large-index-blank-indexing-type > 11.2603+-0.2421 11.0281+-0.1301 might be 1.0211x faster > rare-osr-exit-on-local 20.2075+-0.0892 ? 20.2468+-0.1238 ? > register-pressure-from-osr 32.3813+-0.3933 32.2131+-0.1101 > simple-activation-demo 35.0721+-0.0691 35.0336+-0.0793 > slow-array-profile-convergence 4.0309+-0.0406 ? 4.1446+-0.1861 ? might be 1.0282x slower > slow-convergence 3.4580+-0.0417 3.4332+-0.0119 > sparse-conditional 1.3538+-0.0179 1.3457+-0.0045 > splice-to-remove 77.4692+-0.2402 ^ 77.0371+-0.1217 ^ definitely 1.0056x faster > stepanov_container 11645.6466+-33.1074 ^ 10839.5263+-145.1165 ^ definitely 1.0744x faster Awesome. > string-concat-object 2.9939+-0.0228 2.9797+-0.0106 > string-concat-pair-object 2.9107+-0.0104 ? 2.9234+-0.0121 ? > string-concat-pair-simple 16.9617+-0.3941 16.8659+-0.3276 > string-concat-simple 17.4087+-0.4532 17.0738+-0.3152 might be 1.0196x faster > string-cons-repeat 10.5340+-0.0251 10.5234+-0.0415 > string-cons-tower 11.0584+-0.0273 ^ 10.9979+-0.0181 ^ definitely 1.0055x faster > string-equality 43.2507+-0.1243 ? 43.4960+-0.3866 ? > string-get-by-val-big-char 13.3955+-0.1778 ? 13.5055+-0.0798 ? > string-get-by-val-out-of-bounds-insane 5.7509+-0.1285 ? 5.8274+-0.1487 ? might be 1.0133x slower > string-get-by-val-out-of-bounds 5.2910+-0.0514 ? 5.2956+-0.0568 ? > string-get-by-val 4.9002+-0.0261 4.8793+-0.0081 > string-hash 2.7575+-0.0205 2.7456+-0.0082 > string-long-ident-equality 38.2377+-0.3184 38.1741+-0.0897 > string-repeat-arith 48.7239+-0.1453 ? 48.8014+-0.2497 ? > string-sub 98.3621+-0.4328 97.6805+-0.9969 > string-test 4.3132+-0.0074 4.2936+-0.0349 > string-var-equality 87.5703+-1.3191 ? 87.9372+-0.7991 ? > structure-hoist-over-transitions 3.3506+-0.0088 ? 3.3694+-0.0100 ? > switch-char-constant 3.4672+-0.0063 3.4615+-0.0065 > switch-char 8.1233+-0.0841 8.0630+-0.1177 > switch-constant 9.2469+-0.1221 9.2298+-0.1202 > switch-string-basic-big-var 20.1557+-0.0925 20.1500+-0.1726 > switch-string-basic-big 21.4802+-0.1505 ? 22.7984+-2.2999 ? might be 1.0614x slower > switch-string-basic-var 20.1364+-0.1254 ? 20.2666+-0.1744 ? > switch-string-basic 22.6436+-0.7883 21.3086+-0.7920 might be 1.0627x faster > switch-string-big-length-tower-var 29.8803+-0.1209 29.8740+-0.1178 > switch-string-length-tower-var 21.7255+-0.1830 ? 21.7628+-0.1642 ? > switch-string-length-tower 16.9520+-0.1037 16.9519+-0.0940 > switch-string-short 16.8775+-0.1210 ? 16.9990+-0.1883 ? > switch 15.5398+-0.1167 ? 15.5692+-0.1063 ? > tear-off-arguments-simple 2.1959+-0.0056 ! 2.2208+-0.0141 ! definitely 1.0113x slower > tear-off-arguments 3.5329+-0.0064 ? 3.5451+-0.0075 ? > temporal-structure 16.8838+-0.0810 ? 16.9399+-0.0761 ? > to-int32-boolean 22.2733+-0.1311 22.2541+-0.1531 > undefined-test 4.5688+-0.0326 4.5660+-0.0215 > weird-inlining-const-prop 2.2857+-0.0098 ? 2.2982+-0.0144 ? > > <arithmetic> 157.3890+-0.2841 ^ 144.9922+-0.7820 ^ definitely 1.0855x faster > <geometric> * 14.5568+-0.0178 ? 14.5696+-0.0132 ? might be 1.0009x slower > <harmonic> 5.3446+-0.0213 ? 5.3543+-0.0105 ? might be 1.0018x slower > > TipOfTree OneShotClosure > All benchmarks: > <arithmetic> 223.7458+-0.3086 ^ 215.6978+-0.6267 ^ definitely 1.0373x faster > <geometric> 20.8508+-0.0224 ! 20.8962+-0.0174 ! definitely 1.0022x slower > <harmonic> 4.7888+-0.0140 ? 4.8146+-0.0156 ? might be 1.0054x slower > > TipOfTree OneShotClosure > Geomean of preferred means: > <scaled-result> 48.6915+-0.0572 ! 48.9108+-0.0710 ! definitely 1.0045x slower
Filip Pizlo
Comment 15 2013-11-25 19:14:37 PST
(In reply to comment #14) > (In reply to comment #13) > > OK - yeah, this totally works after I ensure that SymbolTables are cloned (https://bugs.webkit.org/show_bug.cgi?id=124824). Here's the performance, note the speed-ups in asm.js workloads. > > > > It's important to note that the primary purpose of this patch is *not* to have a speed-up. It's an enabler for constant closure variable inference. The fact that it's a speed-up already is pretty cool though. > > > > > > Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). > > > > VMs tested: > > "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740) > > "OneShotClosure" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159740) > > > > Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. > > 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 OneShotClosure > > SunSpider: > > 3d-cube 7.5713+-0.0586 ! 7.7229+-0.0608 ! definitely 1.0200x slower > > 3d-morph 8.8579+-0.0741 8.7897+-0.0720 > > 3d-raytrace 8.7592+-0.1628 ? 8.8390+-0.1069 ? > > access-binary-trees 1.9928+-0.0127 ? 2.0025+-0.0112 ? > > access-fannkuch 7.9314+-0.1398 ? 7.9500+-0.0648 ? > > access-nbody 4.2195+-0.0074 ? 4.2248+-0.0070 ? > > access-nsieve 4.9850+-0.0291 ? 5.0058+-0.0209 ? > > bitops-3bit-bits-in-byte 1.8067+-0.0077 1.8052+-0.0014 > > bitops-bits-in-byte 7.2157+-0.0761 ? 7.2684+-0.0352 ? > > bitops-bitwise-and 2.9373+-0.0199 2.9146+-0.0356 > > bitops-nsieve-bits 4.5981+-0.0107 ? 4.6156+-0.0200 ? > > controlflow-recursive 3.1256+-0.0104 ? 3.1492+-0.0180 ? > > crypto-aes 5.4101+-0.0269 ! 5.4799+-0.0161 ! definitely 1.0129x slower > > crypto-md5 3.1096+-0.0217 ? 3.1138+-0.0092 ? > > crypto-sha1 2.9519+-0.0153 ? 2.9634+-0.0166 ? > > date-format-tofte 11.1999+-0.1028 ? 11.3538+-0.1139 ? might be 1.0137x slower > > date-format-xparb 8.6572+-0.2649 8.5946+-0.1464 > > math-cordic 4.2146+-0.0130 4.2111+-0.0086 > > math-partial-sums 10.1713+-0.0669 10.1329+-0.1217 > > math-spectral-norm 2.7195+-0.0091 ? 2.7237+-0.0067 ? > > regexp-dna 12.8214+-0.0917 ? 12.9185+-0.0695 ? > > string-base64 5.4529+-0.0487 5.4474+-0.0299 > > string-fasta 10.1685+-0.1193 ? 10.1800+-0.0628 ? > > string-tagcloud 14.7793+-0.1383 ? 14.8674+-0.0696 ? > > string-unpack-code 29.8436+-0.1539 ! 31.4094+-0.6887 ! definitely 1.0525x slower > > string-validate-input 6.8875+-0.0531 ! 7.0241+-0.0715 ! definitely 1.0198x slower > > > > <arithmetic> * 7.3995+-0.0220 ! 7.4888+-0.0319 ! definitely 1.0121x slower > > <geometric> 5.9376+-0.0153 ! 5.9720+-0.0110 ! definitely 1.0058x slower > > <harmonic> 4.8557+-0.0094 ? 4.8719+-0.0069 ? might be 1.0033x slower > > The SunSpider regression is due to https://bugs.webkit.org/show_bug.cgi?id=124824, which I include in this measurement, and I think I have a fix. Nope, no fix. We will basically have to eat this slow-down. > > > > > TipOfTree OneShotClosure > > LongSpider: > > 3d-cube 2703.6911+-5.1639 ? 2705.2078+-5.7551 ? > > 3d-morph 1503.9913+-1.0547 ? 1504.3099+-0.5120 ? > > 3d-raytrace 1532.7155+-27.1282 ? 1536.9038+-37.7426 ? > > access-binary-trees 2214.8490+-28.9112 2210.5071+-9.0686 > > access-fannkuch 668.1636+-0.3095 667.0806+-2.8580 > > access-nbody 1496.0519+-0.7766 1495.8079+-1.0155 > > access-nsieve 1545.6492+-3.3063 1545.3567+-3.5099 > > bitops-3bit-bits-in-byte 122.0382+-1.5032 121.6812+-0.6140 > > bitops-bits-in-byte 638.6634+-2.4622 ? 639.7084+-1.8781 ? > > bitops-nsieve-bits 1059.5476+-20.6393 1046.5556+-0.4456 might be 1.0124x faster > > controlflow-recursive 1490.1838+-1.1999 ? 1491.2281+-1.1711 ? > > crypto-aes 1657.4204+-13.1218 1650.7580+-4.9355 > > crypto-md5 1189.5926+-16.0090 1183.4123+-1.0479 > > crypto-sha1 1620.0481+-4.2877 1615.9520+-5.1804 > > date-format-tofte 1176.7482+-6.5750 ? 1184.6930+-15.1147 ? > > date-format-xparb 1456.9124+-19.7117 ? 1468.2665+-14.4047 ? > > math-cordic 1735.8039+-2.4339 ? 1756.1163+-50.6096 ? might be 1.0117x slower > > math-partial-sums 1313.4159+-1.6790 1313.0176+-15.0448 > > math-spectral-norm 1826.9231+-1.4185 1826.1909+-0.5086 > > string-base64 504.5985+-2.0241 ? 505.1897+-1.7492 ? > > string-fasta 995.7686+-8.7513 ? 1002.5400+-6.4549 ? > > string-tagcloud 379.5819+-6.1538 379.4218+-2.5465 > > > > <arithmetic> 1310.5617+-2.1037 ? 1311.3593+-2.9540 ? might be 1.0006x slower > > <geometric> * 1116.9702+-1.8255 ? 1117.3612+-1.9354 ? might be 1.0004x slower > > <harmonic> 801.9628+-3.1782 801.5110+-1.6658 might be 1.0006x faster > > > > TipOfTree OneShotClosure > > V8Spider: > > crypto 79.8400+-0.7819 79.4116+-0.1977 > > deltablue 97.6271+-0.5112 ? 97.7724+-0.8289 ? > > earley-boyer 70.9846+-0.2851 ? 71.1164+-0.5930 ? > > raytrace 39.5626+-0.1295 ? 39.7617+-0.1278 ? > > regexp 98.5962+-0.2371 ! 100.6687+-0.0982 ! definitely 1.0210x slower > > richards 133.4647+-1.1364 ? 133.5138+-1.9033 ? > > splay 45.7088+-0.4910 45.5637+-0.4150 > > > > <arithmetic> 80.8263+-0.1189 ? 81.1155+-0.3498 ? might be 1.0036x slower > > <geometric> * 74.8500+-0.1056 ? 75.0742+-0.2586 ? might be 1.0030x slower > > <harmonic> 68.8617+-0.1375 ? 69.0266+-0.2115 ? might be 1.0024x slower > > > > TipOfTree OneShotClosure > > Octane and V8v7: > > encrypt 0.46539+-0.00056 0.46537+-0.00059 > > decrypt 8.61278+-0.10320 8.56494+-0.01297 > > deltablue x2 0.56811+-0.00829 0.56580+-0.00723 > > earley 0.86179+-0.00996 0.85311+-0.00737 might be 1.0102x faster > > boyer 12.28732+-0.03527 ? 12.36198+-0.14571 ? > > raytrace x2 4.25234+-0.03819 ? 4.28571+-0.05769 ? > > regexp x2 33.38518+-0.14569 ? 34.17660+-0.77651 ? might be 1.0237x slower > > richards x2 0.43053+-0.00741 0.42879+-0.00598 > > splay x2 0.62881+-0.00292 ! 0.67835+-0.03390 ! definitely 1.0788x slower > > navier-stokes x2 10.93098+-0.01050 ^ 10.74471+-0.00447 ^ definitely 1.0173x faster > > closure 0.41954+-0.00045 ! 0.42786+-0.00080 ! definitely 1.0198x slower > > jquery 6.01172+-0.02131 ! 6.14123+-0.01382 ! definitely 1.0215x slower > > gbemu x2 71.46555+-1.23004 ? 71.81298+-0.78129 ? > > mandreel x2 144.69750+-0.21674 ? 145.00739+-0.22634 ? > > pdfjs x2 100.70562+-0.32917 ! 101.73275+-0.42501 ! definitely 1.0102x slower > > box2d x2 35.21347+-0.19488 ? 35.63574+-0.47073 ? might be 1.0120x slower > > > > V8v7: > > <arithmetic> 7.66370+-0.01653 ? 7.75033+-0.09537 ? might be 1.0113x slower > > <geometric> * 2.50570+-0.00760 ? 2.52927+-0.01950 ? might be 1.0094x slower > > <harmonic> 1.02763+-0.00543 ? 1.03971+-0.01165 ? might be 1.0118x slower > > > > Octane including V8v7: > > <arithmetic> 32.04672+-0.10358 ! 32.26739+-0.05829 ! definitely 1.0069x slower > > <geometric> * 6.96319+-0.01762 ! 7.03006+-0.02895 ! definitely 1.0096x slower > > <harmonic> 1.42556+-0.00639 ? 1.44389+-0.01382 ? might be 1.0129x slower > > I think this was a fluke; here's a rerun. Note that splay just has its usual wonkiness. > > TipOfTree OneShotClosure > Octane and V8v7: > encrypt 0.46813+-0.00603 0.46747+-0.00519 > decrypt 8.62154+-0.10678 8.56783+-0.01162 > deltablue x2 0.57090+-0.00960 0.56268+-0.00253 might be 1.0146x faster > earley 0.85546+-0.00489 ? 0.85839+-0.00646 ? > boyer 12.37733+-0.09864 ? 12.41143+-0.23295 ? > raytrace x2 4.31331+-0.05178 ? 4.32453+-0.08173 ? > regexp x2 33.42525+-0.20828 ! 33.84932+-0.13013 ! definitely 1.0127x slower > richards x2 0.43041+-0.00687 ? 0.43278+-0.01188 ? > splay x2 0.63683+-0.00784 ? 0.66795+-0.02938 ? might be 1.0489x slower > navier-stokes x2 10.98589+-0.11800 10.80932+-0.14694 might be 1.0163x faster > closure 0.41934+-0.00040 ! 0.43101+-0.00539 ! definitely 1.0278x slower > jquery 6.07970+-0.09544 ? 6.16716+-0.08235 ? might be 1.0144x slower > gbemu x2 72.55122+-0.58218 71.87743+-1.01660 > mandreel x2 145.23576+-1.53236 144.96594+-0.35981 > pdfjs x2 101.33431+-1.30216 ? 101.72435+-0.35442 ? > box2d x2 35.30093+-0.15306 35.10096+-0.17036 > > V8v7: > <arithmetic> 7.69048+-0.02836 ? 7.72489+-0.02516 ? might be 1.0045x slower > <geometric> * 2.51853+-0.00976 ? 2.52966+-0.02085 ? might be 1.0044x slower > <harmonic> 1.03214+-0.00796 ? 1.03964+-0.01437 ? might be 1.0073x slower > > Octane including V8v7: > <arithmetic> 32.24581+-0.12979 32.21284+-0.10055 might be 1.0010x faster > <geometric> * 7.00271+-0.01513 ? 7.02597+-0.03955 ? might be 1.0033x slower > <harmonic> 1.43101+-0.00942 ? 1.44512+-0.01789 ? might be 1.0099x slower > > > > > > TipOfTree OneShotClosure > > Kraken: > > ai-astar 493.505+-0.500 ? 493.921+-0.421 ? > > audio-beat-detection 237.374+-1.829 ? 237.832+-0.990 ? > > audio-dft 289.340+-0.735 ? 289.343+-0.916 ? > > audio-fft 143.141+-0.263 142.956+-0.148 > > audio-oscillator 243.913+-0.711 ? 246.344+-3.731 ? > > imaging-darkroom 291.706+-8.118 290.361+-6.557 > > imaging-desaturate 158.351+-0.092 ? 159.246+-2.047 ? > > imaging-gaussian-blur 362.795+-0.399 362.731+-0.194 > > json-parse-financial 80.461+-0.327 80.377+-0.252 > > json-stringify-tinderbox 106.854+-2.260 ? 109.055+-0.863 ? might be 1.0206x slower > > stanford-crypto-aes 90.845+-0.555 90.000+-0.871 > > stanford-crypto-ccm 101.297+-1.320 99.726+-1.234 might be 1.0158x faster > > stanford-crypto-pbkdf2 261.004+-1.818 ? 261.205+-1.283 ? > > stanford-crypto-sha256-iterative 114.809+-0.376 ! 115.932+-0.472 ! definitely 1.0098x slower > > > > <arithmetic> * 212.528+-0.764 ? 212.788+-0.586 ? might be 1.0012x slower > > <geometric> 182.922+-0.652 ? 183.148+-0.468 ? might be 1.0012x slower > > <harmonic> 158.187+-0.643 ? 158.307+-0.414 ? might be 1.0008x slower > > > > TipOfTree OneShotClosure > > JSRegress: > > adapt-to-double-divide 22.7615+-0.1060 22.6735+-0.1096 > > aliased-arguments-getbyval 0.9530+-0.0029 ! 0.9620+-0.0050 ! definitely 1.0095x slower > > allocate-big-object 2.6239+-0.0298 ? 2.6641+-0.0943 ? might be 1.0153x slower > > arity-mismatch-inlining 0.8865+-0.0039 ! 0.8956+-0.0026 ! definitely 1.0102x slower > > array-access-polymorphic-structure 9.7423+-0.1081 ? 9.8772+-0.0965 ? might be 1.0138x slower > > array-nonarray-polymorhpic-access 56.4944+-0.2788 56.3676+-0.3042 > > array-with-double-add 5.7447+-0.0591 ? 5.7655+-0.0545 ? > > array-with-double-increment 4.2768+-0.0422 ? 4.3302+-0.0150 ? might be 1.0125x slower > > array-with-double-mul-add 6.7851+-0.0756 ? 6.8312+-0.0309 ? > > array-with-double-sum 8.0033+-0.0466 7.9885+-0.0655 > > array-with-int32-add-sub 10.4787+-0.1581 10.4335+-0.1180 > > array-with-int32-or-double-sum 8.0835+-0.1019 8.0323+-0.0831 > > ArrayBuffer-DataView-alloc-large-long-lived > > 122.3827+-1.0212 ? 122.5661+-1.2554 ? > > ArrayBuffer-DataView-alloc-long-lived 34.1578+-0.7951 33.6167+-0.1725 might be 1.0161x faster > > ArrayBuffer-Int32Array-byteOffset 7.0278+-0.0816 6.9931+-0.0103 > > ArrayBuffer-Int8Array-alloc-huge-long-lived > > 215.5672+-2.2279 ? 215.9768+-3.3175 ? > > ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented > > 166.4188+-0.9604 ! 169.3677+-1.6704 ! definitely 1.0177x slower > > ArrayBuffer-Int8Array-alloc-large-long-lived > > 122.1009+-2.9445 ? 123.7447+-1.8271 ? might be 1.0135x slower > > ArrayBuffer-Int8Array-alloc-long-lived-buffer > > 49.7888+-0.2816 ! 54.1200+-0.5532 ! definitely 1.0870x slower > > ArrayBuffer-Int8Array-alloc-long-lived 32.6590+-0.5204 ? 33.1573+-0.2388 ? might be 1.0153x slower > > ArrayBuffer-Int8Array-alloc 29.7232+-0.2568 ? 29.7573+-0.1870 ? > > asmjs_bool_bug 10.1716+-0.1390 10.0934+-0.0953 > > basic-set 21.6522+-0.1298 ? 21.7772+-0.1838 ? > > big-int-mul 5.6363+-0.0267 ? 5.6424+-0.0547 ? > > boolean-test 4.3988+-0.0448 ? 4.4545+-0.0636 ? might be 1.0127x slower > > branch-fold 4.9467+-0.0161 4.9430+-0.0556 > > cast-int-to-double 12.3768+-0.1395 ? 12.5320+-0.1578 ? might be 1.0125x slower > > cell-argument 15.5064+-0.1248 ? 15.5950+-0.1253 ? > > cfg-simplify 3.9435+-0.0074 ? 3.9482+-0.0077 ? > > cmpeq-obj-to-obj-other 12.6204+-0.2944 ? 12.6567+-0.5886 ? > > constant-test 8.7994+-0.1028 ? 8.8936+-0.0994 ? might be 1.0107x slower > > DataView-custom-properties 129.5010+-0.9075 128.8144+-0.5721 > > delay-tear-off-arguments-strictmode 3.5068+-0.0095 ? 3.5123+-0.0048 ? > > destructuring-arguments-length 174.5923+-2.5584 173.6766+-1.7415 > > destructuring-arguments 8.7296+-0.1162 ? 8.7482+-0.1089 ? > > destructuring-swap 8.5469+-0.0678 ? 8.6567+-0.0734 ? might be 1.0128x slower > > direct-arguments-getbyval 0.8412+-0.0176 ? 0.8493+-0.0396 ? > > double-pollution-getbyval 11.0731+-0.1106 ? 11.1012+-0.0922 ? > > double-pollution-putbyoffset 6.5065+-0.0486 6.4815+-0.0612 > > empty-string-plus-int 10.8124+-0.0329 ! 10.9680+-0.0330 ! definitely 1.0144x slower > > emscripten-cube2hash 51.8496+-0.2716 ! 55.0846+-0.6865 ! definitely 1.0624x slower > > emscripten-memops 9249.1299+-31.3622 ^ 7773.6842+-1.8794 ^ definitely 1.1898x faster > > Sweet. > > > external-arguments-getbyval 2.0032+-0.0091 ? 2.0149+-0.0104 ? > > external-arguments-putbyval 3.0466+-0.0545 ? 3.0606+-0.0235 ? > > Float32Array-matrix-mult 6.3671+-0.0338 6.3595+-0.0328 > > Float32Array-to-Float64Array-set 94.6681+-0.5339 ? 94.9547+-0.6135 ? > > Float64Array-alloc-long-lived 101.1448+-0.4746 ? 102.1419+-1.0407 ? > > Float64Array-to-Int16Array-set 117.5357+-0.6822 ? 117.8154+-1.5060 ? > > fold-double-to-int 25.9809+-0.5501 ! 36.6639+-0.1387 ! definitely 1.4112x slower > > for-of-iterate-array-entries 8.5360+-0.0613 ? 8.5742+-0.0804 ? > > for-of-iterate-array-keys 3.4720+-0.0466 ? 3.4908+-0.0385 ? > > for-of-iterate-array-values 2.9759+-0.0244 ? 2.9765+-0.0484 ? > > function-dot-apply 3.1594+-0.0103 ? 3.1799+-0.0495 ? > > function-test 5.0785+-0.0944 5.0389+-0.0514 > > get-by-id-chain-from-try-block 7.5553+-0.0301 ? 7.5619+-0.0848 ? > > get-by-id-proto-or-self 26.0687+-0.2480 ? 26.1275+-0.1581 ? > > get-by-id-self-or-proto 23.6326+-0.6337 ? 23.6905+-0.7016 ? > > get_callee_monomorphic 4.7673+-0.1198 4.7303+-0.1285 > > get_callee_polymorphic 4.4747+-0.0076 ? 4.4974+-0.0358 ? > > global-var-const-infer-fire-from-opt 0.9516+-0.0091 ? 0.9574+-0.0070 ? > > global-var-const-infer 0.7522+-0.0024 ? 0.7572+-0.0037 ? > > HashMap-put-get-iterate-keys 44.7619+-0.9343 44.1545+-0.1804 might be 1.0138x faster > > HashMap-put-get-iterate 62.7998+-0.5412 ^ 61.9374+-0.2661 ^ definitely 1.0139x faster > > HashMap-string-put-get-iterate 55.5746+-0.8860 ? 55.7375+-0.2901 ? > > imul-double-only 17.7288+-0.0662 ? 17.7837+-0.1176 ? > > imul-int-only 15.0396+-0.2188 ? 15.0510+-0.2166 ? > > imul-mixed 22.1761+-0.0582 ? 22.2026+-0.1319 ? > > in-four-cases 25.9134+-0.0794 ? 26.0685+-0.2276 ? > > in-one-case-false 12.0300+-0.0305 ? 12.0662+-0.1001 ? > > in-one-case-true 12.0038+-0.0967 ? 12.0594+-0.1830 ? > > in-two-cases 12.8641+-0.1102 ? 12.8798+-0.1216 ? > > indexed-properties-in-objects 4.7329+-0.0367 4.7075+-0.0497 > > infer-one-time-closure-ten-vars 96.2601+-0.1294 ^ 92.3286+-0.1121 ^ definitely 1.0426x faster > > infer-one-time-closure-two-vars 28.7906+-0.1296 ? 28.7945+-0.1244 ? > > infer-one-time-closure 28.7024+-0.1026 ? 28.7948+-0.1078 ? > > Yeah, notice how this isn't necessarily a speed-up even for heavy closure variable use. > > > infer-one-time-deep-closure 84.8430+-0.1152 ^ 56.9038+-0.1035 ^ definitely 1.4910x faster > > That's what I'm talking about! > > > inline-arguments-access 1.5147+-0.0061 ? 1.5207+-0.0047 ? > > inline-arguments-local-escape 22.4906+-0.2077 ? 22.8959+-0.2455 ? might be 1.0180x slower > > inline-get-scoped-var 6.9669+-0.1486 ? 7.0623+-0.0708 ? might be 1.0137x slower > > inlined-put-by-id-transition 15.4374+-0.2340 15.2985+-0.1957 > > int-or-other-abs-then-get-by-val 9.4216+-0.0490 9.3885+-0.1483 > > int-or-other-abs-zero-then-get-by-val 41.2471+-0.4491 40.3351+-0.5973 might be 1.0226x faster > > int-or-other-add-then-get-by-val 9.7139+-0.0982 9.6545+-0.0539 > > int-or-other-add 10.9760+-0.1059 10.9149+-0.0667 > > int-or-other-div-then-get-by-val 6.2450+-0.0972 ? 6.3073+-0.1162 ? > > int-or-other-max-then-get-by-val 8.7412+-0.2089 ? 8.8167+-0.1677 ? > > int-or-other-min-then-get-by-val 7.1146+-0.0236 7.1058+-0.0689 > > int-or-other-mod-then-get-by-val 6.1356+-0.0197 6.1326+-0.0697 > > int-or-other-mul-then-get-by-val 6.4273+-0.1159 6.4248+-0.0679 > > int-or-other-neg-then-get-by-val 7.8420+-0.0891 7.8318+-0.0622 > > int-or-other-neg-zero-then-get-by-val 41.6566+-0.5574 ^ 39.7040+-0.2088 ^ definitely 1.0492x faster > > int-or-other-sub-then-get-by-val 10.2182+-0.0837 10.1040+-0.0709 might be 1.0113x faster > > int-or-other-sub 8.0451+-0.0721 ? 8.0858+-0.0534 ? > > int-overflow-local 6.6569+-0.1131 ? 6.7200+-0.0302 ? > > Int16Array-alloc-long-lived 66.9303+-0.9628 ? 67.3642+-1.2042 ? > > Int16Array-bubble-sort-with-byteLength 48.9026+-0.0874 ? 49.0868+-0.1505 ? > > Int16Array-bubble-sort 48.4094+-0.1188 ? 48.5192+-0.1208 ? > > Int16Array-load-int-mul 2.0529+-0.0073 ? 2.0558+-0.0041 ? > > Int16Array-to-Int32Array-set 89.2501+-1.0251 ! 93.2549+-1.0906 ! definitely 1.0449x slower > > Int32Array-alloc-huge-long-lived 703.8271+-2.3584 ? 714.7537+-21.6199 ? might be 1.0155x slower > > Int32Array-alloc-huge 810.9773+-6.4076 802.8170+-8.8403 might be 1.0102x faster > > Int32Array-alloc-large-long-lived 972.0261+-10.1262 ? 972.8335+-7.1647 ? > > Int32Array-alloc-large 44.5977+-0.9395 ? 45.8318+-0.6680 ? might be 1.0277x slower > > Int32Array-alloc-long-lived 79.5661+-0.4773 79.2518+-0.6356 > > Int32Array-alloc 4.4897+-0.0379 ? 4.4932+-0.0105 ? > > Int32Array-Int8Array-view-alloc 14.8669+-0.1029 ? 15.1068+-0.1423 ? might be 1.0161x slower > > int52-spill 12.2416+-0.1965 ? 12.5038+-0.2038 ? might be 1.0214x slower > > Int8Array-alloc-long-lived 66.4291+-0.6228 ? 66.8872+-0.8774 ? > > Int8Array-load-with-byteLength 5.0474+-0.0031 5.0137+-0.0678 > > Int8Array-load 5.0962+-0.0615 5.0521+-0.0458 > > integer-divide 15.3937+-0.0949 ? 15.4865+-0.1624 ? > > integer-modulo 2.1891+-0.2145 2.1070+-0.0099 might be 1.0390x faster > > large-int-captured 9.1935+-0.1804 9.1581+-0.0859 > > large-int-neg 25.9562+-0.1702 ? 26.0513+-0.1309 ? > > large-int 23.5679+-0.2996 23.3032+-0.1711 might be 1.0114x faster > > lots-of-fields 10.9445+-0.0625 ? 11.0014+-0.0936 ? > > make-indexed-storage 4.2509+-0.0167 4.2338+-0.0098 > > make-rope-cse 5.9967+-0.0612 ? 6.0595+-0.1166 ? might be 1.0105x slower > > marsaglia-larger-ints 119.9557+-1.4569 118.9668+-0.0924 > > marsaglia-osr-entry 52.6856+-0.0993 52.6714+-0.0953 > > marsaglia 519.7085+-0.2545 519.6917+-0.2704 > > method-on-number 31.4656+-0.6985 30.9481+-0.3884 might be 1.0167x faster > > negative-zero-divide 0.3982+-0.0026 ? 0.4018+-0.0020 ? > > negative-zero-modulo 0.3950+-0.0273 0.3844+-0.0023 might be 1.0278x faster > > negative-zero-negate 0.3662+-0.0023 ? 0.3678+-0.0022 ? > > nested-function-parsing-random 380.4197+-2.1140 ! 389.9795+-0.6575 ! definitely 1.0251x slower > > nested-function-parsing 48.1334+-0.3215 ! 55.1116+-0.1179 ! definitely 1.1450x slower > > new-array-buffer-dead 3.7521+-0.0281 ? 3.7751+-0.0695 ? > > new-array-buffer-push 10.6194+-0.1366 10.5319+-0.1753 > > new-array-dead 28.5981+-0.1371 28.5362+-0.0919 > > new-array-push 6.8473+-0.0654 ? 6.9198+-0.1337 ? might be 1.0106x slower > > number-test 4.3251+-0.0381 ? 4.3484+-0.0068 ? > > object-closure-call 13.2772+-0.0526 13.1896+-0.0856 > > object-test 4.7714+-0.0357 ? 4.7885+-0.0357 ? > > poly-stricteq 79.8627+-0.8227 79.8276+-0.3474 > > polymorphic-structure 21.1588+-0.1153 ? 21.2311+-0.1305 ? > > polyvariant-monomorphic-get-by-id 12.0118+-0.1360 11.9553+-0.1296 > > put-by-id 19.5739+-0.4032 19.4899+-0.2858 > > put-by-val-large-index-blank-indexing-type > > 11.2603+-0.2421 11.0281+-0.1301 might be 1.0211x faster > > rare-osr-exit-on-local 20.2075+-0.0892 ? 20.2468+-0.1238 ? > > register-pressure-from-osr 32.3813+-0.3933 32.2131+-0.1101 > > simple-activation-demo 35.0721+-0.0691 35.0336+-0.0793 > > slow-array-profile-convergence 4.0309+-0.0406 ? 4.1446+-0.1861 ? might be 1.0282x slower > > slow-convergence 3.4580+-0.0417 3.4332+-0.0119 > > sparse-conditional 1.3538+-0.0179 1.3457+-0.0045 > > splice-to-remove 77.4692+-0.2402 ^ 77.0371+-0.1217 ^ definitely 1.0056x faster > > stepanov_container 11645.6466+-33.1074 ^ 10839.5263+-145.1165 ^ definitely 1.0744x faster > > Awesome. > > > string-concat-object 2.9939+-0.0228 2.9797+-0.0106 > > string-concat-pair-object 2.9107+-0.0104 ? 2.9234+-0.0121 ? > > string-concat-pair-simple 16.9617+-0.3941 16.8659+-0.3276 > > string-concat-simple 17.4087+-0.4532 17.0738+-0.3152 might be 1.0196x faster > > string-cons-repeat 10.5340+-0.0251 10.5234+-0.0415 > > string-cons-tower 11.0584+-0.0273 ^ 10.9979+-0.0181 ^ definitely 1.0055x faster > > string-equality 43.2507+-0.1243 ? 43.4960+-0.3866 ? > > string-get-by-val-big-char 13.3955+-0.1778 ? 13.5055+-0.0798 ? > > string-get-by-val-out-of-bounds-insane 5.7509+-0.1285 ? 5.8274+-0.1487 ? might be 1.0133x slower > > string-get-by-val-out-of-bounds 5.2910+-0.0514 ? 5.2956+-0.0568 ? > > string-get-by-val 4.9002+-0.0261 4.8793+-0.0081 > > string-hash 2.7575+-0.0205 2.7456+-0.0082 > > string-long-ident-equality 38.2377+-0.3184 38.1741+-0.0897 > > string-repeat-arith 48.7239+-0.1453 ? 48.8014+-0.2497 ? > > string-sub 98.3621+-0.4328 97.6805+-0.9969 > > string-test 4.3132+-0.0074 4.2936+-0.0349 > > string-var-equality 87.5703+-1.3191 ? 87.9372+-0.7991 ? > > structure-hoist-over-transitions 3.3506+-0.0088 ? 3.3694+-0.0100 ? > > switch-char-constant 3.4672+-0.0063 3.4615+-0.0065 > > switch-char 8.1233+-0.0841 8.0630+-0.1177 > > switch-constant 9.2469+-0.1221 9.2298+-0.1202 > > switch-string-basic-big-var 20.1557+-0.0925 20.1500+-0.1726 > > switch-string-basic-big 21.4802+-0.1505 ? 22.7984+-2.2999 ? might be 1.0614x slower > > switch-string-basic-var 20.1364+-0.1254 ? 20.2666+-0.1744 ? > > switch-string-basic 22.6436+-0.7883 21.3086+-0.7920 might be 1.0627x faster > > switch-string-big-length-tower-var 29.8803+-0.1209 29.8740+-0.1178 > > switch-string-length-tower-var 21.7255+-0.1830 ? 21.7628+-0.1642 ? > > switch-string-length-tower 16.9520+-0.1037 16.9519+-0.0940 > > switch-string-short 16.8775+-0.1210 ? 16.9990+-0.1883 ? > > switch 15.5398+-0.1167 ? 15.5692+-0.1063 ? > > tear-off-arguments-simple 2.1959+-0.0056 ! 2.2208+-0.0141 ! definitely 1.0113x slower > > tear-off-arguments 3.5329+-0.0064 ? 3.5451+-0.0075 ? > > temporal-structure 16.8838+-0.0810 ? 16.9399+-0.0761 ? > > to-int32-boolean 22.2733+-0.1311 22.2541+-0.1531 > > undefined-test 4.5688+-0.0326 4.5660+-0.0215 > > weird-inlining-const-prop 2.2857+-0.0098 ? 2.2982+-0.0144 ? > > > > <arithmetic> 157.3890+-0.2841 ^ 144.9922+-0.7820 ^ definitely 1.0855x faster > > <geometric> * 14.5568+-0.0178 ? 14.5696+-0.0132 ? might be 1.0009x slower > > <harmonic> 5.3446+-0.0213 ? 5.3543+-0.0105 ? might be 1.0018x slower > > > > TipOfTree OneShotClosure > > All benchmarks: > > <arithmetic> 223.7458+-0.3086 ^ 215.6978+-0.6267 ^ definitely 1.0373x faster > > <geometric> 20.8508+-0.0224 ! 20.8962+-0.0174 ! definitely 1.0022x slower > > <harmonic> 4.7888+-0.0140 ? 4.8146+-0.0156 ? might be 1.0054x slower > > > > TipOfTree OneShotClosure > > Geomean of preferred means: > > <scaled-result> 48.6915+-0.0572 ! 48.9108+-0.0710 ! definitely 1.0045x slower
Filip Pizlo
Comment 16 2013-11-26 21:31:39 PST
Latest performance numbers. Note that this compares to before I started landing the other patches for constant closure variable inference. It appears that there is some fluke-ish splay slow-down. I need to get to the bottom of it. Splay is a super weird benchmark but I want to make sure that this isn't really a 10% slow-down. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). VMs tested: "Old" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159740) "TipOfTree" at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r159798) "OneShotScopes" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159798) Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. 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. Old TipOfTree OneShotScopes OneShotScopes v. Old SunSpider: 3d-cube 7.6429+-0.0778 ? 7.7349+-0.0866 7.6525+-0.0614 ? 3d-morph 8.7467+-0.0670 ? 8.7919+-0.0619 8.7757+-0.0986 ? 3d-raytrace 8.6707+-0.1177 ? 8.7416+-0.1506 8.6418+-0.0850 access-binary-trees 1.9925+-0.0100 ? 2.0017+-0.0167 1.9997+-0.0239 ? access-fannkuch 7.9340+-0.0707 7.9340+-0.0988 7.8967+-0.0646 access-nbody 4.2234+-0.0166 4.2077+-0.0483 ? 4.2188+-0.0112 access-nsieve 4.9953+-0.0357 4.9700+-0.1021 ? 4.9874+-0.0285 bitops-3bit-bits-in-byte 1.8034+-0.0063 1.8008+-0.0075 ? 1.8116+-0.0297 ? bitops-bits-in-byte 7.2471+-0.0796 7.2273+-0.0789 ? 7.3087+-0.0704 ? bitops-bitwise-and 2.9520+-0.0058 2.9202+-0.0387 ? 2.9348+-0.0221 bitops-nsieve-bits 4.5689+-0.0559 ? 4.5968+-0.0057 ? 4.6102+-0.0234 ? controlflow-recursive 3.1330+-0.0137 3.1231+-0.0117 3.1124+-0.0090 crypto-aes 5.4164+-0.0237 ? 5.4337+-0.0337 ? 5.4650+-0.1005 ? crypto-md5 3.1029+-0.0236 ? 3.1129+-0.0231 ? 3.1367+-0.0502 ? might be 1.0109x slower crypto-sha1 2.9553+-0.0202 2.9501+-0.0099 2.9471+-0.0099 date-format-tofte 11.3212+-0.1757 11.2624+-0.0861 11.2102+-0.0925 date-format-xparb 8.5273+-0.0887 ? 8.5918+-0.0851 8.4821+-0.0797 math-cordic 4.3069+-0.1583 4.2195+-0.0225 ? 4.2715+-0.1172 math-partial-sums 10.2396+-0.0931 10.1562+-0.1064 ? 10.2599+-0.1263 ? math-spectral-norm 2.7131+-0.0065 ? 2.7244+-0.0117 2.7102+-0.0044 regexp-dna 12.8272+-0.1012 ? 12.8799+-0.1137 ? 12.9606+-0.1034 ? might be 1.0104x slower string-base64 5.4440+-0.0215 ? 5.4707+-0.0225 ? 5.4735+-0.0413 ? string-fasta 10.1253+-0.0625 10.1111+-0.0511 ? 10.2266+-0.0823 ? might be 1.0100x slower string-tagcloud 14.7926+-0.0731 ? 14.8198+-0.0577 ? 14.9359+-0.1126 ? string-unpack-code 29.9724+-0.1649 ? 30.5502+-1.4932 ? 30.6543+-0.1574 ! definitely 1.0228x slower string-validate-input 6.9075+-0.0628 ? 6.9543+-0.0532 ? 6.9615+-0.0387 ? <arithmetic> * 7.4062+-0.0125 ? 7.4341+-0.0596 ? 7.4479+-0.0159 ! definitely 1.0056x slower <geometric> 5.9417+-0.0130 ? 5.9475+-0.0163 ? 5.9570+-0.0150 ? might be 1.0026x slower <harmonic> 4.8589+-0.0115 4.8581+-0.0078 ? 4.8661+-0.0160 ? might be 1.0015x slower Old TipOfTree OneShotScopes OneShotScopes v. Old LongSpider: 3d-cube 2702.9441+-6.1643 ? 2711.5522+-7.2566 2700.7355+-26.7662 3d-morph 1504.2267+-0.8938 1503.1766+-0.9398 ? 1508.8413+-10.8602 ? 3d-raytrace 1511.3610+-10.0171 ? 1526.3364+-22.1091 1512.2406+-6.2797 ? access-binary-trees 2211.9925+-12.4705 ? 2219.1066+-13.8848 2217.3317+-13.0023 ? access-fannkuch 665.1598+-4.0876 ? 671.2719+-6.9014 669.2977+-6.9534 ? access-nbody 1495.6662+-0.5586 ? 1496.1030+-0.5842 ? 1496.5355+-1.0274 ? access-nsieve 1547.7779+-2.9192 ? 1549.9184+-2.3975 ? 1551.1416+-4.1927 ? bitops-3bit-bits-in-byte 121.3743+-0.1134 ? 121.5216+-0.3096 ? 122.1667+-1.1791 ? bitops-bits-in-byte 636.9607+-2.2116 ? 639.1830+-6.9994 637.1001+-2.0261 ? bitops-nsieve-bits 1047.8432+-1.4111 1046.0159+-0.7252 ? 1052.0667+-12.5380 ? controlflow-recursive 1489.7916+-1.0986 ? 1490.0802+-1.2309 ? 1490.7498+-1.4574 ? crypto-aes 1643.9586+-2.8211 1643.8457+-2.6060 ? 1655.7148+-10.7792 ? crypto-md5 1182.3865+-1.6202 ^ 1165.4056+-9.2672 1162.5734+-1.3551 ^ definitely 1.0170x faster crypto-sha1 1612.9604+-1.2714 ! 1620.0677+-4.8286 1616.8101+-2.9231 ? date-format-tofte 1176.4254+-3.3025 ^ 1166.9065+-5.5746 1163.8324+-6.1375 ^ definitely 1.0108x faster date-format-xparb 1443.5831+-15.5707 ? 1468.1521+-23.6796 1455.2937+-13.6736 ? math-cordic 1733.0417+-2.7068 ? 1759.2292+-46.0440 1745.5950+-19.7751 ? math-partial-sums 1311.4323+-1.5024 ? 1313.7319+-12.4528 1308.6268+-0.4043 ^ definitely 1.0021x faster math-spectral-norm 1825.9787+-0.6112 ? 1827.5367+-2.1998 1826.5670+-0.9955 ? string-base64 504.6240+-1.8264 ? 506.0432+-1.6740 504.8203+-2.3815 ? string-fasta 991.7010+-2.3756 ? 993.3750+-3.6096 ! 1004.8386+-5.4577 ! definitely 1.0132x slower string-tagcloud 376.5584+-0.8667 ? 377.5134+-1.3408 ! 380.9191+-0.6571 ! definitely 1.0116x slower <arithmetic> 1306.2613+-0.6823 ! 1309.8215+-2.8163 1308.3545+-2.0243 ? might be 1.0016x slower <geometric> * 1112.8765+-0.4888 ! 1115.4928+-1.9989 1115.1783+-1.0576 ! definitely 1.0021x slower <harmonic> 798.5136+-0.4150 ! 800.1104+-1.0294 ? 801.5840+-2.3625 ! definitely 1.0038x slower Old TipOfTree OneShotScopes OneShotScopes v. Old V8Spider: crypto 79.4023+-0.1660 79.3733+-0.1907 ? 79.4308+-0.2035 ? deltablue 99.2035+-1.5004 98.5589+-1.3653 97.4762+-0.7915 might be 1.0177x faster earley-boyer 71.4969+-1.0564 70.9800+-0.2409 70.9136+-0.2359 raytrace 39.6294+-0.2426 39.6053+-0.1173 ? 39.9588+-0.8607 ? regexp 98.5873+-0.1388 ! 99.6280+-0.6821 ? 100.3485+-0.2251 ! definitely 1.0179x slower richards 135.0199+-1.7565 132.5246+-1.1494 132.0637+-1.1632 ^ definitely 1.0224x faster splay 45.7903+-0.4840 ? 45.8513+-0.2464 ? 45.8786+-0.2836 ? <arithmetic> 81.3042+-0.4650 80.9316+-0.2476 80.8672+-0.2830 might be 1.0054x faster <geometric> * 75.1974+-0.3302 74.9687+-0.1559 ? 74.9877+-0.2962 might be 1.0028x faster <harmonic> 69.1025+-0.2083 68.9777+-0.0918 ? 69.0827+-0.3837 might be 1.0003x faster Old TipOfTree OneShotScopes OneShotScopes v. Old Octane and V8v7: encrypt 0.46550+-0.00036 0.46548+-0.00054 0.46517+-0.00029 decrypt 8.55969+-0.01038 ? 8.56683+-0.01321 ? 8.56742+-0.01066 ? deltablue x2 0.56864+-0.00675 0.56559+-0.00252 ? 0.57070+-0.00708 ? earley 0.85916+-0.00643 0.85736+-0.01197 ? 0.85794+-0.00548 boyer 12.34354+-0.06386 12.28646+-0.05262 ? 12.34283+-0.13739 raytrace x2 4.28180+-0.04905 ? 4.29505+-0.05248 ? 4.29696+-0.04946 ? regexp x2 33.85890+-0.73708 33.56008+-0.17091 33.42819+-0.24213 might be 1.0129x faster richards x2 0.42871+-0.00696 ? 0.43328+-0.00567 0.43054+-0.00462 ? splay x2 0.63161+-0.00488 ? 0.63279+-0.00369 ! 0.70532+-0.03916 ! definitely 1.1167x slower navier-stokes x2 10.92640+-0.00397 ! 10.93708+-0.00445 ^ 10.77643+-0.14000 ^ definitely 1.0139x faster closure 0.41951+-0.00078 ! 0.42282+-0.00024 ! 0.42662+-0.00056 ! definitely 1.0169x slower jquery 6.03644+-0.01977 ! 6.13445+-0.01535 ? 6.15033+-0.01653 ! definitely 1.0189x slower gbemu x2 72.01372+-1.09548 ? 72.01968+-0.77798 71.70425+-0.60982 mandreel x2 144.95273+-1.47596 ^ 142.26755+-0.15157 ? 142.29771+-0.16735 ^ definitely 1.0187x faster pdfjs x2 100.95244+-0.39291 ? 101.30191+-0.65439 ? 101.94462+-0.48098 ! definitely 1.0098x slower box2d x2 35.14602+-0.23029 ? 35.16523+-0.21966 ? 35.36365+-0.25553 ? V8v7: <arithmetic> 7.72625+-0.09335 7.68899+-0.02297 7.66560+-0.02941 might be 1.0079x faster <geometric> * 2.51175+-0.01166 2.51168+-0.00715 ! 2.54090+-0.01578 ! definitely 1.0116x slower <harmonic> 1.02758+-0.00691 ? 1.02991+-0.00416 ! 1.05094+-0.00992 ! definitely 1.0227x slower Octane including V8v7: <arithmetic> 32.16176+-0.17628 31.96500+-0.08971 ? 31.99412+-0.08801 might be 1.0052x faster <geometric> * 6.97992+-0.02564 6.97848+-0.01577 ! 7.03562+-0.02770 ! definitely 1.0080x slower <harmonic> 1.42556+-0.00821 ? 1.42999+-0.00501 ! 1.45662+-0.01171 ! definitely 1.0218x slower Old TipOfTree OneShotScopes OneShotScopes v. Old Kraken: ai-astar 493.306+-0.637 ? 493.919+-0.480 ? 495.700+-4.602 ? audio-beat-detection 237.041+-0.352 ! 239.163+-1.417 ^ 236.928+-0.666 audio-dft 289.314+-0.876 ? 290.273+-1.059 ? 290.519+-1.662 ? audio-fft 143.060+-0.056 ? 143.177+-0.128 142.947+-0.118 audio-oscillator 243.694+-0.291 243.664+-0.495 ? 244.427+-0.813 ? imaging-darkroom 286.305+-0.566 285.323+-0.721 ? 285.893+-0.911 imaging-desaturate 158.340+-0.191 ? 158.355+-0.129 ? 158.391+-0.100 ? imaging-gaussian-blur 362.675+-0.282 ? 362.764+-0.200 ^ 362.439+-0.097 json-parse-financial 80.464+-0.330 80.088+-0.190 79.975+-0.416 json-stringify-tinderbox 106.040+-0.481 ^ 104.716+-0.364 104.055+-0.375 ^ definitely 1.0191x faster stanford-crypto-aes 90.646+-0.428 ? 90.901+-0.705 90.259+-1.094 stanford-crypto-ccm 97.475+-5.623 ? 102.489+-0.800 101.069+-1.295 ? might be 1.0369x slower stanford-crypto-pbkdf2 259.708+-2.297 ? 261.919+-0.948 ! 264.359+-0.785 ! definitely 1.0179x slower stanford-crypto-sha256-iterative 115.009+-0.351 ^ 114.203+-0.445 ! 115.325+-0.354 ? <arithmetic> * 211.648+-0.391 ! 212.211+-0.117 ? 212.306+-0.424 ? might be 1.0031x slower <geometric> 181.935+-0.748 ? 182.600+-0.200 182.442+-0.276 ? might be 1.0028x slower <harmonic> 157.098+-1.121 ? 157.859+-0.281 157.506+-0.300 ? might be 1.0026x slower Old TipOfTree OneShotScopes OneShotScopes v. Old JSRegress: adapt-to-double-divide 22.7257+-0.0895 22.6136+-0.0920 ? 22.7634+-0.0698 ? aliased-arguments-getbyval 0.9526+-0.0038 ? 0.9543+-0.0038 ? 0.9787+-0.0419 ? might be 1.0274x slower allocate-big-object 2.6204+-0.0196 ? 2.6252+-0.0133 2.6186+-0.0090 arity-mismatch-inlining 0.8875+-0.0050 ! 0.9219+-0.0116 0.9211+-0.0057 ! definitely 1.0378x slower array-access-polymorphic-structure 9.7281+-0.1223 ? 9.8445+-0.1136 9.8028+-0.1325 ? array-nonarray-polymorhpic-access 56.5145+-0.3991 56.4341+-0.2868 56.0872+-0.1666 array-with-double-add 5.7369+-0.0499 5.7077+-0.0790 ? 5.7193+-0.0739 array-with-double-increment 4.3080+-0.0046 4.3018+-0.0376 ? 4.3129+-0.0651 ? array-with-double-mul-add 6.8229+-0.0618 ? 6.8754+-0.0985 6.8314+-0.0570 ? array-with-double-sum 8.0028+-0.0244 7.9591+-0.1025 ? 8.0108+-0.0818 ? array-with-int32-add-sub 10.4794+-0.0859 10.3883+-0.1249 ? 10.4025+-0.0542 array-with-int32-or-double-sum 7.9677+-0.0835 ? 7.9813+-0.0791 ? 8.0249+-0.0822 ? ArrayBuffer-DataView-alloc-large-long-lived 122.4786+-1.2071 ^ 118.1644+-1.2970 ! 121.0588+-0.9514 might be 1.0117x faster ArrayBuffer-DataView-alloc-long-lived 34.0481+-0.6430 ^ 30.1993+-0.1737 ! 33.2249+-0.1918 might be 1.0248x faster ArrayBuffer-Int32Array-byteOffset 6.9976+-0.0508 ! 7.0788+-0.0289 7.0662+-0.0816 ? ArrayBuffer-Int8Array-alloc-huge-long-lived 215.9635+-2.6587 215.5442+-2.2114 214.8022+-1.5751 ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented 166.9396+-1.2183 166.8816+-1.1084 ? 168.5139+-0.8390 ? ArrayBuffer-Int8Array-alloc-large-long-lived 122.4456+-1.1983 ^ 118.7458+-0.9953 ! 122.6853+-1.6575 ? ArrayBuffer-Int8Array-alloc-long-lived-buffer 49.5794+-0.3468 ^ 48.1900+-0.1733 ! 52.0040+-0.7515 ! definitely 1.0489x slower ArrayBuffer-Int8Array-alloc-long-lived 31.7364+-0.6619 ^ 30.5531+-0.3521 ! 33.1606+-0.5062 ! definitely 1.0449x slower ArrayBuffer-Int8Array-alloc 29.6737+-0.4906 ^ 26.4587+-0.1135 ! 29.7156+-0.6909 ? asmjs_bool_bug 10.1082+-0.0716 ^ 9.5976+-0.1019 9.5260+-0.1008 ^ definitely 1.0611x faster basic-set 21.7480+-0.1139 21.7375+-0.0975 ? 21.9120+-0.3323 ? big-int-mul 5.6136+-0.0723 5.5490+-0.0871 5.5315+-0.0195 might be 1.0148x faster boolean-test 4.4445+-0.0291 ^ 4.3250+-0.0038 ? 4.3253+-0.0033 ^ definitely 1.0276x faster branch-fold 4.9455+-0.0231 ? 4.9584+-0.0070 4.9486+-0.0072 ? cast-int-to-double 12.4605+-0.1119 12.3287+-0.1025 ? 12.3656+-0.1075 cell-argument 15.5009+-0.0895 ? 15.8624+-0.3980 ? 16.1941+-0.3445 ! definitely 1.0447x slower cfg-simplify 3.9439+-0.0042 ? 3.9462+-0.0045 3.9398+-0.0065 cmpeq-obj-to-obj-other 12.7438+-0.4076 12.6627+-0.5157 ? 12.8914+-0.2834 ? might be 1.0116x slower constant-test 8.8003+-0.1194 8.7229+-0.0696 ? 8.8382+-0.1162 ? DataView-custom-properties 129.4751+-0.9957 ^ 125.3389+-1.1161 ! 128.5568+-0.6513 delay-tear-off-arguments-strictmode 3.5056+-0.0073 ? 3.5082+-0.0052 3.5051+-0.0107 destructuring-arguments-length 173.9497+-1.8347 172.9614+-0.8793 172.8830+-1.0589 destructuring-arguments 8.7638+-0.1124 8.6666+-0.0993 ? 8.7029+-0.1308 destructuring-swap 8.4776+-0.0839 ! 8.6473+-0.0706 8.5497+-0.0556 ? direct-arguments-getbyval 0.8331+-0.0068 ? 0.8349+-0.0039 ? 0.8504+-0.0403 ? might be 1.0208x slower double-pollution-getbyval 10.9816+-0.0852 ? 11.0496+-0.1334 11.0388+-0.0899 ? double-pollution-putbyoffset 7.0634+-1.1849 6.5518+-0.0238 6.5421+-0.0764 might be 1.0797x faster empty-string-plus-int 10.7705+-0.0687 ! 10.9906+-0.0719 10.9176+-0.0691 ! definitely 1.0137x slower emscripten-cube2hash 51.7529+-0.1688 ^ 50.3761+-0.1556 ! 53.3994+-0.1882 ! definitely 1.0318x slower emscripten-memops 9241.5998+-24.3324 ^ 8415.9461+-100.3685 ^ 7967.9235+-0.9581 ^ definitely 1.1599x faster external-arguments-getbyval 2.0277+-0.0496 ? 2.0287+-0.0071 ^ 1.9939+-0.0106 might be 1.0169x faster external-arguments-putbyval 3.0260+-0.0158 ! 3.0789+-0.0209 3.0403+-0.0736 ? Float32Array-matrix-mult 6.3742+-0.0265 ? 6.3954+-0.0516 6.3380+-0.0403 Float32Array-to-Float64Array-set 95.5900+-1.3124 93.4776+-1.2131 93.0669+-1.2003 ^ definitely 1.0271x faster Float64Array-alloc-long-lived 101.7195+-0.4713 ! 102.9951+-0.4698 102.6768+-0.4790 ! definitely 1.0094x slower Float64Array-to-Int16Array-set 116.7977+-0.4080 ? 117.7903+-1.7373 117.4194+-0.8096 ? fold-double-to-int 25.4244+-0.0808 ? 26.2557+-1.3825 ! 36.9191+-0.5710 ! definitely 1.4521x slower for-of-iterate-array-entries 8.5343+-0.0820 ! 8.7117+-0.0882 8.5917+-0.0896 ? for-of-iterate-array-keys 3.4848+-0.0422 ? 3.5006+-0.0440 3.4731+-0.0557 for-of-iterate-array-values 2.9303+-0.0544 2.9272+-0.0561 2.8961+-0.0426 might be 1.0118x faster function-dot-apply 3.1572+-0.0066 ^ 3.1175+-0.0067 3.1170+-0.0033 ^ definitely 1.0129x faster function-test 5.0445+-0.0522 ^ 4.7397+-0.0471 ? 4.7914+-0.0638 ^ definitely 1.0528x faster get-by-id-chain-from-try-block 7.5841+-0.0461 7.5458+-0.0890 ? 7.6146+-0.0427 ? get-by-id-proto-or-self 25.8165+-0.3174 ? 26.0789+-0.4336 25.7446+-0.2523 get-by-id-self-or-proto 23.8939+-0.6389 23.6096+-0.5771 ? 23.8852+-0.6667 get_callee_monomorphic 4.7313+-0.0312 ? 4.7525+-0.0882 ? 4.8258+-0.0662 ? might be 1.0200x slower get_callee_polymorphic 4.5488+-0.1510 4.5022+-0.0541 4.4790+-0.0212 might be 1.0156x faster global-var-const-infer-fire-from-opt 0.9585+-0.0198 0.9384+-0.0120 ? 0.9440+-0.0112 might be 1.0154x faster global-var-const-infer 0.7567+-0.0054 ? 0.7589+-0.0073 0.7576+-0.0034 ? HashMap-put-get-iterate-keys 44.3490+-0.3220 ^ 40.9785+-0.2022 40.8843+-0.2897 ^ definitely 1.0847x faster HashMap-put-get-iterate 62.1169+-0.1805 ^ 59.2521+-0.8694 58.2577+-0.4347 ^ definitely 1.0662x faster HashMap-string-put-get-iterate 55.4444+-0.4053 ^ 53.6606+-0.2768 ? 54.0986+-0.9593 might be 1.0249x faster imul-double-only 17.7961+-0.1378 ? 17.8532+-0.2330 17.7409+-0.1046 imul-int-only 15.1155+-0.2017 ^ 14.7959+-0.0886 14.7483+-0.1167 ^ definitely 1.0249x faster imul-mixed 22.2240+-0.1330 ^ 21.7682+-0.1190 ? 21.7792+-0.0902 ^ definitely 1.0204x faster in-four-cases 25.8726+-0.0787 ? 25.9098+-0.1333 25.8728+-0.1264 ? in-one-case-false 12.1598+-0.1894 12.0533+-0.1007 12.0465+-0.1068 in-one-case-true 12.0615+-0.0758 12.0469+-0.0384 ? 12.0760+-0.1005 ? in-two-cases 12.7887+-0.1215 ? 12.8221+-0.0343 ? 12.9327+-0.1564 ? might be 1.0113x slower indexed-properties-in-objects 4.7173+-0.0077 ^ 4.6621+-0.0059 ? 4.6655+-0.0079 ^ definitely 1.0111x faster infer-one-time-closure-ten-vars 96.1752+-0.0490 96.1356+-0.0818 ^ 92.3052+-0.1363 ^ definitely 1.0419x faster infer-one-time-closure-two-vars 28.8633+-0.2067 28.8269+-0.1277 28.7033+-0.1134 infer-one-time-closure 28.6927+-0.1423 ? 28.7305+-0.1182 ? 28.7655+-0.1012 ? infer-one-time-deep-closure 84.7760+-0.0995 84.7734+-0.0701 ^ 56.9828+-0.1049 ^ definitely 1.4877x faster inline-arguments-access 1.5112+-0.0060 ! 1.6005+-0.0024 1.5990+-0.0036 ! definitely 1.0581x slower inline-arguments-local-escape 22.5822+-0.2038 ? 22.5946+-0.2008 ! 23.2554+-0.2533 ! definitely 1.0298x slower inline-get-scoped-var 7.0010+-0.0938 ? 7.0392+-0.0997 6.9737+-0.0961 inlined-put-by-id-transition 15.3554+-0.2500 15.2380+-0.2994 ? 15.2754+-0.2777 int-or-other-abs-then-get-by-val 9.4348+-0.0840 9.4000+-0.0619 9.3886+-0.1273 int-or-other-abs-zero-then-get-by-val 41.2814+-0.4068 ? 41.4887+-0.4662 ^ 39.7391+-0.7443 ^ definitely 1.0388x faster int-or-other-add-then-get-by-val 9.6495+-0.1346 ! 10.5616+-0.1098 ? 10.5638+-0.1828 ! definitely 1.0948x slower int-or-other-add 10.9854+-0.1178 10.7754+-0.1279 ? 10.7993+-0.1369 might be 1.0172x faster int-or-other-div-then-get-by-val 6.3655+-0.1719 6.3555+-0.0694 6.3255+-0.0924 int-or-other-max-then-get-by-val 8.6900+-0.1800 8.6266+-0.1905 ? 8.8074+-0.1516 ? might be 1.0135x slower int-or-other-min-then-get-by-val 7.1276+-0.0713 ^ 6.9389+-0.0699 6.9028+-0.0801 ^ definitely 1.0326x faster int-or-other-mod-then-get-by-val 6.1434+-0.0188 ^ 6.0549+-0.0635 6.0109+-0.0857 ^ definitely 1.0220x faster int-or-other-mul-then-get-by-val 6.3666+-0.0966 ? 6.4833+-0.0727 ? 6.5180+-0.0238 ! definitely 1.0238x slower int-or-other-neg-then-get-by-val 7.8920+-0.0828 7.8704+-0.0410 7.7998+-0.0573 might be 1.0118x faster int-or-other-neg-zero-then-get-by-val 41.6154+-0.4787 ? 42.1977+-0.2249 ^ 39.3907+-0.1171 ^ definitely 1.0565x faster int-or-other-sub-then-get-by-val 10.1873+-0.0776 ! 10.4047+-0.0981 ? 10.4783+-0.0968 ! definitely 1.0286x slower int-or-other-sub 8.0950+-0.0559 ! 8.8055+-0.1030 ? 8.8536+-0.0749 ! definitely 1.0937x slower int-overflow-local 6.6696+-0.0838 ^ 6.3572+-0.1191 ? 6.4070+-0.0835 ^ definitely 1.0410x faster Int16Array-alloc-long-lived 66.6138+-0.3708 ? 67.6384+-0.9785 67.2379+-0.4730 ? Int16Array-bubble-sort-with-byteLength 48.9869+-0.1059 48.9629+-0.1464 ? 49.0251+-0.0595 ? Int16Array-bubble-sort 48.3926+-0.0829 48.2455+-0.1284 ? 48.3123+-0.1243 Int16Array-load-int-mul 2.0568+-0.0066 ^ 1.8211+-0.0504 1.7943+-0.0038 ^ definitely 1.1463x faster Int16Array-to-Int32Array-set 89.1831+-1.1492 ! 94.6521+-0.4113 ! 98.4094+-0.3167 ! definitely 1.1035x slower Int32Array-alloc-huge-long-lived 703.5624+-2.8086 ? 705.2882+-1.8814 ? 713.3379+-21.0777 ? might be 1.0139x slower Int32Array-alloc-huge 805.6759+-5.8380 ? 807.5993+-8.0514 ? 809.7266+-5.7096 ? Int32Array-alloc-large-long-lived 975.9036+-7.7689 ? 977.7218+-10.7472 970.3766+-8.2645 Int32Array-alloc-large 45.2848+-0.6660 44.6094+-1.2792 ? 45.3779+-0.9698 ? Int32Array-alloc-long-lived 79.5129+-0.4496 ? 79.7100+-0.3631 ? 79.9563+-0.6561 ? Int32Array-alloc 4.5026+-0.0249 ? 4.5134+-0.0105 ^ 4.4914+-0.0098 Int32Array-Int8Array-view-alloc 15.0529+-0.3161 15.0518+-0.1424 ? 15.1156+-0.0402 ? int52-spill 12.4335+-0.2295 12.1233+-0.1234 ? 12.2970+-0.1746 might be 1.0111x faster Int8Array-alloc-long-lived 66.4013+-0.5024 ? 66.8150+-0.5866 66.5644+-0.6873 ? Int8Array-load-with-byteLength 5.0331+-0.0414 5.0301+-0.0393 ? 5.0317+-0.0622 Int8Array-load 5.0585+-0.0541 5.0584+-0.0230 5.0124+-0.0608 integer-divide 15.5476+-0.1026 ^ 14.9318+-0.0777 14.9118+-0.1373 ^ definitely 1.0426x faster integer-modulo 2.1203+-0.0481 ^ 2.0057+-0.0083 ^ 1.9853+-0.0078 ^ definitely 1.0680x faster large-int-captured 9.0260+-0.1214 8.9889+-0.0732 ? 9.0443+-0.0738 ? large-int-neg 26.0099+-0.1740 25.9453+-0.1702 25.9156+-0.1262 large-int 23.2971+-0.1315 ? 23.6789+-0.3302 23.3635+-0.1112 ? lots-of-fields 10.9830+-0.1044 ? 11.0164+-0.0685 11.0085+-0.1223 ? make-indexed-storage 4.2331+-0.0159 4.2245+-0.0467 ? 4.2479+-0.0711 ? make-rope-cse 5.8917+-0.0898 ? 5.9000+-0.0606 ? 5.9625+-0.0565 ? might be 1.0120x slower marsaglia-larger-ints 119.2265+-0.1944 ^ 111.7609+-0.1136 ? 111.8256+-0.0873 ^ definitely 1.0662x faster marsaglia-osr-entry 52.6993+-0.0791 ^ 47.0393+-0.0964 46.9869+-0.1538 ^ definitely 1.1216x faster marsaglia 519.6862+-0.2153 ^ 463.8427+-0.6735 463.7744+-0.3777 ^ definitely 1.1206x faster method-on-number 31.1363+-0.5025 ^ 30.2059+-0.1903 ? 30.3454+-0.5648 might be 1.0261x faster negative-zero-divide 0.4010+-0.0032 ? 0.4021+-0.0032 0.3983+-0.0015 negative-zero-modulo 0.3805+-0.0016 ! 0.3875+-0.0032 ^ 0.3817+-0.0016 ? negative-zero-negate 0.3661+-0.0015 ? 0.3701+-0.0028 0.3675+-0.0031 ? nested-function-parsing-random 379.7133+-0.6519 ! 381.8263+-0.2913 ? 381.9647+-1.9010 ? nested-function-parsing 48.0222+-0.1864 47.9996+-0.1056 ? 48.1808+-0.1188 ? new-array-buffer-dead 3.7408+-0.0182 ? 3.7711+-0.0781 3.6922+-0.0060 ^ definitely 1.0132x faster new-array-buffer-push 10.5188+-0.1278 ? 10.6296+-0.1399 10.5700+-0.1306 ? new-array-dead 28.4782+-0.0910 28.4356+-0.0775 ? 28.5590+-0.0956 ? new-array-push 6.8428+-0.0815 ? 6.8534+-0.0357 6.8369+-0.0639 number-test 4.3410+-0.0054 ^ 4.2972+-0.0234 4.2397+-0.0521 ^ definitely 1.0239x faster object-closure-call 13.2346+-0.0803 ? 13.2749+-0.1165 13.2251+-0.0995 object-test 4.7376+-0.0143 ! 4.8232+-0.0318 ? 4.8252+-0.0314 ! definitely 1.0185x slower poly-stricteq 79.6500+-0.2561 ^ 76.1020+-0.2309 76.0534+-0.4052 ^ definitely 1.0473x faster polymorphic-structure 21.0715+-0.2003 ? 21.1001+-0.1439 ? 21.1517+-0.1012 ? polyvariant-monomorphic-get-by-id 11.9949+-0.0999 11.9738+-0.1203 ? 11.9880+-0.1139 put-by-id 19.4023+-0.3191 ? 19.4125+-0.3615 19.1589+-0.3385 might be 1.0127x faster put-by-val-large-index-blank-indexing-type 11.1725+-0.2933 10.8839+-0.1100 ? 10.9536+-0.1039 might be 1.0200x faster rare-osr-exit-on-local 20.3548+-0.1097 20.1542+-0.1235 ? 20.3036+-0.1314 register-pressure-from-osr 32.1283+-0.0647 ^ 31.1671+-0.1223 ? 31.2227+-0.0999 ^ definitely 1.0290x faster simple-activation-demo 35.1512+-0.4817 35.1071+-0.0761 35.0945+-0.1142 slow-array-profile-convergence 4.1009+-0.1764 4.0052+-0.0132 ? 4.0714+-0.0824 slow-convergence 3.4488+-0.0185 ! 4.1731+-0.0067 ? 4.2060+-0.0400 ! definitely 1.2196x slower sparse-conditional 1.3433+-0.0042 ? 1.3496+-0.0103 1.3418+-0.0062 splice-to-remove 77.4886+-0.2247 77.3046+-0.2675 ^ 76.9229+-0.0915 ^ definitely 1.0074x faster stepanov_container 11622.7882+-16.3677 ^ 11424.2082+-11.9749 ^ 10463.7838+-14.2992 ^ definitely 1.1108x faster string-concat-object 2.9877+-0.0073 2.9791+-0.0168 ? 2.9830+-0.0244 string-concat-pair-object 2.9205+-0.0217 ? 2.9238+-0.0121 2.9161+-0.0097 string-concat-pair-simple 17.4587+-0.4848 17.3369+-0.3596 17.0356+-0.3202 might be 1.0248x faster string-concat-simple 17.1787+-0.2110 16.9424+-0.2975 ? 17.2854+-0.2651 ? string-cons-repeat 10.5230+-0.0150 10.5207+-0.0438 10.5122+-0.0318 string-cons-tower 11.0572+-0.0397 11.0455+-0.0451 11.0407+-0.0264 string-equality 43.8700+-0.7302 42.8428+-0.5660 42.8354+-0.4816 might be 1.0242x faster string-get-by-val-big-char 13.4263+-0.1214 ^ 12.6373+-0.0512 ! 12.9927+-0.1724 ^ definitely 1.0334x faster string-get-by-val-out-of-bounds-insane 5.7879+-0.0823 5.6900+-0.1583 ? 5.8418+-0.1047 ? string-get-by-val-out-of-bounds 5.3088+-0.0078 5.2218+-0.0809 ? 5.2973+-0.0299 string-get-by-val 4.8999+-0.0153 4.8923+-0.0120 ? 4.9320+-0.0320 ? string-hash 2.7365+-0.0028 2.7327+-0.0028 2.7307+-0.0061 string-long-ident-equality 38.3370+-0.3282 37.7691+-0.7489 37.3919+-0.7239 might be 1.0253x faster string-repeat-arith 49.3698+-1.0934 ? 49.5396+-0.2863 49.5060+-0.2717 ? string-sub 98.0182+-0.2343 ? 98.0708+-0.3517 ! 99.8287+-1.3363 ! definitely 1.0185x slower string-test 4.3262+-0.0269 ^ 4.2615+-0.0284 4.2208+-0.0340 ^ definitely 1.0250x faster string-var-equality 87.7694+-1.6514 ^ 70.2531+-0.5880 70.1224+-0.2548 ^ definitely 1.2517x faster structure-hoist-over-transitions 3.3709+-0.0232 ? 3.3884+-0.0235 3.3615+-0.0147 switch-char-constant 3.4671+-0.0049 ? 3.4855+-0.0342 3.4566+-0.0067 switch-char 8.1430+-0.0921 8.1321+-0.0835 8.1090+-0.0664 switch-constant 9.2340+-0.1403 ? 9.2503+-0.1185 9.2052+-0.1305 switch-string-basic-big-var 20.2044+-0.1169 ? 20.2978+-0.1256 20.2715+-0.0885 ? switch-string-basic-big 21.5604+-0.1276 ^ 20.7662+-0.1459 20.2293+-0.7423 ^ definitely 1.0658x faster switch-string-basic-var 20.0876+-0.1137 20.0790+-0.1327 ? 20.0990+-0.1021 ? switch-string-basic 22.0928+-0.6631 21.6162+-0.8843 ? 21.7132+-0.3832 might be 1.0175x faster switch-string-big-length-tower-var 29.8250+-0.0725 ^ 28.9900+-0.1401 28.9090+-0.1033 ^ definitely 1.0317x faster switch-string-length-tower-var 21.7359+-0.1202 ^ 21.4739+-0.0875 21.4510+-0.1100 ^ definitely 1.0133x faster switch-string-length-tower 16.9442+-0.1626 ^ 16.5314+-0.1042 16.4202+-0.0948 ^ definitely 1.0319x faster switch-string-short 16.9385+-0.1232 ^ 16.3725+-0.0943 ? 16.3805+-0.0799 ^ definitely 1.0341x faster switch 15.5335+-0.1223 15.5068+-0.1237 15.4995+-0.1006 tear-off-arguments-simple 2.1966+-0.0051 2.1944+-0.0075 ! 2.2114+-0.0044 ! definitely 1.0067x slower tear-off-arguments 3.5334+-0.0050 ? 3.5365+-0.0053 ? 3.5374+-0.0160 ? temporal-structure 17.0125+-0.0834 ? 17.0650+-0.0754 16.9936+-0.0726 to-int32-boolean 22.3640+-0.3467 21.8883+-0.1560 ? 21.9613+-0.3572 might be 1.0183x faster undefined-test 4.5325+-0.0792 4.4743+-0.0070 4.4731+-0.0124 might be 1.0133x faster weird-inlining-const-prop 2.2815+-0.0063 ? 2.2843+-0.0104 ? 2.2869+-0.0161 ? <arithmetic> 157.2023+-0.1758 ^ 150.9652+-0.5254 ^ 143.3144+-0.1314 ^ definitely 1.0969x faster <geometric> * 14.5522+-0.0177 ^ 14.4242+-0.0093 ? 14.4432+-0.0131 ^ definitely 1.0075x faster <harmonic> 5.3338+-0.0087 ? 5.3395+-0.0072 5.3318+-0.0126 might be 1.0004x faster Old TipOfTree OneShotScopes OneShotScopes v. Old All benchmarks: <arithmetic> 223.2616+-0.1638 ^ 219.4409+-0.4109 ^ 214.2956+-0.1455 ^ definitely 1.0418x faster <geometric> 20.8430+-0.0133 ^ 20.7298+-0.0085 ! 20.7654+-0.0175 ^ definitely 1.0037x faster <harmonic> 4.7834+-0.0079 ? 4.7911+-0.0082 ! 4.8152+-0.0157 ! definitely 1.0067x slower Old TipOfTree OneShotScopes OneShotScopes v. Old Geomean of preferred means: <scaled-result> 48.6897+-0.0335 48.6626+-0.0677 ? 48.7581+-0.0530 ? might be 1.0014x slower
Filip Pizlo
Comment 17 2013-11-27 19:10:07 PST
Created attachment 217974 [details] the patch Rebased again.
Filip Pizlo
Comment 18 2013-11-27 21:50:52 PST
Created attachment 217980 [details] patch for landing? I simplified some stuff. This may be the winner.
Filip Pizlo
Comment 19 2013-11-27 21:52:14 PST
The performance data after we include http://trac.webkit.org/changeset/159826, but before the latest changes (https://bugs.webkit.org/attachment.cgi?id=217980): Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159826) "OneShotScope" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159826) Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. 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 OneShotScope SunSpider: 3d-cube 7.6723+-0.0596 7.6642+-0.0568 3d-morph 8.8630+-0.1551 8.8010+-0.0650 3d-raytrace 8.8080+-0.1540 8.7532+-0.1137 access-binary-trees 1.9921+-0.0163 1.9917+-0.0075 access-fannkuch 7.9782+-0.0607 7.8674+-0.0920 might be 1.0141x faster access-nbody 4.2280+-0.0041 ? 4.2384+-0.0255 ? access-nsieve 4.9871+-0.0326 ? 4.9961+-0.0481 ? bitops-3bit-bits-in-byte 1.8021+-0.0092 ? 1.8061+-0.0087 ? bitops-bits-in-byte 7.2708+-0.0964 ? 7.2770+-0.0228 ? bitops-bitwise-and 2.9500+-0.0214 ? 2.9533+-0.0080 ? bitops-nsieve-bits 4.6055+-0.0135 ? 4.6106+-0.0247 ? controlflow-recursive 3.1226+-0.0081 ? 3.1420+-0.0256 ? crypto-aes 5.4845+-0.1215 5.4821+-0.0932 crypto-md5 3.1267+-0.0339 ! 3.2847+-0.0992 ! definitely 1.0505x slower crypto-sha1 2.9638+-0.0115 ? 2.9830+-0.0611 ? date-format-tofte 11.1459+-0.1200 ? 11.2926+-0.1108 ? might be 1.0132x slower date-format-xparb 8.5976+-0.2139 ? 8.6431+-0.1014 ? math-cordic 4.2351+-0.0403 4.2184+-0.0212 math-partial-sums 10.2821+-0.0883 10.2799+-0.0858 math-spectral-norm 2.7360+-0.0189 ? 2.7406+-0.0223 ? regexp-dna 12.9440+-0.0887 ? 12.9746+-0.1066 ? string-base64 5.4131+-0.0258 ? 5.4253+-0.0533 ? string-fasta 10.1815+-0.1844 10.1636+-0.0666 string-tagcloud 14.9441+-0.1239 ? 15.0286+-0.1807 ? string-unpack-code 29.5361+-0.1344 ! 30.4605+-0.1397 ! definitely 1.0313x slower string-validate-input 7.0053+-0.1241 ? 7.0428+-0.0337 ? <arithmetic> * 7.4183+-0.0262 ! 7.4662+-0.0141 ! definitely 1.0065x slower <geometric> 5.9585+-0.0139 ? 5.9822+-0.0111 ? might be 1.0040x slower <harmonic> 4.8698+-0.0059 ! 4.8906+-0.0120 ! definitely 1.0043x slower TipOfTree OneShotScope LongSpider: 3d-cube 2722.1774+-36.7056 2692.5892+-6.7951 might be 1.0110x faster 3d-morph 1504.0106+-1.0848 ? 1514.3566+-18.1234 ? 3d-raytrace 1520.2257+-8.0148 ? 1526.9209+-21.0267 ? access-binary-trees 2187.5921+-6.1430 2186.1170+-9.2454 access-fannkuch 666.7151+-3.0796 ? 668.2647+-0.3535 ? access-nbody 1498.3422+-6.0844 1495.7914+-0.4823 access-nsieve 1548.5310+-2.5732 ? 1550.0748+-3.8999 ? bitops-3bit-bits-in-byte 121.4014+-0.1959 ? 122.0926+-1.5291 ? bitops-bits-in-byte 639.0350+-2.8329 636.1316+-1.6904 bitops-nsieve-bits 1045.9125+-0.4269 ? 1052.2952+-14.4386 ? controlflow-recursive 1491.7919+-0.8168 ? 1497.4082+-11.6217 ? crypto-aes 1643.9363+-2.1172 1642.5767+-1.7645 crypto-md5 1170.0728+-1.2400 ? 1170.2151+-0.6776 ? crypto-sha1 1634.0455+-6.2475 ? 1635.2346+-4.7547 ? date-format-tofte 1172.1312+-13.3355 ? 1192.9544+-25.6679 ? might be 1.0178x slower date-format-xparb 1474.0205+-23.8198 1469.4283+-22.2984 math-cordic 1733.0909+-2.4705 ? 1734.7287+-3.7503 ? math-partial-sums 1308.1891+-1.2965 1306.8180+-1.7479 math-spectral-norm 1825.7603+-0.5118 ? 1826.4470+-0.7440 ? string-base64 505.1803+-1.8707 505.0239+-1.6082 string-fasta 993.3369+-5.6366 992.5731+-3.7595 string-tagcloud 380.3663+-0.8134 ! 383.7274+-1.8097 ! definitely 1.0088x slower <arithmetic> 1308.4484+-2.2327 ? 1309.1713+-1.5920 ? might be 1.0006x slower <geometric> * 1114.8449+-1.3363 ? 1116.5717+-1.0905 ? might be 1.0015x slower <harmonic> 799.9866+-0.7523 ? 802.4882+-2.7926 ? might be 1.0031x slower TipOfTree OneShotScope V8Spider: crypto 79.3481+-0.3012 ? 79.3709+-0.1998 ? deltablue 98.2703+-1.2804 97.7791+-0.6150 earley-boyer 70.7925+-0.2143 70.7656+-0.3319 raytrace 39.8643+-0.7596 ? 39.8705+-0.2175 ? regexp 98.3138+-0.1825 ! 100.0826+-0.1865 ! definitely 1.0180x slower richards 134.1364+-1.8609 131.8321+-1.3601 might be 1.0175x faster splay 45.9927+-0.4238 45.7737+-0.3350 <arithmetic> 80.9597+-0.3340 80.7821+-0.2843 might be 1.0022x faster <geometric> * 74.9921+-0.2943 74.8982+-0.2098 might be 1.0013x faster <harmonic> 69.0486+-0.3764 68.9877+-0.1811 might be 1.0009x faster TipOfTree OneShotScope Octane and V8v7: encrypt 0.46753+-0.00536 0.46496+-0.00036 decrypt 8.56716+-0.01079 ? 8.57435+-0.01832 ? deltablue x2 0.56851+-0.00691 0.56264+-0.00752 might be 1.0104x faster earley 0.89709+-0.00903 ? 0.90397+-0.00330 ? boyer 12.23240+-0.06140 ? 12.24362+-0.02797 ? raytrace x2 4.29020+-0.04690 ? 4.32608+-0.05188 ? regexp x2 33.19970+-0.18129 33.11474+-0.09815 richards x2 0.42961+-0.00765 0.42311+-0.00769 might be 1.0153x faster splay x2 0.63875+-0.00512 ^ 0.62904+-0.00296 ^ definitely 1.0154x faster navier-stokes x2 10.93291+-0.01251 ^ 10.71913+-0.01023 ^ definitely 1.0199x faster closure 0.42350+-0.00373 ? 0.42643+-0.00021 ? jquery 6.15723+-0.12149 ? 6.15725+-0.01713 ? gbemu x2 71.81577+-0.80536 ? 72.05416+-0.75109 ? mandreel x2 142.10405+-0.16399 142.04857+-0.19031 pdfjs x2 102.05381+-0.14380 ? 102.06633+-0.31485 ? box2d x2 35.23584+-0.19339 ? 35.24959+-0.15589 ? V8v7: <arithmetic> 7.64272+-0.02343 7.60852+-0.01722 might be 1.0045x faster <geometric> * 2.51675+-0.00879 2.50016+-0.00835 might be 1.0066x faster <harmonic> 1.03430+-0.00667 1.02378+-0.00705 might be 1.0103x faster Octane including V8v7: <arithmetic> 31.97243+-0.06793 31.96759+-0.06891 might be 1.0002x faster <geometric> * 6.99138+-0.01622 6.96680+-0.01527 might be 1.0035x faster <harmonic> 1.43549+-0.00713 1.42433+-0.00836 might be 1.0078x faster TipOfTree OneShotScope Kraken: ai-astar 493.706+-0.616 ? 495.624+-3.449 ? audio-beat-detection 236.864+-1.022 ? 237.331+-1.976 ? audio-dft 289.880+-0.743 ? 296.182+-13.023 ? might be 1.0217x slower audio-fft 143.720+-1.492 ? 143.842+-1.679 ? audio-oscillator 243.832+-0.290 ? 244.140+-0.411 ? imaging-darkroom 287.086+-3.859 ? 287.509+-3.878 ? imaging-desaturate 158.377+-0.128 158.348+-0.128 imaging-gaussian-blur 362.966+-0.780 362.589+-0.188 json-parse-financial 79.895+-0.577 ? 80.565+-1.541 ? json-stringify-tinderbox 104.638+-0.626 ? 105.071+-0.299 ? stanford-crypto-aes 90.487+-0.538 ? 90.623+-1.490 ? stanford-crypto-ccm 102.730+-1.426 ^ 99.895+-0.996 ^ definitely 1.0284x faster stanford-crypto-pbkdf2 264.099+-1.494 ^ 258.934+-0.407 ^ definitely 1.0199x faster stanford-crypto-sha256-iterative 113.445+-0.430 ? 113.868+-0.642 ? <arithmetic> * 212.266+-0.386 ? 212.466+-1.087 ? might be 1.0009x slower <geometric> 182.545+-0.412 182.517+-0.809 might be 1.0002x faster <harmonic> 157.700+-0.457 157.569+-0.824 might be 1.0008x faster TipOfTree OneShotScope JSRegress: adapt-to-double-divide 22.7021+-0.1613 ? 22.8219+-0.2720 ? aliased-arguments-getbyval 0.9610+-0.0177 0.9571+-0.0060 allocate-big-object 2.6158+-0.0148 ? 2.6299+-0.0260 ? arity-mismatch-inlining 0.9251+-0.0059 ? 0.9315+-0.0166 ? array-access-polymorphic-structure 9.7276+-0.1004 ? 9.7901+-0.1166 ? array-nonarray-polymorhpic-access 56.2602+-0.2349 ? 56.3471+-0.2983 ? array-with-double-add 5.7534+-0.0654 ? 5.7541+-0.0360 ? array-with-double-increment 4.3132+-0.0056 4.2996+-0.0576 array-with-double-mul-add 6.8233+-0.0812 6.8034+-0.0758 array-with-double-sum 8.0274+-0.0412 8.0103+-0.0828 array-with-int32-add-sub 10.3701+-0.1433 10.3085+-0.0855 array-with-int32-or-double-sum 8.0712+-0.0857 8.0480+-0.0483 ArrayBuffer-DataView-alloc-large-long-lived 118.0619+-0.8825 ! 124.1497+-2.0082 ! definitely 1.0516x slower ArrayBuffer-DataView-alloc-long-lived 30.3120+-0.3023 ! 33.4393+-0.2089 ! definitely 1.1032x slower ArrayBuffer-Int32Array-byteOffset 7.0650+-0.0357 7.0436+-0.0687 ArrayBuffer-Int8Array-alloc-huge-long-lived 215.2676+-1.9545 ? 216.3990+-1.7910 ? ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented 167.1971+-1.1773 ? 168.6711+-0.9507 ? ArrayBuffer-Int8Array-alloc-large-long-lived 119.4686+-1.2348 ! 122.0697+-1.1313 ! definitely 1.0218x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 51.5255+-1.3342 ! 54.5854+-0.6586 ! definitely 1.0594x slower ArrayBuffer-Int8Array-alloc-long-lived 30.8562+-0.2781 ! 32.7311+-0.1639 ! definitely 1.0608x slower ArrayBuffer-Int8Array-alloc 27.6026+-0.2609 ! 29.1875+-0.2004 ! definitely 1.0574x slower asmjs_bool_bug 9.5563+-0.0702 9.5521+-0.0544 basic-set 21.6335+-0.1799 ? 21.9867+-0.4851 ? might be 1.0163x slower big-int-mul 5.4874+-0.0637 ? 5.4983+-0.0109 ? boolean-test 4.3238+-0.0047 4.3073+-0.0575 branch-fold 4.9740+-0.0204 4.9517+-0.0073 cast-int-to-double 12.4717+-0.1381 ? 12.5222+-0.1462 ? cell-argument 16.1583+-0.3221 ? 16.3788+-0.3108 ? might be 1.0136x slower cfg-simplify 3.9430+-0.0038 3.9316+-0.0367 cmpeq-obj-to-obj-other 13.1133+-0.5304 12.2985+-0.5529 might be 1.0663x faster constant-test 8.8905+-0.0605 ? 8.8970+-0.0796 ? DataView-custom-properties 124.2123+-0.7312 ! 130.6236+-1.2927 ! definitely 1.0516x slower delay-tear-off-arguments-strictmode 3.5156+-0.0077 3.5148+-0.0040 destructuring-arguments-length 170.2309+-0.9375 ? 173.1485+-2.9689 ? might be 1.0171x slower destructuring-arguments 8.7196+-0.0487 8.6987+-0.1107 destructuring-swap 8.5377+-0.0572 ? 8.5862+-0.1173 ? direct-arguments-getbyval 0.8363+-0.0066 0.8339+-0.0109 double-pollution-getbyval 11.0638+-0.0564 11.0052+-0.1144 double-pollution-putbyoffset 6.5115+-0.0503 ? 6.5375+-0.0461 ? empty-string-plus-int 10.7662+-0.0583 ! 11.1571+-0.0953 ! definitely 1.0363x slower emscripten-cube2hash 50.3503+-0.1762 ! 53.3073+-0.2492 ! definitely 1.0587x slower emscripten-memops 8405.4104+-80.0080 ^ 7967.2952+-2.2250 ^ definitely 1.0550x faster external-arguments-getbyval 2.0385+-0.0558 2.0356+-0.0261 external-arguments-putbyval 3.0042+-0.0153 ? 3.0455+-0.0308 ? might be 1.0137x slower Float32Array-matrix-mult 6.3073+-0.0299 6.3010+-0.0274 Float32Array-to-Float64Array-set 95.3202+-1.4241 93.9051+-1.6971 might be 1.0151x faster Float64Array-alloc-long-lived 103.1201+-0.5320 ? 103.6332+-0.6986 ? Float64Array-to-Int16Array-set 121.3198+-3.0295 118.2081+-1.0393 might be 1.0263x faster fold-double-to-int 25.7610+-0.4819 ! 36.7868+-0.4926 ! definitely 1.4280x slower for-of-iterate-array-entries 8.5514+-0.0845 ? 8.5642+-0.0373 ? for-of-iterate-array-keys 3.4653+-0.0607 3.4504+-0.0643 for-of-iterate-array-values 2.9902+-0.0451 2.9240+-0.0571 might be 1.0226x faster function-dot-apply 3.1542+-0.0468 3.1190+-0.0075 might be 1.0113x faster function-test 4.7748+-0.0574 4.7084+-0.0092 might be 1.0141x faster get-by-id-chain-from-try-block 7.5637+-0.0169 ? 7.5749+-0.0812 ? get-by-id-proto-or-self 25.7743+-0.2483 ? 26.0391+-0.3965 ? might be 1.0103x slower get-by-id-self-or-proto 23.6029+-0.6088 ? 23.9361+-0.6421 ? might be 1.0141x slower get_callee_monomorphic 4.7621+-0.0990 ? 4.8252+-0.0156 ? might be 1.0133x slower get_callee_polymorphic 4.4829+-0.0117 4.4824+-0.0179 global-var-const-infer-fire-from-opt 0.9447+-0.0175 ? 0.9535+-0.0072 ? global-var-const-infer 0.7551+-0.0040 ? 0.7634+-0.0073 ? might be 1.0110x slower HashMap-put-get-iterate-keys 41.6944+-0.6247 41.2675+-0.1872 might be 1.0103x faster HashMap-put-get-iterate 59.0075+-0.3494 58.9100+-0.3807 HashMap-string-put-get-iterate 53.7770+-0.3042 ? 54.4470+-0.5906 ? might be 1.0125x slower imul-double-only 17.8387+-0.1990 17.7988+-0.0651 imul-int-only 14.7550+-0.0637 14.7434+-0.0917 imul-mixed 22.2175+-0.9308 21.8364+-0.0982 might be 1.0175x faster in-four-cases 25.8217+-0.1490 ? 25.8478+-0.1294 ? in-one-case-false 12.0786+-0.1190 12.0072+-0.0835 in-one-case-true 12.1345+-0.0859 12.0439+-0.0872 in-two-cases 12.9005+-0.1713 12.8764+-0.1057 indexed-properties-in-objects 4.6136+-0.0738 ? 4.6604+-0.0035 ? might be 1.0102x slower infer-one-time-closure-ten-vars 96.3919+-0.3372 ^ 92.2205+-0.0873 ^ definitely 1.0452x faster infer-one-time-closure-two-vars 28.7663+-0.0569 ! 28.9261+-0.0929 ! definitely 1.0056x slower infer-one-time-closure 28.9384+-0.3469 28.8384+-0.0781 infer-one-time-deep-closure 84.9158+-0.1283 ^ 57.0003+-0.0838 ^ definitely 1.4897x faster inline-arguments-access 1.6191+-0.0235 1.6122+-0.0133 inline-arguments-local-escape 22.6715+-0.2672 22.5384+-0.4500 inline-get-scoped-var 7.0287+-0.0794 7.0099+-0.0753 inlined-put-by-id-transition 15.2491+-0.3237 15.2202+-0.3026 int-or-other-abs-then-get-by-val 9.3451+-0.1101 ? 9.3935+-0.0829 ? int-or-other-abs-zero-then-get-by-val 41.3279+-0.1111 41.3119+-0.0929 int-or-other-add-then-get-by-val 10.4262+-0.0691 ? 10.4728+-0.1090 ? int-or-other-add 10.8703+-0.1463 ? 10.8912+-0.1140 ? int-or-other-div-then-get-by-val 6.3617+-0.0283 6.2862+-0.0975 might be 1.0120x faster int-or-other-max-then-get-by-val 8.8079+-0.2467 8.6889+-0.1981 might be 1.0137x faster int-or-other-min-then-get-by-val 6.9450+-0.0674 ? 6.9922+-0.0559 ? int-or-other-mod-then-get-by-val 6.0505+-0.0579 ? 6.0611+-0.0598 ? int-or-other-mul-then-get-by-val 6.5654+-0.0269 6.5082+-0.0624 int-or-other-neg-then-get-by-val 7.8606+-0.0864 ? 7.8928+-0.0655 ? int-or-other-neg-zero-then-get-by-val 42.0269+-0.7783 41.9632+-0.1820 int-or-other-sub-then-get-by-val 10.4667+-0.0139 ? 10.4990+-0.1475 ? int-or-other-sub 8.8875+-0.0586 8.8860+-0.0677 int-overflow-local 6.4410+-0.0362 6.4034+-0.0849 Int16Array-alloc-long-lived 67.7701+-0.7499 67.3338+-0.2973 Int16Array-bubble-sort-with-byteLength 49.3572+-0.6716 49.1766+-0.1652 Int16Array-bubble-sort 48.3394+-0.0835 ? 48.3405+-0.0998 ? Int16Array-load-int-mul 1.7969+-0.0025 ? 1.8354+-0.0547 ? might be 1.0214x slower Int16Array-to-Int32Array-set 89.3811+-0.6585 ! 95.7147+-1.8291 ! definitely 1.0709x slower Int32Array-alloc-huge-long-lived 713.1904+-21.6702 703.6446+-2.9225 might be 1.0136x faster Int32Array-alloc-huge 805.4432+-7.0287 801.4568+-6.1012 Int32Array-alloc-large-long-lived 972.4818+-8.2474 ? 979.8113+-10.9262 ? Int32Array-alloc-large 45.4967+-0.9098 45.3809+-1.1720 Int32Array-alloc-long-lived 80.7400+-1.0075 80.1797+-0.3469 Int32Array-alloc 4.5212+-0.0251 4.5073+-0.0375 Int32Array-Int8Array-view-alloc 16.0050+-0.2792 15.9126+-0.1826 int52-spill 12.8893+-0.2923 12.7516+-0.4586 might be 1.0108x faster Int8Array-alloc-long-lived 67.0142+-0.5887 ? 67.0668+-0.5936 ? Int8Array-load-with-byteLength 5.0209+-0.0615 ? 5.0216+-0.0596 ? Int8Array-load 4.9909+-0.0734 ? 4.9992+-0.0802 ? integer-divide 14.9573+-0.1075 14.9145+-0.1315 integer-modulo 2.0031+-0.0366 1.9871+-0.0076 large-int-captured 9.7858+-0.0825 ? 9.8463+-0.1205 ? large-int-neg 25.9356+-0.1048 ? 25.9485+-0.1131 ? large-int 23.5509+-0.2760 23.3574+-0.1231 lots-of-fields 10.9722+-0.1069 10.8812+-0.0843 make-indexed-storage 4.2398+-0.0847 4.1966+-0.0556 might be 1.0103x faster make-rope-cse 5.9002+-0.0674 ? 5.9780+-0.0665 ? might be 1.0132x slower marsaglia-larger-ints 111.9084+-0.1307 ? 111.9160+-0.2558 ? marsaglia-osr-entry 47.7895+-0.8605 47.0704+-0.1552 might be 1.0153x faster marsaglia 466.4094+-6.2967 463.1654+-0.3678 method-on-number 30.8483+-0.6615 30.5392+-0.4325 might be 1.0101x faster negative-zero-divide 0.4012+-0.0020 ? 0.4125+-0.0209 ? might be 1.0282x slower negative-zero-modulo 0.3846+-0.0020 ? 0.3849+-0.0025 ? negative-zero-negate 0.3735+-0.0057 0.3691+-0.0025 might be 1.0120x faster nested-function-parsing-random 376.3047+-0.6459 375.8835+-0.8794 nested-function-parsing 48.1440+-0.0995 48.0596+-0.3379 new-array-buffer-dead 3.7068+-0.0057 ? 3.7364+-0.0633 ? new-array-buffer-push 10.6046+-0.1125 10.5256+-0.1632 new-array-dead 28.6637+-0.3150 28.4985+-0.1051 new-array-push 6.8539+-0.0581 ? 6.9492+-0.0760 ? might be 1.0139x slower number-test 4.3233+-0.0676 4.2839+-0.0715 object-closure-call 13.2671+-0.0284 ? 13.2905+-0.1164 ? object-test 4.7871+-0.0596 4.7717+-0.0887 poly-stricteq 76.0897+-0.1798 ? 76.6701+-1.1193 ? polymorphic-structure 21.1383+-0.0932 ? 21.2832+-0.2416 ? polyvariant-monomorphic-get-by-id 12.0039+-0.0951 11.9610+-0.1273 put-by-id 19.2801+-0.4312 19.1428+-0.4989 put-by-val-large-index-blank-indexing-type 11.1167+-0.1308 11.0188+-0.1122 rare-osr-exit-on-local 20.2517+-0.0924 20.2285+-0.0878 register-pressure-from-osr 31.2659+-0.1052 ? 31.3699+-0.1592 ? simple-activation-demo 35.1708+-0.1272 35.1330+-0.0740 slow-array-profile-convergence 4.0642+-0.0246 ^ 4.0059+-0.0123 ^ definitely 1.0145x faster slow-convergence 4.1927+-0.0262 4.1854+-0.0197 sparse-conditional 1.3465+-0.0053 ? 1.3533+-0.0223 ? splice-to-remove 77.3532+-0.3715 77.0774+-0.1283 stepanov_container 11492.0859+-80.6636 ^ 10498.8115+-18.9126 ^ definitely 1.0946x faster string-concat-object 2.9811+-0.0150 2.9746+-0.0149 string-concat-pair-object 2.9094+-0.0099 ? 2.9136+-0.0101 ? string-concat-pair-simple 16.9693+-0.4603 16.6762+-0.3620 might be 1.0176x faster string-concat-simple 17.1523+-0.2974 16.8564+-0.2165 might be 1.0176x faster string-cons-repeat 10.4791+-0.0248 ? 10.4925+-0.0247 ? string-cons-tower 11.2033+-0.2471 11.1597+-0.2244 string-equality 42.6638+-0.4362 42.2596+-0.2457 string-get-by-val-big-char 12.8846+-0.1549 ? 12.9794+-0.1428 ? string-get-by-val-out-of-bounds-insane 5.7890+-0.0688 ? 5.8027+-0.0635 ? string-get-by-val-out-of-bounds 5.2772+-0.0813 ? 5.2836+-0.0613 ? string-get-by-val 4.8702+-0.0455 ? 4.9058+-0.0381 ? string-hash 2.7327+-0.0033 ? 2.7337+-0.0064 ? string-long-ident-equality 37.4715+-0.8034 ? 37.8728+-0.7455 ? might be 1.0107x slower string-repeat-arith 49.0844+-0.2253 49.0576+-0.7692 string-sub 97.4400+-0.3680 ? 97.5119+-0.3777 ? string-test 4.2778+-0.0481 4.2346+-0.0072 might be 1.0102x faster string-var-equality 69.8576+-0.0775 ? 70.6419+-1.2387 ? might be 1.0112x slower structure-hoist-over-transitions 3.3677+-0.0140 3.3628+-0.0155 switch-char-constant 3.4670+-0.0076 ? 3.4676+-0.0099 ? switch-char 8.0857+-0.0890 ? 8.1471+-0.0552 ? switch-constant 9.2393+-0.1327 9.2392+-0.1488 switch-string-basic-big-var 20.2885+-0.1430 ? 20.3177+-0.1020 ? switch-string-basic-big 20.8561+-0.2004 ? 20.8790+-0.6229 ? switch-string-basic-var 20.1438+-0.0396 20.0925+-0.1179 switch-string-basic 21.6418+-0.8056 21.2045+-0.9025 might be 1.0206x faster switch-string-big-length-tower-var 28.9024+-0.1019 ? 29.0433+-0.0803 ? switch-string-length-tower-var 21.5214+-0.0553 ? 21.5396+-0.1986 ? switch-string-length-tower 16.4667+-0.1294 16.4335+-0.1209 switch-string-short 16.4403+-0.1307 16.3954+-0.0939 switch 15.5464+-0.1204 15.5364+-0.1413 tear-off-arguments-simple 2.1983+-0.0055 ! 2.2106+-0.0062 ! definitely 1.0056x slower tear-off-arguments 3.5370+-0.0051 ? 3.5473+-0.0058 ? temporal-structure 16.9730+-0.1177 ? 17.0001+-0.1209 ? to-int32-boolean 21.9828+-0.3032 21.9804+-0.1387 undefined-test 4.4166+-0.0476 ? 4.4805+-0.0189 ? might be 1.0145x slower weird-inlining-const-prop 2.3160+-0.0514 2.2807+-0.0094 might be 1.0155x faster <arithmetic> 151.3140+-0.8892 ^ 143.5037+-0.1228 ^ definitely 1.0544x faster <geometric> * 14.4630+-0.0181 ? 14.4742+-0.0130 ? might be 1.0008x slower <harmonic> 5.3463+-0.0119 ? 5.3552+-0.0198 ? might be 1.0017x slower TipOfTree OneShotScope All benchmarks: <arithmetic> 219.5645+-0.5823 ^ 214.4900+-0.1224 ^ definitely 1.0237x faster <geometric> 20.7726+-0.0223 ? 20.7858+-0.0127 ? might be 1.0006x slower <harmonic> 4.8015+-0.0093 4.7962+-0.0100 might be 1.0011x faster TipOfTree OneShotScope Geomean of preferred means: <scaled-result> 48.6822+-0.0603 ? 48.7221+-0.0401 ? might be 1.0008x slower
Filip Pizlo
Comment 20 2013-11-27 22:53:45 PST
Latest numbers: Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r159826) "OneShotScope" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r159826) Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements. 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 OneShotScope SunSpider: 3d-cube 7.6485+-0.0476 ? 7.7193+-0.0921 ? 3d-morph 8.8303+-0.0881 ? 8.8326+-0.0589 ? 3d-raytrace 8.7623+-0.1263 8.7482+-0.1125 access-binary-trees 1.9956+-0.0085 1.9904+-0.0086 access-fannkuch 7.9632+-0.0654 7.9154+-0.1072 access-nbody 4.2303+-0.0080 4.2297+-0.0087 access-nsieve 4.9642+-0.0449 ? 5.0065+-0.0213 ? bitops-3bit-bits-in-byte 1.8078+-0.0137 1.8054+-0.0054 bitops-bits-in-byte 7.3122+-0.0435 7.2958+-0.0407 bitops-bitwise-and 2.9249+-0.0444 ? 2.9459+-0.0197 ? bitops-nsieve-bits 4.6034+-0.0077 4.6024+-0.0049 controlflow-recursive 3.1186+-0.0096 3.1160+-0.0060 crypto-aes 5.4163+-0.0214 ? 5.4612+-0.0462 ? crypto-md5 3.1054+-0.0169 ? 3.1259+-0.0132 ? crypto-sha1 2.9491+-0.0063 ? 2.9608+-0.0091 ? date-format-tofte 11.1410+-0.2263 11.1388+-0.0906 date-format-xparb 8.6257+-0.2301 8.4680+-0.1100 might be 1.0186x faster math-cordic 4.2158+-0.0215 ? 4.2443+-0.0707 ? math-partial-sums 10.2153+-0.0787 10.1910+-0.0603 math-spectral-norm 2.7230+-0.0080 ? 2.7376+-0.0411 ? regexp-dna 12.9229+-0.1131 ? 12.9692+-0.1049 ? string-base64 5.4419+-0.1018 5.4241+-0.0366 string-fasta 10.1378+-0.1242 ? 10.2192+-0.1074 ? string-tagcloud 14.9370+-0.0650 ? 15.1020+-0.1197 ? might be 1.0110x slower string-unpack-code 29.5283+-0.1108 ! 30.7290+-0.1736 ! definitely 1.0407x slower string-validate-input 7.0357+-0.0654 6.9834+-0.0397 <arithmetic> * 7.4060+-0.0118 ! 7.4601+-0.0109 ! definitely 1.0073x slower <geometric> 5.9467+-0.0072 ! 5.9633+-0.0088 ! definitely 1.0028x slower <harmonic> 4.8602+-0.0053 ? 4.8688+-0.0063 ? might be 1.0018x slower TipOfTree OneShotScope LongSpider: 3d-cube 2708.2727+-7.7503 ^ 2683.4885+-4.5678 ^ definitely 1.0092x faster 3d-morph 1503.9377+-0.5251 1503.4351+-0.9175 3d-raytrace 1541.5607+-26.9132 1541.5329+-19.9650 access-binary-trees 2193.6131+-9.7624 2189.1102+-9.7420 access-fannkuch 666.8275+-3.0173 ? 668.4414+-0.4705 ? access-nbody 1495.0340+-0.7495 ? 1504.1620+-20.1579 ? access-nsieve 1551.2558+-3.0818 1546.6283+-4.0443 bitops-3bit-bits-in-byte 121.4314+-0.0797 121.4105+-0.0820 bitops-bits-in-byte 637.7672+-2.4554 ? 638.4528+-1.3807 ? bitops-nsieve-bits 1046.2604+-0.7379 ? 1052.5507+-13.2307 ? controlflow-recursive 1492.5777+-2.6759 ? 1497.6714+-14.5327 ? crypto-aes 1640.7670+-2.1622 ? 1641.8434+-2.6661 ? crypto-md5 1170.5650+-2.3885 ? 1170.5740+-1.2081 ? crypto-sha1 1635.1857+-3.7009 1632.4840+-5.1304 date-format-tofte 1170.6436+-21.6221 1168.8021+-4.8773 date-format-xparb 1460.7292+-23.8136 1451.4164+-14.0562 math-cordic 1732.5437+-2.4872 ? 1734.8053+-7.5952 ? math-partial-sums 1307.2211+-1.9656 ? 1307.2595+-2.0181 ? math-spectral-norm 1825.7693+-0.4714 ? 1826.0452+-0.6362 ? string-base64 504.1490+-2.0943 ? 505.6795+-1.7876 ? string-fasta 990.7542+-5.3368 ? 997.8989+-5.0853 ? string-tagcloud 380.0960+-1.2322 ! 385.8077+-0.9074 ! definitely 1.0150x slower <arithmetic> 1308.0437+-2.3231 1307.7045+-1.7172 might be 1.0003x faster <geometric> * 1114.4682+-1.8564 ? 1115.5860+-1.4889 ? might be 1.0010x slower <harmonic> 799.7115+-0.8282 ? 801.3569+-0.8473 ? might be 1.0021x slower TipOfTree OneShotScope V8Spider: crypto 79.5044+-0.3349 79.3219+-0.2112 deltablue 97.9512+-0.6720 ? 98.2339+-0.7789 ? earley-boyer 71.1273+-0.3809 70.8279+-0.4658 raytrace 39.8547+-0.7259 ? 39.8656+-0.2325 ? regexp 98.4219+-0.4505 ! 100.1613+-0.4124 ! definitely 1.0177x slower richards 134.4465+-2.0282 133.7967+-1.4752 splay 45.9048+-0.7948 45.8050+-0.3159 <arithmetic> 81.0301+-0.4548 ? 81.1446+-0.2744 ? might be 1.0014x slower <geometric> * 75.0418+-0.3906 ? 75.1229+-0.1969 ? might be 1.0011x slower <harmonic> 69.0719+-0.4131 ? 69.1115+-0.1830 ? might be 1.0006x slower TipOfTree OneShotScope Octane and V8v7: encrypt 0.46525+-0.00030 0.46506+-0.00059 decrypt 8.56798+-0.02343 ? 8.56989+-0.01453 ? deltablue x2 0.56609+-0.00739 ? 0.56934+-0.00564 ? earley 0.89576+-0.00646 ! 0.91272+-0.00891 ! definitely 1.0189x slower boyer 12.23495+-0.02186 ? 12.25689+-0.04702 ? raytrace x2 4.30550+-0.05006 4.27630+-0.04865 regexp x2 33.17402+-0.12169 33.12315+-0.14271 richards x2 0.42211+-0.00465 ? 0.42548+-0.00981 ? splay x2 0.63511+-0.00291 0.63412+-0.00344 navier-stokes x2 10.99954+-0.14743 ^ 10.70294+-0.00335 ^ definitely 1.0277x faster closure 0.42164+-0.00034 ! 0.42589+-0.00038 ! definitely 1.0101x slower jquery 6.11025+-0.01292 ! 6.18102+-0.04487 ! definitely 1.0116x slower gbemu x2 71.59491+-0.68593 ? 72.04601+-0.43173 ? mandreel x2 142.02187+-0.08774 ? 142.14399+-0.14290 ? pdfjs x2 101.94314+-0.45743 ^ 100.98035+-0.18472 ^ definitely 1.0095x faster box2d x2 35.33030+-0.22968 35.31408+-0.20398 V8v7: <arithmetic> 7.64804+-0.01775 ^ 7.60420+-0.02000 ^ definitely 1.0058x faster <geometric> * 2.50995+-0.00884 2.50571+-0.00947 might be 1.0017x faster <harmonic> 1.02611+-0.00471 ? 1.03027+-0.00881 ? might be 1.0041x slower Octane including V8v7: <arithmetic> 31.94927+-0.05359 31.89396+-0.04133 might be 1.0017x faster <geometric> * 6.97551+-0.01547 6.97255+-0.01624 might be 1.0004x faster <harmonic> 1.42492+-0.00568 ? 1.43186+-0.01055 ? might be 1.0049x slower TipOfTree OneShotScope Kraken: ai-astar 493.930+-0.455 ? 495.321+-3.352 ? audio-beat-detection 236.762+-0.504 ? 237.857+-0.990 ? audio-dft 288.992+-0.579 ? 293.861+-8.504 ? might be 1.0168x slower audio-fft 143.126+-0.132 ? 143.956+-2.037 ? audio-oscillator 245.416+-3.386 ? 246.949+-4.587 ? imaging-darkroom 285.172+-0.761 285.002+-0.477 imaging-desaturate 158.318+-0.159 ? 158.502+-0.324 ? imaging-gaussian-blur 362.458+-0.104 ? 362.595+-0.201 ? json-parse-financial 79.964+-0.488 79.758+-0.152 json-stringify-tinderbox 104.747+-1.366 104.459+-0.345 stanford-crypto-aes 91.068+-0.460 90.458+-0.617 stanford-crypto-ccm 99.492+-3.900 ? 101.406+-1.861 ? might be 1.0192x slower stanford-crypto-pbkdf2 265.573+-2.552 ^ 261.285+-1.016 ^ definitely 1.0164x faster stanford-crypto-sha256-iterative 114.071+-0.880 113.736+-0.362 <arithmetic> * 212.078+-0.437 ? 212.510+-0.695 ? might be 1.0020x slower <geometric> 182.244+-0.670 ? 182.572+-0.552 ? might be 1.0018x slower <harmonic> 157.301+-0.900 ? 157.551+-0.485 ? might be 1.0016x slower TipOfTree OneShotScope JSRegress: adapt-to-double-divide 22.7182+-0.0577 22.6790+-0.0651 aliased-arguments-getbyval 0.9534+-0.0033 ? 0.9708+-0.0376 ? might be 1.0182x slower allocate-big-object 2.6170+-0.0160 2.6121+-0.0122 arity-mismatch-inlining 0.9208+-0.0050 ? 0.9285+-0.0058 ? array-access-polymorphic-structure 9.7157+-0.0823 ? 9.8010+-0.1248 ? array-nonarray-polymorhpic-access 56.4544+-0.3145 56.2166+-0.2635 array-with-double-add 5.7343+-0.0720 ? 5.7406+-0.0517 ? array-with-double-increment 4.2944+-0.0544 ? 4.3331+-0.0269 ? array-with-double-mul-add 6.8661+-0.0282 6.8085+-0.0555 array-with-double-sum 8.0269+-0.0449 ? 8.0466+-0.0590 ? array-with-int32-add-sub 10.4337+-0.1112 10.4328+-0.0783 array-with-int32-or-double-sum 7.9567+-0.1084 ? 8.0012+-0.0743 ? ArrayBuffer-DataView-alloc-large-long-lived 117.8781+-0.9253 ? 118.5637+-1.0934 ? ArrayBuffer-DataView-alloc-long-lived 30.5758+-0.3879 ? 30.9739+-0.3349 ? might be 1.0130x slower ArrayBuffer-Int32Array-byteOffset 7.1174+-0.0410 7.0896+-0.0423 ArrayBuffer-Int8Array-alloc-huge-long-lived 212.8243+-1.7198 ? 214.9618+-2.0182 ? might be 1.0100x slower ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented 166.5483+-1.2957 ? 167.6278+-0.5273 ? ArrayBuffer-Int8Array-alloc-large-long-lived 119.6312+-1.8413 ? 120.0677+-1.4711 ? ArrayBuffer-Int8Array-alloc-long-lived-buffer 51.3305+-1.5401 50.1561+-1.3029 might be 1.0234x faster ArrayBuffer-Int8Array-alloc-long-lived 30.9628+-0.2515 30.8318+-0.4277 ArrayBuffer-Int8Array-alloc 27.4837+-0.1357 ^ 26.7450+-0.1216 ^ definitely 1.0276x faster asmjs_bool_bug 9.5054+-0.1134 ? 9.5381+-0.1042 ? basic-set 21.5947+-0.1403 ? 21.5982+-0.1284 ? big-int-mul 5.4900+-0.0242 ? 5.5175+-0.0584 ? boolean-test 4.3225+-0.0053 ? 4.3493+-0.0435 ? branch-fold 4.9313+-0.0556 ? 4.9788+-0.0423 ? cast-int-to-double 12.4286+-0.1006 12.3873+-0.1227 cell-argument 16.1521+-0.3948 15.8756+-0.4052 might be 1.0174x faster cfg-simplify 3.9258+-0.0446 ? 3.9306+-0.0501 ? cmpeq-obj-to-obj-other 12.8427+-0.4047 12.1826+-0.4458 might be 1.0542x faster constant-test 8.7936+-0.1320 ? 8.8338+-0.0858 ? DataView-custom-properties 124.1860+-0.6923 ! 125.5629+-0.6156 ! definitely 1.0111x slower delay-tear-off-arguments-strictmode 3.5081+-0.0032 ! 3.5174+-0.0043 ! definitely 1.0026x slower destructuring-arguments-length 168.8106+-0.6140 ! 175.0004+-5.1016 ! definitely 1.0367x slower destructuring-arguments 8.7357+-0.1245 8.7114+-0.1053 destructuring-swap 8.5253+-0.0986 8.5077+-0.0993 direct-arguments-getbyval 0.8378+-0.0041 ? 0.8432+-0.0293 ? double-pollution-getbyval 11.1044+-0.1233 10.9699+-0.0943 might be 1.0123x faster double-pollution-putbyoffset 6.5099+-0.0404 ! 6.7816+-0.2184 ! definitely 1.0417x slower empty-string-plus-int 10.7692+-0.0586 ! 11.2218+-0.0960 ! definitely 1.0420x slower emscripten-cube2hash 50.3747+-0.2801 ! 53.5160+-0.4043 ! definitely 1.0624x slower emscripten-memops 8371.1953+-5.5819 ^ 7769.7178+-1.9508 ^ definitely 1.0774x faster external-arguments-getbyval 2.0031+-0.0173 ? 2.0250+-0.0163 ? might be 1.0109x slower external-arguments-putbyval 3.0067+-0.0130 ? 3.0228+-0.0149 ? Float32Array-matrix-mult 6.3292+-0.0233 ? 6.3521+-0.0509 ? Float32Array-to-Float64Array-set 93.8699+-0.8006 ? 96.6605+-5.8271 ? might be 1.0297x slower Float64Array-alloc-long-lived 103.3303+-0.4878 103.3190+-0.5684 Float64Array-to-Int16Array-set 120.9917+-2.3665 ^ 116.5884+-0.3095 ^ definitely 1.0378x faster fold-double-to-int 25.6375+-0.2847 ^ 20.3150+-0.1123 ^ definitely 1.2620x faster for-of-iterate-array-entries 8.6290+-0.1545 8.5636+-0.1075 for-of-iterate-array-keys 3.4716+-0.0397 ? 3.5209+-0.0437 ? might be 1.0142x slower for-of-iterate-array-values 2.9588+-0.0446 2.9556+-0.0494 function-dot-apply 3.1271+-0.0198 3.1244+-0.0119 function-test 4.7235+-0.0482 ! 4.8508+-0.0787 ! definitely 1.0269x slower get-by-id-chain-from-try-block 7.6144+-0.0480 7.5798+-0.0846 get-by-id-proto-or-self 25.8921+-0.2656 ? 26.2924+-0.3529 ? might be 1.0155x slower get-by-id-self-or-proto 23.9998+-0.6667 23.6386+-0.5759 might be 1.0153x faster get_callee_monomorphic 4.7111+-0.0289 ? 4.8015+-0.0714 ? might be 1.0192x slower get_callee_polymorphic 4.5052+-0.0471 4.4769+-0.0124 global-var-const-infer-fire-from-opt 0.9517+-0.0127 0.9399+-0.0086 might be 1.0125x faster global-var-const-infer 0.7583+-0.0058 0.7580+-0.0049 HashMap-put-get-iterate-keys 41.5343+-0.2847 41.4532+-0.2141 HashMap-put-get-iterate 59.3109+-0.3537 58.9591+-0.4245 HashMap-string-put-get-iterate 53.7095+-0.3904 ? 53.9771+-0.3575 ? imul-double-only 18.0510+-0.9142 17.7303+-0.1086 might be 1.0181x faster imul-int-only 14.8069+-0.0768 ? 14.8524+-0.1067 ? imul-mixed 21.8624+-0.1297 ? 21.8723+-0.1204 ? in-four-cases 25.8836+-0.1155 25.8793+-0.1251 in-one-case-false 12.1741+-0.0891 12.0724+-0.0963 in-one-case-true 12.0572+-0.1443 12.0499+-0.0993 in-two-cases 12.8210+-0.1197 ? 12.8440+-0.0823 ? indexed-properties-in-objects 4.6607+-0.0084 4.6576+-0.0031 infer-one-time-closure-ten-vars 96.2335+-0.1510 ^ 92.2606+-0.0711 ^ definitely 1.0431x faster infer-one-time-closure-two-vars 28.7868+-0.1566 ? 28.8248+-0.1235 ? infer-one-time-closure 28.7549+-0.0933 28.6826+-0.0831 infer-one-time-deep-closure 84.7707+-0.0879 ^ 60.8711+-0.1115 ^ definitely 1.3926x faster inline-arguments-access 1.6084+-0.0152 1.6063+-0.0184 inline-arguments-local-escape 22.4989+-0.2359 ? 22.9152+-0.2472 ? might be 1.0185x slower inline-get-scoped-var 7.0562+-0.1028 7.0326+-0.0699 inlined-put-by-id-transition 15.1634+-0.2373 ? 15.2928+-0.3042 ? int-or-other-abs-then-get-by-val 9.3473+-0.1073 9.3124+-0.1442 int-or-other-abs-zero-then-get-by-val 41.6950+-0.4662 ^ 40.2167+-0.6409 ^ definitely 1.0368x faster int-or-other-add-then-get-by-val 10.5243+-0.0728 10.5028+-0.0414 int-or-other-add 10.9139+-0.0524 10.8992+-0.0982 int-or-other-div-then-get-by-val 6.3389+-0.0674 6.3256+-0.0624 int-or-other-max-then-get-by-val 8.6572+-0.1820 ? 8.8358+-0.1963 ? might be 1.0206x slower int-or-other-min-then-get-by-val 6.9002+-0.0919 ? 6.9687+-0.0364 ? int-or-other-mod-then-get-by-val 6.0539+-0.1021 6.0269+-0.0776 int-or-other-mul-then-get-by-val 6.5071+-0.0570 ? 6.5422+-0.0525 ? int-or-other-neg-then-get-by-val 7.8348+-0.0169 7.8249+-0.0725 int-or-other-neg-zero-then-get-by-val 42.0239+-0.2189 ^ 40.9346+-0.7664 ^ definitely 1.0266x faster int-or-other-sub-then-get-by-val 10.5179+-0.1137 10.5026+-0.0770 int-or-other-sub 8.8215+-0.0946 ? 8.9082+-0.0778 ? int-overflow-local 6.3831+-0.1088 6.3237+-0.1194 Int16Array-alloc-long-lived 67.7608+-0.9895 67.6720+-0.4766 Int16Array-bubble-sort-with-byteLength 49.0090+-0.1470 48.9869+-0.0924 Int16Array-bubble-sort 48.3885+-0.1430 ? 48.4307+-0.2374 ? Int16Array-load-int-mul 1.7998+-0.0057 1.7986+-0.0054 Int16Array-to-Int32Array-set 90.0113+-1.2460 ! 94.4382+-0.4435 ! definitely 1.0492x slower Int32Array-alloc-huge-long-lived 703.7467+-3.2407 ? 703.8888+-3.1176 ? Int32Array-alloc-huge 807.1867+-5.8874 803.4851+-5.8786 Int32Array-alloc-large-long-lived 977.6018+-9.7857 ? 983.5882+-7.5314 ? Int32Array-alloc-large 45.1132+-0.8189 ? 45.5322+-0.8202 ? Int32Array-alloc-long-lived 80.4105+-0.4653 ? 80.5498+-0.8082 ? Int32Array-alloc 4.4991+-0.0162 4.4806+-0.0112 Int32Array-Int8Array-view-alloc 16.0513+-0.1369 ^ 15.6723+-0.0772 ^ definitely 1.0242x faster int52-spill 12.7818+-0.2473 ? 12.9700+-0.2057 ? might be 1.0147x slower Int8Array-alloc-long-lived 67.6580+-0.4670 67.4412+-0.9184 Int8Array-load-with-byteLength 5.0169+-0.0504 ? 5.0488+-0.0040 ? Int8Array-load 5.0488+-0.0055 ? 5.0521+-0.0094 ? integer-divide 14.8457+-0.1260 ? 14.9902+-0.0898 ? integer-modulo 2.0067+-0.0453 1.9931+-0.0133 large-int-captured 9.7572+-0.0942 9.7534+-0.1118 large-int-neg 25.8753+-0.1398 25.8633+-0.1739 large-int 23.3638+-0.1569 23.3625+-0.1214 lots-of-fields 10.9458+-0.1129 10.9129+-0.0890 make-indexed-storage 4.2430+-0.0154 4.2332+-0.0595 make-rope-cse 5.9715+-0.1096 5.9463+-0.0649 marsaglia-larger-ints 111.8962+-0.1524 ? 111.9193+-0.1989 ? marsaglia-osr-entry 47.0910+-0.1156 47.0748+-0.0407 marsaglia 463.5420+-0.2957 463.4820+-0.3561 method-on-number 30.4450+-0.6266 ? 30.6554+-0.4180 ? negative-zero-divide 0.4028+-0.0043 ? 0.4030+-0.0066 ? negative-zero-modulo 0.3861+-0.0028 0.3846+-0.0013 negative-zero-negate 0.3686+-0.0013 ? 0.3789+-0.0234 ? might be 1.0282x slower nested-function-parsing-random 376.7093+-0.8564 ! 379.2321+-0.3461 ! definitely 1.0067x slower nested-function-parsing 47.9618+-0.0889 ! 48.2964+-0.1760 ! definitely 1.0070x slower new-array-buffer-dead 3.7005+-0.0063 ? 3.7031+-0.0140 ? new-array-buffer-push 10.5848+-0.0953 10.5181+-0.1586 new-array-dead 28.4680+-0.1220 ? 28.5016+-0.0556 ? new-array-push 6.9084+-0.0562 6.8883+-0.0648 number-test 4.2816+-0.0051 ? 4.2902+-0.0474 ? object-closure-call 13.2451+-0.0501 13.2234+-0.0947 object-test 4.8071+-0.0229 ? 4.8458+-0.0169 ? poly-stricteq 76.2303+-0.4124 75.9767+-0.6369 polymorphic-structure 21.1254+-0.1297 21.0972+-0.0844 polyvariant-monomorphic-get-by-id 11.9734+-0.1627 11.9678+-0.1417 put-by-id 19.4370+-0.5217 19.2250+-0.2510 might be 1.0110x faster put-by-val-large-index-blank-indexing-type 11.1604+-0.2929 ? 11.3182+-0.2498 ? might be 1.0141x slower rare-osr-exit-on-local 20.2833+-0.1172 20.2276+-0.1024 register-pressure-from-osr 31.4558+-0.3712 31.2075+-0.0788 simple-activation-demo 35.3943+-0.4537 35.0796+-0.1320 slow-array-profile-convergence 4.0608+-0.0203 ? 4.0664+-0.0824 ? slow-convergence 4.1760+-0.0149 ? 4.1947+-0.0365 ? sparse-conditional 1.3457+-0.0076 1.3443+-0.0049 splice-to-remove 77.0906+-0.1466 ? 77.5315+-0.9783 ? stepanov_container 11446.1160+-18.3759 ^ 10573.2436+-19.5492 ^ definitely 1.0826x faster string-concat-object 3.0058+-0.0293 2.9853+-0.0218 string-concat-pair-object 2.9227+-0.0125 2.9095+-0.0104 string-concat-pair-simple 17.2324+-0.3121 17.2315+-0.1705 string-concat-simple 17.0299+-0.2610 ? 17.1011+-0.3532 ? string-cons-repeat 10.5317+-0.0873 10.5277+-0.0383 string-cons-tower 11.1246+-0.0773 11.0250+-0.0477 string-equality 42.5151+-0.1436 ? 42.5492+-0.0807 ? string-get-by-val-big-char 13.2502+-1.1463 ? 13.5130+-0.9177 ? might be 1.0198x slower string-get-by-val-out-of-bounds-insane 5.8066+-0.0552 5.7779+-0.0594 string-get-by-val-out-of-bounds 5.2883+-0.0599 ? 5.2996+-0.0488 ? string-get-by-val 4.8884+-0.0057 ! 4.9358+-0.0296 ! definitely 1.0097x slower string-hash 2.7381+-0.0061 2.7376+-0.0037 string-long-ident-equality 37.4287+-0.6089 ? 38.0379+-1.3002 ? might be 1.0163x slower string-repeat-arith 48.7583+-0.2751 ? 48.8231+-0.7553 ? string-sub 98.6113+-1.3684 97.5746+-0.5648 might be 1.0106x faster string-test 4.2638+-0.0281 4.2581+-0.0236 string-var-equality 69.9855+-0.1515 69.8421+-0.1430 structure-hoist-over-transitions 3.3540+-0.0068 ? 3.4177+-0.0940 ? might be 1.0190x slower switch-char-constant 3.4776+-0.0115 ? 3.4916+-0.0506 ? switch-char 8.1326+-0.0281 8.0751+-0.0889 switch-constant 9.2709+-0.1574 9.1812+-0.1304 switch-string-basic-big-var 20.3039+-0.1245 ? 20.3833+-0.2679 ? switch-string-basic-big 20.8411+-0.2993 ? 20.9029+-1.3900 ? switch-string-basic-var 19.9922+-0.1017 ? 20.1559+-0.1249 ? switch-string-basic 21.8211+-0.5184 21.4977+-0.3603 might be 1.0150x faster switch-string-big-length-tower-var 28.9237+-0.1338 ? 28.9375+-0.1068 ? switch-string-length-tower-var 21.5026+-0.1508 21.4792+-0.0966 switch-string-length-tower 16.4596+-0.0843 16.4525+-0.0376 switch-string-short 16.3688+-0.1196 ? 16.4103+-0.0967 ? switch 15.4976+-0.1230 ? 15.5786+-0.0986 ? tear-off-arguments-simple 2.1975+-0.0053 ? 2.2104+-0.0103 ? tear-off-arguments 3.5428+-0.0114 ? 3.5440+-0.0090 ? temporal-structure 17.0703+-0.1031 17.0250+-0.0833 to-int32-boolean 21.9773+-0.1491 21.7451+-0.1735 might be 1.0107x faster undefined-test 4.4607+-0.0353 ? 4.4884+-0.0740 ? weird-inlining-const-prop 2.2791+-0.0081 ? 2.2859+-0.0129 ? <arithmetic> 150.8140+-0.0883 ^ 142.6756+-0.1522 ^ definitely 1.0570x faster <geometric> * 14.4512+-0.0109 ^ 14.4105+-0.0210 ^ definitely 1.0028x faster <harmonic> 5.3404+-0.0038 ? 5.3541+-0.0261 ? might be 1.0026x slower TipOfTree OneShotScope All benchmarks: <arithmetic> 219.1923+-0.1790 ^ 213.8327+-0.1568 ^ definitely 1.0251x faster <geometric> 20.7512+-0.0104 ^ 20.7213+-0.0165 ^ definitely 1.0014x faster <harmonic> 4.7864+-0.0055 ? 4.8016+-0.0135 ? might be 1.0032x slower TipOfTree OneShotScope Geomean of preferred means: <scaled-result> 48.6392+-0.0568 ? 48.7053+-0.0292 ? might be 1.0014x slower
Filip Pizlo
Comment 21 2013-11-27 23:07:53 PST
Pascal Jacquemart
Comment 22 2013-11-28 04:08:45 PST
Oddly it breaks the cross compilation for ARM
Note You need to log in before you can comment on or make changes to this bug.