Bug 72311 - Inline caches that refer to otherwise dead objects should be cleared
: Inline caches that refer to otherwise dead objects should be cleared
Status: RESOLVED FIXED
: WebKit
JavaScriptCore
: 528+ (Nightly build)
: All All
: P2 Normal
Assigned To:
:
: InRadar
: 72312
:
  Show dependency treegraph
 
Reported: 2011-11-14 14:26 PST by
Modified: 2011-11-21 01:04 PST (History)


Attachments
the patch (41.96 KB, patch)
2011-11-17 20:01 PST, Filip Pizlo
webkit-ews: commit‑queue-
Review Patch | Details | Formatted Diff | Diff
page.js (1.11 KB, text/plain)
2011-11-17 21:22 PST, Filip Pizlo
no flags Details
page.html (222 bytes, text/plain)
2011-11-17 21:23 PST, Filip Pizlo
no flags Details
the patch (47.23 KB, patch)
2011-11-17 23:17 PST, Filip Pizlo
no flags Review Patch | Details | Formatted Diff | Diff
the patch (46.74 KB, patch)
2011-11-17 23:37 PST, Filip Pizlo
no flags Review Patch | Details | Formatted Diff | Diff
the patch (47.04 KB, patch)
2011-11-17 23:40 PST, Filip Pizlo
no flags Review Patch | Details | Formatted Diff | Diff
the patch (48.74 KB, patch)
2011-11-18 01:14 PST, Filip Pizlo
ggaren: review+
Review Patch | Details | Formatted Diff | Diff
the patch (48.81 KB, patch)
2011-11-20 19:20 PST, Filip Pizlo
no flags Review Patch | Details | Formatted Diff | Diff
build fix (2.00 KB, patch)
2011-11-21 00:26 PST, Filip Pizlo
no flags Review Patch | Details | Formatted Diff | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2011-11-14 14:26:40 PST
Currently if we perform inline cache optimization, this creates strong references from the CodeBlock to whatever objects the inline cache tests (structures, functions, prototypes, etc).  This means that even if those objects are otherwise dead but the CodeBlock is alive, the objects are kept alive, possibly much longer than they otherwise would be.

For now, this is an umbrella bug, since this will require a fair bit of work.
------- Comment #1 From 2011-11-15 02:15:34 PST -------
The simple thing to do would be to clear inline caches on a full GC.  Removing collected entries from IC entries would be better of course, but more complicated.
------- Comment #2 From 2011-11-15 02:24:39 PST -------
(In reply to comment #1)
> The simple thing to do would be to clear inline caches on a full GC.  Removing collected entries from IC entries would be better of course, but more complicated.

That would be the simple thing, but see https://bugs.webkit.org/show_bug.cgi?id=72312.  The DFG will "inline" inline caches.  That is, if the old JIT had built up an IC for a monomorphic heap read, then the DFG will simplify the code to:

CheckStructure(OpInfo(the structure), base)
GetByOffset(OpInfo(some offset), base)

This leads to a number of profitable optimizations:

1) The slow case of the IC is omitted, leading to code size reduction.  This is by itself a large win.

2) Multiple CheckStructure's on the same base with no interleaved side-effecting ops can be CSE'd, so that only the first one remains.

3) Information gleaned from a CheckStructure can be forward-propagated by the CFA, which can eliminate some type checks (say that a bit later the DFG emitted code that required that 'base' is a JSFinalObject, and the structure corresponds to a strict subset of JSFinalObjects - then the JSFinalObject check can be elided).

4) The GetByOffset is now known to be a pure operation, so can be subject to CSE, and will not interfere with CSE of other operations.

But this also means that we can't just take the approach of blowing away inline caches on full GC, since this is no longer an inline cache, in the traditional sense - it's an intrinsic part of the code.  So we have to have a way of triggering OSR points on those "inlined" inline caches that are no longer valid if the structure in question is dead.  That's what I'm working on now.
------- Comment #3 From 2011-11-15 02:51:30 PST -------
I see what you mean; I didn't understand what you had meant by "inline cache optimization". Thanks for the explanation!
------- Comment #4 From 2011-11-17 20:01:08 PST -------
Created an attachment (id=115728) [details]
the patch

This combines the patch on https://bugs.webkit.org/show_bug.cgi?id=72312 with full inline cache clearing support.  So far it looks like it works, and performance looks mostly fine, except something strange is happening in V8-regexp.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc WeakCaches:/Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc --remote oldmac,bigmac
Packaging VM builds for remote hosts...
Sending VM builds to oldmac...
Running on oldmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_1949_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
"WeakCaches" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

