Bug 143232

Summary: JSC should detect singleton functions
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, benjamin, bfulgham, commit-queue, ggaren, mark.lam, mhahnenb, mmirman, msaboff, nrotem, oliver, sam, sbarati
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 143496    
Bug Blocks: 142944    
Attachments:
Description Flags
work in progress
none
more
none
all good
msaboff: review+
with fixes
none
the patch?
none
more
none
even more
none
this might be the one!
none
the patch
none
fix some builds
none
more fixes
none
fix style ggaren: review+

Description Filip Pizlo 2015-03-30 11:39:03 PDT
We currently don't really need to detect singleton functions because we have lots of other crazy ways of optimizing scoped accesses.  But now that the scope is loaded from the function, it would be simpler and a bit more efficient to just detect singleton functions.
Comment 1 Filip Pizlo 2015-03-30 11:56:59 PDT
Created attachment 249753 [details]
work in progress
Comment 2 Filip Pizlo 2015-03-30 14:52:47 PDT
This should make implementing block scoping easier, since the watchpointing of values in scopes no longer relies on a function reentry watchpoint.
Comment 3 Filip Pizlo 2015-03-30 15:30:05 PDT
Created attachment 249774 [details]
more
Comment 4 Filip Pizlo 2015-03-31 12:16:56 PDT
Created attachment 249840 [details]
all good
Comment 5 WebKit Commit Bot 2015-03-31 12:19:36 PDT
Attachment 249840 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name "executable" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name "scope" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 69 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 6 Filip Pizlo 2015-03-31 12:21:22 PDT
(In reply to comment #5)
> Attachment 249840 [details] did not pass style-queue:
> 
> 
> ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name
> "vm" adds no information, so it should be removed. 
> [readability/parameter_name] [5]
> ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name
> "executable" adds no information, so it should be removed. 
> [readability/parameter_name] [5]
> ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name
> "scope" adds no information, so it should be removed. 
> [readability/parameter_name] [5]
> Total errors found: 3 in 69 files

Fixed locally.

> 
> 
> If any of these errors are false positives, please file a bug against
> check-webkit-style.
Comment 7 Michael Saboff 2015-03-31 12:55:26 PDT
Comment on attachment 249840 [details]
all good

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

r=me

> Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3466
> +                    // Main thread stores to the global object: always first store a value first, and

Should the clause actually be "always store a value first,"?

> Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3467
> +                    // only after that we touch the watchpoint set. There is a fence in the touch, that

Would it make sense to add "do" before "we"?
Comment 8 Filip Pizlo 2015-03-31 13:06:26 PDT
Created attachment 249844 [details]
with fixes

Address review feedback.  Should fix build.
Comment 9 Filip Pizlo 2015-03-31 13:09:57 PDT
There are some perf pathologies in CompressionBench.  I'll investigate.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on oldmac.

VMs tested:
"TipOfTree" at /home/pizlo/WebKit/secondary/OpenSource/WebKitBuild/Release/bin/jsc
"FunctionRealloc" at /home/pizlo/WebKit/primary/OpenSource/WebKitBuild/Release/bin/jsc

Collected 6 samples per benchmark/VM, with 6 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              FunctionRealloc                                  
SunSpider:
   3d-cube                                            9.3927+-1.8483     ?     10.3775+-1.4847        ? might be 1.1048x slower
   3d-morph                                          23.5558+-3.1663           21.6784+-1.8651          might be 1.0866x faster
   3d-raytrace                                       12.5393+-2.0719           12.0161+-1.5998          might be 1.0435x faster
   access-binary-trees                                4.8812+-1.3332     ?      5.1445+-1.9022        ? might be 1.0539x slower
   access-fannkuch                                   11.2394+-1.7326     ?     11.9386+-1.1693        ? might be 1.0622x slower
   access-nbody                                       5.1036+-0.4620     ?      5.4509+-0.7176        ? might be 1.0681x slower
   access-nsieve                                      6.2306+-1.2258            6.2264+-1.5130        
   bitops-3bit-bits-in-byte                           2.6175+-0.5868     ?      2.8580+-0.4253        ? might be 1.0919x slower
   bitops-bits-in-byte                                7.8233+-1.6677            6.9554+-0.7678          might be 1.1248x faster
   bitops-bitwise-and                                 3.4921+-0.6541     ?      4.0706+-0.8163        ? might be 1.1657x slower
   bitops-nsieve-bits                                 6.1803+-0.1647     ?      6.6783+-1.1447        ? might be 1.0806x slower
   controlflow-recursive                              4.7417+-0.4712            4.7040+-1.0420        
   crypto-aes                                         6.7043+-0.1485            6.5564+-0.2377          might be 1.0226x faster
   crypto-md5                                         4.7288+-0.8535     ?      4.9893+-0.7757        ? might be 1.0551x slower
   crypto-sha1                                        6.1534+-1.9704            4.3193+-0.8673          might be 1.4246x faster
   date-format-tofte                                 17.1707+-3.7331           15.3980+-0.4944          might be 1.1151x faster
   date-format-xparb                                 12.2037+-2.7149           10.6510+-1.1884          might be 1.1458x faster
   math-cordic                                        5.7905+-1.0880     ?      6.4437+-1.3517        ? might be 1.1128x slower
   math-partial-sums                                 18.0555+-0.0801           17.9943+-0.0660        
   math-spectral-norm                                 3.8210+-0.7226     ?      4.4190+-0.8149        ? might be 1.1565x slower
   regexp-dna                                        11.2852+-0.0442     ?     12.0616+-1.9415        ? might be 1.0688x slower
   string-base64                                      6.4191+-0.0877     ?      6.5739+-0.3238        ? might be 1.0241x slower
   string-fasta                                      15.3351+-2.3861           14.7872+-2.9285          might be 1.0371x faster
   string-tagcloud                                   18.3768+-1.2366           18.2568+-1.5532        
   string-unpack-code                                32.9510+-1.4864           32.7387+-0.5484        
   string-validate-input                              9.0435+-1.4952     ?      9.3000+-1.5615        ? might be 1.0284x slower

   <arithmetic>                                      10.2245+-0.2099           10.0995+-0.3191          might be 1.0124x faster

                                                        TipOfTree              FunctionRealloc                                  
LongSpider:
   3d-cube                                         1712.6300+-21.4639    ?   1724.1806+-40.6021       ?
   3d-morph                                        4157.1873+-12.2667    ?   4174.3197+-20.2732       ?
   3d-raytrace                                     1376.7355+-9.5985     !   1412.9830+-6.2525        ! definitely 1.0263x slower
   access-binary-trees                             1658.3138+-16.1820        1657.3691+-10.5446       
   access-fannkuch                                  534.3027+-19.7702    ?    555.3927+-26.0238       ? might be 1.0395x slower
   access-nbody                                    1216.8623+-4.4274         1213.9810+-5.2013        
   access-nsieve                                   1218.9384+-8.9384     ?   1220.3412+-16.0518       ?
   bitops-3bit-bits-in-byte                          62.9862+-2.7846           62.4499+-2.0066        
   bitops-bits-in-byte                              399.0030+-3.7246     ?    399.3698+-3.3687        ?
   bitops-nsieve-bits                              1147.5780+-10.2248        1144.2249+-6.9929        
   controlflow-recursive                            831.9004+-9.3905          820.3755+-3.0040          might be 1.0140x faster
   crypto-aes                                      1157.9582+-7.3481     ?   1162.9887+-6.4068        ?
   crypto-md5                                       907.8794+-9.6367          906.1702+-20.6249       
   crypto-sha1                                     1058.8525+-14.6407        1050.9257+-9.9945        
   date-format-tofte                               1383.1835+-56.7323        1325.1572+-15.5792         might be 1.0438x faster
   date-format-xparb                               1214.9996+-11.6471    ^   1138.7748+-48.9319       ^ definitely 1.0669x faster
   math-cordic                                      816.1796+-4.2416          815.2502+-4.5022        
   math-partial-sums                               1968.4484+-3.8607     ^   1955.0970+-4.8144        ^ definitely 1.0068x faster
   math-spectral-norm                              1306.4214+-2.6181         1306.4146+-5.8093        
   string-base64                                    553.4489+-13.1187         549.4940+-18.0411       
   string-fasta                                     942.9110+-38.3970         896.0475+-9.5482          might be 1.0523x faster
   string-tagcloud                                  385.2338+-4.5271     ?    387.8548+-7.1329        ?

   <geometric>                                      937.7653+-5.2358          932.5396+-3.3715          might be 1.0056x faster

                                                        TipOfTree              FunctionRealloc                                  
V8Spider:
   crypto                                            86.4222+-2.2984     ?     89.7272+-4.8254        ? might be 1.0382x slower
   deltablue                                        116.8864+-19.2434         112.7854+-11.2138         might be 1.0364x faster
   earley-boyer                                      75.8636+-2.4877     ?     77.2036+-3.0241        ? might be 1.0177x slower
   raytrace                                          53.0747+-12.2419    ?     55.9456+-7.5687        ? might be 1.0541x slower
   regexp                                           112.7055+-0.7269     ?    113.1554+-0.4287        ?
   richards                                         124.7788+-8.3877          118.3923+-5.4382          might be 1.0539x faster
   splay                                             60.9011+-3.1350           60.8982+-1.5767        

   <geometric>                                       85.7271+-4.5254     ?     86.1554+-1.9961        ? might be 1.0050x slower

                                                        TipOfTree              FunctionRealloc                                  
Octane:
   encrypt                                           0.34609+-0.00138    ?     0.34700+-0.00298       ?
   decrypt                                           6.25669+-0.01962    ?     6.26907+-0.02945       ?
   deltablue                                x2       0.33038+-0.00362          0.32846+-0.00447       
   earley                                            0.96014+-0.01427          0.95743+-0.01069       
   boyer                                            12.38363+-0.15715         12.37759+-0.07690       
   navier-stokes                            x2       7.88809+-0.00452    !     7.90223+-0.00561       ! definitely 1.0018x slower
   raytrace                                 x2       2.14260+-0.10196    ?     2.20183+-0.13576       ? might be 1.0276x slower
   richards                                 x2       0.22031+-0.00147    ?     0.22102+-0.00170       ?
   splay                                    x2       0.62017+-0.00762    ?     0.62249+-0.00669       ?
   regexp                                   x2      58.03444+-0.97246         57.70738+-0.99109       
   pdfjs                                    x2      82.73664+-1.57898    ?    84.50687+-0.83376       ? might be 1.0214x slower
   mandreel                                 x2      87.93816+-1.99566         86.79938+-0.99672         might be 1.0131x faster
   gbemu                                    x2      79.96769+-9.53319         75.53983+-2.68907         might be 1.0586x faster
   closure                                           0.88788+-0.00548          0.88099+-0.00280       
   jquery                                           11.64480+-0.06114         11.60246+-0.03312       
   box2d                                    x2      22.49244+-0.29788    ^    21.57721+-0.16184       ^ definitely 1.0424x faster
   zlib                                     x2     594.35528+-54.86557   ?   652.16482+-43.30586      ? might be 1.0973x slower
   typescript                               x2    1317.18315+-29.31654      1306.60579+-13.72498      

   <geometric>                                      11.42052+-0.13145    ?    11.43520+-0.09474       ? might be 1.0013x slower

                                                        TipOfTree              FunctionRealloc                                  
Kraken:
   ai-astar                                          513.861+-3.354      ?     524.119+-21.324        ? might be 1.0200x slower
   audio-beat-detection                              185.313+-4.384      ?     187.915+-5.633         ? might be 1.0140x slower
   audio-dft                                         242.134+-1.799      ?     243.175+-3.542         ?
   audio-fft                                         138.039+-7.647      ?     146.888+-5.864         ? might be 1.0641x slower
   audio-oscillator                                  315.134+-2.403      ?     316.194+-2.053         ?
   imaging-darkroom                                  225.047+-3.308            223.728+-3.350         
   imaging-desaturate                                116.416+-2.733            116.233+-2.625         
   imaging-gaussian-blur                             196.472+-2.612            196.432+-4.282         
   json-parse-financial                               90.952+-0.801             90.600+-0.402         
   json-stringify-tinderbox                           99.845+-0.682      ^      98.191+-0.573         ^ definitely 1.0168x faster
   stanford-crypto-aes                               106.183+-3.280            105.531+-2.785         
   stanford-crypto-ccm                                91.398+-3.869      ?      95.621+-9.437         ? might be 1.0462x slower
   stanford-crypto-pbkdf2                            290.288+-2.129      ?     292.126+-3.889         ?
   stanford-crypto-sha256-iterative                   90.418+-1.892      ?      90.681+-2.543         ?

   <arithmetic>                                      192.964+-0.710      ?     194.817+-1.589         ? might be 1.0096x slower

                                                        TipOfTree              FunctionRealloc                                  
JSRegress:
   string-concat-object                               4.1331+-0.4336            3.9305+-0.5191          might be 1.0515x faster
   array-with-double-add                              7.3525+-1.6249     ?      8.0118+-1.3576        ? might be 1.0897x slower
   function-with-eval                               165.2315+-1.0274          162.1337+-3.0188          might be 1.0191x faster
   logical-not                                        8.6750+-0.3274            8.6239+-0.4859        
   ArrayBuffer-Int8Array-alloc                       22.7898+-1.6087           21.3260+-1.9768          might be 1.0686x faster
   int-or-other-neg-then-get-by-val                   8.9694+-1.6959            7.8311+-0.5134          might be 1.1454x faster
   infer-closure-const-then-reenter-no-inline   
                                                     83.3424+-2.5907     !     97.6171+-0.7365        ! definitely 1.1713x slower
   infer-one-time-closure                            17.7982+-1.5861     ?     17.8459+-1.6061        ?
   substring                                         98.1547+-5.9465           92.9586+-2.3325          might be 1.0559x faster
   getter                                            10.6856+-2.1625            9.7270+-1.7427          might be 1.0986x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     14.5086+-1.7346     ?     14.5503+-2.1568        ?
   imul-mixed                                        13.2085+-1.2824     ?     13.7556+-1.2431        ? might be 1.0414x slower
   getter-no-activation                               8.4005+-1.2637            8.3891+-2.1689        
   substring-concat                                  76.7749+-0.6797     ?     77.0467+-1.2568        ?
   undefined-property-access                        581.4713+-2.9068     ^    525.4448+-2.6439        ^ definitely 1.1066x faster
   sinkable-new-object-dag                          105.0912+-2.0912     ?    106.8400+-3.1117        ? might be 1.0166x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.7699+-2.1910     ?     10.4214+-1.8332        ? might be 1.1883x slower
   varargs-call                                      21.6717+-0.5074     ?     23.9276+-2.3686        ? might be 1.1041x slower
   basic-set                                         14.3798+-1.6213     ?     15.0500+-2.2439        ? might be 1.0466x slower
   int-or-other-min-then-get-by-val                   8.0947+-1.3830            7.8690+-1.4859          might be 1.0287x faster
   Float64Array-to-Int16Array-set                   118.0739+-1.5744     ?    118.1057+-1.8511        ?
   switch-constant                                   12.9303+-1.0725     ?     13.3358+-1.8458        ? might be 1.0314x slower
   array-prototype-some                             149.6493+-6.4309          147.6893+-4.8334          might be 1.0133x faster
   gcse-poly-get-less-obvious                        30.4652+-1.5335     ?     30.8305+-2.3120        ? might be 1.0120x slower
   string-out-of-bounds                              21.0960+-0.3055     ?     22.1875+-1.0636        ? might be 1.0517x slower
   string-concat-pair-simple                         17.8265+-1.4125     ?     18.0328+-1.3941        ? might be 1.0116x slower
   double-to-int32-typed-array                        3.8047+-0.6989     ?      4.2555+-0.0861        ? might be 1.1185x slower
   sparse-conditional                                 2.6863+-0.4602            2.2996+-0.4897          might be 1.1681x faster
   external-arguments-getbyval                        2.7742+-0.7443     ?      3.2356+-1.2947        ? might be 1.1663x slower
   get-by-id-proto-or-self                           29.9170+-2.8901           28.5693+-2.3399          might be 1.0472x faster
   Int8Array-load                                     6.4299+-1.3992     ?      6.8507+-1.5938        ? might be 1.0655x slower
   slow-array-profile-convergence                     4.4463+-0.0408     ?      5.3347+-1.0177        ? might be 1.1998x slower
   make-rope-cse                                      6.7788+-0.3622     ?      7.1635+-0.0647        ? might be 1.0567x slower
   marsaglia-larger-ints                             67.4926+-1.9478           67.0031+-1.2025        
   HashMap-put-get-iterate                           43.9340+-2.0496           43.0710+-2.8617          might be 1.0200x faster
   plus-boolean-arith                                 5.1296+-1.0726            4.7387+-0.8986          might be 1.0825x faster
   nested-function-parsing                           62.5202+-0.7629     !     64.1783+-0.5322        ! definitely 1.0265x slower
   plus-boolean                                       4.9980+-1.8859            3.9158+-0.4664          might be 1.2764x faster
   put-by-val-direct                                  1.1375+-0.2338     ?      1.2194+-0.1932        ? might be 1.0720x slower
   negative-zero-negate                               0.6130+-0.0962            0.5894+-0.1187          might be 1.0399x faster
   inline-get-scoped-var                              7.9749+-0.8455     ?      8.2491+-1.5856        ? might be 1.0344x slower
   global-var-const-infer-fire-from-opt               2.1568+-1.6487            2.1545+-1.2628        
   arguments-out-of-bounds                           22.1458+-0.4461           21.4967+-0.5681          might be 1.0302x faster
   large-int-captured                                10.6507+-1.9659           10.2518+-1.6068          might be 1.0389x faster
   object-closure-call                                9.8663+-1.6626            9.8505+-1.8615        
   array-nonarray-polymorhpic-access                 60.6990+-4.3365           59.7797+-4.4807          might be 1.0154x faster
   poly-chain-access-different-prototypes-simple   
                                                      4.9943+-0.9967     ?      6.5967+-2.1634        ? might be 1.3208x slower
   inline-arguments-aliased-access                    9.0350+-1.6901            8.3214+-0.9576          might be 1.0858x faster
   switch-string-basic-big-var                       38.6795+-0.9497     ?     39.3291+-0.7283        ? might be 1.0168x slower
   tear-off-arguments                                 8.3411+-1.3714            8.1512+-0.9861          might be 1.0233x faster
   neg-boolean                                        6.5004+-1.2247            6.1180+-1.2828          might be 1.0625x faster
   external-arguments-putbyval                        5.8436+-0.7490            4.7250+-1.1445          might be 1.2367x faster
   array-with-int32-add-sub                          12.6624+-2.1361     ?     13.1613+-2.3079        ? might be 1.0394x slower
   in-one-case-true                                  15.0920+-0.4381     ?     16.6793+-2.9208        ? might be 1.1052x slower
   string-get-by-val-out-of-bounds                    9.6750+-2.7490            9.4634+-2.1308          might be 1.0224x faster
   Float32Array-to-Float64Array-set                 100.5439+-1.3725          100.4899+-1.9363        
   get-by-val-out-of-bounds                           7.1596+-0.7214     ?      8.1813+-1.7365        ? might be 1.1427x slower
   Int16Array-bubble-sort-with-byteLength            48.7245+-2.1840           48.2799+-2.8677        
   string-char-code-at                               25.2042+-3.6632     ?     25.6789+-2.9643        ? might be 1.0188x slower
   double-pollution-getbyval                         11.6953+-0.1628     ?     11.8954+-0.3743        ? might be 1.0171x slower
   obvious-sink-pathology-taken                     204.2742+-1.8992     ?    204.6290+-2.8411        ?
   for-of-iterate-array-keys                          7.4501+-1.8347     ?      8.0476+-1.9563        ? might be 1.0802x slower
   try-catch-get-by-val-direct-arguments              9.4877+-0.0354     ?     10.4214+-1.8576        ? might be 1.0984x slower
   arguments                                         15.3453+-1.0903           14.9008+-0.5758          might be 1.0298x faster
   to-int32-boolean                                  27.4456+-2.5249           26.6657+-0.4924          might be 1.0292x faster
   slow-convergence                                   6.1135+-0.4486     ^      4.4623+-0.0639        ^ definitely 1.3700x faster
   new-array-dead                                    20.6069+-1.3492           19.8903+-1.0061          might be 1.0360x faster
   function-test                                      7.5100+-1.1332            7.0223+-1.7765          might be 1.0694x faster
   elidable-new-object-tree                          74.8958+-2.1654           73.4664+-2.4848          might be 1.0195x faster
   varargs-inline                                    13.8626+-1.0402     ?     14.8818+-0.5105        ? might be 1.0735x slower
   get-by-id-self-or-proto                           29.0742+-1.8144     ?     30.2278+-2.4499        ? might be 1.0397x slower
   fold-put-by-id-to-multi-put-by-offset             14.9158+-3.8287           13.0568+-2.3411          might be 1.1424x faster
   cmpeq-obj-to-obj-other                            16.5774+-0.6350     ?     18.4022+-1.8493        ? might be 1.1101x slower
   in-two-cases                                      15.8858+-0.3778     ?     16.3715+-1.2692        ? might be 1.0306x slower
   direct-arguments-getbyval                          2.4313+-0.9232     ?      2.5839+-0.9846        ? might be 1.0628x slower
   method-on-number                                  29.8306+-1.7739           28.2861+-0.9487          might be 1.0546x faster
   gcse-poly-get                                     32.7299+-2.4534           31.5986+-2.1018          might be 1.0358x faster
   branch-fold                                        6.4615+-1.2009     ?      6.9510+-1.2250        ? might be 1.0758x slower
   setter                                             8.5365+-0.6510     ?      8.8151+-1.4570        ? might be 1.0326x slower
   simple-activation-demo                            36.6371+-0.3563     ?     38.3120+-2.1208        ? might be 1.0457x slower
   switch-string-basic-big                           21.1182+-1.4417     ?     23.0440+-2.1673        ? might be 1.0912x slower
   double-to-uint32-typed-array                       4.1045+-0.5528            3.9637+-0.7169          might be 1.0355x faster
   cell-argument                                     13.3107+-2.2246           12.4418+-0.5546          might be 1.0698x faster
   HashMap-put-get-iterate-keys                      42.4377+-0.9345     ?     45.4631+-4.8469        ? might be 1.0713x slower
   array-with-double-sum                              6.5466+-1.4309     ?      6.9577+-1.4269        ? might be 1.0628x slower
   sin-boolean                                       26.2377+-1.8061           26.0317+-1.6634        
   switch-string-length-tower                        17.3553+-0.0522     ^     16.6027+-0.0424        ^ definitely 1.0453x faster
   integer-modulo                                     3.9066+-1.0812     ?      4.4248+-0.8729        ? might be 1.1327x slower
   minus-boolean                                      4.9972+-0.9803            4.7617+-1.0376          might be 1.0495x faster
   plus-boolean-double                                5.6785+-1.0594     ?      6.7063+-1.1711        ? might be 1.1810x slower
   weird-inlining-const-prop                          4.6827+-2.0603            3.6344+-0.9114          might be 1.2884x faster
   get_callee_monomorphic                             6.1488+-0.4030     ?      7.2278+-1.0474        ? might be 1.1755x slower
   singleton-scope                                  104.7633+-0.2421     !    109.2273+-2.3759        ! definitely 1.0426x slower
   indexed-properties-in-objects                      4.4072+-0.1290     ?      5.6432+-1.9858        ? might be 1.2804x slower
   function-dot-apply                                 3.7294+-0.7526     ?      4.2453+-0.9699        ? might be 1.1383x slower
   rare-osr-exit-on-local                            24.3157+-2.5482           23.6240+-2.3544          might be 1.0293x faster
   in-one-case-false                                 16.7926+-1.9317     ?     17.3334+-2.7490        ? might be 1.0322x slower
   sinkable-new-object-taken                         85.4812+-5.2929           83.7348+-2.7117          might be 1.0209x faster
   inlined-put-by-id-transition                      18.5172+-0.8328     ?     19.6544+-1.4309        ? might be 1.0614x slower
   int-or-other-max-then-get-by-val                   7.9321+-1.2313     ?      8.1562+-0.7359        ? might be 1.0282x slower
   string-cons-tower                                 11.9584+-0.1064     ?     11.9981+-0.0692        ?
   polymorphic-put-by-id                             44.2642+-3.4460     ?     45.2116+-3.1653        ? might be 1.0214x slower
   string-repeat-arith                               50.3586+-0.7573     !     55.3770+-0.4638        ! definitely 1.0997x slower
   varargs                                           16.7673+-2.6264           16.3774+-0.2146          might be 1.0238x faster
   deltablue-varargs                                348.1871+-11.1266         345.9655+-9.3573        
   undefined-test                                     6.4071+-1.2343     ?      7.0092+-1.8147        ? might be 1.0940x slower
   infer-one-time-closure-ten-vars                   18.8096+-0.8130     ^     17.7785+-0.1269        ^ definitely 1.0580x faster
   arguments-strict-mode                             16.8280+-0.6263     ?     17.0412+-1.1624        ? might be 1.0127x slower
   imul-double-only                                  12.5883+-1.5999           12.4911+-1.5441        
   Float64Array-alloc-long-lived                    103.1875+-1.8439          102.2204+-2.0729        
   tear-off-arguments-simple                          5.7156+-0.8735     ?      6.2530+-1.3784        ? might be 1.0940x slower
   splice-to-remove                                  32.5669+-1.8579     ?     33.3354+-2.6106        ? might be 1.0236x slower
   fold-double-to-int                                26.1076+-2.7128           25.0291+-0.7062          might be 1.0431x faster
   fold-put-structure                                 9.7543+-1.8179            9.7071+-1.9531        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.8738+-1.3627     !     20.7871+-1.2706        ! definitely 1.1630x slower
   Int32Array-alloc-long-lived                       82.1756+-1.1836     ?     82.4659+-1.5770        ?
   new-array-push                                     6.6601+-0.4976     ?      7.5287+-0.6704        ? might be 1.1304x slower
   infer-closure-const-then-mov-no-inline             6.0376+-0.7641     ?      8.0443+-1.8933        ? might be 1.3324x slower
   string-test                                        6.4943+-1.6038     ?      7.2229+-1.4537        ? might be 1.1122x slower
   call-spread-apply                                 47.4108+-2.1533     ?     49.4011+-5.1294        ? might be 1.0420x slower
   string-var-equality                               54.5150+-1.6756     ^     52.4035+-0.0784        ^ definitely 1.0403x faster
   captured-assignments                               0.7523+-0.1663     ?      0.7955+-0.1713        ? might be 1.0575x slower
   register-pressure-from-osr                        34.5943+-4.9054           33.2580+-2.8828          might be 1.0402x faster
   switch-string-basic                               20.5780+-2.2720     ?     22.6458+-3.9292        ? might be 1.1005x slower
   hoist-poly-check-structure                         6.2955+-1.3335     ?      7.1665+-1.3742        ? might be 1.1384x slower
   string-equality                                   29.4926+-5.9261           27.8624+-2.7451          might be 1.0585x faster
   mul-boolean                                        5.5966+-1.1212            4.3410+-0.3771          might be 1.2892x faster
   int-or-other-add                                  10.1258+-0.8154            9.8025+-0.6774          might be 1.0330x faster
   switch-string-big-length-tower-var                30.6421+-1.8812           30.4718+-1.4592        
   structure-hoist-over-transitions                   5.1747+-1.3121            4.8115+-0.8208          might be 1.0755x faster
   array-with-int32-or-double-sum                     6.4361+-1.1669            6.1510+-1.2760          might be 1.0464x faster
   get_callee_polymorphic                             5.3673+-0.3930     ?      5.4115+-0.1999        ?
   fixed-typed-array-storage-var-index                2.2437+-0.4115     ?      2.2575+-0.6130        ?
   max-boolean                                        4.8072+-0.9545            4.2950+-0.8651          might be 1.1193x faster
   switch-string-length-tower-var                    23.8527+-0.1324     ^     23.1174+-0.0320        ^ definitely 1.0318x faster
   DataView-custom-properties                        78.9757+-2.5133     ?     79.7572+-2.5465        ?
   elidable-new-object-roflcopter                    73.8210+-5.8979           72.3543+-5.6609          might be 1.0203x faster
   Int32Array-Int8Array-view-alloc                   11.3870+-0.6036     ?     11.5214+-0.1898        ? might be 1.0118x slower
   constant-test                                      9.5382+-0.8483     ?     10.0256+-1.0991        ? might be 1.0511x slower
   poly-chain-access-different-prototypes             4.8267+-1.5888            4.6674+-1.1468          might be 1.0341x faster
   Float32Array-matrix-mult                           7.5221+-1.5374            7.0380+-0.2419          might be 1.0688x faster
   temporal-structure                                21.2728+-2.5288     ?     22.7310+-2.0870        ? might be 1.0685x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     45.6100+-1.6293     ?     46.6044+-0.8011        ? might be 1.0218x slower
   switch-string-short                               17.3809+-0.0999     ^     16.5746+-0.0605        ^ definitely 1.0486x faster
   infer-closure-const-then-reenter                 181.5669+-2.0224     ^     34.7546+-0.3631        ^ definitely 5.2242x faster
   hoist-make-rope                                   17.7815+-0.9670     ?     18.4797+-1.5842        ? might be 1.0393x slower
   ArrayBuffer-DataView-alloc-long-lived             27.0790+-0.6252     ?     27.5136+-0.5277        ? might be 1.0160x slower
   put-by-id                                         19.7596+-0.6988           19.5826+-0.9831        
   marsaglia-osr-entry                               35.1433+-2.4439           34.3422+-1.3157          might be 1.0233x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     15.2616+-1.7467     ?     16.6427+-2.9713        ? might be 1.0905x slower
   double-pollution-putbyoffset                       8.9895+-1.6725     ?     10.0496+-3.0122        ? might be 1.1179x slower
   allocate-big-object                                4.8097+-0.2305     ?      4.8237+-0.6354        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     75.1158+-2.6146     ^     67.7994+-4.1495        ^ definitely 1.1079x faster
   new-array-buffer-push                             10.1701+-0.3898            9.7193+-0.3084          might be 1.0464x faster
   proto-getter-access                               15.7438+-1.9698           15.1745+-1.2859          might be 1.0375x faster
   elidable-new-object-then-call                     65.0165+-1.8863     ?     66.1386+-2.6830        ? might be 1.0173x slower
   getter-richards                                  162.5688+-21.6944         157.6792+-9.3295          might be 1.0310x faster
   int-or-other-div-then-get-by-val                   7.2026+-1.4680     ?      7.3310+-1.3733        ? might be 1.0178x slower
   for-of-iterate-array-entries                       8.0518+-1.4014     ?      9.6695+-1.8806        ? might be 1.2009x slower
   switch-char-constant                               5.6707+-1.3215            4.7314+-0.7734          might be 1.1985x faster
   infer-closure-const-then-put-to-scope             34.5287+-1.4602     ?     36.1645+-0.4194        ? might be 1.0474x slower
   varargs-strict-mode                               16.4589+-2.0082           16.3476+-0.0867        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      6.5141+-1.8491     ?      7.2647+-1.6594        ? might be 1.1152x slower
   infer-one-time-deep-closure                       31.0538+-1.7563           30.4079+-0.9054          might be 1.0212x faster
   obvious-sink-pathology                           193.3276+-1.7824     ?    194.7242+-5.3572        ?
   by-val-generic                                    14.7705+-0.4122     ?     16.5571+-2.6212        ? might be 1.1210x slower
   ftl-library-inlining                             113.1843+-20.2965    ?    114.0601+-19.2391       ?
   array-access-polymorphic-structure                11.5600+-2.0347           11.2024+-1.2929          might be 1.0319x faster
   int-or-other-sub-then-get-by-val                   8.9184+-1.3496            7.6993+-0.8800          might be 1.1583x faster
   Int16Array-load-int-mul                            3.0353+-0.5343            2.7732+-0.5527          might be 1.0945x faster
   varargs-construct-inline                          33.6563+-0.7327     ?     34.2858+-2.2946        ? might be 1.0187x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                     11.7346+-3.4445           11.5706+-2.6188          might be 1.0142x faster
   for-of-iterate-array-values                        6.9768+-1.0211     ?      7.8172+-1.6042        ? might be 1.1205x slower
   string-get-by-val-out-of-bounds-insane             5.9778+-0.8561            5.6424+-0.2120          might be 1.0594x faster
   cfg-simplify                                       5.8690+-1.1478            5.3339+-0.7786          might be 1.1003x faster
   put-by-id-replace-and-transition                  14.3352+-0.5686           14.2711+-1.1606        
   HashMap-string-put-get-iterate                    41.8795+-2.6127     ?     42.8315+-2.4942        ? might be 1.0227x slower
   negative-zero-modulo                               0.5887+-0.1308            0.5530+-0.1347          might be 1.0645x faster
   string-cons-repeat                                11.9399+-0.3255     ?     12.0018+-0.2841        ?
   array-prototype-every                            153.1156+-7.6803          146.3458+-6.4994          might be 1.0463x faster
   assign-custom-setter                               6.2412+-0.0763     ?      6.7279+-0.8864        ? might be 1.0780x slower
   Int16Array-to-Int32Array-set                     112.6842+-2.4712     ^     99.1448+-2.6317        ^ definitely 1.1366x faster
   string-sub                                        98.2621+-2.9818     !    104.9269+-2.4310        ! definitely 1.0678x slower
   string-get-by-val                                  6.9843+-1.6573            6.1730+-0.9859          might be 1.1314x faster
   mul-boolean-double                                 6.5012+-1.2422     ?      7.5038+-1.7683        ? might be 1.1542x slower
   infer-constant-global-property                   494.0874+-2.8789     ?    494.4902+-3.1898        ?
   string-get-by-val-big-char                        13.1410+-2.6686           12.9345+-1.7212          might be 1.0160x faster
   switch-char                                        9.8388+-0.2336     ?     11.5446+-1.7560        ? might be 1.1734x slower
   ArrayBuffer-Int8Array-alloc-long-lived            27.2399+-1.0396     ^     24.5490+-0.7803        ^ definitely 1.1096x faster
   put-by-id-slightly-polymorphic                     6.3022+-3.2506            5.4589+-0.9878          might be 1.1545x faster
   Int32Array-alloc-large                            38.0667+-0.5581     ?     38.4395+-1.0390        ?
   infer-closure-const-then-mov                      29.2384+-1.8265     ?     32.2907+-2.6336        ? might be 1.1044x slower
   exit-length-on-plain-object                       21.7659+-0.1090     ^     21.4329+-0.2089        ^ definitely 1.0155x faster
   object-test                                        6.6823+-1.2964            6.5208+-1.3674          might be 1.0248x faster
   poly-stricteq                                     80.4878+-0.1109     ?     81.1385+-1.3067        ?
   string-concat-simple                              17.8630+-0.3782     ?     18.1691+-1.1251        ? might be 1.0171x slower
   large-int-neg                                     27.0183+-2.3535           25.0152+-0.2090          might be 1.0801x faster
   int-or-other-add-then-get-by-val                   8.3490+-1.1028            8.1183+-1.4005          might be 1.0284x faster
   string-hash                                        4.3291+-1.2013     ?      4.3960+-0.8732        ? might be 1.0155x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.5063+-3.2416           11.6581+-3.0429          might be 1.1585x faster
   simple-getter-access                              20.7037+-1.0528           20.1712+-0.6343          might be 1.0264x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     70.8417+-3.3029     ?     71.4030+-1.0019        ?
   mod-boolean                                       10.7845+-0.2325     ?     11.7873+-1.4427        ? might be 1.0930x slower
   integer-divide                                    16.8208+-0.4158     ?     17.2799+-1.4233        ? might be 1.0273x slower
   make-indexed-storage                               6.3986+-1.2148     ?      6.7296+-1.3560        ? might be 1.0517x slower
   chain-getter-access                               17.0520+-1.4205           16.0935+-1.8976          might be 1.0596x faster
   int-or-other-neg-zero-then-get-by-val             37.0946+-1.3418     ?     37.3979+-0.5333        ?
   varargs-construct                                 48.0425+-1.4571     ?     50.1279+-2.4514        ? might be 1.0434x slower
   call-spread-call                                  37.2600+-1.4847     ?     39.4958+-1.7511        ? might be 1.0600x slower
   array-prototype-map                              156.0912+-3.5712     ?    166.6296+-8.1009        ? might be 1.0675x slower
   div-boolean                                       12.7122+-1.8653           12.1572+-0.6186          might be 1.0457x faster
   try-catch-get-by-val-cloned-arguments             21.6048+-0.1967     ?     22.0427+-0.5453        ? might be 1.0203x slower
   lots-of-fields                                    24.4757+-1.0683     ?     24.8946+-0.6685        ? might be 1.0171x slower
   double-to-uint32-typed-array-no-inline             5.1740+-0.9416            4.5108+-0.9511          might be 1.1470x faster
   array-with-double-mul-add                          9.6835+-2.6887     ?     10.8852+-2.3050        ? might be 1.1241x slower
   arity-mismatch-inlining                            1.7327+-0.2726            1.6347+-0.3312          might be 1.0600x faster
   int-or-other-abs-zero-then-get-by-val             38.9401+-2.5978           38.5500+-2.7144          might be 1.0101x faster
   assign-custom-setter-polymorphic                   4.9011+-0.8546     ?      5.1540+-0.7113        ? might be 1.0516x slower
   inline-arguments-access                            7.8643+-1.2001     ?      8.5517+-0.9360        ? might be 1.0874x slower
   ArrayBuffer-Int32Array-byteOffset                  5.8546+-0.3968     ?      6.4763+-1.3764        ? might be 1.1062x slower
   string-concat-pair-object                          4.1082+-0.5223     ?      4.1693+-0.0499        ? might be 1.0149x slower
   big-int-mul                                        8.0975+-2.0253            7.9838+-1.2219          might be 1.0142x faster
   simple-poly-call-nested                           12.9127+-1.1834           12.3571+-1.8312          might be 1.0450x faster
   inline-arguments-local-escape                      7.4880+-0.5198     ?      8.3348+-0.9591        ? might be 1.1131x slower
   Int32Array-alloc                                   5.0411+-0.2843            5.0363+-0.1944        
   poly-chain-access-simpler                          4.8992+-0.6778     ?      5.4043+-1.1040        ? might be 1.1031x slower
   adapt-to-double-divide                            21.9694+-0.4239     ?     22.2947+-0.6047        ? might be 1.0148x slower
   abs-boolean                                        6.2254+-1.6461            5.9148+-1.1268          might be 1.0525x faster
   double-to-int32-typed-array-no-inline              4.2327+-0.6950     ?      4.3982+-1.4057        ? might be 1.0391x slower
   number-test                                        6.1469+-1.5018            5.8357+-1.0671          might be 1.0533x faster
   polymorphic-structure                             27.3512+-2.1819     ?     27.8853+-2.6867        ? might be 1.0195x slower
   int-overflow-local                                 8.1801+-2.2051     ?      9.2571+-3.5795        ? might be 1.1317x slower
   div-boolean-double                                 6.9991+-0.3622     ?      7.3012+-1.4520        ? might be 1.0432x slower
   new-array-buffer-dead                              5.7280+-1.0557            5.6670+-0.9959          might be 1.0108x faster
   in-four-cases                                     29.6939+-2.0237     ?     30.7677+-2.8198        ? might be 1.0362x slower
   Int16Array-alloc-long-lived                       73.1728+-0.3661     ^     71.7484+-0.9676        ^ definitely 1.0199x faster
   infer-constant-property                            4.7104+-0.9096     ?      5.2323+-1.2287        ? might be 1.1108x slower
   Int8Array-alloc-long-lived                        65.7314+-0.6789     ?     65.9612+-1.0574        ?
   put-by-val-large-index-blank-indexing-type   
                                                     10.1652+-0.2301     ?     10.8263+-0.5025        ? might be 1.0650x slower
   boolean-test                                       6.4658+-1.4845            5.9284+-0.8934          might be 1.0906x faster
   double-get-by-val-out-of-bounds                    7.3571+-0.9137     ?      8.4583+-1.8711        ? might be 1.1497x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     11.3470+-1.2783            9.9430+-1.4963          might be 1.1412x faster
   polymorphic-get-by-id                              5.6313+-0.9348            5.2335+-0.9987          might be 1.0760x faster
   int-or-other-mod-then-get-by-val                   6.8902+-0.6892     ?      8.0750+-1.9349        ? might be 1.1719x slower
   min-boolean                                        4.1488+-0.8252     ?      5.4956+-1.3545        ? might be 1.3246x slower
   get-by-id-check-structure-elimination              9.2596+-0.4605     ?      9.3645+-0.2114        ? might be 1.0113x slower
   delay-tear-off-arguments-strictmode               21.6449+-2.3765     ?     22.7062+-2.4157        ? might be 1.0490x slower
   arguments-named-and-reflective                    18.2091+-0.7621           18.0347+-0.5012        
   emscripten-cube2hash                              54.6792+-8.6073           50.5494+-4.4136          might be 1.0817x faster
   put-by-val-machine-int                             4.5337+-0.7442     ?      4.6960+-0.5990        ? might be 1.0358x slower
   try-catch-get-by-val-scoped-arguments             11.5208+-0.1942     ?     12.0230+-0.4159        ? might be 1.0436x slower
   minus-boolean-double                               5.8029+-1.5989            5.4576+-1.1203          might be 1.0633x faster
   ftl-library-inlining-dataview                    100.4742+-3.1301     ?    104.3418+-4.5625        ? might be 1.0385x slower
   destructuring-swap                                10.1442+-0.6354     ?     10.6677+-1.5970        ? might be 1.0516x slower
   int-or-other-mul-then-get-by-val                   8.0623+-1.1926            7.4357+-1.3863          might be 1.0843x faster
   misc-strict-eq                                    64.0642+-3.0669     ?     65.6877+-5.5913        ? might be 1.0253x slower
   int-or-other-sub                                   7.0800+-1.1763            6.5275+-1.0817          might be 1.0847x faster
   empty-string-plus-int                              9.3695+-1.3103            8.9368+-1.7284          might be 1.0484x faster
   unprofiled-licm                                   34.9999+-1.7758     ?     36.1466+-4.6053        ? might be 1.0328x slower
   no-inline-constructor                            177.5682+-1.4708     ?    177.9597+-1.9521        ?
   global-var-const-infer                             1.2695+-0.2146            1.1063+-0.2115          might be 1.1475x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.5905+-0.8249     ?      4.6622+-0.9961        ? might be 1.0156x slower
   switch                                            18.4781+-2.3896           17.8021+-2.5561          might be 1.0380x faster
   obviously-elidable-new-object                     57.6269+-1.9380     ?     58.9076+-1.4483        ? might be 1.0222x slower
   fixed-typed-array-storage                          1.7862+-0.4109     ?      1.8198+-0.4035        ? might be 1.0188x slower
   substring-concat-weird                            69.6988+-1.3866     ?     69.7988+-0.4315        ?
   sinkable-new-object                               62.2484+-1.0901           61.9700+-1.4497        
   simple-poly-call                                   2.5915+-0.6260     ?      2.6630+-0.1542        ? might be 1.0276x slower
   negative-zero-divide                               0.6238+-0.1268            0.5912+-0.1290          might be 1.0551x faster
   imul-int-only                                     15.6973+-1.0863           15.6483+-0.7474        
   hoist-poly-check-structure-effectful-loop   
                                                      9.7757+-3.0720            9.6466+-1.8321          might be 1.0134x faster
   Int16Array-bubble-sort                            46.4881+-1.6263           45.6230+-0.0976          might be 1.0190x faster
   int52-spill                                       11.3113+-0.3613     ?     13.1313+-1.9601        ? might be 1.1609x slower
   string-long-ident-equality                        22.5336+-3.0419           21.6704+-1.0897          might be 1.0398x faster
   aliased-arguments-getbyval                         2.9233+-1.2404            2.4813+-0.8392          might be 1.1782x faster
   fold-get-by-id-to-multi-get-by-offset             13.6812+-1.8336           13.6378+-2.7709        
   fold-multi-get-by-offset-to-get-by-offset   
                                                     11.5203+-2.6749     ?     12.5235+-3.1092        ? might be 1.0871x slower
   asmjs_bool_bug                                    11.0662+-1.0359           10.9027+-0.1540          might be 1.0150x faster
   fround                                            28.7963+-1.7035     ?     29.4992+-2.3417        ? might be 1.0244x slower
   switch-string-basic-var                           33.3255+-3.5344           31.7995+-6.1372          might be 1.0480x faster
   array-with-double-increment                        5.7658+-1.3133     ?      6.7611+-1.6888        ? might be 1.1726x slower
   get-by-id-chain-from-try-block                    13.5448+-0.0922     ?     13.6331+-0.1471        ?
   infer-one-time-closure-two-vars                   17.7526+-0.8408           17.3698+-0.6754          might be 1.0220x faster
   create-lots-of-functions                          40.2867+-2.1051           39.0177+-2.1276          might be 1.0325x faster
   elidable-new-object-dag                           65.5000+-3.9559           64.5265+-2.0018          might be 1.0151x faster
   polyvariant-monomorphic-get-by-id                 15.2995+-1.5947     ?     17.3973+-3.8965        ? might be 1.1371x slower
   Int8Array-load-with-byteLength                     6.5491+-1.3797            6.0976+-0.8412          might be 1.0740x faster
   array-prototype-forEach                          143.0687+-6.2167     ?    143.5450+-6.0256        ?
   large-int                                         22.9926+-1.8812           22.7121+-1.8307          might be 1.0124x faster
   int-or-other-abs-then-get-by-val                   9.6839+-1.4440            9.2134+-1.2689          might be 1.0511x faster
   gcse                                               9.8724+-2.2503            9.6228+-3.4780          might be 1.0259x faster
   cast-int-to-double                                10.9247+-1.4338           10.5759+-0.9061          might be 1.0330x faster
   destructuring-arguments                           25.0527+-0.5034     ?     26.0627+-1.3782        ? might be 1.0403x slower
   poly-chain-access                                  4.2781+-0.8009     ?      4.6617+-0.8338        ? might be 1.0897x slower
   polymorphic-array-call                             2.0916+-0.2000     ?      2.2159+-0.2235        ? might be 1.0594x slower
   array-splice-contiguous                           96.9450+-10.2748          92.0464+-5.5049          might be 1.0532x faster
   mod-boolean-double                                12.0567+-2.2048           10.3524+-0.5450          might be 1.1646x faster

   <geometric>                                       14.9348+-0.1204     ?     14.9597+-0.1005        ? might be 1.0017x slower

                                                        TipOfTree              FunctionRealloc                                  
AsmBench:
   bigfib.cpp                                       762.2795+-12.9901    !    796.2536+-10.5541       ! definitely 1.0446x slower
   n-body.c                                        2015.2334+-1.9373     ?   2019.4775+-3.6410        ?
   FloatMM.c                                       1135.8015+-22.1074    ?   1155.2264+-2.5682        ? might be 1.0171x slower
   cray.c                                           767.6041+-28.3988    ?    801.4739+-5.8783        ? might be 1.0441x slower
   stepanov_container.cpp                          5556.4023+-39.1732    ?   5574.3343+-18.4033       ?
   dry.c                                            818.2845+-35.2464         790.9192+-23.4038         might be 1.0346x faster
   gcc-loops.cpp                                   7013.8607+-38.3068    ?   7051.9246+-103.7669      ?
   Towers.c                                         465.8109+-7.3643          451.8176+-11.5756         might be 1.0310x faster
   Quicksort.c                                      703.3576+-2.1536     ?    704.4541+-8.8259        ?

   <geometric>                                     1340.4445+-5.1091     ?   1348.2654+-6.8608        ? might be 1.0058x slower

                                                        TipOfTree              FunctionRealloc                                  
CompressionBench:
   huffman                                          632.5870+-23.8658    ?    642.1671+-26.9759       ? might be 1.0151x slower
   arithmetic-simple                                642.7873+-4.1431     !    670.4495+-22.9164       ! definitely 1.0430x slower
   arithmetic-precise                               502.8314+-12.7710    ?    520.4318+-8.4281        ? might be 1.0350x slower
   arithmetic-complex-precise                       500.3788+-8.8826     ?    516.4002+-7.6858        ? might be 1.0320x slower
   arithmetic-precise-order-0                       679.6448+-14.8879    ?    690.2684+-5.9071        ? might be 1.0156x slower
   arithmetic-precise-order-1                       528.1278+-13.4463    ?    538.3418+-5.1507        ? might be 1.0193x slower
   arithmetic-precise-order-2                       554.2217+-3.2980     !    574.7643+-4.0120        ! definitely 1.0371x slower
   arithmetic-simple-order-1                        624.3350+-6.6309     !    639.4243+-2.1735        ! definitely 1.0242x slower
   arithmetic-simple-order-2                        695.4292+-5.9827     !    711.0038+-5.5694        ! definitely 1.0224x slower
   lz-string                                        467.8931+-10.6896    ?    472.3737+-4.9408        ?

   <geometric>                                      577.5367+-3.6241     !    592.1537+-4.3534        ! definitely 1.0253x slower

                                                        TipOfTree              FunctionRealloc                                  

                                                        TipOfTree              FunctionRealloc                                  
Geomean of preferred means:
   <scaled-result>                                  109.6649+-0.8579     ?    110.0916+-0.8314        ? might be 1.0039x slower
Comment 10 Filip Pizlo 2015-03-31 15:48:01 PDT
I believe that the CompressionBench regression is because we were already having a bad rage-recompilation due to some weak references.  So this is a red herring.  We should fix that separately.

I fixed the other regressions.  We need to run strength reduction late to ensure that GetIndexedPropertyStorage gets folded to ConstantStoragePointer.
Comment 11 Filip Pizlo 2015-03-31 16:01:50 PDT
Created attachment 249865 [details]
the patch?
Comment 12 Filip Pizlo 2015-04-01 14:46:43 PDT
Latest perf numbers:


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

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r182200)
"FunctionRealloc" at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc (r182200)

