Bug 142538 - Eden collections should trigger sweep of MarkedBlocks containing new objects.
Summary: Eden collections should trigger sweep of MarkedBlocks containing new objects.
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Andreas Kling
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-03-10 12:12 PDT by Andreas Kling
Modified: 2015-03-11 09:54 PDT (History)
5 users (show)

See Also:


Attachments
Proposed patch (6.05 KB, patch)
2015-03-10 12:14 PDT, Andreas Kling
ggaren: review+
Details | Formatted Diff | Diff
Patch for landing (7.77 KB, patch)
2015-03-10 14:08 PDT, Andreas Kling
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Andreas Kling 2015-03-10 12:12:54 PDT
Currently, only full collections trigger the IncrementalSweeper.
This means that while Eden collections do find garbage, it doesn't actually run destructors.
Comment 1 Andreas Kling 2015-03-10 12:14:20 PDT
Created attachment 248344 [details]
Proposed patch
Comment 2 Geoffrey Garen 2015-03-10 12:42:33 PDT
Comment on attachment 248344 [details]
Proposed patch

View in context: https://bugs.webkit.org/attachment.cgi?id=248344&action=review

> Source/JavaScriptCore/ChangeLog:12
> +        Eden collections, instead of delaying their teardown until the next full collection.

...or the next allocation cycle for their block.

> Source/JavaScriptCore/ChangeLog:22
> +        (JSC::Heap::notifyIncrementalSweeper): For Eden collections, tell the IncrementalSweeper
> +        to append block snapshot (taken earlier) to its existing set of blocks instead of replacing
> +        it entirely. This allows Eden collections and incremental sweeping to occur interleaved with

An eden allocation cycle may reuse a block that contains old objects. If so, we will duplicate a block in the list. Duplicates are OK, since they will no-op when they pop. But what if the list goes infinite?

Some options:

(1) Use a hash table instead of a vector inside the incremental sweeper.

(2) After appending to the vector, shrink(std::unique(std::sort(begin(), end())) - begin()).

I'm OK with either. Please do one of these before landing.
Comment 3 Andreas Kling 2015-03-10 13:16:31 PDT
(In reply to comment #2)
> Comment on attachment 248344 [details]
> Proposed patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=248344&action=review
> 
> > Source/JavaScriptCore/ChangeLog:12
> > +        Eden collections, instead of delaying their teardown until the next full collection.
> 
> ...or the next allocation cycle for their block.

Oh yeah, I'll add that.

> > Source/JavaScriptCore/ChangeLog:22
> > +        (JSC::Heap::notifyIncrementalSweeper): For Eden collections, tell the IncrementalSweeper
> > +        to append block snapshot (taken earlier) to its existing set of blocks instead of replacing
> > +        it entirely. This allows Eden collections and incremental sweeping to occur interleaved with
> 
> An eden allocation cycle may reuse a block that contains old objects. If so,
> we will duplicate a block in the list. Duplicates are OK, since they will
> no-op when they pop. But what if the list goes infinite?
> 
> Some options:
> 
> (1) Use a hash table instead of a vector inside the incremental sweeper.
> 
> (2) After appending to the vector, shrink(std::unique(std::sort(begin(),
> end())) - begin()).
> 
> I'm OK with either. Please do one of these before landing.

Neither of those are very good, since they would break the incremental iteration I've got going on. I need to append only blocks that are not already in the vector. I'll fix that up before landing.
Comment 4 Mark Hahnenberg 2015-03-10 13:17:56 PDT
Benchmark results would be good here :-)
Comment 5 Geoffrey Garen 2015-03-10 13:27:30 PDT
I think you could fix the iteration thing by just popping from the end of the vector (or taking from the begin of the hash table) rather than keeping an index.
Comment 6 Andreas Kling 2015-03-10 13:29:47 PDT
(In reply to comment #4)
> Benchmark results would be good here :-)

Right you are, Mark!

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on megalol (MacBookPro10,1).

VMs tested:
"ToT" at /Users/kling/Source/Safari/ToT-Clean/WebKitBuild/Release/jsc
"Hacks" at /Users/kling/Source/Safari/OpenSource/WebKitBuild/Release/jsc

Collected 4 samples per benchmark/VM, with 4 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.

                                                           ToT                      Hacks                                       
SunSpider:
   3d-cube                                            5.0227+-0.1568     ?      5.1343+-0.2032        ? might be 1.0222x slower
   3d-morph                                           5.8276+-0.1666     ?      7.4655+-4.4834        ? might be 1.2811x slower
   3d-raytrace                                        6.8243+-0.2974            6.7673+-0.5574        
   access-binary-trees                                2.3129+-0.1936     ?      2.4325+-0.3755        ? might be 1.0517x slower
   access-fannkuch                                    6.2584+-0.0850     ?      6.3947+-0.2289        ? might be 1.0218x slower
   access-nbody                                       3.1290+-0.1531            3.0460+-0.1461          might be 1.0273x faster
   access-nsieve                                      3.2718+-0.1751     ?      3.2945+-0.1350        ?
   bitops-3bit-bits-in-byte                           1.6743+-0.0684     ?      1.8830+-0.4810        ? might be 1.1246x slower
   bitops-bits-in-byte                                3.6782+-0.0726     ?      3.7292+-0.2249        ? might be 1.0139x slower
   bitops-bitwise-and                                 2.2247+-0.0602            2.1876+-0.0663          might be 1.0170x faster
   bitops-nsieve-bits                                 3.7102+-0.0855     ?      3.8096+-0.1172        ? might be 1.0268x slower
   controlflow-recursive                              2.4891+-0.3222            2.3681+-0.1260          might be 1.0511x faster
   crypto-aes                                         4.4968+-0.2764     ?      4.6211+-0.6064        ? might be 1.0276x slower
   crypto-md5                                         2.5995+-0.0926     ?      2.6373+-0.3645        ? might be 1.0145x slower
   crypto-sha1                                        2.7497+-0.4404     ?      2.9496+-0.3944        ? might be 1.0727x slower
   date-format-tofte                                  9.9317+-0.2287     ?     10.1125+-0.4774        ? might be 1.0182x slower
   date-format-xparb                                  5.8161+-0.2065     ?      6.0576+-1.0670        ? might be 1.0415x slower
   math-cordic                                        3.2423+-0.0561     !      3.5037+-0.1875        ! definitely 1.0806x slower
   math-partial-sums                                  5.2776+-0.2334     ?      5.4941+-0.3979        ? might be 1.0410x slower
   math-spectral-norm                                 2.1711+-0.3607     ?      2.3260+-0.9669        ? might be 1.0713x slower
   regexp-dna                                         7.3120+-0.1101     ?      7.3944+-0.1024        ? might be 1.0113x slower
   string-base64                                      4.9386+-0.5520            4.8554+-0.3036          might be 1.0171x faster
   string-fasta                                      10.2974+-10.9895           6.9692+-0.6713          might be 1.4776x faster
   string-tagcloud                                   10.0241+-0.4544     ?     13.3126+-9.4526        ? might be 1.3281x slower
   string-unpack-code                                20.8025+-0.5958     ?     21.6596+-0.6307        ? might be 1.0412x slower
   string-validate-input                              5.4365+-0.5631            5.3923+-0.6264        

   <arithmetic> *                                     5.4430+-0.3553     ?      5.6076+-0.5374        ? might be 1.0302x slower
   <geometric>                                        4.4956+-0.0937     ?      4.6134+-0.1824        ? might be 1.0262x slower
   <harmonic>                                         3.8629+-0.0524     ?      3.9603+-0.0584        ? might be 1.0252x slower

                                                           ToT                      Hacks                                       