Collected 12 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.

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                9.0475+-0.0387          8.9664+-0.0477       
   3d-morph                              10.4450+-0.1721    ^    10.1015+-0.0355       ^ definitely 1.0340x faster
   3d-raytrace                            9.2003+-0.0617    ?     9.2515+-0.0654       ?
   access-binary-trees                    1.9097+-0.0069    ?     1.9349+-0.0326       ? might be 1.0132x slower
   access-fannkuch                        9.1217+-0.0200    ^     9.0871+-0.0084       ^ definitely 1.0038x faster
   access-nbody                           5.0345+-0.0044    ?     5.0679+-0.0381       ?
   access-nsieve                          3.7133+-0.0101          3.7111+-0.0060       
   bitops-3bit-bits-in-byte               1.4966+-0.0164          1.4959+-0.0184       
   bitops-bits-in-byte                    5.9275+-0.0180    ?     5.9298+-0.0159       ?
   bitops-bitwise-and                     3.9731+-0.0059    ?     3.9737+-0.0080       ?
   bitops-nsieve-bits                     6.7840+-0.0316    ?     6.8390+-0.0420       ?
   controlflow-recursive                  2.7644+-0.0177    ?     2.7921+-0.0369       ? might be 1.0100x slower
   crypto-aes                             8.8837+-0.3084          8.6743+-0.0546         might be 1.0241x faster
   crypto-md5                             3.0347+-0.0590          2.9922+-0.0132         might be 1.0142x faster
   crypto-sha1                            2.6152+-0.0334    ?     2.6323+-0.0314       ?
   date-format-tofte                     12.9762+-0.1771    ?    13.1488+-0.0922       ? might be 1.0133x slower
   date-format-xparb                     13.8699+-0.1296    !    14.2420+-0.1412       ! definitely 1.0268x slower
   math-cordic                            8.6768+-0.0372    ^     8.6144+-0.0209       ^ definitely 1.0073x faster
   math-partial-sums                     12.6416+-0.0401         12.6347+-0.0488       
   math-spectral-norm                     3.1685+-0.0557          3.1329+-0.0089         might be 1.0114x faster
   regexp-dna                            15.6974+-0.0541    ?    15.7449+-0.0606       ?
   string-base64                          4.7532+-0.0370    ?     4.7739+-0.0392       ?
   string-fasta                           8.9202+-0.0318    ?     9.0204+-0.0890       ? might be 1.0112x slower
   string-tagcloud                       15.9672+-0.1008         15.7997+-0.1061         might be 1.0106x faster
   string-unpack-code                    27.4349+-0.1522    ?    27.4398+-0.0469       ?
   string-validate-input                  6.9217+-0.1974          6.7428+-0.0794         might be 1.0265x faster

   <arithmetic> *                         8.2684+-0.0264          8.2594+-0.0244         might be 1.0011x faster
   <geometric>                            6.5486+-0.0233          6.5411+-0.0212         might be 1.0011x faster
   <harmonic>                             5.0696+-0.0217    ?     5.0700+-0.0222       ? might be 1.0001x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                93.3679+-0.3252    ?    93.7752+-0.3924       ?
   deltablue                            205.0419+-0.7970    !   207.4518+-1.3348       ! definitely 1.0118x slower
   earley-boyer                         127.6397+-1.6513        125.9481+-1.5823         might be 1.0134x faster
   raytrace                              75.9334+-0.2453    ?    76.5853+-0.5557       ?
   regexp                               147.4395+-0.4611    !   148.2696+-0.2811       ! definitely 1.0056x slower
   richards                             166.2447+-0.2814        166.0438+-0.3616       
   splay                                107.5413+-1.4244        106.9378+-0.7132       

   <arithmetic>                         131.8869+-0.4721    ?   132.1445+-0.3777       ? might be 1.0020x slower
   <geometric> *                        125.4485+-0.5032    ?   125.6287+-0.3867       ? might be 1.0014x slower
   <harmonic>                           119.2648+-0.5089    ?   119.4452+-0.4084       ? might be 1.0015x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             895.4246+-0.9915        895.1654+-0.4022       
   audio-beat-detection                 248.5174+-0.3483    !   250.5549+-0.8042       ! definitely 1.0082x slower
   audio-dft                            314.1673+-2.4462    ?   314.1825+-2.4322       ?
   audio-fft                            162.3186+-0.8125    ?   162.3518+-0.7823       ?
   audio-oscillator                     355.8777+-3.1971    ^   344.9823+-4.3299       ^ definitely 1.0316x faster
   imaging-darkroom                     404.1052+-5.4632    ?   405.4850+-6.1308       ?
   imaging-desaturate                   291.2879+-0.1209        291.1845+-0.0613       
   imaging-gaussian-blur                750.8557+-0.3035    ?   752.8046+-3.3790       ?
   json-parse-financial                  89.8248+-0.6193         89.5875+-0.1899       
   json-stringify-tinderbox             104.5581+-0.2745    ?   105.1705+-0.5748       ?
   stanford-crypto-aes                  143.2029+-1.6641        143.0827+-0.7456       
   stanford-crypto-ccm                  137.4856+-0.5693    !   140.4658+-1.0226       ! definitely 1.0217x slower
   stanford-crypto-pbkdf2               280.5099+-1.9514    ?   283.5715+-2.2643       ? might be 1.0109x slower
   stanford-crypto-sha256-iterative     112.9657+-0.2543        112.9229+-0.2411       

   <arithmetic> *                       306.5072+-0.4968    ?   306.5366+-0.6874       ? might be 1.0001x slower
   <geometric>                          239.8899+-0.4148    ?   240.1797+-0.5115       ? might be 1.0012x slower
   <harmonic>                           194.6864+-0.3307    ?   195.1378+-0.3639       ? might be 1.0023x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   <arithmetic>                         115.5168+-0.1711    ?   115.5589+-0.2314       ? might be 1.0004x slower
   <geometric>                           29.7140+-0.0748         29.7123+-0.0711         might be 1.0001x faster
   <harmonic>                             8.9367+-0.0377    ?     8.9378+-0.0384       ? might be 1.0001x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   <scaled-result>                       68.2507+-0.1561    ?    68.2608+-0.1430       ? might be 1.0001x slower

Sending VM builds to bigmac...
Running on bigmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_1951_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
"WeakCaches" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