Collected 6 samples per benchmark/VM, with 6 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              FunctionRealloc                                  
SunSpider:
   3d-cube                                            8.4810+-0.2016            8.4732+-0.1296        
   3d-morph                                          12.1388+-0.1951     !     12.4761+-0.1142        ! definitely 1.0278x slower
   3d-raytrace                                       11.3971+-0.2271     ?     11.4582+-0.2299        ?
   access-binary-trees                                3.8177+-0.0985     ?      3.8732+-0.1827        ? might be 1.0145x slower
   access-fannkuch                                   10.4670+-0.1228     ?     10.5421+-0.1770        ?
   access-nbody                                       5.5786+-0.1508     ?      5.5892+-0.1518        ?
   access-nsieve                                      5.6069+-0.1690            5.5050+-0.1952          might be 1.0185x faster
   bitops-3bit-bits-in-byte                           2.3797+-0.1142     ?      2.4126+-0.0752        ? might be 1.0138x slower
   bitops-bits-in-byte                                6.5447+-0.0950     ?      6.5991+-0.1082        ?
   bitops-bitwise-and                                 3.0582+-0.0865     ?      3.1058+-0.0797        ? might be 1.0156x slower
   bitops-nsieve-bits                                 6.9078+-0.1584            6.8429+-0.1447        
   controlflow-recursive                              3.5944+-0.1084            3.4936+-0.1484          might be 1.0288x faster
   crypto-aes                                         7.2669+-0.2349     ?      7.3394+-0.2256        ?
   crypto-md5                                         4.3189+-0.1658     ?      4.3491+-0.1976        ?
   crypto-sha1                                        4.3068+-0.2171            4.2981+-0.1929        
   date-format-tofte                                 17.6088+-0.7711     ?     17.6542+-0.6337        ?
   date-format-xparb                                 10.1322+-0.3880     ?     10.2145+-0.4346        ?
   math-cordic                                        5.7141+-0.1352            5.6290+-0.0937          might be 1.0151x faster
   math-partial-sums                                 11.7697+-0.2021     ?     11.9012+-0.1128        ? might be 1.0112x slower
   math-spectral-norm                                 3.5730+-0.1509            3.5647+-0.1088        
   regexp-dna                                        11.5015+-0.3987           11.4412+-0.3274        
   string-base64                                      7.9395+-0.1392            7.8960+-0.3815        
   string-fasta                                      13.1721+-0.3000           13.1628+-0.2633        
   string-tagcloud                                   18.6296+-0.5084           18.2605+-0.3327          might be 1.0202x faster
   string-unpack-code                                38.6478+-0.7940           37.8841+-0.6727          might be 1.0202x faster
   string-validate-input                              9.1630+-0.2202     ?      9.1967+-0.1833        ?

   <arithmetic>                                       9.3737+-0.0869            9.3524+-0.0714          might be 1.0023x faster

                                                        TipOfTree              FunctionRealloc                                  