LongSpider:
   3d-cube                                          875.6902+-5.0413     ?    956.0899+-252.8502      ? might be 1.0918x slower
   3d-morph                                        1575.9394+-7.1249         1574.4586+-7.8786        
   3d-raytrace                                      775.7401+-12.3777    ?    786.5368+-4.6848        ? might be 1.0139x slower
   access-binary-trees                              996.4917+-25.5586         987.8693+-4.6862        
   access-fannkuch                                  344.9982+-15.4222    ?    348.4637+-9.9834        ? might be 1.0100x slower
   access-nbody                                     634.3019+-13.7387    ?    715.0403+-257.8254      ? might be 1.1273x slower
   access-nsieve                                    886.8135+-47.1008         878.2208+-18.8868       
   bitops-3bit-bits-in-byte                          49.2423+-0.4600     ?     50.2198+-5.0998        ? might be 1.0199x slower
   bitops-bits-in-byte                              100.5408+-15.9213          97.1362+-3.9179          might be 1.0350x faster
   bitops-nsieve-bits                               891.1489+-435.4684        819.4395+-147.4782        might be 1.0875x faster
   controlflow-recursive                            571.1123+-257.6265        495.8044+-30.6832         might be 1.1519x faster
   crypto-aes                                       831.4380+-401.5165        704.2182+-5.3452          might be 1.1807x faster
   crypto-md5                                       564.2598+-19.5381    ?    633.4430+-198.3881      ? might be 1.1226x slower
   crypto-sha1                                      626.5330+-10.5387    ?    628.7540+-7.7566        ?
   date-format-tofte                                797.6385+-27.5004    ?    798.0350+-11.1475       ?
   date-format-xparb                                843.0157+-327.8723        745.6133+-92.2562         might be 1.1306x faster
   math-cordic                                      607.1604+-1.2431     ?    607.8583+-3.6236        ?
   math-partial-sums                                519.6808+-2.2160          519.4349+-2.4417        
   math-spectral-norm                               580.0079+-1.0523     ?    581.5323+-3.0401        ?
   string-base64                                    351.8905+-1.2260     ?    353.1910+-4.3497        ?
   string-fasta                                     417.9220+-9.7733     ?    451.4916+-85.9309       ? might be 1.0803x slower
   string-tagcloud                                  218.0093+-1.8889     ?    221.2766+-4.5580        ? might be 1.0150x slower

   <arithmetic>                                     639.0716+-21.9116         634.2785+-23.0337         might be 1.0076x faster
   <geometric> *                                    519.0631+-14.9268         518.0779+-13.5620         might be 1.0019x faster
   <harmonic>                                       337.1559+-7.8859     ?    338.2144+-9.7666        ? might be 1.0031x slower

                                                           ToT                      Hacks                                       
V8Spider:
   crypto                                            60.0059+-1.3594           59.0397+-3.6403          might be 1.0164x faster
   deltablue                                         95.3129+-8.0535     ?     96.5853+-8.3344        ? might be 1.0133x slower
   earley-boyer                                      45.6835+-3.7217           45.4551+-2.2442        
   raytrace                                          45.9974+-23.4832          38.4816+-1.7254          might be 1.1953x faster
   regexp                                            69.5165+-2.9073     ?     70.3349+-0.5304        ? might be 1.0118x slower
   richards                                          82.2705+-3.7452     ?     82.8399+-3.4341        ?
   splay                                             43.7175+-1.9232           39.6756+-2.3064          might be 1.1019x faster

   <arithmetic>                                      63.2149+-5.2721           61.7731+-0.8567          might be 1.0233x faster
   <geometric> *                                     60.3717+-5.5618           58.3382+-1.2205          might be 1.0349x faster
   <harmonic>                                        57.6989+-5.7878           55.1843+-1.5230          might be 1.0456x faster

                                                           ToT                      Hacks                                       
Octane:
   encrypt                                           0.26685+-0.10623          0.23760+-0.00740         might be 1.1231x faster
   decrypt                                           4.02712+-0.09501          4.01533+-0.02092       
   deltablue                                x2       0.20801+-0.00575    ?     0.23996+-0.09594       ? might be 1.1536x slower
   earley                                            0.68119+-0.01021    ?     0.73091+-0.14440       ? might be 1.0730x slower
   boyer                                             5.84445+-0.03232          5.84068+-0.02299       
   navier-stokes                            x2       5.69212+-0.80555          5.45369+-0.32171         might be 1.0437x faster
   raytrace                                 x2       1.30340+-0.11963          1.27168+-0.01296         might be 1.0249x faster
   richards                                 x2       0.12710+-0.01311          0.12112+-0.00453         might be 1.0494x faster
   splay                                    x2       0.40399+-0.00253    ?     0.41421+-0.02825       ? might be 1.0253x slower
   regexp                                   x2      42.42159+-21.87504        35.56092+-0.93589         might be 1.1929x faster
   pdfjs                                    x2      49.43383+-10.50379        46.21714+-0.49600         might be 1.0696x faster
   mandreel                                 x2      56.42224+-4.77427         54.44616+-0.13031         might be 1.0363x faster
   gbemu                                    x2      40.93990+-0.10755    ?    41.00050+-0.09257       ?
   closure                                           0.57502+-0.00284    ?     0.63973+-0.21457       ? might be 1.1125x slower
   jquery                                            8.53374+-3.43643          7.80676+-1.28773         might be 1.0931x faster
   box2d                                    x2      17.76795+-13.74024        13.41528+-0.20761         might be 1.3245x faster
   zlib                                     x2     519.62602+-217.64958      446.59176+-90.25406        might be 1.1635x faster
   typescript                               x2     880.55591+-22.67713       875.01758+-25.35861      

   <arithmetic>                                    108.32442+-14.66497       101.95903+-6.96306         might be 1.0624x faster
   <geometric> *                                     7.45095+-0.08672          7.18155+-0.20924         might be 1.0375x faster
   <harmonic>                                        0.74678+-0.03078    ?     0.75012+-0.05128       ? might be 1.0045x slower

                                                           ToT                      Hacks                                       