Collected 12 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.

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                7.5728+-0.1215          7.4300+-0.0254         might be 1.0192x faster
   3d-morph                               8.4423+-0.0879    ?     8.4828+-0.1291       ?
   3d-raytrace                            7.6856+-0.0513    ?     7.7025+-0.0624       ?
   access-binary-trees                    1.5943+-0.0069    ?     1.5977+-0.0082       ?
   access-fannkuch                        7.5383+-0.0104    ^     7.5180+-0.0082       ^ definitely 1.0027x faster
   access-nbody                           4.1663+-0.0092    !     4.1817+-0.0061       ! definitely 1.0037x slower
   access-nsieve                          3.1429+-0.0427          3.1428+-0.0375       
   bitops-3bit-bits-in-byte               1.2399+-0.0138          1.2390+-0.0095       
   bitops-bits-in-byte                    4.9107+-0.0055          4.8973+-0.0198       
   bitops-bitwise-and                     3.2831+-0.0045    ?     3.2890+-0.0055       ?
   bitops-nsieve-bits                     5.6333+-0.0338    ?     5.6556+-0.0387       ?
   controlflow-recursive                  2.2875+-0.0123    ?     2.2913+-0.0126       ?
   crypto-aes                             7.1496+-0.0385    ?     7.3631+-0.2183       ? might be 1.0299x slower
   crypto-md5                             2.4973+-0.0094          2.4956+-0.0086       
   crypto-sha1                            2.1853+-0.0329          2.1757+-0.0174       
   date-format-tofte                     10.6273+-0.0559    !    10.7725+-0.0539       ! definitely 1.0137x slower
   date-format-xparb                     11.4395+-0.2274    ?    11.4434+-0.0890       ?
   math-cordic                            7.1588+-0.0780    ?     7.1610+-0.0499       ?
   math-partial-sums                     10.4612+-0.0344    ?    10.4707+-0.0383       ?
   math-spectral-norm                     2.6258+-0.0326          2.6008+-0.0081       
   regexp-dna                            12.9697+-0.0534    ?    13.0062+-0.0585       ?
   string-base64                          3.9142+-0.0170    ?     3.9304+-0.0123       ?
   string-fasta                           7.3654+-0.0195    !     7.4126+-0.0144       ! definitely 1.0064x slower
   string-tagcloud                       13.0923+-0.0652    ^    12.9657+-0.0327       ^ definitely 1.0098x faster
   string-unpack-code                    22.2100+-0.1262         22.1619+-0.0837       
   string-validate-input                  5.5449+-0.0392    ?     5.6332+-0.0621       ? might be 1.0159x slower

   <arithmetic> *                         6.7976+-0.0218    ?     6.8085+-0.0208       ? might be 1.0016x slower
   <geometric>                            5.4030+-0.0185    ?     5.4117+-0.0177       ? might be 1.0016x slower
   <harmonic>                             4.1972+-0.0165    ?     4.2005+-0.0144       ? might be 1.0008x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                77.3068+-0.2470    ?    78.5472+-1.0606       ? might be 1.0160x slower
   deltablue                            169.1565+-0.5722    ?   169.9061+-0.7509       ?
   earley-boyer                         105.8436+-1.2681    ?   106.1506+-1.8865       ?
   raytrace                              62.5844+-0.6697    ?    63.4609+-0.5217       ? might be 1.0140x slower
   regexp                               123.0489+-0.4275    !   124.9241+-0.9108       ! definitely 1.0152x slower
   richards                             138.1625+-0.3256    ?   138.3885+-0.7911       ?
   splay                                 90.0783+-0.9855    ?    90.5373+-1.2191       ?

   <arithmetic>                         109.4544+-0.2879    !   110.2735+-0.4132       ! definitely 1.0075x slower
   <geometric> *                        104.1137+-0.3218    !   104.9882+-0.4307       ! definitely 1.0084x slower
   <harmonic>                            98.9421+-0.3618    !    99.8732+-0.4189       ! definitely 1.0094x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             817.2374+-11.1240   ?   827.1865+-0.5183       ? might be 1.0122x slower
   audio-beat-detection                 203.9402+-0.3269    !   206.1474+-0.6714       ! definitely 1.0108x slower
   audio-dft                            261.1492+-2.3054        259.6474+-2.6116       
   audio-fft                            132.7391+-0.0777    ?   132.8311+-0.1997       ?
   audio-oscillator                     294.2755+-1.5612    ^   283.3337+-4.9055       ^ definitely 1.0386x faster
   imaging-darkroom                     333.9641+-4.6759    ?   334.3031+-4.9627       ?
   imaging-desaturate                   240.7603+-0.1246    ?   240.8660+-0.3476       ?
   imaging-gaussian-blur                620.6148+-0.1868    ?   621.9812+-2.4208       ?
   json-parse-financial                  73.2566+-0.4176    !    74.1150+-0.3143       ! definitely 1.0117x slower
   json-stringify-tinderbox              86.3845+-0.2568    ?    86.7771+-0.2189       ?
   stanford-crypto-aes                  117.3842+-0.6165    ?   118.7492+-0.7655       ? might be 1.0116x slower
   stanford-crypto-ccm                  116.1933+-0.9027    ?   117.1747+-0.7135       ?
   stanford-crypto-pbkdf2               233.0368+-1.4568        232.9577+-0.2467       
   stanford-crypto-sha256-iterative      93.1566+-0.2464         93.0921+-0.3027       

   <arithmetic> *                       258.8638+-1.0708    ?   259.2259+-0.4904       ? might be 1.0014x slower
   <geometric>                          199.5603+-0.5626    ?   199.8244+-0.4281       ? might be 1.0013x slower
   <harmonic>                           160.8641+-0.4246    ?   161.4155+-0.3345       ? might be 1.0034x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   <arithmetic>                          97.1705+-0.3044    ?    97.4063+-0.1669       ? might be 1.0024x slower
   <geometric>                           24.5976+-0.0601    ?    24.6601+-0.0603       ? might be 1.0025x slower
   <harmonic>                             7.3988+-0.0285    ?     7.4055+-0.0250       ? might be 1.0009x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   <scaled-result>                       56.7948+-0.1173    ?    57.0104+-0.1230       ? might be 1.0038x slower

[pizlo@nitroflex bencher]
------- Comment #5 From 2011-11-17 20:01:49 PST -------
(From update of attachment 115728 [details])
Clearing r? because I didn't meant to set it yet.  I have some more investigating to do.
------- Comment #6 From 2011-11-17 20:04:14 PST -------
Attachment 115728 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1

Source/JavaScriptCore/bytecode/CodeBlock.h:175:  The parameter name "repatchBuffer" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.
------- Comment #7 From 2011-11-17 21:07:33 PST -------
(From update of attachment 115728 [details])
Attachment 115728 [details] did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10508505
------- Comment #8 From 2011-11-17 21:22:39 PST -------
Created an attachment (id=115733) [details]
page.js
------- Comment #9 From 2011-11-17 21:23:39 PST -------
Created an attachment (id=115734) [details]
page.html
------- Comment #10 From 2011-11-17 21:24:57 PST -------
I just posted a nifty test case that demos the effects of this patch.

Run the demo with DumpRenderTree, from your checkout (since the page.html code looks for LayoutTests/fast/js/resources/somethingorother.js).  Works best if you disable recompiling all JS functions on GCs.  Without the patch, the heap just keeps growing in size.  With the patch, the heap stays the same size.
------- Comment #11 From 2011-11-17 22:24:48 PST -------
Well, I can't get the 0.8% V8 slow-down to repro on any of my three machines.  I'm going to say that this is perf-neutral.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc WeakCaches:/Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc --remote oldmac,bigmac --local
Packaging VM builds for remote hosts...
Sending VM builds to oldmac...
Running on oldmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_2215_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
"WeakCaches" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