LongSpider:
   3d-cube                                         1590.1569+-9.8988     !   1628.6880+-16.0210       ! definitely 1.0242x slower
   3d-morph                                        2002.7146+-7.3762     ?   2006.1272+-17.4664       ?
   3d-raytrace                                     1587.8490+-29.2992        1575.9705+-11.9158       
   access-binary-trees                             1905.9116+-20.4482        1904.8468+-13.9499       
   access-fannkuch                                  615.8153+-29.8431    ?    622.0608+-23.7807       ? might be 1.0101x slower
   access-nbody                                    1502.4249+-15.8854        1491.1864+-9.9597        
   access-nsieve                                   1758.1257+-10.4707    ?   1770.8966+-18.8340       ?
   bitops-3bit-bits-in-byte                          72.2614+-0.8734           72.1582+-0.5813        
   bitops-bits-in-byte                              401.1255+-4.5546          400.0387+-3.4656        
   bitops-nsieve-bits                              1472.2507+-20.1884        1462.2565+-11.6723       
   controlflow-recursive                           1087.1993+-8.3525         1075.4246+-8.2157          might be 1.0109x faster
   crypto-aes                                      1324.4575+-8.0747     ?   1332.2167+-8.3142        ?
   crypto-md5                                       999.7779+-11.3507         997.9005+-10.6537       
   crypto-sha1                                     1407.4612+-8.0650         1404.6551+-17.6433       
   date-format-tofte                               1522.4288+-13.6064    !   1562.5554+-19.4320       ! definitely 1.0264x slower
   date-format-xparb                               1405.8477+-28.7087    ?   1449.3708+-27.0644       ? might be 1.0310x slower
   math-cordic                                     1163.0284+-77.3048    ?   1213.1833+-5.4777        ? might be 1.0431x slower
   math-partial-sums                               1321.4050+-13.4235    ?   1345.5815+-14.2393       ? might be 1.0183x slower
   math-spectral-norm                              1226.3757+-13.9633    ?   1233.6867+-9.6120        ?
   string-base64                                    650.8695+-5.4045          650.8557+-4.0222        
   string-fasta                                     892.4399+-8.2187     ?    901.1303+-8.6010        ?
   string-tagcloud                                  446.6796+-6.3249          435.8852+-7.6501          might be 1.0248x faster

   <geometric>                                     1015.8707+-4.2799     ?   1021.3146+-2.3849        ? might be 1.0054x slower

                                                        TipOfTree              FunctionRealloc                                  
