Bug 124812

Summary: Infer one-time scopes
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, eflews.bot, ggaren, gyuyoung.kim, mark.lam, mhahnenberg, msaboff, oliver, p.jacquemart, sam
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 124824    
Bug Blocks: 124630    
Attachments:
Description Flags
work in progress
none
more things
none
the patch
eflews.bot: commit-queue-
the patch
none
the patch
none
patch for landing? none

Description Filip Pizlo 2013-11-23 18:33:39 PST
...
Comment 1 Filip Pizlo 2013-11-23 20:48:52 PST
Created attachment 217756 [details]
work in progress
Comment 2 Filip Pizlo 2013-11-24 15:50:08 PST
Created attachment 217766 [details]
more things
Comment 3 Filip Pizlo 2013-11-24 17:04:41 PST
Created attachment 217768 [details]
the patch
Comment 4 EFL EWS Bot 2013-11-24 17:12:29 PST
Comment on attachment 217768 [details]
the patch

Attachment 217768 [details] did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/35208314
Comment 5 EFL EWS Bot 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
Comment 6 Filip Pizlo 2013-11-24 17:22:20 PST
Created attachment 217769 [details]
the patch
Comment 7 Oliver Hunt 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?
Comment 8 Filip Pizlo 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.
Comment 9 Oliver Hunt 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?
Comment 10 Filip Pizlo 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...
Comment 11 Filip Pizlo 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.
Comment 12 Filip Pizlo 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.
Comment 13 Filip Pizlo 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
Comment 14 Filip Pizlo 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
Comment 15 Filip Pizlo 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
Comment 16 Filip Pizlo 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
Comment 17 Filip Pizlo 2013-11-27 19:10:07 PST
Created attachment 217974 [details]
the patch

Rebased again.
Comment 18 Filip Pizlo 2013-11-27 21:50:52 PST
Created attachment 217980 [details]
patch for landing?

I simplified some stuff.

This may be the winner.
Comment 19 Filip Pizlo 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
Comment 20 Filip Pizlo 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
Comment 21 Filip Pizlo 2013-11-27 23:07:53 PST
Landed in http://trac.webkit.org/changeset/159834
Comment 22 Pascal Jacquemart 2013-11-28 04:08:45 PST
Oddly it breaks the cross compilation for ARM