Collected 12 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.

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                8.8947+-0.0400    ?     8.9120+-0.0378       ?
   3d-morph                              10.1878+-0.0429         10.1173+-0.0649       
   3d-raytrace                            9.1729+-0.0690    ?     9.2488+-0.0730       ?
   access-binary-trees                    1.9086+-0.0098    ?     1.9167+-0.0063       ?
   access-fannkuch                        9.0967+-0.0116    ?     9.1367+-0.0876       ?
   access-nbody                           5.0368+-0.0056    ?     5.0442+-0.0069       ?
   access-nsieve                          3.7415+-0.0431          3.7128+-0.0060       
   bitops-3bit-bits-in-byte               1.4913+-0.0132    ?     1.5021+-0.0167       ?
   bitops-bits-in-byte                    5.9335+-0.0079          5.9224+-0.0140       
   bitops-bitwise-and                     3.9795+-0.0087          3.9756+-0.0143       
   bitops-nsieve-bits                     6.8585+-0.0446          6.8020+-0.0472       
   controlflow-recursive                  2.7623+-0.0183    ?     2.7647+-0.0136       ?
   crypto-aes                             8.6855+-0.0931          8.6660+-0.0754       
   crypto-md5                             2.9867+-0.0080    ?     2.9877+-0.0124       ?
   crypto-sha1                            2.6099+-0.0191    ?     2.6214+-0.0294       ?
   date-format-tofte                     12.8921+-0.1053    ?    13.0743+-0.1502       ? might be 1.0141x slower
   date-format-xparb                     14.6301+-0.1444         14.4959+-0.1759       
   math-cordic                            8.6518+-0.0400          8.6261+-0.0172       
   math-partial-sums                     12.6500+-0.0440         12.6309+-0.0280       
   math-spectral-norm                     3.1304+-0.0155          3.1296+-0.0072       
   regexp-dna                            15.7034+-0.0536    ?    15.7611+-0.0604       ?
   string-base64                          4.7400+-0.0370    ?     4.7764+-0.0342       ?
   string-fasta                           8.9695+-0.0621    ?     8.9759+-0.0260       ?
   string-tagcloud                       15.8240+-0.0888         15.7925+-0.1060       
   string-unpack-code                    27.5915+-0.1673         27.5327+-0.0761       
   string-validate-input                  6.7825+-0.0632    ?     6.8006+-0.0838       ?

   <arithmetic> *                         8.2658+-0.0266    ?     8.2664+-0.0292       ? might be 1.0001x slower
   <geometric>                            6.5344+-0.0204    ?     6.5383+-0.0242       ? might be 1.0006x slower
   <harmonic>                             5.0544+-0.0154    ?     5.0626+-0.0211       ? might be 1.0016x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                93.2477+-0.3185    ?    93.7770+-0.4298       ?
   deltablue                            204.1601+-1.0130    !   206.3418+-0.8906       ! definitely 1.0107x slower
   earley-boyer                         124.6204+-0.2962    ?   126.0559+-1.2859       ? might be 1.0115x slower
   raytrace                              77.2042+-0.9266         76.3591+-0.3855         might be 1.0111x faster
   regexp                               148.3235+-0.2242    ?   148.4812+-0.3107       ?
   richards                             166.8579+-1.5676    ?   167.0018+-0.8833       ?
   splay                                106.7798+-1.2362        106.2237+-0.8954       

   <arithmetic>                         131.5991+-0.3795    ?   132.0343+-0.3261       ? might be 1.0033x slower
   <geometric> *                        125.2613+-0.3946    ?   125.5044+-0.3336       ? might be 1.0019x slower
   <harmonic>                           119.2370+-0.4347    ?   119.2910+-0.3460       ? might be 1.0005x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             895.2102+-0.5776    ?   895.3543+-0.8576       ?
   audio-beat-detection                 248.4783+-0.5454    !   251.2638+-1.9747       ! definitely 1.0112x slower
   audio-dft                            314.4556+-2.8743        313.9113+-2.8510       
   audio-fft                            161.9779+-0.2354    ?   162.3217+-0.8390       ?
   audio-oscillator                     355.3719+-2.8833        347.5008+-5.6341         might be 1.0227x faster
   imaging-darkroom                     407.3586+-6.4591        406.5261+-6.6644       
   imaging-desaturate                   291.1644+-0.0432    ?   291.1873+-0.0935       ?
   imaging-gaussian-blur                751.0524+-0.2825        750.7334+-0.1394       
   json-parse-financial                  88.8708+-0.4604    ?    89.3269+-0.3017       ?
   json-stringify-tinderbox             104.3903+-0.2122        104.2862+-0.3965       
   stanford-crypto-aes                  139.9116+-0.7371    !   145.5284+-3.5541       ! definitely 1.0401x slower
   stanford-crypto-ccm                  137.4390+-0.5954    !   140.8775+-1.1446       ! definitely 1.0250x slower
   stanford-crypto-pbkdf2               281.6578+-2.1680    ?   284.5136+-2.4063       ? might be 1.0101x slower
   stanford-crypto-sha256-iterative     113.8772+-0.7313    ^   112.6475+-0.3416       ^ definitely 1.0109x faster

   <arithmetic> *                       306.5154+-0.6597    ?   306.8556+-0.6732       ? might be 1.0011x slower
   <geometric>                          239.5670+-0.4735    ?   240.4821+-0.5706       ? might be 1.0038x slower
   <harmonic>                           194.1157+-0.2640    !   195.2375+-0.4884       ! definitely 1.0058x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   <arithmetic>                         115.4749+-0.1876    ?   115.6414+-0.2313       ? might be 1.0014x slower
   <geometric>                           29.6598+-0.0535    ?    29.7120+-0.0822       ? might be 1.0018x slower
   <harmonic>                             8.9102+-0.0264    ?     8.9250+-0.0367       ? might be 1.0017x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   <scaled-result>                       68.2101+-0.1005    ?    68.2813+-0.1651       ? might be 1.0010x slower

Sending VM builds to bigmac...
Running on bigmac...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_2217_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
"WeakCaches" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