V8Spider:
   crypto                                           102.8811+-1.4076     ?    103.2911+-1.2926        ?
   deltablue                                        126.4406+-2.4481          123.9976+-4.2167          might be 1.0197x faster
   earley-boyer                                      82.5880+-0.6222           82.0009+-1.1918        
   raytrace                                          52.6703+-1.4138           52.3138+-1.7909        
   regexp                                           129.9740+-1.9519          128.4670+-0.7258          might be 1.0117x faster
   richards                                         132.3771+-4.8818     ?    133.1882+-2.7955        ?
   splay                                             65.4045+-2.8652           64.4268+-4.9704          might be 1.0152x faster

   <geometric>                                       93.7320+-0.4995           93.0464+-1.0792          might be 1.0074x faster

                                                        TipOfTree              FunctionRealloc                                  
Octane:
   encrypt                                           0.47781+-0.01484          0.47385+-0.01162       
   decrypt                                           8.42039+-0.10206    ?     8.44427+-0.08932       ?
   deltablue                                x2       0.39722+-0.00520    ?     0.39876+-0.00519       ?
   earley                                            1.10154+-0.01648    ?     1.12632+-0.01318       ? might be 1.0225x slower
   boyer                                            14.28735+-0.15547    ?    14.31238+-0.10447       ?
   navier-stokes                            x2       7.46542+-0.08310          7.38812+-0.02874         might be 1.0105x faster
   raytrace                                 x2       2.59856+-0.04965          2.54591+-0.08113         might be 1.0207x faster
   richards                                 x2       0.24333+-0.00303    ?     0.24343+-0.00314       ?
   splay                                    x2       0.66503+-0.01520    ?     0.67626+-0.01363       ? might be 1.0169x slower
   regexp                                   x2      64.25706+-1.46037         64.22079+-0.87271       
   pdfjs                                    x2      90.13653+-0.83521    ?    91.25179+-0.98928       ? might be 1.0124x slower
   mandreel                                 x2     106.54531+-1.63132    ?   106.85910+-1.38959       ?
   gbemu                                    x2      94.31471+-3.43407         93.48742+-1.67201       
   closure                                           0.99443+-0.00899    ?     1.00298+-0.01273       ?
   jquery                                           14.13406+-3.71944         12.68464+-0.17084         might be 1.1143x faster
   box2d                                    x2      26.84720+-0.32516    ^    26.01378+-0.23466       ^ definitely 1.0320x faster
   zlib                                     x2     731.52295+-8.73186    ^   693.89528+-9.38646       ^ definitely 1.0542x faster
   typescript                               x2    1431.76099+-18.30633   ?  1442.10099+-16.90197      ?

   <geometric>                                      13.14068+-0.10837         13.04385+-0.06096         might be 1.0074x faster

                                                        TipOfTree              FunctionRealloc                                  
Kraken:
   ai-astar                                          829.929+-5.855      ?     834.398+-7.019         ?
   audio-beat-detection                              216.717+-5.053      ?     217.840+-6.128         ?
   audio-dft                                         305.650+-23.639     ?     325.836+-26.220        ? might be 1.0660x slower
   audio-fft                                         160.772+-2.898      ?     161.230+-1.588         ?
   audio-oscillator                                  385.197+-2.677            384.154+-4.338         
   imaging-darkroom                                  177.239+-1.475      ?     177.768+-1.236         ?
   imaging-desaturate                                148.185+-1.274            147.704+-0.669         
   imaging-gaussian-blur                             223.501+-2.043            222.010+-2.916         
   json-parse-financial                               94.679+-1.074      ?      94.982+-2.406         ?
   json-stringify-tinderbox                          108.179+-1.348      !     116.289+-5.440         ! definitely 1.0750x slower
   stanford-crypto-aes                               123.731+-2.408            121.056+-1.357           might be 1.0221x faster
   stanford-crypto-ccm                               105.156+-13.043     ?     107.447+-13.094        ? might be 1.0218x slower
   stanford-crypto-pbkdf2                            311.438+-2.290            309.873+-4.378         
   stanford-crypto-sha256-iterative                   97.113+-1.222      ?      97.845+-1.708         ?

   <arithmetic>                                      234.820+-2.559      ?     237.031+-3.088         ? might be 1.0094x slower

                                                        TipOfTree              FunctionRealloc                                  