Kraken:
   ai-astar                                          273.613+-4.827            273.360+-2.951         
   audio-beat-detection                              115.720+-1.031      ?     116.017+-0.927         ?
   audio-dft                                         225.779+-56.095           218.783+-4.039           might be 1.0320x faster
   audio-fft                                          88.865+-0.707      ?      92.162+-11.413        ? might be 1.0371x slower
   audio-oscillator                                  257.018+-140.366          249.581+-124.638         might be 1.0298x faster
   imaging-darkroom                                  107.187+-0.394      ?     107.241+-0.598         ?
   imaging-desaturate                                 74.399+-26.863            65.119+-1.111           might be 1.1425x faster
   imaging-gaussian-blur                             113.434+-2.111      ?     113.536+-0.348         ?
   json-parse-financial                               48.276+-1.499             46.993+-0.987           might be 1.0273x faster
   json-stringify-tinderbox                           57.810+-2.658      ?      59.048+-2.562         ? might be 1.0214x slower
   stanford-crypto-aes                                65.272+-0.673      ?      67.768+-15.927        ? might be 1.0382x slower
   stanford-crypto-ccm                                54.698+-7.564      ?      54.820+-6.615         ?
   stanford-crypto-pbkdf2                            172.398+-1.226      ?     172.930+-1.407         ?
   stanford-crypto-sha256-iterative                   58.018+-5.036      ?      67.770+-33.574        ? might be 1.1681x slower

   <arithmetic> *                                    122.321+-8.382            121.795+-7.467           might be 1.0043x faster
   <geometric>                                       102.316+-2.903      ?     102.531+-1.601         ? might be 1.0021x slower
   <harmonic>                                         88.032+-1.698      ?      88.395+-1.920         ? might be 1.0041x slower

                                                           ToT                      Hacks                                       