Collected 12 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.

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                7.4087+-0.0348    ?     7.4240+-0.0413       ?
   3d-morph                               8.4219+-0.0381          8.3901+-0.0348       
   3d-raytrace                            7.6843+-0.0588    ?     7.7228+-0.0446       ?
   access-binary-trees                    1.5952+-0.0034    ?     1.6041+-0.0109       ?
   access-fannkuch                        7.5366+-0.0133          7.5282+-0.0137       
   access-nbody                           4.1748+-0.0094    ?     4.1847+-0.0062       ?
   access-nsieve                          3.1552+-0.0510    ?     3.1602+-0.0537       ?
   bitops-3bit-bits-in-byte               1.2371+-0.0114    !     1.2710+-0.0135       ! definitely 1.0274x slower
   bitops-bits-in-byte                    4.9017+-0.0150    ?     4.9113+-0.0445       ?
   bitops-bitwise-and                     3.3292+-0.0417          3.2868+-0.0042         might be 1.0129x faster
   bitops-nsieve-bits                     5.6784+-0.0604          5.6720+-0.0439       
   controlflow-recursive                  2.3014+-0.0217          2.3001+-0.0263       
   crypto-aes                             7.2437+-0.1201          7.1714+-0.0298         might be 1.0101x faster
   crypto-md5                             2.5080+-0.0209    ?     2.5095+-0.0196       ?
   crypto-sha1                            2.1831+-0.0268          2.1817+-0.0189       
   date-format-tofte                     10.6713+-0.0589         10.6563+-0.0450       
   date-format-xparb                     11.6481+-0.1539         11.5045+-0.0940         might be 1.0125x faster
   math-cordic                            7.1305+-0.0232    ?     7.1495+-0.0339       ?
   math-partial-sums                     10.4843+-0.0197         10.4432+-0.0333       
   math-spectral-norm                     2.5910+-0.0039    !     2.5997+-0.0048       ! definitely 1.0033x slower
   regexp-dna                            12.9868+-0.0526    ?    13.0635+-0.0692       ?
   string-base64                          3.9365+-0.0268    ?     3.9666+-0.0297       ?
   string-fasta                           7.4048+-0.0224    ?     7.4262+-0.0165       ?
   string-tagcloud                       13.0262+-0.0455         13.0190+-0.0588       
   string-unpack-code                    22.2219+-0.0879    ?    22.3529+-0.0763       ?
   string-validate-input                  5.5902+-0.0317    ?     5.6688+-0.1341       ? might be 1.0141x slower

   <arithmetic> *                         6.8096+-0.0205    ?     6.8142+-0.0190       ? might be 1.0007x slower
   <geometric>                            5.4124+-0.0170    ?     5.4207+-0.0192       ? might be 1.0015x slower
   <harmonic>                             4.2025+-0.0160    ?     4.2207+-0.0199       ? might be 1.0043x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                77.4580+-0.2994         77.2495+-0.2422       
   deltablue                            170.5089+-1.6666    ?   171.7374+-1.6703       ?
   earley-boyer                         103.7700+-0.3527    ?   105.3101+-1.2086       ? might be 1.0148x slower
   raytrace                              64.5108+-0.5795         63.6362+-0.6552         might be 1.0137x faster
   regexp                               124.3676+-0.2792    ?   124.6022+-0.4107       ?
   richards                             138.5908+-1.5768        137.8858+-0.2496       
   splay                                 90.4342+-1.0799         89.7729+-0.7036       

   <arithmetic>                         109.9486+-0.3112    ?   110.0277+-0.4246       ? might be 1.0007x slower
   <geometric> *                        104.6810+-0.2393        104.6085+-0.3968         might be 1.0007x faster
   <harmonic>                            99.6635+-0.2604         99.4283+-0.3943         might be 1.0024x faster

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             827.0655+-0.1641    ^   808.7910+-12.4758      ^ definitely 1.0226x faster
   audio-beat-detection                 204.6192+-0.9188    ?   205.8697+-0.5044       ?
   audio-dft                            261.1092+-2.7787    ?   261.6707+-2.5628       ?
   audio-fft                            132.9265+-0.1194    ?   133.3967+-0.7447       ?
   audio-oscillator                     294.3907+-1.3264    ^   283.8631+-4.8283       ^ definitely 1.0371x faster
   imaging-darkroom                     334.8023+-4.7179    ?   337.4471+-5.7008       ?
   imaging-desaturate                   240.9506+-0.2240    ?   240.9684+-0.1227       ?
   imaging-gaussian-blur                620.7693+-0.2246    ?   621.6854+-2.1459       ?
   json-parse-financial                  73.2406+-0.2254    ?    73.3942+-0.1276       ?
   json-stringify-tinderbox              86.7271+-0.3576    ?    87.4358+-0.7803       ?
   stanford-crypto-aes                  116.6774+-0.8003    !   119.6183+-1.5563       ! definitely 1.0252x slower
   stanford-crypto-ccm                  114.4313+-0.6022    !   117.6416+-0.8032       ! definitely 1.0281x slower
   stanford-crypto-pbkdf2               232.5902+-0.9980    ?   233.7615+-0.2435       ?
   stanford-crypto-sha256-iterative      93.1953+-0.4072         92.8300+-0.2839       

   <arithmetic> *                       259.5354+-0.3681        258.4553+-1.1468         might be 1.0042x faster
   <geometric>                          199.5816+-0.2810    ?   199.9460+-0.5338       ? might be 1.0018x slower
   <harmonic>                           160.6941+-0.2299    !   161.5873+-0.4243       ! definitely 1.0056x slower

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   <arithmetic>                          97.4508+-0.1245         97.1433+-0.3842         might be 1.0032x faster
   <geometric>                           24.6421+-0.0479    ?    24.6739+-0.0627       ? might be 1.0013x slower
   <harmonic>                             7.4085+-0.0276    ?     7.4400+-0.0343       ? might be 1.0043x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   <scaled-result>                       56.9807+-0.0741         56.9008+-0.1544         might be 1.0014x faster

Running locally...
376/376                                                         
Generating benchmark report at TipOfTree_WeakCaches_SunSpiderV8Kraken_20111117_2220_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on nitroflex.local (MacBookPro8,2).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100674)
"WeakCaches" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r100674)

Collected 12 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.

                                            TipOfTree               WeakCaches                                   