JSRegress:
   abs-boolean                                        4.6372+-0.1259     ?      4.7638+-0.0884        ? might be 1.0273x slower
   adapt-to-double-divide                            19.9825+-0.2952           19.8339+-0.2262        
   aliased-arguments-getbyval                         1.7673+-0.0818     !      1.9916+-0.1361        ! definitely 1.1269x slower
   allocate-big-object                                4.5236+-0.4153            4.5191+-0.3605        
   arguments-named-and-reflective                    20.2916+-0.5043     ?     20.5632+-0.3065        ? might be 1.0134x slower
   arguments-out-of-bounds                           21.8207+-0.3953           21.5380+-0.3002          might be 1.0131x faster
   arguments-strict-mode                             18.5219+-0.6590           18.5168+-0.2517        
   arguments                                         16.3992+-0.1757     ?     16.4232+-0.3912        ?
   arity-mismatch-inlining                            1.3746+-0.0841            1.3198+-0.1411          might be 1.0415x faster
   array-access-polymorphic-structure                14.5602+-0.1622     ^     12.9334+-0.3096        ^ definitely 1.1258x faster
   array-nonarray-polymorhpic-access                 69.2900+-3.0440     ?     69.3665+-3.0998        ?
   array-prototype-every                            188.9119+-2.4220     ?    193.6886+-3.7007        ? might be 1.0253x slower
   array-prototype-forEach                          186.4793+-3.0560     ?    188.5688+-1.7800        ? might be 1.0112x slower
   array-prototype-map                              204.3593+-1.0954     ?    214.3596+-17.0101       ? might be 1.0489x slower
   array-prototype-some                             187.4749+-1.6526     ?    191.7623+-4.9094        ? might be 1.0229x slower
   array-splice-contiguous                           89.2327+-1.1187           87.8767+-1.2159          might be 1.0154x faster
   array-with-double-add                              7.6300+-0.1700            7.6036+-0.0887        
   array-with-double-increment                        5.6619+-0.1618            5.6455+-0.0905        
   array-with-double-mul-add                         11.9068+-0.1280     ?     11.9188+-0.2289        ?
   array-with-double-sum                              5.5288+-0.1122            5.5083+-0.1187        
   array-with-int32-add-sub                          13.4939+-0.1411           13.4639+-0.1336        
   array-with-int32-or-double-sum                     5.3707+-0.1237     ?      5.3938+-0.1268        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     68.1457+-1.3899     ?     69.8191+-0.8247        ? might be 1.0246x slower
   ArrayBuffer-DataView-alloc-long-lived             30.3087+-1.8649     ?     30.8167+-1.1397        ? might be 1.0168x slower
   ArrayBuffer-Int32Array-byteOffset                  5.3802+-0.0606     ?      5.3955+-0.1678        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     71.1059+-2.0208     ?     72.8843+-2.8889        ? might be 1.0250x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     50.0404+-3.7933           49.2636+-2.6133          might be 1.0158x faster
   ArrayBuffer-Int8Array-alloc-long-lived            27.1328+-0.6367     ?     27.6198+-1.5397        ? might be 1.0179x slower
   ArrayBuffer-Int8Array-alloc                       22.4934+-0.9702     ?     24.1892+-2.6156        ? might be 1.0754x slower
   asmjs_bool_bug                                    13.4961+-0.2351     ^     12.9948+-0.1355        ^ definitely 1.0386x faster
   assign-custom-setter-polymorphic                   6.3818+-0.1343            6.1565+-0.1140          might be 1.0366x faster
   assign-custom-setter                               8.4947+-0.2133            8.3595+-0.1698          might be 1.0162x faster
   basic-set                                         15.8360+-0.7404     ?     15.9752+-0.6336        ?
   big-int-mul                                        7.8745+-0.0586     ?      7.9682+-0.1643        ? might be 1.0119x slower
   boolean-test                                       4.9748+-0.0520            4.9549+-0.0561        
   branch-fold                                        5.3802+-0.1496            5.3325+-0.1120        
   by-val-generic                                    16.7179+-1.8055           16.3497+-0.3780          might be 1.0225x faster
   call-spread-apply                                 61.8566+-3.0846           61.1526+-1.3215          might be 1.0115x faster
   call-spread-call                                  49.3092+-0.4431     ?     50.0270+-0.5757        ? might be 1.0146x slower
   captured-assignments                               0.8538+-0.0857     ?      0.8712+-0.0613        ? might be 1.0203x slower
   cast-int-to-double                                 8.7362+-0.1623     ?      8.8175+-0.1564        ?
   cell-argument                                     12.2745+-0.2501     ?     12.6148+-0.1795        ? might be 1.0277x slower
   cfg-simplify                                       4.0476+-0.1407            4.0116+-0.1127        
   chain-getter-access                               17.0269+-0.4141           16.9087+-0.2847        
   cmpeq-obj-to-obj-other                            17.3100+-0.3928           16.7251+-0.2809          might be 1.0350x faster
   constant-test                                      8.2809+-0.1057     ?      8.3166+-0.1129        ?
   create-lots-of-functions                          41.8090+-0.5457           41.6048+-1.6994        
   DataView-custom-properties                        78.4391+-3.5927     ?     78.6688+-1.8705        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.8975+-0.0946            0.8899+-0.0782        
   delay-tear-off-arguments-strictmode               27.7898+-0.2365           27.7741+-0.2850        
   deltablue-varargs                                366.5708+-3.8329          361.7295+-2.1793          might be 1.0134x faster
   destructuring-arguments                           27.8071+-0.1289     ?     28.0787+-0.1919        ?
   destructuring-swap                                 8.5881+-0.1470            8.5191+-0.1542        
   direct-arguments-getbyval                          1.8448+-0.2143     ?      1.9458+-0.2518        ? might be 1.0547x slower
   div-boolean-double                                 5.9832+-0.1617     ?      6.0423+-0.1020        ?
   div-boolean                                       10.3437+-0.1096     ?     10.3875+-0.1868        ?
   double-get-by-val-out-of-bounds                    8.3682+-0.2938     ?      8.6376+-0.1440        ? might be 1.0322x slower
   double-pollution-getbyval                         10.3070+-0.1039           10.2623+-0.1009        
   double-pollution-putbyoffset                       8.3718+-0.1686            8.2369+-0.2534          might be 1.0164x faster
   double-to-int32-typed-array-no-inline              3.7122+-0.0852     ?      3.8353+-0.1069        ? might be 1.0331x slower
   double-to-int32-typed-array                        3.2496+-0.1074     ?      3.3577+-0.1150        ? might be 1.0333x slower
   double-to-uint32-typed-array-no-inline             3.8170+-0.1068     ?      3.9489+-0.1584        ? might be 1.0345x slower
   double-to-uint32-typed-array                       3.3094+-0.1271     ?      3.3969+-0.1449        ? might be 1.0264x slower
   elidable-new-object-dag                           65.3667+-0.8646     ?     65.3841+-0.8496        ?
   elidable-new-object-roflcopter                    72.3917+-0.7270     ?     72.7797+-0.8268        ?
   elidable-new-object-then-call                     62.4799+-0.7429           61.8256+-0.5751          might be 1.0106x faster
   elidable-new-object-tree                          72.1904+-1.1482     ?     73.0547+-0.8683        ? might be 1.0120x slower
   empty-string-plus-int                             10.1538+-0.1839     !     10.5570+-0.1847        ! definitely 1.0397x slower
   emscripten-cube2hash                              57.7673+-0.9597           57.2740+-1.0135        
   exit-length-on-plain-object                       31.8496+-1.0197           31.6769+-3.2369        
   external-arguments-getbyval                        2.1076+-0.1099            2.1009+-0.1574        
   external-arguments-putbyval                        4.0160+-0.1408     ?      4.1803+-0.1359        ? might be 1.0409x slower
   fixed-typed-array-storage-var-index                1.9669+-0.0581     !      2.1321+-0.0412        ! definitely 1.0840x slower
   fixed-typed-array-storage                          1.4421+-0.1518     ?      1.4993+-0.0846        ? might be 1.0396x slower
   Float32Array-matrix-mult                           8.3491+-0.1332            8.3363+-0.2336        
   Float32Array-to-Float64Array-set                 120.2933+-2.4242          120.1361+-1.0831        
   Float64Array-alloc-long-lived                    118.2761+-1.0303     ^    115.0354+-1.3362        ^ definitely 1.0282x faster
   Float64Array-to-Int16Array-set                   147.3549+-1.3292     ?    151.5083+-5.5450        ? might be 1.0282x slower
   fold-double-to-int                                29.1365+-0.5560     ^     26.0089+-0.2821        ^ definitely 1.1203x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     14.6176+-0.3314     ?     15.2863+-0.4227        ? might be 1.0458x slower
   fold-get-by-id-to-multi-get-by-offset             12.6366+-0.3634     ?     12.8507+-0.3584        ? might be 1.0169x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                     11.5122+-0.8367           11.3775+-0.8546          might be 1.0118x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     11.9398+-0.3632           11.9010+-0.3681        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.4482+-1.0406           10.3116+-0.8087          might be 1.0132x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.3604+-0.8719     ?      8.8287+-0.7708        ? might be 1.0560x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     16.6799+-0.9914           16.1919+-1.2984          might be 1.0301x faster
   fold-put-by-id-to-multi-put-by-offset             11.5290+-0.6581     ?     11.8126+-0.7568        ? might be 1.0246x slower
   fold-put-structure                                 8.7214+-0.6114     ?      8.9083+-0.8191        ? might be 1.0214x slower
   for-of-iterate-array-entries                       8.6837+-0.1654     ?      8.7337+-0.1135        ?
   for-of-iterate-array-keys                          7.2896+-0.2281            7.2611+-0.2046        
   for-of-iterate-array-values                        6.9913+-0.0982     ?      7.0334+-0.1715        ?
   fround                                            26.4005+-0.3801     ?     26.7940+-0.5490        ? might be 1.0149x slower
   ftl-library-inlining-dataview                    148.9085+-1.4847     ?    149.1331+-3.5390        ?
   ftl-library-inlining                             136.2604+-3.7671          135.5728+-2.3505        
   function-dot-apply                                 3.6984+-0.1377     ?      3.8004+-0.1058        ? might be 1.0276x slower
   function-test                                      5.5102+-0.1849            5.3671+-0.0860          might be 1.0267x faster
   function-with-eval                               174.6312+-1.9965     ?    175.0583+-2.2060        ?
   gcse-poly-get-less-obvious                        37.3602+-0.6146           37.0553+-0.5090        
   gcse-poly-get                                     37.4473+-0.7193           37.2612+-0.5492        
   gcse                                               9.3502+-0.1681     ?      9.5082+-0.1373        ? might be 1.0169x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.1667+-0.1306            4.1512+-0.0899        
   get-by-id-bimorphic-check-structure-elimination   
                                                     12.4229+-0.1872     ?     12.5432+-0.2446        ?
   get-by-id-chain-from-try-block                    14.1735+-0.1919           14.1320+-0.1747        
   get-by-id-check-structure-elimination             11.0828+-0.0993     ?     11.2359+-0.1233        ? might be 1.0138x slower
   get-by-id-proto-or-self                           33.5221+-3.3577           32.3248+-2.7986          might be 1.0370x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      5.3187+-0.1135            5.2923+-0.0665        
   get-by-id-self-or-proto                           32.7278+-2.8678     ?     33.3554+-3.1478        ? might be 1.0192x slower
   get-by-val-out-of-bounds                           8.0638+-0.1936     ?      8.1963+-0.2155        ? might be 1.0164x slower
   get_callee_monomorphic                             6.5424+-0.2295            6.2639+-0.4453          might be 1.0445x faster
   get_callee_polymorphic                             5.7527+-0.2408     ?      5.8416+-0.2076        ? might be 1.0155x slower
   getter-no-activation                               6.3410+-0.0669     ?      6.5377+-0.1459        ? might be 1.0310x slower
   getter-richards                                  176.7166+-3.0653          176.4984+-3.8682        
   getter                                            10.1573+-0.1994     ^      9.6432+-0.1948        ^ definitely 1.0533x faster
   global-var-const-infer-fire-from-opt               1.7760+-0.2435            1.7373+-0.2085          might be 1.0223x faster
   global-var-const-infer                             1.7332+-0.1211            1.6862+-0.1399          might be 1.0279x faster
   HashMap-put-get-iterate-keys                      50.0980+-0.5020     ?     50.1169+-0.5774        ?
   HashMap-put-get-iterate                           49.8684+-0.8090           49.6967+-1.1841        
   HashMap-string-put-get-iterate                    52.6733+-2.3512           50.3297+-0.7130          might be 1.0466x faster
   hoist-make-rope                                   18.1472+-0.8036           17.3600+-1.1625          might be 1.0453x faster
   hoist-poly-check-structure-effectful-loop   
                                                      9.7716+-0.1461            9.7013+-0.1772        
   hoist-poly-check-structure                         6.4919+-0.1409     ?      6.5953+-0.1482        ? might be 1.0159x slower
   imul-double-only                                  12.8941+-1.1252     ?     13.5534+-1.6023        ? might be 1.0511x slower
   imul-int-only                                     14.7253+-0.0843           14.6727+-0.4274        
   imul-mixed                                        12.7329+-0.6915           12.2440+-0.6065          might be 1.0399x faster
   in-four-cases                                     35.9988+-0.6766           35.8795+-0.4670        
   in-one-case-false                                 18.9905+-0.3746           18.9587+-0.2044        
   in-one-case-true                                  18.9263+-0.3610     ?     18.9657+-0.3272        ?
   in-two-cases                                      19.5633+-0.1760     ?     19.5686+-0.2553        ?
   indexed-properties-in-objects                      4.6455+-0.1189     ?      4.8112+-0.0514        ? might be 1.0357x slower
   infer-closure-const-then-mov-no-inline             6.1092+-0.0947     !      6.6040+-0.0760        ! definitely 1.0810x slower
   infer-closure-const-then-mov                      26.3870+-0.7470     !     27.5795+-0.3128        ! definitely 1.0452x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     19.3095+-0.3852     !     23.2356+-0.3130        ! definitely 1.2033x slower
   infer-closure-const-then-put-to-scope             31.2489+-0.5619     !     32.9851+-0.2978        ! definitely 1.0556x slower
   infer-closure-const-then-reenter-no-inline   
                                                     92.5141+-1.4086     !    108.8505+-1.2300        ! definitely 1.1766x slower
   infer-closure-const-then-reenter                 236.8604+-6.5741     ^     31.1582+-0.2091        ^ definitely 7.6019x faster
   infer-constant-global-property                    39.5734+-0.4515           39.3753+-0.3443        
   infer-constant-property                            3.7166+-0.0658            3.7120+-0.1221        
   infer-one-time-closure-ten-vars                   18.0313+-0.2373           17.7373+-0.2708          might be 1.0166x faster
   infer-one-time-closure-two-vars                   17.2639+-0.2185           17.1375+-0.3049        
   infer-one-time-closure                            17.0057+-0.1600     ?     17.1001+-0.3862        ?
   infer-one-time-deep-closure                       30.1902+-0.3151     ?     30.2829+-0.4074        ?
   inline-arguments-access                            7.0894+-0.1696     ?      7.3212+-0.2613        ? might be 1.0327x slower
   inline-arguments-aliased-access                    7.1412+-0.2026     ?      7.2084+-0.1055        ?
   inline-arguments-local-escape                      7.3125+-0.2066     ?      7.5053+-0.0561        ? might be 1.0264x slower
   inline-get-scoped-var                              6.0421+-0.1398     !      6.3124+-0.1138        ! definitely 1.0447x slower
   inlined-put-by-id-transition                      18.0750+-0.3434           17.8066+-0.1391          might be 1.0151x faster
   int-or-other-abs-then-get-by-val                   9.6622+-0.0685            9.6152+-0.0830        
   int-or-other-abs-zero-then-get-by-val             34.6544+-0.4110     ?     34.9651+-0.5338        ?
   int-or-other-add-then-get-by-val                   8.7907+-0.1282            8.7207+-0.1241        
   int-or-other-add                                   9.0822+-0.1876     ?      9.4688+-0.2067        ? might be 1.0426x slower
   int-or-other-div-then-get-by-val                   6.7786+-0.1137            6.7284+-0.1957        
   int-or-other-max-then-get-by-val                   7.4323+-0.1825     !      8.4701+-0.1942        ! definitely 1.1396x slower
   int-or-other-min-then-get-by-val                   7.4322+-0.1881     ?      7.5576+-0.0934        ? might be 1.0169x slower
   int-or-other-mod-then-get-by-val                   6.2262+-0.1026     ?      6.3436+-0.1092        ? might be 1.0189x slower
   int-or-other-mul-then-get-by-val                   6.8903+-0.1049            6.7707+-0.2051          might be 1.0177x faster
   int-or-other-neg-then-get-by-val                   8.3860+-0.1769            8.3529+-0.1944        
   int-or-other-neg-zero-then-get-by-val             34.4082+-0.3267     ?     34.9393+-0.3330        ? might be 1.0154x slower
   int-or-other-sub-then-get-by-val                   9.2271+-0.1540     ^      8.9202+-0.0742        ^ definitely 1.0344x faster
   int-or-other-sub                                   5.8077+-0.1196     !      6.8139+-0.2399        ! definitely 1.1733x slower
   int-overflow-local                                 8.1946+-0.1155     ^      7.8297+-0.0660        ^ definitely 1.0466x faster
   Int16Array-alloc-long-lived                       82.6193+-0.5185           81.5149+-0.9530          might be 1.0135x faster
   Int16Array-bubble-sort-with-byteLength            51.9357+-0.7168     ^     49.4991+-0.6169        ^ definitely 1.0492x faster
   Int16Array-bubble-sort                            51.0082+-0.4468     ^     49.7795+-0.6038        ^ definitely 1.0247x faster
   Int16Array-load-int-mul                            2.3557+-0.0915     ?      2.3997+-0.1075        ? might be 1.0187x slower
   Int16Array-to-Int32Array-set                     116.4325+-1.9561          115.3062+-0.9175        
   Int32Array-alloc-large                            38.2351+-1.0482     ?     38.7608+-1.1816        ? might be 1.0137x slower
   Int32Array-alloc-long-lived                       92.4040+-1.1904     ?     92.5303+-1.8599        ?
   Int32Array-alloc                                   5.4092+-0.1471     ?      5.4372+-0.1305        ?
   Int32Array-Int8Array-view-alloc                   14.1265+-0.7158     ?     14.8606+-0.7761        ? might be 1.0520x slower
   int52-spill                                       12.5463+-0.2710           12.1144+-0.3065          might be 1.0357x faster
   Int8Array-alloc-long-lived                        75.2791+-0.3760           74.2340+-0.7447          might be 1.0141x faster
   Int8Array-load-with-byteLength                     5.1659+-0.0703     ?      5.2334+-0.1120        ? might be 1.0131x slower
   Int8Array-load                                     5.3096+-0.0715            5.2802+-0.1269        
   integer-divide                                    19.7816+-0.2810           19.7015+-0.3242        
   integer-modulo                                     3.7594+-0.2221            3.6230+-0.1634          might be 1.0376x faster
   large-int-captured                                10.3087+-0.2176           10.1399+-0.2703          might be 1.0166x faster
   large-int-neg                                     31.0345+-0.3633           30.9097+-0.5126        
   large-int                                         27.7433+-0.2488     ?     27.9448+-0.4867        ?
   logical-not                                        8.4107+-0.1273            8.1319+-0.1792          might be 1.0343x faster
   lots-of-fields                                    23.8121+-0.2324           23.4897+-0.3222          might be 1.0137x faster
   make-indexed-storage                               5.6484+-0.1775            5.6114+-0.3052        
   make-rope-cse                                      7.5108+-0.2069            7.3688+-0.1714          might be 1.0193x faster
   marsaglia-larger-ints                             67.1167+-0.5147     ?     67.4016+-0.9295        ?
   marsaglia-osr-entry                               35.0520+-0.5643     ?     35.2349+-0.6770        ?
   max-boolean                                        4.0460+-0.1713     ?      4.1387+-0.2301        ? might be 1.0229x slower
   method-on-number                                  34.4795+-0.3560           34.0663+-0.2046          might be 1.0121x faster
   min-boolean                                        3.8215+-0.0703     ?      4.3843+-0.6749        ? might be 1.1473x slower
   minus-boolean-double                               4.4462+-0.0787     ?      4.4812+-0.1234        ?
   minus-boolean                                      3.7967+-0.0885            3.7502+-0.1091          might be 1.0124x faster
   misc-strict-eq                                    72.5022+-1.1873     ?     72.8765+-1.9463        ?
   mod-boolean-double                                14.5662+-0.2512           14.5234+-0.1763        
   mod-boolean                                        9.3221+-0.1531     ?      9.4073+-0.1700        ?
   mul-boolean-double                                 5.0779+-0.1309            5.0721+-0.1080        
   mul-boolean                                        4.0280+-0.0940     ?      4.0941+-0.0710        ? might be 1.0164x slower
   neg-boolean                                        4.6706+-0.0830     ?      4.7434+-0.1553        ? might be 1.0156x slower
   negative-zero-divide                               0.5830+-0.0704     ?      0.6000+-0.0663        ? might be 1.0292x slower
   negative-zero-modulo                               0.6558+-0.0649     ?      0.6691+-0.0821        ? might be 1.0204x slower
   negative-zero-negate                               0.5862+-0.0723            0.5860+-0.0756        
   nested-function-parsing                           72.7106+-0.9411     !     74.8148+-0.5389        ! definitely 1.0289x slower
   new-array-buffer-dead                              4.0808+-0.1568     ?      4.3743+-0.2097        ? might be 1.0719x slower
   new-array-buffer-push                             10.5935+-0.1473           10.5618+-0.1996        
   new-array-dead                                    17.1913+-0.4906           17.1818+-0.3454        
   new-array-push                                     6.8381+-0.3412     ?      6.9331+-0.4804        ? might be 1.0139x slower
   no-inline-constructor                            182.4877+-2.8688     ?    182.7014+-2.3212        ?
   number-test                                        4.8836+-0.0891     ?      4.9356+-0.0777        ? might be 1.0106x slower
   object-closure-call                               10.6036+-0.2423           10.5870+-0.2489        
   object-test                                        5.3441+-0.1452            5.2143+-0.0914          might be 1.0249x faster
   obvious-sink-pathology-taken                     221.1471+-2.0352          220.3617+-1.4686        
   obvious-sink-pathology                           208.9010+-4.2433          207.1008+-4.7430        
   obviously-elidable-new-object                     56.7538+-2.4072     ?     57.2893+-1.0050        ?
   plus-boolean-arith                                 4.1536+-0.1203            4.0943+-0.1095          might be 1.0145x faster
   plus-boolean-double                                4.5243+-0.0976            4.4610+-0.0866          might be 1.0142x faster
   plus-boolean                                       3.7138+-0.1452            3.6554+-0.0620          might be 1.0160x faster
   poly-chain-access-different-prototypes-simple   
                                                      5.3973+-0.1752            5.2826+-0.0916          might be 1.0217x faster
   poly-chain-access-different-prototypes             4.0162+-0.0481     ?      4.0165+-0.0692        ?
   poly-chain-access-simpler                          5.2909+-0.1136     ?      5.3205+-0.0742        ?
   poly-chain-access                                  4.0023+-0.1131            3.9496+-0.1124          might be 1.0134x faster
   poly-stricteq                                    101.9936+-2.2821     ?    102.7776+-0.9535        ?
   polymorphic-array-call                             2.7008+-0.2202            2.4980+-0.2858          might be 1.0812x faster
   polymorphic-get-by-id                              5.3763+-0.1344     ?      5.3870+-0.1336        ?
   polymorphic-put-by-id                             48.1921+-4.9036     ?     49.2382+-3.9072        ? might be 1.0217x slower
   polymorphic-structure                             31.1222+-0.8660           30.7380+-0.6559          might be 1.0125x faster
   polyvariant-monomorphic-get-by-id                 17.7556+-0.1641           17.5857+-0.2170        
   proto-getter-access                               17.0512+-0.3949     ?     17.1710+-0.3316        ?
   put-by-id-replace-and-transition                  15.0740+-0.2256           14.9371+-0.2162        
   put-by-id-slightly-polymorphic                     4.1481+-0.1023            4.1259+-0.0682        
   put-by-id                                         20.7929+-0.5375     ?     21.2352+-0.5364        ? might be 1.0213x slower
   put-by-val-direct                                  0.9870+-0.0132     !      1.1253+-0.0880        ! definitely 1.1401x slower
   put-by-val-large-index-blank-indexing-type   
                                                     11.0206+-0.3753           11.0180+-0.2295        
   put-by-val-machine-int                             4.5713+-0.2182     ?      4.5990+-0.0696        ?
   rare-osr-exit-on-local                            25.9672+-0.1732     ?     26.0394+-0.2222        ?
   register-pressure-from-osr                        39.1909+-0.1581     !     40.1932+-0.5707        ! definitely 1.0256x slower
   setter                                             7.7785+-0.1390     ?      7.8680+-0.1151        ? might be 1.0115x slower
   simple-activation-demo                            41.3638+-0.5648     ?     41.7620+-0.3541        ?
   simple-getter-access                              22.6350+-0.6422           22.2850+-0.5462          might be 1.0157x faster
   simple-poly-call-nested                           13.8516+-0.3141           13.7382+-0.5731        
   simple-poly-call                                   2.2760+-0.1396            2.2244+-0.0600          might be 1.0232x faster
   sin-boolean                                       30.0334+-1.0078           30.0226+-0.7781        
   singleton-scope                                  129.8584+-1.5479     ?    130.1784+-1.4936        ?
   sinkable-new-object-dag                          119.6704+-1.3304          116.6926+-5.5818          might be 1.0255x faster
   sinkable-new-object-taken                         93.1318+-1.3153           91.9278+-0.8242          might be 1.0131x faster
   sinkable-new-object                               63.2611+-1.0232           63.1046+-1.1282        
   slow-array-profile-convergence                     5.1769+-0.1649     ?      5.3076+-0.2221        ? might be 1.0252x slower
   slow-convergence                                   6.0119+-0.0724     ^      4.7785+-0.1149        ^ definitely 1.2581x faster
   sparse-conditional                                 1.8597+-0.0745     ?      1.9451+-0.0703        ? might be 1.0459x slower
   splice-to-remove                                  33.5450+-0.3225     ?     34.8856+-2.7404        ? might be 1.0400x slower
   string-char-code-at                               29.7480+-0.3641     !     30.6230+-0.3865        ! definitely 1.0294x slower
   string-concat-object                               3.9719+-0.3222            3.9559+-0.2861        
   string-concat-pair-object                          3.9095+-0.2550     ?      3.9724+-0.3149        ? might be 1.0161x slower
   string-concat-pair-simple                         20.1566+-0.3627           20.0327+-0.1462        
   string-concat-simple                              21.1319+-0.5068           20.8547+-0.4359          might be 1.0133x faster
   string-cons-repeat                                12.9817+-0.2427     ?     12.9977+-0.3710        ?
   string-cons-tower                                 13.1386+-0.2451     ?     13.1702+-0.3352        ?
   string-equality                                   32.8647+-0.3635     ?     33.0878+-0.1265        ?
   string-get-by-val-big-char                        13.6868+-0.2376     ?     13.8095+-0.2041        ?
   string-get-by-val-out-of-bounds-insane             7.9911+-0.0935     !      8.2723+-0.1450        ! definitely 1.0352x slower
   string-get-by-val-out-of-bounds                    9.7182+-0.2431     ?      9.8190+-0.1035        ? might be 1.0104x slower
   string-get-by-val                                  6.8730+-0.0967            6.8180+-0.1469        
   string-hash                                        3.6246+-0.1083     ?      3.6258+-0.1198        ?
   string-long-ident-equality                        26.6435+-0.2455     !     27.4686+-0.2429        ! definitely 1.0310x slower
   string-out-of-bounds                              21.8202+-0.2930     ?     21.9139+-0.3522        ?
   string-repeat-arith                               62.2993+-0.3713     !     68.6299+-0.2938        ! definitely 1.1016x slower
   string-sub                                       120.9099+-1.9737          118.9036+-1.6034          might be 1.0169x faster
   string-test                                        4.9242+-0.1972            4.7723+-0.0964          might be 1.0318x faster
   string-var-equality                               61.4928+-0.8376     !     63.8375+-0.8524        ! definitely 1.0381x slower
   structure-hoist-over-transitions                   4.1767+-0.1524     ?      4.1901+-0.2087        ?
   substring-concat-weird                            75.5112+-1.0627           75.1747+-0.9039        
   substring-concat                                  79.3778+-0.6537     ?     79.8456+-0.9833        ?
   substring                                         91.1971+-0.5745     ?     91.2722+-0.7358        ?
   switch-char-constant                               3.7733+-0.1198     ?      3.8507+-0.1095        ? might be 1.0205x slower
   switch-char                                       11.5227+-0.3795     ?     11.5981+-0.4664        ?
   switch-constant                                   14.3551+-0.8554           13.8326+-0.6792          might be 1.0378x faster
   switch-string-basic-big-var                       31.0388+-0.6432     !     32.9944+-0.2559        ! definitely 1.0630x slower
   switch-string-basic-big                           24.3395+-1.2638     ?     25.2662+-1.5895        ? might be 1.0381x slower
   switch-string-basic-var                           33.3258+-1.8387           32.9588+-0.2273          might be 1.0111x faster
   switch-string-basic                               23.5888+-1.5529     ?     26.3652+-2.5347        ? might be 1.1177x slower
   switch-string-big-length-tower-var                30.6675+-0.4558     ?     30.9092+-0.3109        ?
   switch-string-length-tower-var                    26.2149+-0.4051     ?     26.3083+-0.3444        ?
   switch-string-length-tower                        21.9967+-1.2382           20.9017+-0.2629          might be 1.0524x faster
   switch-string-short                               20.7013+-0.3406     ?     20.8234+-0.1648        ?
   switch                                            19.6932+-0.4004           19.4009+-0.4384          might be 1.0151x faster
   tear-off-arguments-simple                          5.5334+-0.1674            5.3845+-0.2102          might be 1.0276x faster
   tear-off-arguments                                 8.0594+-0.3016            8.0449+-0.1589        
   temporal-structure                                19.9373+-0.2048     ?     20.1066+-0.1977        ?
   to-int32-boolean                                  25.3206+-0.3265     ?     25.5153+-0.2054        ?
   try-catch-get-by-val-cloned-arguments             28.4725+-0.4571     ?     28.7288+-0.8583        ?
   try-catch-get-by-val-direct-arguments             11.0622+-0.3328     ?     11.0740+-0.2457        ?
   try-catch-get-by-val-scoped-arguments             14.1603+-0.6126           13.5814+-0.3222          might be 1.0426x faster
   undefined-property-access                        590.8569+-3.2191     ^    543.6483+-4.0454        ^ definitely 1.0868x faster
   undefined-test                                     5.1136+-0.1049     ?      5.1878+-0.1633        ? might be 1.0145x slower
   unprofiled-licm                                   35.3812+-0.9065           35.3144+-0.4174        
   varargs-call                                      25.3518+-0.4672     ?     26.2458+-0.4407        ? might be 1.0353x slower
   varargs-construct-inline                          38.4165+-0.4056     ?     39.1309+-0.5410        ? might be 1.0186x slower
   varargs-construct                                 58.4938+-0.6851     !     59.8538+-0.5924        ! definitely 1.0233x slower
   varargs-inline                                    15.6162+-0.1483     !     17.3502+-0.2058        ! definitely 1.1110x slower
   varargs-strict-mode                               18.3553+-0.3675     !     19.7152+-0.2157        ! definitely 1.0741x slower
   varargs                                           17.8351+-0.1403     !     19.5759+-0.1199        ! definitely 1.0976x slower
   weird-inlining-const-prop                          3.7981+-0.1105            3.7394+-0.2096          might be 1.0157x faster

   <geometric>                                       14.8229+-0.0281           14.8109+-0.0425          might be 1.0008x faster

                                                        TipOfTree              FunctionRealloc                                  