JSRegress:
   abs-boolean                                        2.9402+-0.4946            2.7501+-0.0418          might be 1.0692x faster
   adapt-to-double-divide                            17.4622+-0.8684     ?     17.7192+-0.9686        ? might be 1.0147x slower
   aliased-arguments-getbyval                         0.9160+-0.0416     ?      0.9202+-0.0242        ?
   allocate-big-object                                2.7718+-0.1234     ?      3.6013+-2.5722        ? might be 1.2993x slower
   arguments-out-of-bounds                           17.1752+-0.5124     !     17.8851+-0.1965        ! definitely 1.0413x slower
   arity-mismatch-inlining                            0.9073+-0.0184            0.8901+-0.0263          might be 1.0193x faster
   array-access-polymorphic-structure                 6.8949+-0.2011     ?      7.0181+-0.4039        ? might be 1.0179x slower
   array-nonarray-polymorhpic-access                 36.0461+-0.8429     ?     36.3563+-1.3873        ?
   array-prototype-every                             86.5782+-1.0926     ?     88.2010+-1.0856        ? might be 1.0187x slower
   array-prototype-forEach                           95.0938+-36.0816          86.0455+-2.3554          might be 1.1052x faster
   array-prototype-map                               98.9042+-2.4589           95.6878+-1.5116          might be 1.0336x faster
   array-prototype-some                              85.9435+-0.9340     ?     87.8643+-1.2779        ? might be 1.0224x slower
   array-splice-contiguous                           42.4274+-1.5510     ?     43.2228+-1.0899        ? might be 1.0187x slower
   array-with-double-add                              4.4008+-0.3567            4.2877+-0.1340          might be 1.0264x faster
   array-with-double-increment                        3.4000+-0.1141            3.3555+-0.0800          might be 1.0132x faster
   array-with-double-mul-add                          5.1879+-0.1007            5.1865+-0.0941        
   array-with-double-sum                              3.5482+-0.0514     ?      3.6000+-0.1899        ? might be 1.0146x slower
   array-with-int32-add-sub                           7.1686+-0.3800            7.1140+-0.2468        
   array-with-int32-or-double-sum                     3.5607+-0.1591     ?      3.6387+-0.0753        ? might be 1.0219x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.8604+-2.1594           34.7838+-1.6063        
   ArrayBuffer-DataView-alloc-long-lived             14.6573+-1.0314     ?     14.8121+-1.0336        ? might be 1.0106x slower
   ArrayBuffer-Int32Array-byteOffset                  3.7125+-0.4037            3.6255+-0.0754          might be 1.0240x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     34.3126+-1.1682     ?     34.3680+-0.5810        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.1235+-0.3246     ?     24.6575+-2.1405        ? might be 1.0663x slower
   ArrayBuffer-Int8Array-alloc-long-lived            14.5825+-1.7162           14.3036+-0.9539          might be 1.0195x faster
   ArrayBuffer-Int8Array-alloc                       11.1372+-0.9890     ?     11.8291+-1.5989        ? might be 1.0621x slower
   asmjs_bool_bug                                     8.1535+-0.8602            8.0448+-0.4440          might be 1.0135x faster
   assign-custom-setter-polymorphic                   3.2313+-0.0894     ?      3.4298+-0.3705        ? might be 1.0614x slower
   assign-custom-setter                               4.5085+-0.1032     ?      4.5238+-0.0733        ?
   basic-set                                         12.4333+-8.2550            9.6153+-1.1808          might be 1.2931x faster
   big-int-mul                                        4.1548+-0.0488     ?      4.6425+-1.5892        ? might be 1.1174x slower
   boolean-test                                       3.1711+-0.0723     ?      3.1765+-0.0921        ?
   branch-fold                                        3.8040+-0.0238     ?      4.6123+-2.2091        ? might be 1.2125x slower
   by-val-generic                                     8.3258+-0.3468     ?      8.3751+-0.1343        ?
   call-spread-apply                                 17.3604+-1.6379           17.2896+-0.8813        
   call-spread-call                                   6.1602+-0.2068            6.0884+-0.1196          might be 1.0118x faster
   captured-assignments                               0.4746+-0.0175     ?      0.5438+-0.1253        ? might be 1.1457x slower
   cast-int-to-double                                 5.6211+-0.3222            5.5168+-0.2188          might be 1.0189x faster
   cell-argument                                      8.9863+-0.7522            8.6850+-0.3114          might be 1.0347x faster
   cfg-simplify                                       2.9268+-0.0370     ?      2.9628+-0.1425        ? might be 1.0123x slower
   chain-getter-access                               10.0649+-0.4881     ?     10.1271+-0.1547        ?
   cmpeq-obj-to-obj-other                            12.5037+-1.3582           12.0078+-1.9516          might be 1.0413x faster
   constant-test                                      5.3172+-0.7202            5.1116+-0.0284          might be 1.0402x faster
   DataView-custom-properties                        40.5800+-3.0355           40.4291+-0.9521        
   delay-tear-off-arguments-strictmode               21.3125+-0.5434           21.0367+-1.7151          might be 1.0131x faster
   deltablue-varargs                                187.8212+-2.5789     ?    188.5448+-1.0412        ?
   destructuring-arguments                            5.3878+-0.0469     ?      5.4775+-0.3087        ? might be 1.0167x slower
   destructuring-swap                                 5.3214+-0.2608            5.2442+-0.1317          might be 1.0147x faster
   direct-arguments-getbyval                          0.9551+-0.0596     ?      0.9982+-0.1516        ? might be 1.0451x slower
   div-boolean-double                                 5.3908+-0.0527            5.3630+-0.0286        
   div-boolean                                        8.1176+-0.1859     ?      8.1368+-0.3269        ?
   double-get-by-val-out-of-bounds                    4.6877+-0.4735            4.5493+-0.0340          might be 1.0304x faster
   double-pollution-getbyval                          9.2460+-0.3725            9.2216+-0.8765        
   double-pollution-putbyoffset                       4.3815+-0.1026            4.1921+-0.1383          might be 1.0452x faster
   double-to-int32-typed-array-no-inline              2.6275+-0.4253            2.4595+-0.2628          might be 1.0683x faster
   double-to-int32-typed-array                        2.0803+-0.0250     ?      2.0867+-0.0551        ?
   double-to-uint32-typed-array-no-inline             2.3766+-0.0580     ?      2.4772+-0.1494        ? might be 1.0423x slower
   double-to-uint32-typed-array                       2.3418+-0.3162     ?      2.3929+-0.4309        ? might be 1.0218x slower
   elidable-new-object-dag                           44.4836+-1.1779           43.1807+-1.8279          might be 1.0302x faster
   elidable-new-object-roflcopter                    51.8097+-1.4716     ?     52.3661+-2.1987        ? might be 1.0107x slower
   elidable-new-object-then-call                     40.0747+-3.6658     ?     40.7442+-2.3126        ? might be 1.0167x slower
   elidable-new-object-tree                          50.8717+-16.7923          46.3438+-2.4246          might be 1.0977x faster
   empty-string-plus-int                              5.4940+-0.1681     ?      5.6838+-0.5986        ? might be 1.0345x slower
   emscripten-cube2hash                              44.4507+-9.2018           40.6329+-2.4453          might be 1.0940x faster
   exit-length-on-plain-object                       14.9831+-1.0879           14.8979+-0.9164        
   external-arguments-getbyval                        1.4645+-0.0416     ?      1.5491+-0.1304        ? might be 1.0577x slower
   external-arguments-putbyval                        2.4545+-0.4443     ?      2.8650+-1.5529        ? might be 1.1673x slower
   fixed-typed-array-storage-var-index                1.3787+-0.1560            1.3741+-0.2100        
   fixed-typed-array-storage                          0.9543+-0.0330            0.9260+-0.0645          might be 1.0306x faster
   Float32Array-matrix-mult                           4.9673+-0.8198            4.4774+-0.0522          might be 1.1094x faster
   Float32Array-to-Float64Array-set                  60.4835+-3.4936           56.6195+-0.5956          might be 1.0682x faster
   Float64Array-alloc-long-lived                     73.9269+-1.9966     ?     79.9254+-13.3350       ? might be 1.0811x slower
   Float64Array-to-Int16Array-set                    69.3349+-1.6905     ?     70.3605+-2.2667        ? might be 1.0148x slower
   fold-double-to-int                                16.2001+-0.5853           16.1589+-0.5779        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.5045+-2.9370           10.4316+-0.7351          might be 1.1028x faster
   fold-get-by-id-to-multi-get-by-offset              9.4610+-0.9187            9.2103+-1.1670          might be 1.0272x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.1996+-1.9641            8.7515+-3.0911          might be 1.0512x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.3567+-1.0618     ?      8.4680+-0.8838        ? might be 1.0133x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.8547+-1.4587            7.8038+-1.1611        
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.8894+-1.0231            4.0012+-0.7829          might be 1.2220x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.6228+-1.3087            9.4282+-0.7484          might be 1.0206x faster
   fold-put-by-id-to-multi-put-by-offset              8.3786+-0.3268     ?      8.5383+-1.0795        ? might be 1.0191x slower
   fold-put-structure                                 5.3860+-0.0629            4.8452+-1.0622          might be 1.1116x faster
   for-of-iterate-array-entries                       6.8935+-5.8409            5.0598+-0.8331          might be 1.3624x faster
   for-of-iterate-array-keys                          4.0573+-0.3191     ?      4.1765+-0.4480        ? might be 1.0294x slower
   for-of-iterate-array-values                        3.8613+-0.1815            3.8589+-0.2217        
   fround                                            20.8989+-0.3667           20.4143+-1.6359          might be 1.0237x faster
   ftl-library-inlining-dataview                     85.1153+-6.6026           81.6358+-2.0309          might be 1.0426x faster
   ftl-library-inlining                              69.3516+-1.8922     ?     69.5249+-1.5483        ?
   function-dot-apply                                 1.8285+-0.3959            1.6993+-0.3628          might be 1.0760x faster
   function-test                                      3.5164+-0.1847     ?      3.5438+-0.2889        ?
   function-with-eval                               127.6105+-1.0332     ^    124.8522+-1.6755        ^ definitely 1.0221x faster
   gcse-poly-get-less-obvious                        20.5300+-0.6870           20.1382+-1.2168          might be 1.0195x faster
   gcse-poly-get                                     21.7755+-2.0228           21.2375+-1.1431          might be 1.0253x faster
   gcse                                               4.4929+-0.1660     ?      5.8807+-4.2387        ? might be 1.3089x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.8834+-0.1298            2.8052+-0.0238          might be 1.0279x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.2795+-0.1555            6.2502+-0.0597        
   get-by-id-chain-from-try-block                     8.3743+-0.8027     ?      8.4890+-0.4538        ? might be 1.0137x slower
   get-by-id-check-structure-elimination              5.3287+-0.1702     ?      5.4596+-0.1924        ? might be 1.0246x slower
   get-by-id-proto-or-self                           23.0943+-13.6879          18.8479+-0.6202          might be 1.2253x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0485+-0.0413     ?      3.0668+-0.0512        ?
   get-by-id-self-or-proto                           18.9680+-1.4196     ?     22.7599+-9.8966        ? might be 1.1999x slower
   get-by-val-out-of-bounds                           5.0949+-1.9945            4.4470+-0.0839          might be 1.1457x faster
   get_callee_monomorphic                             3.9332+-0.6120            3.9037+-0.7412        
   get_callee_polymorphic                             4.0648+-0.6634     ?      4.1895+-0.7702        ? might be 1.0307x slower
   getter-no-activation                               4.6595+-0.4606            4.5861+-0.2385          might be 1.0160x faster
   getter-richards                                  142.4003+-40.5476         137.1973+-34.8600         might be 1.0379x faster
   getter                                             5.4066+-0.3349            5.2409+-0.0102          might be 1.0316x faster
   global-var-const-infer-fire-from-opt               0.8960+-0.0241     ?      0.9991+-0.1864        ? might be 1.1151x slower
   global-var-const-infer                             0.7853+-0.0661     ?      0.8475+-0.1301        ? might be 1.0791x slower
   HashMap-put-get-iterate-keys                      28.6086+-1.8562           28.2195+-1.1392          might be 1.0138x faster
   HashMap-put-get-iterate                           29.3016+-0.8837           28.8254+-2.5278          might be 1.0165x faster
   HashMap-string-put-get-iterate                    30.0687+-3.1354           28.3559+-1.4015          might be 1.0604x faster
   hoist-make-rope                                   13.2688+-2.8251           13.0786+-1.5836          might be 1.0145x faster
   hoist-poly-check-structure-effectful-loop   
                                                      6.4613+-3.6877            5.3961+-0.5167          might be 1.1974x faster
   hoist-poly-check-structure                         3.9782+-0.2881     ?      4.1473+-0.4929        ? might be 1.0425x slower
   imul-double-only                                   8.1439+-1.2800     ?      8.3878+-1.1383        ? might be 1.0299x slower
   imul-int-only                                     10.0684+-0.8119            9.8715+-0.7153          might be 1.0199x faster
   imul-mixed                                         8.1287+-0.3238            8.1168+-0.4943        
   in-four-cases                                     21.4681+-2.3353     ?     22.3010+-0.3504        ? might be 1.0388x slower
   in-one-case-false                                 11.3798+-1.5427     ?     11.5118+-0.8706        ? might be 1.0116x slower
   in-one-case-true                                  11.2091+-1.2788     ?     12.2377+-2.8207        ? might be 1.0918x slower
   in-two-cases                                      12.1878+-1.2168           11.7430+-0.5547          might be 1.0379x faster
   indexed-properties-in-objects                      3.0750+-0.0312     ?      3.7662+-1.9878        ? might be 1.2248x slower
   infer-closure-const-then-mov-no-inline             3.9373+-0.2485            3.8351+-0.0469          might be 1.0266x faster
   infer-closure-const-then-mov                      18.8322+-1.1267     ?     19.0942+-0.7187        ? might be 1.0139x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.0641+-0.4475           11.9933+-0.5256        
   infer-closure-const-then-put-to-scope             22.7166+-0.6692           22.5123+-1.1201        
   infer-closure-const-then-reenter-no-inline   
                                                     53.0160+-10.4975          50.0029+-0.9682          might be 1.0603x faster
   infer-closure-const-then-reenter                  22.5861+-0.9959     ?     22.8840+-0.7430        ? might be 1.0132x slower
   infer-constant-global-property                    31.1142+-0.9875     ?     34.1115+-5.4883        ? might be 1.0963x slower
   infer-constant-property                            2.8477+-0.0829     ?      2.9055+-0.1309        ? might be 1.0203x slower
   infer-one-time-closure-ten-vars                   12.5960+-0.5002           12.3811+-0.2261          might be 1.0174x faster
   infer-one-time-closure-two-vars                   11.8397+-0.2693           11.8096+-0.3954        
   infer-one-time-closure                            12.0240+-0.4175           11.8898+-0.3060          might be 1.0113x faster
   infer-one-time-deep-closure                       21.4402+-1.1520     ?     23.0994+-6.2063        ? might be 1.0774x slower
   inline-arguments-access                            1.7617+-0.1341     ?      1.9816+-0.9851        ? might be 1.1248x slower
   inline-arguments-aliased-access                    1.8036+-0.0515     ?      1.8180+-0.1104        ?
   inline-arguments-local-escape                     13.1672+-1.2788     ?     13.9139+-1.9750        ? might be 1.0567x slower
   inline-get-scoped-var                              4.6738+-0.1015     ?      4.6813+-0.0874        ?
   inlined-put-by-id-transition                      11.4435+-1.4754     ?     11.9360+-1.7028        ? might be 1.0430x slower
   int-or-other-abs-then-get-by-val                   5.2607+-0.2687            5.2395+-0.1780        
   int-or-other-abs-zero-then-get-by-val             17.3315+-0.4339     ?     17.4791+-0.4121        ?
   int-or-other-add-then-get-by-val                   4.5183+-0.1107     ?      4.6783+-0.5593        ? might be 1.0354x slower
   int-or-other-add                                   5.4868+-0.0418     ?      5.8296+-1.1269        ? might be 1.0625x slower
   int-or-other-div-then-get-by-val                   4.3678+-0.0235     ?      4.4367+-0.1897        ? might be 1.0158x slower
   int-or-other-max-then-get-by-val                   4.5966+-0.1297     ?      4.6733+-0.4175        ? might be 1.0167x slower
   int-or-other-min-then-get-by-val                   4.5869+-0.0101     ?      4.7737+-0.2519        ? might be 1.0407x slower
   int-or-other-mod-then-get-by-val                   4.1273+-0.0437     ?      4.1932+-0.5087        ? might be 1.0160x slower
   int-or-other-mul-then-get-by-val                   4.2175+-0.0492     ?      4.2223+-0.0989        ?
   int-or-other-neg-then-get-by-val                   5.1698+-1.1049            4.8188+-0.0926          might be 1.0728x faster
   int-or-other-neg-zero-then-get-by-val             17.3817+-0.2833           17.2560+-0.5134        
   int-or-other-sub-then-get-by-val                   4.5385+-0.0774            4.5103+-0.0658        
   int-or-other-sub                                   3.8653+-0.4091            3.6663+-0.0519          might be 1.0543x faster
   int-overflow-local                                 4.4630+-0.0346     ?      4.4650+-0.0332        ?
   Int16Array-alloc-long-lived                       53.1999+-3.1194           52.9849+-2.7226        
   Int16Array-bubble-sort-with-byteLength            21.8243+-1.4463     ?     27.9911+-20.2868       ? might be 1.2826x slower
   Int16Array-bubble-sort                            24.0441+-3.5690     ?     25.8372+-3.6176        ? might be 1.0746x slower
   Int16Array-load-int-mul                            1.6815+-0.3223            1.6786+-0.2217        
   Int16Array-to-Int32Array-set                      58.5590+-2.2487     ^     53.2502+-0.7785        ^ definitely 1.0997x faster
   Int32Array-alloc-large                            27.4357+-2.0950           26.6560+-1.1670          might be 1.0292x faster
   Int32Array-alloc-long-lived                       59.8198+-1.5557           57.8986+-2.3138          might be 1.0332x faster
   Int32Array-alloc                                   3.7778+-0.9731            3.5713+-0.2866          might be 1.0578x faster
   Int32Array-Int8Array-view-alloc                    7.0903+-0.3096     ?      7.6689+-1.6629        ? might be 1.0816x slower
   int52-spill                                        7.0353+-0.0680     ?      7.2649+-0.2990        ? might be 1.0326x slower
   Int8Array-alloc-long-lived                        46.5105+-1.6188     ?     48.5087+-1.7380        ? might be 1.0430x slower
   Int8Array-load-with-byteLength                     3.7578+-0.4348            3.5244+-0.0913          might be 1.0662x faster
   Int8Array-load                                     3.5300+-0.0948     ?      3.5379+-0.1838        ?
   integer-divide                                    11.5372+-0.0837     ?     11.8232+-0.8415        ? might be 1.0248x slower
   integer-modulo                                     2.1820+-0.2257     ?      2.2710+-0.1259        ? might be 1.0408x slower
   large-int-captured                                 6.8662+-0.3578     ?      7.2142+-1.2084        ? might be 1.0507x slower
   large-int-neg                                     17.4271+-0.6014     ?     17.7895+-0.7378        ? might be 1.0208x slower
   large-int                                         16.4434+-1.9359           15.9778+-0.4099          might be 1.0291x faster
   logical-not                                        4.6864+-0.1173     ?      4.7880+-0.2977        ? might be 1.0217x slower
   lots-of-fields                                    13.8085+-0.8407     ?     14.4512+-1.8846        ? might be 1.0465x slower
   make-indexed-storage                               3.2803+-0.3587     ?      3.4992+-0.7018        ? might be 1.0667x slower
   make-rope-cse                                      4.7732+-0.1692     ?      4.8723+-0.8439        ? might be 1.0208x slower
   marsaglia-larger-ints                             40.3967+-1.1097     ?     40.6455+-1.3003        ?
   marsaglia-osr-entry                               24.7384+-1.3537           23.3072+-0.6811          might be 1.0614x faster
   max-boolean                                        2.6213+-0.0352     ?      2.6898+-0.2890        ? might be 1.0261x slower
   method-on-number                                  17.5098+-0.3376     ?     22.4109+-14.0126       ? might be 1.2799x slower
   min-boolean                                        2.8070+-0.4702            2.5903+-0.0325          might be 1.0836x faster
   minus-boolean-double                               3.3106+-0.0719            3.3094+-0.0677        
   minus-boolean                                      2.8934+-1.2166            2.4418+-0.0213          might be 1.1850x faster
   misc-strict-eq                                    38.2019+-0.7176     ?     39.9557+-5.6055        ? might be 1.0459x slower
   mod-boolean-double                                11.1942+-0.1016     ?     11.3937+-0.3026        ? might be 1.0178x slower
   mod-boolean                                        8.4171+-0.9810            8.3821+-0.9729        
   mul-boolean-double                                 3.9478+-0.1531            3.8480+-0.0888          might be 1.0259x faster
   mul-boolean                                        3.2902+-0.5882            3.0135+-0.0323          might be 1.0918x faster
   neg-boolean                                        3.3673+-0.1663            3.3660+-0.1113        
   negative-zero-divide                               0.3599+-0.0118            0.3590+-0.0435        
   negative-zero-modulo                               0.5098+-0.2041            0.4619+-0.2687          might be 1.1037x faster
   negative-zero-negate                               0.3439+-0.0301            0.3254+-0.0194          might be 1.0566x faster
   nested-function-parsing                           22.4792+-0.0951           22.3723+-0.2100        
   new-array-buffer-dead                              2.9282+-0.1486            2.9133+-0.0427        
   new-array-buffer-push                              6.8019+-0.1567            6.7240+-0.1963          might be 1.0116x faster
   new-array-dead                                    12.9388+-0.3516           12.5674+-0.1952          might be 1.0296x faster
   new-array-push                                     5.1696+-3.7687            4.1108+-0.4632          might be 1.2576x faster
   number-test                                        3.1060+-0.0325     ?      3.1353+-0.0847        ?
   object-closure-call                                6.3005+-1.1714            5.9045+-0.2945          might be 1.0671x faster
   object-test                                        3.2305+-0.0341     ?      3.2360+-0.0394        ?
   obvious-sink-pathology-taken                     140.4150+-1.2704     ?    140.9290+-0.3972        ?
   obvious-sink-pathology                           135.0107+-1.4988     ?    147.4377+-34.5552       ? might be 1.0920x slower
   obviously-elidable-new-object                     36.5054+-2.3460           35.5518+-1.6774          might be 1.0268x faster
   plus-boolean-arith                                 2.7604+-0.2210            2.7435+-0.3513        
   plus-boolean-double                                3.3502+-0.1848     ?      3.3851+-0.1743        ? might be 1.0104x slower
   plus-boolean                                       2.5173+-0.1290     ?      2.6835+-0.2942        ? might be 1.0660x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.4348+-0.0391     ?      3.4893+-0.1397        ? might be 1.0159x slower
   poly-chain-access-different-prototypes             2.8760+-0.2031     ?      2.9122+-0.2678        ? might be 1.0126x slower
   poly-chain-access-simpler                          3.8694+-1.4612            3.4565+-0.0635          might be 1.1195x faster
   poly-chain-access                                  2.8790+-0.2934     ?      2.9852+-0.3411        ? might be 1.0369x slower
   poly-stricteq                                     59.9619+-1.4524           58.9685+-1.8195          might be 1.0168x faster
   polymorphic-array-call                             1.5725+-0.5264            1.3868+-0.3115          might be 1.1339x faster
   polymorphic-get-by-id                              3.2655+-0.0758     ?      3.8260+-1.7670        ? might be 1.1716x slower
   polymorphic-put-by-id                             28.9439+-2.7264     ?     30.6002+-3.4385        ? might be 1.0572x slower
   polymorphic-structure                             15.3046+-0.4961     ?     15.6932+-0.5003        ? might be 1.0254x slower
   polyvariant-monomorphic-get-by-id                  9.1883+-1.0448            8.9286+-0.2914          might be 1.0291x faster
   proto-getter-access                               10.3055+-0.3461           10.1285+-0.2223          might be 1.0175x faster
   put-by-id-replace-and-transition                  10.1279+-1.1886            9.5262+-1.7196          might be 1.0632x faster
   put-by-id-slightly-polymorphic                     2.9514+-0.0343     ?      3.0458+-0.1614        ? might be 1.0320x slower
   put-by-id                                         14.3270+-1.6635           13.9602+-1.7966          might be 1.0263x faster
   put-by-val-direct                                  0.5931+-0.0086     ?      0.7197+-0.4376        ? might be 1.2135x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.9366+-0.1925     ?      6.2490+-0.1904        ? might be 1.0526x slower
   put-by-val-machine-int                             2.6714+-0.0896     ?      2.6782+-0.0438        ?
   rare-osr-exit-on-local                            15.5684+-0.5559           15.5327+-0.1784        
   register-pressure-from-osr                        22.3459+-0.4009     ?     22.4062+-0.3140        ?
   setter                                             5.4556+-0.1695            5.3942+-0.1466          might be 1.0114x faster
   simple-activation-demo                            28.4766+-0.1222     !     29.4709+-0.1253        ! definitely 1.0349x slower
   simple-getter-access                              13.3254+-1.6219     ?     14.6175+-4.6889        ? might be 1.0970x slower
   simple-poly-call-nested                            9.2507+-0.5871     ?      9.6475+-0.7426        ? might be 1.0429x slower
   simple-poly-call                                   1.4470+-0.1036            1.4467+-0.1793        
   sin-boolean                                       22.9891+-2.0147     ?     23.6413+-0.8697        ? might be 1.0284x slower
   sinkable-new-object-dag                           72.4993+-3.3452     ?     73.8640+-2.0511        ? might be 1.0188x slower
   sinkable-new-object-taken                         53.1371+-0.9178           52.0226+-3.4174          might be 1.0214x faster
   sinkable-new-object                               41.0032+-3.2646           40.4557+-3.6931          might be 1.0135x faster
   slow-array-profile-convergence                     2.9385+-0.0911     ?      3.0474+-0.4819        ? might be 1.0370x slower
   slow-convergence                                   5.1564+-3.2090            3.4407+-0.2040          might be 1.4987x faster
   sparse-conditional                                 1.7697+-1.6104            1.2757+-0.1095          might be 1.3872x faster
   splice-to-remove                                  16.9042+-0.6033     ?     17.5367+-0.9272        ? might be 1.0374x slower
   string-char-code-at                               18.4998+-0.4409           18.3556+-0.1475        
   string-concat-object                               2.7486+-0.3118            2.6556+-0.2396          might be 1.0350x faster
   string-concat-pair-object                          2.5237+-0.0460            2.5089+-0.0252        
   string-concat-pair-simple                         13.4117+-1.5577           13.1990+-1.6201          might be 1.0161x faster
   string-concat-simple                              12.4724+-1.5736           12.4150+-1.3737        
   string-cons-repeat                                 8.2840+-1.5469     ?      9.8802+-0.6525        ? might be 1.1927x slower
   string-cons-tower                                  8.1694+-0.5148     ?      9.0427+-1.6033        ? might be 1.1069x slower
   string-equality                                   17.7189+-0.2321     ?     18.0007+-0.5274        ? might be 1.0159x slower
   string-get-by-val-big-char                         7.4280+-0.4092     ?      8.3806+-2.8309        ? might be 1.1282x slower
   string-get-by-val-out-of-bounds-insane             3.9048+-0.2231     ?      3.9883+-0.1867        ? might be 1.0214x slower
   string-get-by-val-out-of-bounds                    5.9940+-1.9280            5.7580+-1.1536          might be 1.0410x faster
   string-get-by-val                                  3.5812+-0.6738            3.3987+-0.0568          might be 1.0537x faster
   string-hash                                        2.2836+-0.1582            2.2501+-0.0137          might be 1.0149x faster
   string-long-ident-equality                        14.6225+-0.2690     ?     15.0852+-0.9357        ? might be 1.0316x slower
   string-out-of-bounds                              15.3398+-0.8328     ?     15.3955+-1.0120        ?
   string-repeat-arith                               32.8624+-1.2783           32.3467+-0.9611          might be 1.0159x faster
   string-sub                                        65.2892+-1.8509           64.2690+-1.9304          might be 1.0159x faster
   string-test                                        3.0943+-0.1310            3.0653+-0.0655        
   string-var-equality                               31.9423+-1.3715           31.4468+-1.1211          might be 1.0158x faster
   structure-hoist-over-transitions                   2.6403+-0.0507     ?      2.6973+-0.2046        ? might be 1.0216x slower
   substring-concat-weird                            46.2995+-20.6763          39.9791+-1.9881          might be 1.1581x faster
   substring-concat                                  52.2427+-32.9617          41.8105+-1.8474          might be 1.2495x faster
   substring                                         48.6210+-6.8250     ?     57.3079+-33.7171       ? might be 1.1787x slower
   switch-char-constant                               2.7711+-0.0338     ?      2.7995+-0.0391        ? might be 1.0103x slower
   switch-char                                        7.6321+-0.5567     ?      8.8349+-1.8201        ? might be 1.1576x slower
   switch-constant                                    8.3331+-0.3295     ?      8.4852+-0.7510        ? might be 1.0183x slower
   switch-string-basic-big-var                       15.6416+-0.5043     ?     15.7679+-0.8306        ?
   switch-string-basic-big                           14.5283+-0.5544           14.3853+-0.4371        
   switch-string-basic-var                           20.0953+-15.5536          14.7420+-0.3433          might be 1.3631x faster
   switch-string-basic                               14.0074+-0.6675           13.7230+-0.4588          might be 1.0207x faster
   switch-string-big-length-tower-var                20.7465+-0.6393           20.4052+-0.3625          might be 1.0167x faster
   switch-string-length-tower-var                    15.1265+-0.4033     ?     15.3610+-0.4541        ? might be 1.0155x slower
   switch-string-length-tower                        13.3100+-0.7230           13.3057+-0.3814        
   switch-string-short                               13.2535+-0.4878           13.2094+-0.4428        
   switch                                            12.4083+-0.5648     ?     13.3530+-0.7820        ? might be 1.0761x slower
   tear-off-arguments-simple                          2.0284+-0.0892     ?      2.0570+-0.1971        ? might be 1.0141x slower
   tear-off-arguments                                 2.8776+-0.0397     ?      2.9191+-0.1037        ? might be 1.0144x slower
   temporal-structure                                15.7438+-9.1255           14.8119+-7.2794          might be 1.0629x faster
   to-int32-boolean                                  14.4197+-0.3638           13.9302+-0.2048          might be 1.0351x faster
   undefined-property-access                        389.0835+-0.6218     !    390.7419+-0.2234        ! definitely 1.0043x slower
   undefined-test                                     3.1800+-0.1835     ?      3.2465+-0.3102        ? might be 1.0209x slower
   unprofiled-licm                                   23.4426+-0.4655     ?     26.6584+-11.2336       ? might be 1.1372x slower
   weird-inlining-const-prop                          2.3352+-0.1929     ?      2.7089+-0.4512        ? might be 1.1600x slower

   <arithmetic>                                      18.6309+-0.2709           18.5855+-0.4050          might be 1.0024x faster
   <geometric> *                                      8.6761+-0.0775            8.6757+-0.0767          might be 1.0000x faster
   <harmonic>                                         4.4263+-0.1143     ?      4.4279+-0.0812        ? might be 1.0004x slower

                                                           ToT                      Hacks                                       