SunSpider:
   3d-cube                                6.8386+-0.1369    ?     6.8670+-0.1591       ?
   3d-morph                               7.6310+-0.1445    ?     7.6571+-0.1262       ?
   3d-raytrace                            7.1236+-0.2343    ?     7.1748+-0.2134       ?
   access-binary-trees                    1.5442+-0.0588    ?     1.5591+-0.0798       ?
   access-fannkuch                        6.0392+-0.0580    ?     6.0908+-0.0779       ?
   access-nbody                           3.4093+-0.0749    ?     3.4874+-0.0651       ? might be 1.0229x slower
   access-nsieve                          2.4843+-0.0658    ?     2.5331+-0.0456       ? might be 1.0196x slower
   bitops-3bit-bits-in-byte               1.2400+-0.0208    ?     1.2768+-0.0424       ? might be 1.0297x slower
   bitops-bits-in-byte                    2.3495+-0.0581    ?     2.3848+-0.0675       ? might be 1.0150x slower
   bitops-bitwise-and                     3.3964+-0.0650    ?     3.4162+-0.0689       ?
   bitops-nsieve-bits                     5.2170+-0.0571          5.2053+-0.0867       
   controlflow-recursive                  2.0306+-0.0478    ?     2.0796+-0.0331       ? might be 1.0242x slower
   crypto-aes                             6.8778+-0.1170    ?     7.0300+-0.2004       ? might be 1.0221x slower
   crypto-md5                             2.3851+-0.0759    ?     2.4297+-0.0920       ? might be 1.0187x slower
   crypto-sha1                            2.0545+-0.0494    ?     2.0873+-0.0506       ? might be 1.0159x slower
   date-format-tofte                      9.9825+-0.1603    ?    10.0566+-0.2186       ?
   date-format-xparb                     10.9696+-0.2362         10.8717+-0.1573       
   math-cordic                            6.2295+-0.1010    ?     6.4359+-0.1099       ? might be 1.0331x slower
   math-partial-sums                      7.4259+-0.2035          7.3829+-0.1104       
   math-spectral-norm                     2.3528+-0.0510    ?     2.3738+-0.0618       ?
   regexp-dna                            10.7878+-0.1746    ?    11.0114+-0.1540       ? might be 1.0207x slower
   string-base64                          3.9457+-0.1976          3.8035+-0.0783         might be 1.0374x faster
   string-fasta                           6.5032+-0.1164    ?     6.5834+-0.0730       ? might be 1.0123x slower
   string-tagcloud                       11.6524+-0.3080         11.5740+-0.3664       
   string-unpack-code                    19.9997+-0.4005         19.9907+-0.3590       
   string-validate-input                  5.1990+-0.0807    ?     5.3495+-0.1241       ? might be 1.0290x slower

   <arithmetic> *                         5.9873+-0.0255    ?     6.0274+-0.0266       ? might be 1.0067x slower
   <geometric>                            4.7571+-0.0258    ?     4.8038+-0.0274       ? might be 1.0098x slower
   <harmonic>                             3.7479+-0.0331    ?     3.7974+-0.0372       ? might be 1.0132x slower

                                            TipOfTree               WeakCaches                                   
V8:
   crypto                                69.7311+-0.5761         69.5905+-0.3407       
   deltablue                            149.6033+-1.6382    ?   149.9671+-0.7672       ?
   earley-boyer                          84.8068+-0.3751    ?    85.0753+-0.9961       ?
   raytrace                              56.2134+-1.2250    ?    56.3687+-0.4111       ?
   regexp                               102.2150+-0.5761    ?   102.4564+-0.4019       ?
   richards                             116.4703+-0.5039        116.3584+-0.3244       
   splay                                 71.1878+-0.5781    ?    71.5626+-1.1676       ?

   <arithmetic>                          92.8897+-0.3338    ?    93.0542+-0.2930       ? might be 1.0018x slower
   <geometric> *                         88.3791+-0.3757    ?    88.5463+-0.3139       ? might be 1.0019x slower
   <harmonic>                            84.2935+-0.4672    ?    84.4659+-0.3292       ? might be 1.0020x slower

                                            TipOfTree               WeakCaches                                   
Kraken:
   ai-astar                             481.0555+-1.9411    ?   485.7408+-2.9128       ?
   audio-beat-detection                 188.1320+-1.5393        187.1138+-0.5824       
   audio-dft                            261.1059+-1.8659    ?   261.7865+-3.1228       ?
   audio-fft                            122.5034+-0.6345        122.3092+-0.8059       
   audio-oscillator                     248.3586+-0.9176        245.8170+-1.7807         might be 1.0103x faster
   imaging-darkroom                     297.2359+-4.1428        296.1308+-3.6880       
   imaging-desaturate                   222.0842+-2.6411    ?   223.2395+-1.2428       ?
   imaging-gaussian-blur                543.6976+-2.9637    ?   543.7442+-1.7596       ?
   json-parse-financial                  57.2787+-0.3301         57.1892+-0.1696       
   json-stringify-tinderbox              73.8504+-0.9164         72.7696+-0.3363         might be 1.0149x faster
   stanford-crypto-aes                   96.0850+-1.2172         95.0746+-0.6106         might be 1.0106x faster
   stanford-crypto-ccm                   98.6912+-0.5641    ?    99.9238+-0.7357       ? might be 1.0125x slower
   stanford-crypto-pbkdf2               188.1711+-1.7414        187.2750+-3.1966       
   stanford-crypto-sha256-iterative      79.4168+-0.3274         79.3875+-0.9256       

   <arithmetic> *                       211.2619+-0.3660        211.2501+-0.5707         might be 1.0001x faster
   <geometric>                          168.9592+-0.3150        168.6816+-0.4400         might be 1.0016x faster
   <harmonic>                           136.4769+-0.2737        136.1003+-0.3651         might be 1.0028x faster

                                            TipOfTree               WeakCaches                                   
All benchmarks:
   <arithmetic>                          80.0758+-0.1373    ?    80.1190+-0.1897       ? might be 1.0005x slower
   <geometric>                           21.2897+-0.0651    ?    21.4006+-0.0718       ? might be 1.0052x slower
   <harmonic>                             6.5985+-0.0569    ?     6.6832+-0.0637       ? might be 1.0128x slower

                                            TipOfTree               WeakCaches                                   
Geomean of preferred means:
   <scaled-result>                       48.1720+-0.0816    ?    48.3091+-0.1069       ? might be 1.0028x slower

[pizlo@nitroflex bencher]
------- Comment #12 From 2011-11-17 23:17:40 PST -------
Created an attachment (id=115745) [details]
the patch

Fixed 32-bit support.  Still need to add the ARMv7 equivalent to the Assembler hooks I needed for un-patching method call caches.
------- Comment #13 From 2011-11-17 23:19:54 PST -------
Attachment 115745 [details] did not pass style-queue:

Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'Source/JavaScriptCore/ChangeLog', u'Source..." exit_code: 1

Source/JavaScriptCore/bytecode/CodeBlock.h:175:  The parameter name "repatchBuffer" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.
------- Comment #14 From 2011-11-17 23:37:42 PST -------
Created an attachment (id=115746) [details]
the patch

Fixed style, removed a spurious change to AbstractMacroAssembler.
------- Comment #15 From 2011-11-17 23:40:58 PST -------
Created an attachment (id=115747) [details]
the patch

Improved the change log.
------- Comment #16 From 2011-11-18 01:14:32 PST -------
Created an attachment (id=115764) [details]
the patch