AsmBench:
   bigfib.cpp                                       890.3599+-8.2649     !    929.6189+-15.7229       ! definitely 1.0441x slower
   cray.c                                           870.2829+-7.3294     !    935.6772+-5.6458        ! definitely 1.0751x slower
   dry.c                                           1031.7040+-30.0777        1003.2992+-27.5600         might be 1.0283x faster
   FloatMM.c                                       1314.9526+-9.2808     !   1355.8177+-7.9437        ! definitely 1.0311x slower
   gcc-loops.cpp                                   8320.4091+-54.6634        8306.8607+-30.7496       
   n-body.c                                        2476.7920+-16.1929        2472.5660+-13.9471       
   Quicksort.c                                      724.7983+-5.9733     ^    715.4457+-3.1240        ^ definitely 1.0131x faster
   stepanov_container.cpp                          6467.5629+-150.3867   ?   6547.4906+-116.9477      ? might be 1.0124x slower
   Towers.c                                         613.9661+-3.9391     ^    576.1823+-7.4044        ^ definitely 1.0656x faster

   <geometric>                                     1582.6853+-5.4215     ?   1591.6498+-8.4391        ? might be 1.0057x slower

                                                        TipOfTree              FunctionRealloc                                  
CompressionBench:
   huffman                                          777.7400+-9.7981     !    807.4622+-8.9564        ! definitely 1.0382x slower
   arithmetic-simple                                724.4967+-4.5291     !    741.8892+-6.9666        ! definitely 1.0240x slower
   arithmetic-precise                               558.7560+-4.4426     !    575.2786+-5.8740        ! definitely 1.0296x slower
   arithmetic-complex-precise                       553.6388+-4.9665     !    579.5320+-5.3444        ! definitely 1.0468x slower
   arithmetic-precise-order-0                       784.5962+-18.9015         781.9229+-8.9835        
   arithmetic-precise-order-1                       604.7003+-23.0804    ?    611.0160+-5.2036        ? might be 1.0104x slower
   arithmetic-precise-order-2                       676.8846+-32.2441         673.5516+-10.6048       
   arithmetic-simple-order-1                        718.5388+-2.6832     !    736.0574+-4.5831        ! definitely 1.0244x slower
   arithmetic-simple-order-2                        782.7725+-7.0706     ?    795.7834+-10.0304       ? might be 1.0166x slower
   lz-string                                        617.6868+-22.3185    ?    626.6821+-38.3485       ? might be 1.0146x slower

   <geometric>                                      674.2246+-6.7804     !    687.3929+-4.1989        ! definitely 1.0195x slower

                                                        TipOfTree              FunctionRealloc                                  

                                                        TipOfTree              FunctionRealloc                                  
Geomean of preferred means:
   <scaled-result>                                  120.1940+-0.3077     ?    120.5229+-0.2672        ? might be 1.0027x slower
Comment 13 Filip Pizlo 2015-04-07 17:01:19 PDT
Figured out the cause of the regressions.  Some tests now do one more round of exits because previously, a GetClosureVar that was unprofiled but constant folded would just get constant folded - while now, an unprofiled GetClosureVar is an exit site.

It's worth having some hack that constant-folds this sooner.  This is yet another one of those examples of sooner SSA conversion being better than our weird CPS IR.  I'll look into it.

Right now this is a 1% speed-up on Octane, and some of the AsmBench tests are seeing speed-ups.  So if I find a good hack then we should have a healthy net speed-up from this.
Comment 14 Filip Pizlo 2015-04-07 17:04:57 PDT
Created attachment 250317 [details]
more
Comment 15 Filip Pizlo 2015-04-07 20:16:22 PDT
Created attachment 250327 [details]
even more

Replacing VariableWatchpointSet with InferredValue, which is a super easy to use singleton inference thingy.  For now I'm making FunctionExecutable use it, and then I'll make SymbolTable use it for inferring JSScope singletons.  This will give us a more rational approach to early constant-folding of resolve_scope while also handling the case where a non-singleton scope chain leads to a singleton scope.
Comment 16 Filip Pizlo 2015-04-07 21:34:28 PDT
Created attachment 250331 [details]
this might be the one!

Now I'm using InferredValue to infer JSSymbolTableObjects for a given SymbolTable.
Comment 17 Filip Pizlo 2015-04-08 12:35:15 PDT
Created attachment 250374 [details]
the patch

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

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r182498)
"FunctionRealloc" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r182498)

Collected 6 samples per benchmark/VM, with 6 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              FunctionRealloc                                  
SunSpider:
   3d-cube                                            4.9250+-0.0801     ?      4.9863+-0.1011        ? might be 1.0125x slower
   3d-morph                                           5.6396+-0.0299     ?      5.7006+-0.1988        ? might be 1.0108x slower
   3d-raytrace                                        6.7137+-0.7093            6.3422+-0.1512          might be 1.0586x faster
   access-binary-trees                                2.3136+-0.0800            2.2896+-0.1110          might be 1.0105x faster
   access-fannkuch                                    5.8263+-0.2175            5.7805+-0.0903        
   access-nbody                                       2.8565+-0.0301     ?      2.9017+-0.1637        ? might be 1.0158x slower
   access-nsieve                                      3.3407+-0.0719     ?      3.4296+-0.1716        ? might be 1.0266x slower
   bitops-3bit-bits-in-byte                           1.6421+-0.0679            1.5901+-0.0508          might be 1.0327x faster
   bitops-bits-in-byte                                3.3757+-0.0444     ?      3.5194+-0.2701        ? might be 1.0426x slower
   bitops-bitwise-and                                 2.0987+-0.0384     ?      2.1454+-0.0595        ? might be 1.0223x slower
   bitops-nsieve-bits                                 4.0744+-0.4957            3.8364+-0.2075          might be 1.0620x faster
   controlflow-recursive                              2.1493+-0.0421     ?      2.2019+-0.1857        ? might be 1.0245x slower
   crypto-aes                                         4.2770+-0.2552            4.0697+-0.0574          might be 1.0510x faster
   crypto-md5                                         2.4952+-0.1359            2.4247+-0.0292          might be 1.0291x faster
   crypto-sha1                                        2.6940+-0.1898     ?      2.8033+-0.2341        ? might be 1.0406x slower
   date-format-tofte                                  9.2659+-0.1627     ?      9.4330+-0.1897        ? might be 1.0180x slower
   date-format-xparb                                  5.3555+-0.1723     ?      5.5708+-0.1605        ? might be 1.0402x slower
   math-cordic                                        3.1312+-0.0564            3.0493+-0.0480          might be 1.0268x faster
   math-partial-sums                                  5.2253+-0.1211     ?      5.4952+-0.6956        ? might be 1.0517x slower
   math-spectral-norm                                 1.9673+-0.0277     ?      1.9851+-0.1193        ?
   regexp-dna                                         7.6839+-1.2630            7.6123+-1.2103        
   string-base64                                      4.9362+-0.7948            4.7124+-0.2037          might be 1.0475x faster
   string-fasta                                       6.7264+-0.0922            6.6978+-0.2167        
   string-tagcloud                                    9.6509+-0.2356     ?      9.6871+-0.2718        ?
   string-unpack-code                                19.9715+-0.8735           19.7571+-0.7070          might be 1.0109x faster
   string-validate-input                              4.9993+-0.2065            4.9528+-0.1388        

   <arithmetic>                                       5.1283+-0.0568            5.1144+-0.0766          might be 1.0027x faster

                                                        TipOfTree              FunctionRealloc                                  
LongSpider:
   3d-cube                                         1085.8740+-15.5978    ?   1088.3162+-17.7758       ?
   3d-morph                                        1552.8687+-23.6196        1534.4194+-3.0586          might be 1.0120x faster
   3d-raytrace                                      734.0000+-6.2293          726.2999+-6.4545          might be 1.0106x faster
   access-binary-trees                             1019.5015+-9.9440         1017.7312+-8.7104        
   access-fannkuch                                  328.3807+-8.7917     ?    336.0554+-8.6994        ? might be 1.0234x slower
   access-nbody                                     614.6836+-1.4039     ?    619.4366+-5.1307        ?
   access-nsieve                                    854.5482+-13.1418    ?    856.3176+-6.5269        ?
   bitops-3bit-bits-in-byte                          44.7743+-0.8615           44.6446+-0.7625        
   bitops-bits-in-byte                              104.8393+-1.5066     ?    106.0655+-1.8013        ? might be 1.0117x slower
   bitops-nsieve-bits                               705.1925+-13.1786         701.2912+-6.1613        
   controlflow-recursive                            495.3839+-20.3753         479.4252+-3.1846          might be 1.0333x faster
   crypto-aes                                       709.2493+-8.6884     ?    716.2637+-4.1725        ?
   crypto-md5                                       567.7901+-20.5173         552.2805+-6.3440          might be 1.0281x faster
   crypto-sha1                                      604.7793+-10.9915    ?    644.2812+-105.8182      ? might be 1.0653x slower
   date-format-tofte                                769.9083+-31.5751    ?    790.5561+-9.7426        ? might be 1.0268x slower
   date-format-xparb                                792.6657+-97.3842         781.4341+-34.0010         might be 1.0144x faster
   math-cordic                                      595.3482+-2.2452     ?    596.3726+-4.7895        ?
   math-partial-sums                                510.4870+-8.0785          509.3400+-5.0383        
   math-spectral-norm                               566.9928+-4.5623     ?    567.0435+-3.0728        ?
   string-base64                                    366.1850+-4.5037     ?    373.5304+-16.0132       ? might be 1.0201x slower
   string-fasta                                     456.5754+-3.9428          452.4404+-3.1441        
   string-tagcloud                                  215.4006+-1.9615     ?    217.0247+-3.6130        ?

   <geometric>                                      507.2100+-3.9932     ?    508.4441+-3.0733        ? might be 1.0024x slower

                                                        TipOfTree              FunctionRealloc                                  
V8Spider:
   crypto                                            56.8501+-1.5859           54.5890+-1.7855          might be 1.0414x faster
   deltablue                                         93.4441+-6.1436     ?     96.1612+-3.2731        ? might be 1.0291x slower
   earley-boyer                                      42.5973+-1.6500     ?     42.7173+-0.7018        ?
   raytrace                                          40.8090+-2.6844           39.7108+-2.6831          might be 1.0277x faster
   regexp                                            68.5098+-2.6313           67.2522+-1.3989          might be 1.0187x faster
   richards                                          80.0323+-1.8785           78.4126+-1.4421          might be 1.0207x faster
   splay                                             38.7594+-0.9634     ?     38.7640+-1.4481        ?

   <geometric>                                       56.9958+-0.9743           56.3980+-0.7812          might be 1.0106x faster

                                                        TipOfTree              FunctionRealloc                                  
Octane:
   encrypt                                           0.20254+-0.00131          0.20235+-0.00093       
   decrypt                                           3.62811+-0.04524    ?     3.64212+-0.05664       ?
   deltablue                                x2       0.20885+-0.00196    ?     0.20899+-0.00209       ?
   earley                                            0.58767+-0.00696          0.58420+-0.00383       
   boyer                                             6.42312+-0.02325    ?     6.45272+-0.06872       ?
   navier-stokes                            x2       5.20860+-0.00996    ?     5.23259+-0.04911       ?
   raytrace                                 x2       1.28691+-0.02382          1.25601+-0.04226         might be 1.0246x faster
   richards                                 x2       0.12288+-0.00145          0.12246+-0.00099       
   splay                                    x2       0.38392+-0.00311    ?     0.38745+-0.00439       ?
   regexp                                   x2      33.19287+-0.22299    ?    33.42332+-0.36159       ?
   pdfjs                                    x2      44.98951+-0.28259         44.51823+-0.23829         might be 1.0106x faster
   mandreel                                 x2      50.35633+-0.44106    ?    50.40703+-0.18486       ?
   gbemu                                    x2      39.53212+-0.74386         38.78705+-0.49685         might be 1.0192x faster
   closure                                           0.56719+-0.00967          0.56064+-0.00525         might be 1.0117x faster
   jquery                                            7.17399+-0.12855          7.06396+-0.04765         might be 1.0156x faster
   box2d                                    x2      12.48591+-0.62880         12.22665+-0.10551         might be 1.0212x faster
   zlib                                     x2     387.08908+-1.12193    ?   388.81367+-10.58554      ?
   typescript                               x2     828.58215+-11.77211       823.00090+-10.42154      

   <geometric>                                       6.73098+-0.01962          6.69938+-0.02472         might be 1.0047x faster

                                                        TipOfTree              FunctionRealloc                                  
Kraken:
   ai-astar                                          268.630+-1.717      ?     268.990+-1.770         ?
   audio-beat-detection                              107.139+-1.261      ?     107.169+-1.567         ?
   audio-dft                                         149.999+-1.665      ?     150.266+-3.511         ?
   audio-fft                                          84.409+-4.369      ?      84.991+-3.205         ?
   audio-oscillator                                  208.242+-1.704      ?     208.601+-2.494         ?
   imaging-darkroom                                  104.364+-0.223      ?     105.681+-1.855         ? might be 1.0126x slower
   imaging-desaturate                                 64.143+-1.830             64.060+-2.149         
   imaging-gaussian-blur                             113.142+-2.197      ?     113.680+-2.415         ?
   json-parse-financial                               45.894+-1.993      ?      47.161+-1.987         ? might be 1.0276x slower
   json-stringify-tinderbox                           57.887+-2.955             56.130+-1.293           might be 1.0313x faster
   stanford-crypto-aes                                63.479+-1.990             63.417+-1.391         
   stanford-crypto-ccm                                51.550+-1.785             50.344+-1.888           might be 1.0240x faster
   stanford-crypto-pbkdf2                            170.440+-3.982            168.231+-1.815           might be 1.0131x faster
   stanford-crypto-sha256-iterative                   57.687+-3.326             56.389+-4.199           might be 1.0230x faster

   <arithmetic>                                      110.500+-0.818            110.365+-0.550           might be 1.0012x faster

                                                        TipOfTree              FunctionRealloc                                  