AsmBench:
   bigfib.cpp                                       606.0417+-281.8439        516.6020+-2.6077          might be 1.1731x faster
   cray.c                                           497.8179+-159.1497        445.2653+-3.3715          might be 1.1180x faster
   dry.c                                            512.9238+-2.9695          505.0775+-19.3583         might be 1.0155x faster
   FloatMM.c                                        803.8627+-17.7236         800.1218+-6.1871        
   gcc-loops.cpp                                   4267.2762+-20.9748        4266.8130+-7.5286        
   n-body.c                                        1014.9383+-4.0234         1011.7133+-2.6030        
   Quicksort.c                                      453.8568+-9.6806          452.4697+-9.9614        
   stepanov_container.cpp                          4709.1663+-2788.8796      3806.6075+-9.2931          might be 1.2371x faster
   Towers.c                                         270.3608+-1.0263     ?    272.9795+-7.5764        ?

   <arithmetic>                                    1459.5827+-335.4788       1341.9611+-2.0783          might be 1.0876x faster
   <geometric> *                                    871.4501+-88.7739         830.8186+-6.4264          might be 1.0489x faster
   <harmonic>                                       628.0399+-33.7528         609.2786+-7.5879          might be 1.0308x faster

                                                           ToT                      Hacks                                       
CompressionBench:
   huffman                                          390.5515+-0.6049     ^    371.9929+-0.1569        ^ definitely 1.0499x faster
   arithmetic-simple                                415.8035+-4.5546          415.7178+-2.0462        
   arithmetic-precise                               309.1473+-2.9329     ?    310.0253+-1.4251        ?
   arithmetic-complex-precise                       309.6459+-1.1425     ?    309.9286+-3.5670        ?
   arithmetic-precise-order-0                       442.9757+-8.1130     ?    497.5246+-153.7694      ? might be 1.1231x slower
   arithmetic-precise-order-1                       349.3610+-1.0678     ?    354.2745+-18.5754       ? might be 1.0141x slower
   arithmetic-precise-order-2                       390.0105+-3.1114     ?    390.8430+-1.9035        ?
   arithmetic-simple-order-1                        443.7272+-2.2876     ?    444.3480+-2.2648        ?
   arithmetic-simple-order-2                        508.1744+-43.9206         493.5859+-3.3171          might be 1.0296x faster
   lz-string                                        350.5391+-4.7639     ?    351.3465+-10.5778       ?

   <arithmetic>                                     390.9936+-4.1851     ?    393.9587+-14.9502       ? might be 1.0076x slower
   <geometric> *                                    386.3414+-2.9811     ?    388.3015+-10.7084       ? might be 1.0051x slower
   <harmonic>                                       381.7915+-2.0297     ?    383.0137+-7.4881        ? might be 1.0032x slower

                                                           ToT                      Hacks                                       