Added ARMv7 support.  Fixed some comments as per Geoff's comments on https://bugs.webkit.org/show_bug.cgi?id=72312.
------- Comment #17 From 2011-11-18 15:15:09 PST -------
The effect of this patch on SunSpider, when recompiling all JS functions is disabled.  Note that ToT (with recompiling all JS functions) achieves a score of ~180ms, so this is telling us that with this patch we don't need to always recompile all JS functions.

TEST                   COMPARISON            FROM                 TO             DETAILS

=============================================================================

** TOTAL **:           1.049x as fast    188.2ms +/- 1.4%   179.4ms +/- 1.2%     significant

=============================================================================

  3d:                  1.051x as fast     24.7ms +/- 2.4%    23.5ms +/- 2.6%     significant
    cube:              1.079x as fast      8.2ms +/- 3.7%     7.6ms +/- 4.9%     significant
    morph:             -                   8.3ms +/- 4.2%     8.1ms +/- 2.8% 
    raytrace:          1.051x as fast      8.2ms +/- 3.7%     7.8ms +/- 3.9%     significant

  access:              1.055x as fast     17.4ms +/- 4.0%    16.5ms +/- 3.7%     significant
    binary-trees:      1.24x as fast       2.1ms +/- 10.8%     1.7ms +/- 20.3%     significant
    fannkuch:          -                   7.8ms +/- 3.9%     7.4ms +/- 5.0% 
    nbody:             -                   4.2ms +/- 7.2%     4.2ms +/- 7.2% 
    nsieve:            -                   3.3ms +/- 10.5%     3.2ms +/- 9.4% 

  bitops:              -                  15.5ms +/- 3.9%    15.2ms +/- 4.3% 
    3bit-bits-in-byte: -                   1.2ms +/- 25.1%     1.2ms +/- 25.1% 
    bits-in-byte:      -                   5.1ms +/- 4.4%     5.1ms +/- 4.4% 
    bitwise-and:       -                   3.5ms +/- 10.8%     3.2ms +/- 9.4% 
    nsieve-bits:       -                   5.7ms +/- 6.1%     5.7ms +/- 6.1% 

  controlflow:         -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 
    recursive:         -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 

  crypto:              -                  12.3ms +/- 4.8%    11.7ms +/- 4.1% 
    aes:               -                   7.9ms +/- 2.9%     7.5ms +/- 5.0% 
    md5:               -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 
    sha1:              -                   2.2ms +/- 13.7%     2.1ms +/- 10.8% 

  date:                -                  26.2ms +/- 5.3%    24.9ms +/- 4.4% 
    format-tofte:      -                  13.1ms +/- 4.8%    12.5ms +/- 3.0% 
    format-xparb:      -                  13.1ms +/- 6.0%    12.4ms +/- 6.8% 

  math:                -                  20.3ms +/- 2.4%    20.0ms +/- 2.4% 
    cordic:            1.057x as fast      7.4ms +/- 5.0%     7.0ms +/- 0.0%     significant
    partial-sums:      -                  10.5ms +/- 3.6%    10.3ms +/- 3.4% 
    spectral-norm:     ??                  2.4ms +/- 15.4%     2.7ms +/- 12.8%     not conclusive: might be *1.125x as slow*

  regexp:              1.048x as fast     13.0ms +/- 2.6%    12.4ms +/- 3.0%     significant
    dna:               1.048x as fast     13.0ms +/- 2.6%    12.4ms +/- 3.0%     significant

  string:              1.066x as fast     56.6ms +/- 2.7%    53.1ms +/- 1.5%     significant
    base64:            1.163x as fast      5.0ms +/- 9.5%     4.3ms +/- 8.0%     significant
    fasta:             -                   7.9ms +/- 2.9%     7.7ms +/- 4.5% 
    tagcloud:          1.063x as fast     13.4ms +/- 2.8%    12.6ms +/- 2.9%     significant
    unpack-code:       1.044x as fast     23.7ms +/- 2.9%    22.7ms +/- 2.1%     significant
    validate-input:    1.138x as fast      6.6ms +/- 5.6%     5.8ms +/- 5.2%     significant
------- Comment #18 From 2011-11-18 15:26:30 PST -------
In-browser V8 scores are neutral.


ToT:

Score: 6851
Richards: 8787
DeltaBlue: 6427
Crypto: 14447
RayTrace: 8362
EarleyBoyer: 8076
RegExp: 1933
Splay: 6650

Not recompiling all JS functions:

Score: 6947
Richards: 9020
DeltaBlue: 6341
Crypto: 14435
RayTrace: 8524
EarleyBoyer: 8257
RegExp: 1970
Splay: 6821

This patch, and not recompiling all JS functions:

Score: 6873
Richards: 9203
DeltaBlue: 6420
Crypto: 14353
RayTrace: 7724
EarleyBoyer: 8355
RegExp: 1960
Splay: 6756
------- Comment #19 From 2011-11-18 15:31:24 PST -------
*** Bug 72312 has been marked as a duplicate of this bug. ***
------- Comment #20 From 2011-11-18 15:32:27 PST -------
For Kraken, we see a similar effect to SunSpider: Not recompiling all JS functions is a regression, but then throwing this patch in brings us back to sanity.

Here's this patch, and not recompiling, against ToT;

TEST                         COMPARISON            FROM                 TO               DETAILS

====================================================================================

** TOTAL **:                 ??                3694.7ms +/- 0.5%   3733.9ms +/- 1.7%     might be *1.011x as slow*