JSRegress:
   abs-boolean                                        2.6721+-0.0445     ?      2.7322+-0.1365        ? might be 1.0225x slower
   adapt-to-double-divide                            16.6415+-0.2463     ?     16.7919+-0.2573        ?
   aliased-arguments-getbyval                         1.2297+-0.1014     ?      1.2565+-0.0695        ? might be 1.0218x slower
   allocate-big-object                                2.6691+-0.1555            2.6017+-0.0659          might be 1.0259x faster
   arguments-named-and-reflective                    12.8475+-0.7888     ?     12.9371+-1.4552        ?
   arguments-out-of-bounds                           15.2753+-0.7596           14.8877+-0.3218          might be 1.0260x faster
   arguments-strict-mode                             11.6694+-0.3823     ?     11.7072+-0.5141        ?
   arguments                                         10.0948+-0.2859     ?     10.3591+-0.4032        ? might be 1.0262x slower
   arity-mismatch-inlining                            0.8979+-0.0927            0.8612+-0.0194          might be 1.0425x faster
   array-access-polymorphic-structure                 6.5102+-0.1263     ?      7.4481+-1.0109        ? might be 1.1441x slower
   array-nonarray-polymorhpic-access                 37.0502+-2.8047           36.3414+-1.9855          might be 1.0195x faster
   array-prototype-every                             87.9055+-1.2179     ?     91.1745+-2.8241        ? might be 1.0372x slower
   array-prototype-forEach                           86.9964+-2.7757           84.5792+-2.6438          might be 1.0286x faster
   array-prototype-map                               93.3152+-2.5707     ?     95.5261+-2.7503        ? might be 1.0237x slower
   array-prototype-some                              87.8527+-2.1499     ?     91.7321+-2.2425        ? might be 1.0442x slower
   array-splice-contiguous                           42.7360+-2.3043           42.2169+-1.1395          might be 1.0123x faster
   array-with-double-add                              4.1158+-0.0862     ?      4.1702+-0.0490        ? might be 1.0132x slower
   array-with-double-increment                        3.2271+-0.0299     ?      3.2449+-0.0620        ?
   array-with-double-mul-add                          4.9999+-0.1034     ?      5.0585+-0.0857        ? might be 1.0117x slower
   array-with-double-sum                              3.3687+-0.2597            3.3095+-0.0860          might be 1.0179x faster
   array-with-int32-add-sub                           6.7706+-0.1403     ?      6.8940+-0.2987        ? might be 1.0182x slower
   array-with-int32-or-double-sum                     3.3932+-0.0870            3.3459+-0.0389          might be 1.0141x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.3880+-1.9397           33.9420+-1.8951          might be 1.0131x faster
   ArrayBuffer-DataView-alloc-long-lived             14.8265+-1.6271     ?     15.0337+-1.1313        ? might be 1.0140x slower
   ArrayBuffer-Int32Array-byteOffset                  3.8442+-0.0595            3.8185+-0.1536        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.7754+-0.7473     ?     34.7366+-1.6586        ? might be 1.0598x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.6790+-2.1027           24.5888+-1.9104        
   ArrayBuffer-Int8Array-alloc-long-lived            15.5741+-1.4961           15.2957+-1.8175          might be 1.0182x faster
   ArrayBuffer-Int8Array-alloc                       11.2515+-0.4011     ?     11.8396+-1.5375        ? might be 1.0523x slower
   asmjs_bool_bug                                     7.8272+-0.3912            7.6112+-0.0462          might be 1.0284x faster
   assign-custom-setter-polymorphic                   2.9849+-0.0390     ?      3.0129+-0.0544        ?
   assign-custom-setter                               4.0579+-0.0804     ?      4.1091+-0.2139        ? might be 1.0126x slower
   basic-set                                          8.7367+-0.6426            8.7349+-0.7051        
   big-int-mul                                        4.1639+-0.1180            4.1188+-0.0441          might be 1.0109x faster
   boolean-test                                       3.1341+-0.1890            3.0630+-0.0440          might be 1.0232x faster
   branch-fold                                        3.6842+-0.0328     ?      3.7117+-0.1265        ?
   by-val-generic                                     8.0981+-0.2651     ?      8.5984+-1.1100        ? might be 1.0618x slower
   call-spread-apply                                 33.3491+-3.7182           29.3708+-1.0046          might be 1.1355x faster
   call-spread-call                                  25.3745+-1.1686           24.8943+-1.6182          might be 1.0193x faster
   captured-assignments                               0.4669+-0.0123     ?      0.4751+-0.0135        ? might be 1.0174x slower
   cast-int-to-double                                 5.2768+-0.0321     ?      5.2994+-0.0349        ?
   cell-argument                                      8.6812+-0.3289            8.5165+-0.1978          might be 1.0193x faster
   cfg-simplify                                       2.9582+-0.1849     ?      2.9646+-0.1286        ?
   chain-getter-access                               10.1713+-0.1406           10.1506+-0.3318        
   cmpeq-obj-to-obj-other                            11.1842+-0.9734     ?     11.6505+-0.7955        ? might be 1.0417x slower
   constant-test                                      4.9452+-0.0582            4.9423+-0.0380        
   create-lots-of-functions                          23.9682+-1.7810     ?     24.3022+-1.0070        ? might be 1.0139x slower
   DataView-custom-properties                        40.1956+-2.2900     ?     40.4730+-1.9227        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.5295+-0.0429            0.5199+-0.0359          might be 1.0185x faster
   delay-tear-off-arguments-strictmode               13.6793+-0.1243           13.6103+-0.2022        
   deltablue-varargs                                201.6226+-2.9561          200.9221+-2.8593        
   destructuring-arguments                           16.3276+-0.3521           16.2229+-0.3170        
   destructuring-swap                                 5.0611+-0.1195            4.9955+-0.0138          might be 1.0131x faster
   direct-arguments-getbyval                          1.2489+-0.0721            1.2147+-0.0771          might be 1.0281x faster
   div-boolean-double                                 5.2085+-0.0126     ?      5.2226+-0.0311        ?
   div-boolean                                        7.9036+-0.2002            7.7737+-0.0207          might be 1.0167x faster
   double-get-by-val-out-of-bounds                    4.5190+-0.1426            4.4896+-0.1440        
   double-pollution-getbyval                          8.8409+-0.0327     ?      9.1069+-0.3619        ? might be 1.0301x slower
   double-pollution-putbyoffset                       4.2846+-0.0295     ?      4.3129+-0.1571        ?
   double-to-int32-typed-array-no-inline              2.2485+-0.0394     ?      2.3029+-0.0535        ? might be 1.0242x slower
   double-to-int32-typed-array                        1.9615+-0.0697     ?      2.0110+-0.1784        ? might be 1.0252x slower
   double-to-uint32-typed-array-no-inline             2.3477+-0.2173            2.3301+-0.0508        
   double-to-uint32-typed-array                       2.0369+-0.1130            2.0211+-0.0682        
   elidable-new-object-dag                           44.4705+-0.9421           44.3093+-1.8957        
   elidable-new-object-roflcopter                    47.1418+-2.1445     ?     48.3983+-1.6167        ? might be 1.0267x slower
   elidable-new-object-then-call                     39.0524+-0.9886     ?     40.0160+-1.6801        ? might be 1.0247x slower
   elidable-new-object-tree                          45.8427+-2.2329     ?     46.8080+-2.1215        ? might be 1.0211x slower
   empty-string-plus-int                              5.3478+-0.0859     ?      5.3951+-0.0979        ?
   emscripten-cube2hash                              38.9958+-1.4705     ?     39.3750+-2.3065        ?
   exit-length-on-plain-object                       15.0839+-1.8035           14.6549+-1.6338          might be 1.0293x faster
   external-arguments-getbyval                        1.2096+-0.0368            1.1970+-0.0639          might be 1.0105x faster
   external-arguments-putbyval                        2.2732+-0.0320     ?      2.2767+-0.0642        ?
   fixed-typed-array-storage-var-index                1.2992+-0.0928            1.2384+-0.0336          might be 1.0492x faster
   fixed-typed-array-storage                          0.9459+-0.1064            0.9283+-0.0073          might be 1.0190x faster
   Float32Array-matrix-mult                           4.2386+-0.0523     ?      4.2989+-0.1015        ? might be 1.0142x slower
   Float32Array-to-Float64Array-set                  58.6935+-1.9507           54.0833+-3.5596          might be 1.0852x faster
   Float64Array-alloc-long-lived                     72.4810+-1.3233           72.4694+-1.1342        
   Float64Array-to-Int16Array-set                    69.7657+-2.1106           68.9403+-1.6763          might be 1.0120x faster
   fold-double-to-int                                13.4434+-0.1715           13.4080+-0.2180        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.5300+-0.2884     ?      9.9062+-0.8518        ? might be 1.0395x slower
   fold-get-by-id-to-multi-get-by-offset              9.7065+-1.1641     ?      9.7499+-0.8591        ?
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.7506+-1.4456     ?      9.1993+-0.8010        ? might be 1.1869x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.3392+-0.7665     ?      9.3884+-1.1029        ? might be 1.1258x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.0717+-1.5918     ?      8.1219+-1.3453        ?
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.1981+-1.5556            5.0907+-0.9989          might be 1.2175x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.3127+-0.8532     ?      9.6066+-0.6015        ? might be 1.0316x slower
   fold-put-by-id-to-multi-put-by-offset              9.8420+-1.6091            9.7350+-0.6356          might be 1.0110x faster
   fold-put-structure                                 6.9079+-0.6056            5.5673+-1.5670          might be 1.2408x faster
   for-of-iterate-array-entries                       4.5448+-0.1054     ?      4.6523+-0.1439        ? might be 1.0237x slower
   for-of-iterate-array-keys                          3.8466+-0.0551     ?      3.9411+-0.1235        ? might be 1.0246x slower
   for-of-iterate-array-values                        3.7158+-0.0463            3.6975+-0.0122        
   fround                                            20.3944+-0.6229           19.8998+-0.2584          might be 1.0249x faster
   ftl-library-inlining-dataview                     79.9185+-1.9203           77.9720+-2.5283          might be 1.0250x faster
   ftl-library-inlining                              76.0061+-18.5782          74.6234+-18.7884         might be 1.0185x faster
   function-dot-apply                                 1.9779+-0.1565     !      2.2473+-0.0703        ! definitely 1.1362x slower
   function-test                                      3.3751+-0.0359            3.3640+-0.0274        
   function-with-eval                                96.8919+-3.2764     ?    102.7410+-2.8724        ? might be 1.0604x slower
   gcse-poly-get-less-obvious                        19.6378+-2.4901     ?     20.3600+-1.0937        ? might be 1.0368x slower
   gcse-poly-get                                     23.4616+-1.2810     ^     20.5409+-1.0509        ^ definitely 1.1422x faster
   gcse                                               4.2965+-0.0450     ?      4.3239+-0.0705        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7705+-0.0744            2.7700+-0.0383        
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1460+-0.0338            6.0777+-0.1038          might be 1.0112x faster
   get-by-id-chain-from-try-block                     7.4904+-1.4817            6.6653+-0.1408          might be 1.1238x faster
   get-by-id-check-structure-elimination              5.1137+-0.0692     ?      5.5386+-0.6989        ? might be 1.0831x slower
   get-by-id-proto-or-self                           18.0013+-1.2829           17.2503+-0.5130          might be 1.0435x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9962+-0.1257            2.9550+-0.0311          might be 1.0139x faster
   get-by-id-self-or-proto                           17.3097+-0.1460     ?     17.4957+-0.3640        ? might be 1.0107x slower
   get-by-val-out-of-bounds                           4.3345+-0.0878     ?      4.4478+-0.1702        ? might be 1.0261x slower
   get_callee_monomorphic                             3.7051+-0.1990            3.6634+-0.0426          might be 1.0114x faster
   get_callee_polymorphic                             3.6258+-0.0906     ?      3.7197+-0.3644        ? might be 1.0259x slower
   getter-no-activation                               4.8075+-0.8977     ?      4.8239+-0.0071        ?
   getter-richards                                  126.4342+-7.2845          121.7340+-8.7555          might be 1.0386x faster
   getter                                             6.0412+-0.8295            5.7036+-0.8249          might be 1.0592x faster
   global-var-const-infer-fire-from-opt               0.9473+-0.1049            0.8702+-0.0562          might be 1.0887x faster
   global-var-const-infer                             0.8368+-0.0894     ?      0.9104+-0.1455        ? might be 1.0880x slower
   HashMap-put-get-iterate-keys                      27.0236+-0.4763     ?     27.1150+-0.9376        ?
   HashMap-put-get-iterate                           26.0730+-0.2155     ?     26.7907+-0.6871        ? might be 1.0275x slower
   HashMap-string-put-get-iterate                    27.7793+-1.4063           27.2145+-0.8901          might be 1.0208x faster
   hoist-make-rope                                   12.0557+-0.8316           11.6673+-0.9282          might be 1.0333x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.1092+-0.3055     ?      5.1335+-0.2283        ?
   hoist-poly-check-structure                         3.7584+-0.0514     ?      3.7816+-0.0570        ?
   imul-double-only                                   8.7391+-0.5145            8.6867+-0.8248        
   imul-int-only                                     10.3331+-0.9641     ?     10.9566+-1.1022        ? might be 1.0603x slower
   imul-mixed                                         8.4437+-0.3619            7.9890+-0.4019          might be 1.0569x faster
   in-four-cases                                     19.3302+-1.1096           18.8748+-0.4128          might be 1.0241x faster
   in-one-case-false                                 10.0962+-0.3028     ?     10.1195+-0.3660        ?
   in-one-case-true                                  10.0107+-0.2461     ?     10.2807+-0.6490        ? might be 1.0270x slower
   in-two-cases                                      10.1748+-0.0913     ?     10.4299+-0.4617        ? might be 1.0251x slower
   indexed-properties-in-objects                      2.8966+-0.0284     ?      2.9602+-0.1427        ? might be 1.0219x slower
   infer-closure-const-then-mov-no-inline             4.0253+-0.4873            3.6569+-0.0289          might be 1.1007x faster
   infer-closure-const-then-mov                      17.8190+-0.4552     !     19.6688+-0.4287        ! definitely 1.1038x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.2506+-1.4569     ?     13.2628+-0.2349        ? might be 1.0826x slower
   infer-closure-const-then-put-to-scope             22.9888+-1.4733     ?     23.4200+-1.4928        ? might be 1.0188x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.6613+-1.6597     !     63.3414+-1.3726        ! definitely 1.2755x slower
   infer-closure-const-then-reenter                 125.5074+-4.1101     ^     23.2455+-1.8735        ^ definitely 5.3992x faster
   infer-constant-global-property                    31.3693+-1.2861     ?     31.7639+-3.1413        ? might be 1.0126x slower
   infer-constant-property                            2.7829+-0.1079            2.7197+-0.0381          might be 1.0232x faster
   infer-one-time-closure-ten-vars                   12.1574+-0.3044     ?     12.9643+-0.8596        ? might be 1.0664x slower
   infer-one-time-closure-two-vars                   12.2651+-0.9391     ?     13.3950+-1.6687        ? might be 1.0921x slower
   infer-one-time-closure                            11.8008+-0.3774     ?     12.0962+-0.2744        ? might be 1.0250x slower
   infer-one-time-deep-closure                       21.6983+-1.3487           21.5813+-1.1795        
   inline-arguments-access                            4.2643+-0.0336     ?      4.3363+-0.0619        ? might be 1.0169x slower
   inline-arguments-aliased-access                    4.3071+-0.0708     ?      4.3975+-0.1341        ? might be 1.0210x slower
   inline-arguments-local-escape                      4.5760+-0.3566            4.4696+-0.1115          might be 1.0238x faster
   inline-get-scoped-var                              4.4269+-0.3565     ?      4.8453+-0.2166        ? might be 1.0945x slower
   inlined-put-by-id-transition                      11.0185+-0.6563           10.4552+-0.6400          might be 1.0539x faster
   int-or-other-abs-then-get-by-val                   4.9395+-0.0646     ?      5.2116+-0.2627        ? might be 1.0551x slower
   int-or-other-abs-zero-then-get-by-val             16.7398+-0.3194     ?     17.8930+-0.9118        ? might be 1.0689x slower
   int-or-other-add-then-get-by-val                   4.3014+-0.0967     ?      4.3725+-0.2560        ? might be 1.0165x slower
   int-or-other-add                                   5.2650+-0.0214     ?      5.3743+-0.0946        ? might be 1.0208x slower
   int-or-other-div-then-get-by-val                   4.2203+-0.0130     ?      4.3703+-0.1473        ? might be 1.0355x slower
   int-or-other-max-then-get-by-val                   4.3542+-0.0604            4.3460+-0.0507        
   int-or-other-min-then-get-by-val                   4.4829+-0.0906            4.4381+-0.0257          might be 1.0101x faster
   int-or-other-mod-then-get-by-val                   3.9177+-0.0386            3.8794+-0.0493        
   int-or-other-mul-then-get-by-val                   3.9874+-0.0327     ?      4.0895+-0.1592        ? might be 1.0256x slower
   int-or-other-neg-then-get-by-val                   4.6661+-0.1757            4.6402+-0.0837        
   int-or-other-neg-zero-then-get-by-val             17.5003+-1.3031           17.2601+-0.3999          might be 1.0139x faster
   int-or-other-sub-then-get-by-val                   4.3774+-0.1353            4.2879+-0.0808          might be 1.0209x faster
   int-or-other-sub                                   3.5516+-0.0361            3.5033+-0.0512          might be 1.0138x faster
   int-overflow-local                                 4.3203+-0.0232            4.3164+-0.0783        
   Int16Array-alloc-long-lived                       50.4646+-1.2298           50.0060+-1.1079        
   Int16Array-bubble-sort-with-byteLength            21.1336+-0.9369     ?     21.3282+-1.9904        ?
   Int16Array-bubble-sort                            20.5496+-0.7094     ?     20.8999+-1.4582        ? might be 1.0170x slower
   Int16Array-load-int-mul                            1.5358+-0.1098            1.5077+-0.0280          might be 1.0187x faster
   Int16Array-to-Int32Array-set                      60.5276+-0.9697     ^     51.5043+-1.8603        ^ definitely 1.1752x faster
   Int32Array-alloc-large                            25.4411+-1.3066           24.8808+-0.7636          might be 1.0225x faster
   Int32Array-alloc-long-lived                       56.5892+-2.0863     ?     57.5586+-1.6539        ? might be 1.0171x slower
   Int32Array-alloc                                   3.6598+-0.4836     ?      3.9104+-0.6795        ? might be 1.0685x slower
   Int32Array-Int8Array-view-alloc                    8.0074+-1.1381            7.2189+-0.6000          might be 1.1092x faster
   int52-spill                                        6.3981+-0.1304     ?      6.6352+-0.1556        ? might be 1.0371x slower
   Int8Array-alloc-long-lived                        47.0903+-1.9396     ?     48.9224+-1.1670        ? might be 1.0389x slower
   Int8Array-load-with-byteLength                     3.3986+-0.0959            3.3497+-0.0436          might be 1.0146x faster
   Int8Array-load                                     3.4084+-0.0638            3.3662+-0.0588          might be 1.0126x faster
   integer-divide                                    12.1721+-1.1017           11.7240+-0.1626          might be 1.0382x faster
   integer-modulo                                     2.1011+-0.0970            2.0991+-0.0399        
   large-int-captured                                 5.7803+-0.3257            5.6272+-0.0875          might be 1.0272x faster
   large-int-neg                                     17.0446+-1.1951           16.4922+-0.5063          might be 1.0335x faster
   large-int                                         14.8522+-0.2491     ?     15.4784+-1.4207        ? might be 1.0422x slower
   logical-not                                        4.5147+-0.0349     !      4.6130+-0.0363        ! definitely 1.0218x slower
   lots-of-fields                                    12.9028+-0.4683           12.8330+-0.5821        
   make-indexed-storage                               3.0599+-0.0807     ?      3.1136+-0.0556        ? might be 1.0175x slower
   make-rope-cse                                      5.1518+-0.7830            4.5785+-0.0428          might be 1.1252x faster
   marsaglia-larger-ints                             36.8245+-2.2106           35.7552+-0.3837          might be 1.0299x faster
   marsaglia-osr-entry                               23.2393+-0.5851           23.0422+-0.5852        
   max-boolean                                        2.4629+-0.0530     ?      2.5089+-0.0327        ? might be 1.0187x slower
   method-on-number                                  18.8588+-1.1383           17.8641+-1.4631          might be 1.0557x faster
   min-boolean                                        2.5190+-0.0783     ?      2.5672+-0.1105        ? might be 1.0191x slower
   minus-boolean-double                               3.2124+-0.1193            3.1503+-0.0329          might be 1.0197x faster
   minus-boolean                                      2.3447+-0.0729     ?      2.3465+-0.0855        ?
   misc-strict-eq                                    38.7329+-2.3414           37.6043+-0.5565          might be 1.0300x faster
   mod-boolean-double                                11.7033+-1.1577           11.3716+-0.8281          might be 1.0292x faster
   mod-boolean                                        7.8176+-0.0517     ?      7.9848+-0.2553        ? might be 1.0214x slower
   mul-boolean-double                                 3.8910+-0.2424            3.7233+-0.0645          might be 1.0451x faster
   mul-boolean                                        2.9137+-0.1433            2.9001+-0.0454        
   neg-boolean                                        3.1691+-0.0371     ?      3.1995+-0.0462        ?
   negative-zero-divide                               0.3701+-0.0218     ?      0.3813+-0.0402        ? might be 1.0302x slower
   negative-zero-modulo                               0.3611+-0.0181            0.3577+-0.0184        
   negative-zero-negate                               0.3416+-0.0196     ?      0.3643+-0.0181        ? might be 1.0667x slower
   nested-function-parsing                           37.0640+-0.1599     !     40.5151+-2.0894        ! definitely 1.0931x slower
   new-array-buffer-dead                              2.8475+-0.0408     ?      2.8789+-0.0788        ? might be 1.0110x slower
   new-array-buffer-push                              6.6461+-0.2402     ?      7.3286+-0.9158        ? might be 1.1027x slower
   new-array-dead                                    12.4574+-0.2386           12.4506+-0.7829        
   new-array-push                                     3.8422+-0.0448     ?      3.9250+-0.1532        ? might be 1.0215x slower
   no-inline-constructor                            120.2118+-2.7387     ?    122.0947+-2.9645        ? might be 1.0157x slower
   number-test                                        3.0001+-0.0317     ?      3.0051+-0.0157        ?
   object-closure-call                                5.7203+-0.0676     ?      5.7278+-0.0479        ?
   object-test                                        3.1082+-0.0211     ?      3.1385+-0.1146        ?
   obvious-sink-pathology-taken                     145.3853+-2.4106     ?    147.8713+-1.4735        ? might be 1.0171x slower
   obvious-sink-pathology                           140.9152+-1.7669          140.6307+-1.4081        
   obviously-elidable-new-object                     35.3818+-0.6485     ?     37.1530+-2.1010        ? might be 1.0501x slower
   plus-boolean-arith                                 2.4963+-0.0226     ?      2.5302+-0.0154        ? might be 1.0136x slower
   plus-boolean-double                                3.2215+-0.0978            3.1997+-0.1211        
   plus-boolean                                       2.3877+-0.0327     ?      2.4266+-0.1163        ? might be 1.0163x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.2528+-0.0854     ?      3.2957+-0.0424        ? might be 1.0132x slower
   poly-chain-access-different-prototypes             2.6219+-0.0696     ?      2.6584+-0.1093        ? might be 1.0139x slower
   poly-chain-access-simpler                          3.2926+-0.0679     ?      3.3030+-0.0452        ?
   poly-chain-access                                  2.5900+-0.0356     ?      2.6113+-0.0373        ?
   poly-stricteq                                     58.9033+-3.1377     ?     59.7670+-2.4642        ? might be 1.0147x slower
   polymorphic-array-call                             1.3232+-0.1640     ?      1.3932+-0.1755        ? might be 1.0530x slower
   polymorphic-get-by-id                              3.0669+-0.0453     ?      3.1140+-0.0375        ? might be 1.0153x slower
   polymorphic-put-by-id                             29.2610+-2.2635           28.5816+-1.0558          might be 1.0238x faster
   polymorphic-structure                             15.1651+-0.4424           15.1484+-0.5156        
   polyvariant-monomorphic-get-by-id                  8.4717+-0.0593     ?      8.5545+-0.1306        ?
   proto-getter-access                               10.1666+-0.1689           10.0459+-0.1305          might be 1.0120x faster
   put-by-id-replace-and-transition                   8.6154+-0.2126     ?      8.6696+-0.1889        ?
   put-by-id-slightly-polymorphic                     2.8499+-0.0620            2.8289+-0.0424        
   put-by-id                                         13.4347+-0.4986     ?     13.5535+-0.5035        ?
   put-by-val-direct                                  0.6392+-0.0263            0.6353+-0.0238        
   put-by-val-large-index-blank-indexing-type   
                                                      6.0756+-0.5585     ?      6.4419+-1.1898        ? might be 1.0603x slower
   put-by-val-machine-int                             2.7293+-0.1250            2.6810+-0.0403          might be 1.0180x faster
   rare-osr-exit-on-local                            14.8688+-0.1897           14.7635+-0.2397        
   register-pressure-from-osr                        22.2151+-1.4501           21.6177+-0.1658          might be 1.0276x faster
   setter                                             6.2104+-0.7597            5.5968+-0.5182          might be 1.1096x faster
   simple-activation-demo                            25.9100+-0.9220     ?     26.2005+-1.4012        ? might be 1.0112x slower
   simple-getter-access                              12.8553+-0.2566           12.6443+-0.2594          might be 1.0167x faster
   simple-poly-call-nested                            8.1139+-0.2874     ?      8.2025+-0.3744        ? might be 1.0109x slower
   simple-poly-call                                   1.3916+-0.1283            1.3170+-0.0797          might be 1.0567x faster
   sin-boolean                                       23.7073+-1.7334           23.2901+-0.6743          might be 1.0179x faster
   singleton-scope                                   70.9766+-1.6444           68.2211+-2.0617          might be 1.0404x faster
   sinkable-new-object-dag                           71.5484+-2.4277           70.1779+-0.9151          might be 1.0195x faster
   sinkable-new-object-taken                         52.7122+-2.4708           50.8223+-2.8833          might be 1.0372x faster
   sinkable-new-object                               39.2212+-1.9521     ?     39.4716+-0.4705        ?
   slow-array-profile-convergence                     2.7756+-0.0472     ?      2.8069+-0.0799        ? might be 1.0113x slower
   slow-convergence                                   3.2941+-0.1620     ^      2.6208+-0.0611        ^ definitely 1.2569x faster
   sparse-conditional                                 1.1672+-0.0278            1.1508+-0.0303          might be 1.0142x faster
   splice-to-remove                                  16.3682+-0.4114     ?     17.2229+-1.2211        ? might be 1.0522x slower
   string-char-code-at                               16.2557+-0.2036     ?     16.4409+-0.1585        ? might be 1.0114x slower
   string-concat-object                               2.3905+-0.0573     ?      2.4158+-0.0515        ? might be 1.0106x slower
   string-concat-pair-object                          2.3828+-0.1034            2.3558+-0.0372          might be 1.0115x faster
   string-concat-pair-simple                         12.3417+-1.4062           11.1431+-0.2081          might be 1.1076x faster
   string-concat-simple                              12.4489+-1.2146           11.9434+-0.6104          might be 1.0423x faster
   string-cons-repeat                                 7.8883+-0.7565     ?      8.3374+-0.8112        ? might be 1.0569x slower
   string-cons-tower                                  8.6018+-0.9184     ?      8.9860+-1.1453        ? might be 1.0447x slower
   string-equality                                   17.5401+-0.4610     ?     17.7528+-0.3738        ? might be 1.0121x slower
   string-get-by-val-big-char                         7.1405+-0.0720     ?      7.1433+-0.1335        ?
   string-get-by-val-out-of-bounds-insane             3.8757+-0.1365            3.7973+-0.0309          might be 1.0207x faster
   string-get-by-val-out-of-bounds                    5.3198+-0.0311     ^      5.2170+-0.0601        ^ definitely 1.0197x faster
   string-get-by-val                                  3.2744+-0.0564            3.2570+-0.0453        
   string-hash                                        2.1146+-0.0421     ?      2.1158+-0.0888        ?
   string-long-ident-equality                        14.4252+-0.1519     ?     14.5861+-0.5747        ? might be 1.0112x slower
   string-out-of-bounds                              14.8557+-0.1456     ?     15.1298+-0.3558        ? might be 1.0185x slower
   string-repeat-arith                               35.4165+-1.8666           34.4462+-1.9443          might be 1.0282x faster
   string-sub                                        67.9183+-1.2971     ?     68.9661+-5.0363        ? might be 1.0154x slower
   string-test                                        2.9734+-0.0515            2.8972+-0.0304          might be 1.0263x faster
   string-var-equality                               30.9649+-1.4551     !     37.3593+-1.1015        ! definitely 1.2065x slower
   structure-hoist-over-transitions                   2.6285+-0.1643            2.5727+-0.0650          might be 1.0217x faster
   substring-concat-weird                            38.8635+-1.5136     ?     38.9397+-1.3364        ?
   substring-concat                                  40.8782+-1.8642     ?     41.4612+-1.8470        ? might be 1.0143x slower
   substring                                         45.6228+-1.1480           45.5901+-1.7298        
   switch-char-constant                               2.7616+-0.0738     ?      2.8000+-0.0961        ? might be 1.0139x slower
   switch-char                                        6.9162+-0.8870     ?      7.0967+-1.0097        ? might be 1.0261x slower
   switch-constant                                    8.1318+-0.1631            8.0712+-0.4472        
   switch-string-basic-big-var                       15.5608+-1.3076     ?     15.9170+-1.7665        ? might be 1.0229x slower
   switch-string-basic-big                           14.9167+-1.5947           14.7517+-1.6817          might be 1.0112x faster
   switch-string-basic-var                           16.1773+-1.8509           15.8918+-1.5889          might be 1.0180x faster
   switch-string-basic                               13.8016+-1.6902     ?     14.0821+-1.7849        ? might be 1.0203x slower
   switch-string-big-length-tower-var                20.6296+-1.3130           20.3771+-1.2284          might be 1.0124x faster
   switch-string-length-tower-var                    15.2662+-1.4159           15.2255+-1.2368        
   switch-string-length-tower                        12.6387+-0.0880           12.5393+-0.1764        
   switch-string-short                               14.1183+-1.7640           13.2578+-1.3292          might be 1.0649x faster
   switch                                            12.2740+-0.2487           12.0433+-0.2248          might be 1.0192x faster
   tear-off-arguments-simple                          3.4851+-0.2705            3.3212+-0.1423          might be 1.0493x faster
   tear-off-arguments                                 4.4690+-0.0361            4.4526+-0.0721        
   temporal-structure                                13.3090+-1.5777           12.3705+-0.3304          might be 1.0759x faster
   to-int32-boolean                                  13.9733+-0.5374           13.8850+-0.5287        
   try-catch-get-by-val-cloned-arguments             14.6123+-1.2164           14.2061+-0.4527          might be 1.0286x faster
   try-catch-get-by-val-direct-arguments              6.0341+-0.2334     ?      6.1515+-0.0728        ? might be 1.0195x slower
   try-catch-get-by-val-scoped-arguments              7.7464+-1.1047     ?      8.0839+-0.9557        ? might be 1.0436x slower
   undefined-property-access                        388.0720+-4.3181     ^    355.3491+-3.6221        ^ definitely 1.0921x faster
   undefined-test                                     3.1049+-0.1231            2.9772+-0.0462          might be 1.0429x faster
   unprofiled-licm                                   22.9626+-0.5814     ?     22.9842+-0.5800        ?
   varargs-call                                      15.8070+-1.3433     ?     16.9543+-1.4527        ? might be 1.0726x slower
   varargs-construct-inline                          23.1932+-1.2714           22.8490+-1.7358          might be 1.0151x faster
   varargs-construct                                 31.9290+-1.0798     ?     32.3120+-1.4279        ? might be 1.0120x slower
   varargs-inline                                     9.1115+-0.1467     !      9.5127+-0.1576        ! definitely 1.0440x slower
   varargs-strict-mode                                9.5859+-0.0867     !     10.1805+-0.1338        ! definitely 1.0620x slower
   varargs                                           10.0417+-1.0761     ?     10.0990+-0.1622        ?
   weird-inlining-const-prop                          2.3427+-0.1311            2.2876+-0.1233          might be 1.0241x faster

   <geometric>                                        8.7315+-0.0308            8.6923+-0.0172          might be 1.0045x faster

                                                        TipOfTree              FunctionRealloc                                  