All benchmarks:
   <arithmetic>                                     104.7648+-8.0148          101.3865+-1.5294          might be 1.0333x faster
   <geometric>                                       14.1584+-0.1005           14.1208+-0.0911          might be 1.0027x faster
   <harmonic>                                         3.6025+-0.0177     ?      3.6143+-0.1008        ? might be 1.0033x slower

                                                           ToT                      Hacks                                       
Geomean of preferred means:
   <scaled-result>                                   67.9138+-1.7434           67.1632+-0.8812          might be 1.0112x faster
Comment 7 Andreas Kling 2015-03-10 13:31:02 PDT
(In reply to comment #5)
> I think you could fix the iteration thing by just popping from the end of
> the vector (or taking from the begin of the hash table) rather than keeping
> an index.

Yeah, that'll be very nice. Thanks for the suggestion :)
Comment 8 Andreas Kling 2015-03-10 14:08:46 PDT
Created attachment 248356 [details]
Patch for landing
Comment 9 WebKit Commit Bot 2015-03-10 15:59:39 PDT
Comment on attachment 248356 [details]
Patch for landing

Clearing flags on attachment: 248356

Committed r181350: <http://trac.webkit.org/changeset/181350>
Comment 10 WebKit Commit Bot 2015-03-10 15:59:43 PDT
All reviewed patches have been landed.  Closing bug.
Comment 11 Chris Dumez 2015-03-11 09:11:12 PDT
http://jsfiddle.net/fvyw4ba0/3/ still gets killed after this change.
Comment 12 Geoffrey Garen 2015-03-11 09:54:29 PDT
Yes, I think the remaining bug -- and the reason that your two jsfiddle still crash -- is that the high rate of eden GC promotes objects into old space, and then we forget how big they are, so we never GC old space.

I'm working on a patch to remember the size of these canvases once in old space, like we do for some other objects. That should fix the jsfiddles.