====================================================================================

  ai:                        ??                 830.9ms +/- 1.5%    839.7ms +/- 0.3%     might be *1.011x as slow*
    astar:                   ??                 830.9ms +/- 1.5%    839.7ms +/- 0.3%     might be *1.011x as slow*

  audio:                     ??                 908.1ms +/- 0.4%    939.9ms +/- 7.0%     might be *1.035x as slow*
    beat-detection:          -                  218.0ms +/- 0.5%    215.9ms +/- 1.2% 
    dft:                     ??                 261.9ms +/- 0.4%    262.8ms +/- 0.7%     might be *1.003x as slow*
    fft:                     ??                 136.9ms +/- 1.0%    138.5ms +/- 1.7%     might be *1.012x as slow*
    oscillator:              ??                 291.3ms +/- 0.7%    322.7ms +/- 20.8%     might be *1.108x as slow*

  imaging:                   1.004x as fast    1187.6ms +/- 0.3%   1183.1ms +/- 0.2%     significant
    gaussian-blur:           -                  613.6ms +/- 0.7%    609.4ms +/- 0.2% 
    darkroom:                -                  333.8ms +/- 0.3%    332.3ms +/- 0.6% 
    desaturate:              ??                 240.2ms +/- 0.4%    241.4ms +/- 0.5%     might be *1.005x as slow*

  json:                      1.010x as fast     174.3ms +/- 0.4%    172.5ms +/- 0.3%     significant
    parse-financial:         1.012x as fast      85.3ms +/- 0.6%     84.3ms +/- 0.7%     significant
    stringify-tinderbox:     1.009x as fast      89.0ms +/- 0.7%     88.2ms +/- 0.3%     significant

  stanford:                  ??                 593.8ms +/- 0.5%    598.7ms +/- 0.8%     might be *1.008x as slow*
    crypto-aes:              ??                 127.5ms +/- 1.5%    128.1ms +/- 1.7%     might be *1.005x as slow*
    crypto-ccm:              ??                 130.3ms +/- 1.4%    131.0ms +/- 1.3%     might be *1.005x as slow*
    crypto-pbkdf2:           ??                 237.8ms +/- 0.8%    241.0ms +/- 1.3%     might be *1.013x as slow*
    crypto-sha256-iterative: ??                  98.2ms +/- 0.5%     98.6ms +/- 1.4%     might be *1.004x as slow*


And here's just not recompiling all JS functions versus ToT:

TEST                         COMPARISON            FROM                 TO               DETAILS

====================================================================================

** TOTAL **:                 *1.036x as slow*  3694.7ms +/- 0.5%   3826.6ms +/- 1.1%     significant

====================================================================================

  ai:                        -                  830.9ms +/- 1.5%    823.5ms +/- 1.9% 
    astar:                   -                  830.9ms +/- 1.5%    823.5ms +/- 1.9% 

  audio:                     *1.088x as slow*   908.1ms +/- 0.4%    988.0ms +/- 1.9%     significant
    beat-detection:          *1.082x as slow*   218.0ms +/- 0.5%    235.8ms +/- 2.3%     significant
    dft:                     *1.050x as slow*   261.9ms +/- 0.4%    275.1ms +/- 1.4%     significant
    fft:                     *1.150x as slow*   136.9ms +/- 1.0%    157.4ms +/- 3.3%     significant
    oscillator:              *1.097x as slow*   291.3ms +/- 0.7%    319.7ms +/- 2.0%     significant

  imaging:                   ??                1187.6ms +/- 0.3%   1189.5ms +/- 0.4%     might be *1.002x as slow*
    gaussian-blur:           -                  613.6ms +/- 0.7%    609.6ms +/- 0.2% 
    darkroom:                ??                 333.8ms +/- 0.3%    335.2ms +/- 1.0%     might be *1.004x as slow*
    desaturate:              *1.019x as slow*   240.2ms +/- 0.4%    244.7ms +/- 0.9%     significant

  json:                      *1.111x as slow*   174.3ms +/- 0.4%    193.7ms +/- 4.6%     significant
    parse-financial:         *1.138x as slow*    85.3ms +/- 0.6%     97.1ms +/- 5.9%     significant
    stringify-tinderbox:     *1.085x as slow*    89.0ms +/- 0.7%     96.6ms +/- 3.9%     significant

  stanford:                  *1.064x as slow*   593.8ms +/- 0.5%    631.9ms +/- 1.9%     significant
    crypto-aes:              *1.075x as slow*   127.5ms +/- 1.5%    137.1ms +/- 2.8%     significant
    crypto-ccm:              *1.085x as slow*   130.3ms +/- 1.4%    141.4ms +/- 4.2%     significant
    crypto-pbkdf2:           *1.068x as slow*   237.8ms +/- 0.8%    254.0ms +/- 2.4%     significant
    crypto-sha256-iterative: ??                  98.2ms +/- 0.5%     99.4ms +/- 1.7%     might be *1.012x as slow*
------- Comment #21 From 2011-11-18 16:33:47 PST -------
(From update of attachment 115764 [details])
View in context: https://bugs.webkit.org/attachment.cgi?id=115764&action=review

r=me

> Source/JavaScriptCore/bytecode/CodeBlock.cpp:1597
> +    visitor.addUnconditionalFinalizer(this);

Neat improvement over your prior patch.
------- Comment #22 From 2011-11-18 16:40:28 PST -------
(In reply to comment #21)
> (From update of attachment 115764 [details] [details])
> View in context: https://bugs.webkit.org/attachment.cgi?id=115764&action=review
> 
> r=me
> 
> > Source/JavaScriptCore/bytecode/CodeBlock.cpp:1597
> > +    visitor.addUnconditionalFinalizer(this);
> 
> Neat improvement over your prior patch.

Thanks, I'll let this patch simmer for a short bit while I test it some more, and probably land in the next couple of days.
------- Comment #23 From 2011-11-20 19:20:40 PST -------
Created an attachment (id=116022) [details]
the patch

Trying to fix windows build.
------- Comment #24 From 2011-11-20 20:45:58 PST -------
Landed in http://trac.webkit.org/changeset/100880
------- Comment #25 From 2011-11-20 20:46:45 PST -------
<rdar://problem/10476338>
------- Comment #26 From 2011-11-20 23:48:29 PST -------
(In reply to comment #24)
> Landed in http://trac.webkit.org/changeset/100880

It broke Qt-ARM, Qt-Windows, Qt-MIPS and Qt-SH4 build:

In file included from ../../../../Source/JavaScriptCore/dfg/DFGRepatch.cpp:27:
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: variable or field 'dfgResetGetByID' declared void
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: 'RepatchBuffer' was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: expected primary-expression before ',' token
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: 'StructureStubInfo' was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:53: error: expected primary-expression before ')' token
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: variable or field 'dfgResetPutByID' declared void
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: 'RepatchBuffer' was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: expected primary-expression before ',' token
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: 'StructureStubInfo' was not declared in this scope
../../../../Source/JavaScriptCore/dfg/DFGRepatch.h:54: error: expected primary-expression before ')' token
------- Comment #27 From 2011-11-21 00:26:37 PST -------
Created an attachment (id=116043) [details]
build fix
------- Comment #28 From 2011-11-21 01:04:47 PST -------
> Created an attachment (id=116043) [details] [details]

Build fix landed in http://trac.webkit.org/changeset/100888