AsmBench:
   bigfib.cpp                                       493.0593+-3.7750          490.5004+-2.1220        
   cray.c                                           439.2513+-7.6554     ^    427.6735+-1.8534        ^ definitely 1.0271x faster
   dry.c                                            491.2350+-2.0374          488.2406+-7.1499        
   FloatMM.c                                        729.8935+-3.2026     ?    732.0606+-5.5383        ?
   gcc-loops.cpp                                   4302.6537+-98.8335    ?   4302.8216+-13.3102       ?
   n-body.c                                        1009.8979+-25.9154         984.4889+-2.5985          might be 1.0258x faster
   Quicksort.c                                      450.5911+-11.1394    ^    435.3630+-2.3627        ^ definitely 1.0350x faster
   stepanov_container.cpp                          3584.0342+-16.9142        3567.1348+-10.9824       
   Towers.c                                         265.6820+-2.2044          265.4826+-9.6995        

   <geometric>                                      806.6878+-3.3973     ^    797.7624+-3.6862        ^ definitely 1.0112x faster

                                                        TipOfTree              FunctionRealloc                                  
CompressionBench:
   huffman                                          369.7833+-8.1116     !    383.1773+-2.7191        ! definitely 1.0362x slower
   arithmetic-simple                                398.6577+-2.6603     ?    401.0917+-8.3839        ?
   arithmetic-precise                               299.4504+-2.5867          297.3054+-3.8346        
   arithmetic-complex-precise                       298.4787+-4.0636     ?    300.7178+-3.7527        ?
   arithmetic-precise-order-0                       428.0608+-4.5119          427.2370+-5.7287        
   arithmetic-precise-order-1                       327.3994+-3.5718     ?    328.2664+-7.5618        ?
   arithmetic-precise-order-2                       364.8403+-3.5319     ?    367.4930+-4.8679        ?
   arithmetic-simple-order-1                        424.3108+-4.3663     ?    426.0158+-6.7366        ?
   arithmetic-simple-order-2                        471.4926+-1.9479     ?    472.7461+-3.8261        ?
   lz-string                                        328.2074+-23.2972    ?    332.5008+-22.7965       ? might be 1.0131x slower

   <geometric>                                      366.8501+-2.6268     ?    369.4032+-2.3654        ? might be 1.0070x slower

                                                        TipOfTree              FunctionRealloc                                  

                                                        TipOfTree              FunctionRealloc                                  
Geomean of preferred means:
   <scaled-result>                                   64.0958+-0.1805           63.8925+-0.1926          might be 1.0032x faster
Comment 18 WebKit Commit Bot 2015-04-08 12:39:12 PDT
Attachment 250374 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/InferredValue.h:53:  The parameter name "globalObject" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 74 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 19 Filip Pizlo 2015-04-08 14:14:57 PDT
Created attachment 250384 [details]
fix some builds
Comment 20 Filip Pizlo 2015-04-08 16:05:13 PDT
Created attachment 250392 [details]
more fixes
Comment 21 WebKit Commit Bot 2015-04-08 16:07:31 PDT
Attachment 250392 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSFunction.h:63:  The parameter name "vm" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:63:  The parameter name "executable" adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:63:  The parameter name "scope" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 75 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 22 Filip Pizlo 2015-04-08 20:43:12 PDT
Created attachment 250407 [details]
fix style
Comment 23 Geoffrey Garen 2015-04-09 13:22:06 PDT
Comment on attachment 250407 [details]
fix style

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

r=me

> Source/JavaScriptCore/ChangeLog:35
> +          constant folding. Second, it means that we will detect a singlton scope even if it is

singlton => singleton

> Source/JavaScriptCore/ChangeLog:50
> +        change, block scoping would had had to have some story for the function reentry watchpoint on any

would had had to have => would have needed

> Source/JavaScriptCore/bytecode/VariableWriteFireDetail.h:50
> +private:
> +    JSObject* m_object;
> +    const PropertyName& m_name;

Would be nice to "void* operator new(size_t) = delete;" to help document and enforce that this is a stack-only thing.

> Source/JavaScriptCore/bytecode/Watchpoint.h:91
> +    WatchpointState stateOnMainThread() const

You can run JS on a non-main thread, so we should probably call this "stateOnJSThread".

> Source/JavaScriptCore/bytecode/Watchpoint.h:233
> +    // Fast way of getting the state, which only works from the main thread.
> +    WatchpointState stateOnMainThread() const

only works from the JS execution thread.

stateOnJSThread.

> Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3503
> +                    JSValue value = globalObject->variableAt(offset).get();

What happens if the JS thread resizes the global object's segmented vector while the compilation thread tries to read from it. Might the compilation thread try to read from free'd memory? Individual segments will not be deleted in a segmented vector, but the parent vector that points to the individual segments may be deleted.

> Source/JavaScriptCore/dfg/DFGGraph.cpp:1056
> +        value = activation->variableAt(offset).get();

Same concurrency question about variableAt.

> Source/JavaScriptCore/runtime/InferredValue.h:110
> +    class ValueCleanup : public UnconditionalFinalizer {

Please use WTF_MAKE_FAST_ALLOCATED.
Comment 24 Filip Pizlo 2015-04-11 07:52:05 PDT
(In reply to comment #23)
> Comment on attachment 250407 [details]
> fix style
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=250407&action=review
> 
> r=me
> 
> > Source/JavaScriptCore/ChangeLog:35
> > +          constant folding. Second, it means that we will detect a singlton scope even if it is
> 
> singlton => singleton
> 
> > Source/JavaScriptCore/ChangeLog:50
> > +        change, block scoping would had had to have some story for the function reentry watchpoint on any
> 
> would had had to have => would have needed
> 
> > Source/JavaScriptCore/bytecode/VariableWriteFireDetail.h:50
> > +private:
> > +    JSObject* m_object;
> > +    const PropertyName& m_name;
> 
> Would be nice to "void* operator new(size_t) = delete;" to help document and
> enforce that this is a stack-only thing.

Interesting.  Will do@

> 
> > Source/JavaScriptCore/bytecode/Watchpoint.h:91
> > +    WatchpointState stateOnMainThread() const
> 
> You can run JS on a non-main thread, so we should probably call this
> "stateOnJSThread".
> 
> > Source/JavaScriptCore/bytecode/Watchpoint.h:233
> > +    // Fast way of getting the state, which only works from the main thread.
> > +    WatchpointState stateOnMainThread() const
> 
> only works from the JS execution thread.
> 
> stateOnJSThread.

OK!

> 
> > Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3503
> > +                    JSValue value = globalObject->variableAt(offset).get();
> 
> What happens if the JS thread resizes the global object's segmented vector
> while the compilation thread tries to read from it. Might the compilation
> thread try to read from free'd memory? Individual segments will not be
> deleted in a segmented vector, but the parent vector that points to the
> individual segments may be deleted.

You found a bug!  It's a shamefully self-inflicted one, too.  The solution is just to say:

JSValue value = JSValue::decode(*bitwise_cast<EncodedJSValue*>(operand));

That's because the bytecode has a pointer to the global inside it.  Currently, we assert equivalence between &variableAt(offset) and that expression.  So, we should remove the assertion and just use the bytecode's pointer operand directly.

JSSegmentedVariableObject is unusual in this regard - the rest of our object models allow for concurrent access because all interior data structures are subject to GC and will not be invalidated until a GC flip, which synchronizes correctly with compiler threads (by waiting for them to either complete, or safepoint into LLVM).  I'll add a FIXME comment in JSSegmentedVariableObject and file a bug about that.  It's an asymptomatic bug right now because the compiler accesses globals directly by pointer (via the operand in the bytecode and in the case of Get/PutGlobalVar, a pointer operand in DFG IR), but it's a surprising and undesirable thing so we should change it eventually.

> 
> > Source/JavaScriptCore/dfg/DFGGraph.cpp:1056
> > +        value = activation->variableAt(offset).get();
> 
> Same concurrency question about variableAt.

Nope!  Activations use a more sensible object model - in fact the properties are just inline and there is no resizing - so this has no such concurrency issue.

> 
> > Source/JavaScriptCore/runtime/InferredValue.h:110
> > +    class ValueCleanup : public UnconditionalFinalizer {
> 
> Please use WTF_MAKE_FAST_ALLOCATED.

OK!

Thanks for the review.
Comment 25 Filip Pizlo 2015-04-13 15:14:46 PDT
Landed in http://trac.webkit.org/changeset/182759
Comment 26 Brent Fulgham 2015-04-13 16:06:07 PDT
I don't know why EWS didn't catch this, but we're getting Windows build failure with this patch:

error C2248: 'JSC::InferredValue::ValueCleanup' : cannot access private class declared in class 'JSC::InferredValue' (..\runtime\InferredValue.cpp)
Comment 27 Filip Pizlo 2015-04-13 16:08:49 PDT
(In reply to comment #26)
> I don't know why EWS didn't catch this, but we're getting Windows build
> failure with this patch:
> 
> error C2248: 'JSC::InferredValue::ValueCleanup' : cannot access private
> class declared in class 'JSC::InferredValue' (..\runtime\InferredValue.cpp)

I think I just fixed this.