Bug 154511 - [ES6] Implement Proxy.[[Set]]
Summary: [ES6] Implement Proxy.[[Set]]
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Saam Barati
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-02-21 00:31 PST by Saam Barati
Modified: 2016-02-25 14:58 PST (History)
11 users (show)

See Also:


Attachments
RFC WIP (29.71 KB, patch)
2016-02-22 19:29 PST, Saam Barati
no flags Details | Formatted Diff | Diff
RFC WIP (29.71 KB, patch)
2016-02-22 19:30 PST, Saam Barati
no flags Details | Formatted Diff | Diff
patch (31.79 KB, patch)
2016-02-23 15:01 PST, Saam Barati
fpizlo: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Saam Barati 2016-02-21 00:31:07 PST
...
Comment 1 Saam Barati 2016-02-22 19:29:17 PST
Created attachment 271983 [details]
RFC WIP
Comment 2 Saam Barati 2016-02-22 19:30:28 PST
Created attachment 271984 [details]
RFC WIP
Comment 3 Saam Barati 2016-02-22 19:33:23 PST
Comment on attachment 271984 [details]
RFC WIP

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

> Source/JavaScriptCore/runtime/JSObject.cpp:429
> +        if (obj->type() == ProxyObjectType) {
> +            ProxyObject* proxy = jsCast<ProxyObject*>(obj);
> +            proxy->ProxyObject::put(proxy, exec, propertyName, value, slot);
> +            return;
> +        }

Not sure if this is the best way to do this.

> Source/JavaScriptCore/runtime/JSObject.cpp:1929
> +        if (current->type() == ProxyObjectType) {
> +            ProxyObject* proxy = jsCast<ProxyObject*>(current);
> +            proxy->putByIndexCommon(exec, thisValue, i, value, shouldThrow);
> +            return true;
> +        }

ditto.

> Source/JavaScriptCore/runtime/ProxyObject.h:50
> +        return Structure::create(vm, globalObject, prototype, TypeInfo(ProxyObjectType, StructureFlags), info(), NonArray | MayHaveIndexedAccessors);

I'm not sure if it's a big anti-pattern to put MayHaveIndexedAccessors in the Structure's creation.
Comment 4 Oliver Hunt 2016-02-22 19:41:36 PST
Comment on attachment 271984 [details]
RFC WIP

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

>> Source/JavaScriptCore/runtime/JSObject.cpp:429
>> +        }
> 
> Not sure if this is the best way to do this.

i feel if (ProxyObject* proxy = jsDynamicCast<ProxyObject*>(obj)) { ... }
Comment 5 Filip Pizlo 2016-02-23 10:07:53 PST
Comment on attachment 271984 [details]
RFC WIP

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

>>> Source/JavaScriptCore/runtime/JSObject.cpp:429
>>> +        }
>> 
>> Not sure if this is the best way to do this.
> 
> i feel if (ProxyObject* proxy = jsDynamicCast<ProxyObject*>(obj)) { ... }

Oliver's version might be slower.

Saam, why aren't you overriding JSObject::put in ProxyObject?  That might obviate the need for this.  Remember, JSObject::put is a virtual method.  You can override it.  We won't call putInline in that case.
Comment 6 Saam Barati 2016-02-23 12:33:36 PST
(In reply to comment #4)
> Comment on attachment 271984 [details]
> RFC WIP
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=271984&action=review
> 
> >> Source/JavaScriptCore/runtime/JSObject.cpp:429
> >> +        }
> > 
> > Not sure if this is the best way to do this.
> 
> i feel if (ProxyObject* proxy = jsDynamicCast<ProxyObject*>(obj)) { ... }
I agree that this reads better, but it's much slower for when
the dynamic cast returns nullptr, which will almost always be true
because Proxy's aren't used on the web.

I'm tempted to write a function like this to make this style of
code read better:
```
template <JSType type, typename CellType, typename FromType>
CellType jsDynamicTypeCast(FromType* from) { // there must exist a better name
    if (from->type() == type)
        return jsCast<CellType>(from);
     return nullptr;
}
```
Comment 7 Saam Barati 2016-02-23 12:36:54 PST
(In reply to comment #5)
> Comment on attachment 271984 [details]
> RFC WIP
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=271984&action=review
> 
> >>> Source/JavaScriptCore/runtime/JSObject.cpp:429
> >>> +        }
> >> 
> >> Not sure if this is the best way to do this.
> > 
> > i feel if (ProxyObject* proxy = jsDynamicCast<ProxyObject*>(obj)) { ... }
> 
> Oliver's version might be slower.
> 
> Saam, why aren't you overriding JSObject::put in ProxyObject?  That might
> obviate the need for this.  Remember, JSObject::put is a virtual method. 
> You can override it.  We won't call putInline in that case.

I am overwriting both put and putByIndex on ProxyObject.
This code is for making Proxy's be able to intercept puts
when the Proxy is in the __proto__ chain of another object.
i.e, code like this:
```
let target = {};
let handler  = {
    set: function(theTarget, propName, ...etc) {
        assert(propName === "notOwnProp");
        // etc...
    }
};
let proxy = new Proxy(target, handler);
let obj = Object.create(proxy, {
   ownProp: { value: 40, etc... }
});
obj.ownProp = 50;
assert(set was *not* called);
obj.notOwnProp = 55;
assert(set was called)
```
Comment 8 Saam Barati 2016-02-23 15:01:56 PST
Created attachment 272056 [details]
patch
Comment 9 WebKit Commit Bot 2016-02-23 15:04:14 PST
Attachment 272056 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ProxyObject.cpp:357:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/ProxyObject.cpp:370:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSObject.h:858:  The parameter name "exec" adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 10 Filip Pizlo 2016-02-25 13:12:48 PST
Comment on attachment 272056 [details]
patch

Please run lots of benchmarks on this.  It would be great to post dynbench scores.
Comment 11 Saam Barati 2016-02-25 13:20:47 PST
JSC benchmark results. (I'm going to run dynbench now and post).

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Saams-MacBook-Pro (MacBookPro11,3).

VMs tested:
"og" at /Volumes/Data/WK/a/OpenSource/WebKitBuild/Release/jsc (r196871)
"proxyChange" at /Volumes/Data/WK/b/OpenSource/WebKitBuild/Release/jsc (r196871)

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

                                                            og                   proxyChange                                    
SunSpider:
   3d-cube                                            7.2343+-0.2250            7.0856+-0.0932          might be 1.0210x faster
   3d-morph                                           7.9536+-0.0645            7.9486+-0.0496        
   3d-raytrace                                        8.4907+-0.1022     ?      8.6294+-0.1584        ? might be 1.0163x slower
   access-binary-trees                                3.1611+-0.0760     ?      3.2866+-0.3587        ? might be 1.0397x slower
   access-fannkuch                                    9.0539+-0.1752     ?      9.5140+-0.8775        ? might be 1.0508x slower
   access-nbody                                       4.0527+-0.0560     ?      4.0605+-0.1273        ?
   access-nsieve                                      4.9573+-0.3520     ?      5.1627+-0.7329        ? might be 1.0414x slower
   bitops-3bit-bits-in-byte                           1.7636+-0.1582            1.6844+-0.0339          might be 1.0471x faster
   bitops-bits-in-byte                                4.9711+-0.7550     ?      5.0100+-0.7674        ?
   bitops-bitwise-and                                 3.0740+-0.0324            3.0526+-0.0418        
   bitops-nsieve-bits                                 4.4174+-0.0252     ?      4.4345+-0.0368        ?
   controlflow-recursive                              3.5902+-0.2026            3.4944+-0.0563          might be 1.0274x faster
   crypto-aes                                         6.0435+-0.0458     ?      6.1636+-0.1973        ? might be 1.0199x slower
   crypto-md5                                         3.7821+-0.0597     ?      4.2066+-0.6863        ? might be 1.1123x slower
   crypto-sha1                                        3.4117+-0.0318     ?      3.4680+-0.1204        ? might be 1.0165x slower
   date-format-tofte                                 10.7195+-0.2947     ?     10.9065+-0.3268        ? might be 1.0174x slower
   date-format-xparb                                  7.2696+-0.1223            7.1937+-0.1889          might be 1.0106x faster
   math-cordic                                        4.4037+-0.0663            4.3759+-0.0491        
   math-partial-sums                                  7.3939+-0.0349     ?      7.4610+-0.0492        ?
   math-spectral-norm                                 3.0103+-0.1797            2.9468+-0.0290          might be 1.0215x faster
   regexp-dna                                         9.4425+-0.1007            9.3296+-0.2139          might be 1.0121x faster
   string-base64                                      6.7599+-0.1150     ?      6.7861+-0.0951        ?
   string-fasta                                       8.9114+-0.1907     ?      9.0345+-0.2063        ? might be 1.0138x slower
   string-tagcloud                                   11.8355+-0.2522     ?     11.9145+-0.2321        ?
   string-unpack-code                                27.3241+-0.3256     ?     27.3752+-0.2883        ?
   string-validate-input                              6.5905+-0.2610            6.4330+-0.0764          might be 1.0245x faster

   <arithmetic>                                       6.9084+-0.0370     ?      6.9599+-0.0615        ? might be 1.0075x slower

                                                            og                   proxyChange                                    
LongSpider:
   3d-cube                                         1256.6468+-8.1919         1247.3336+-6.9675        
   3d-morph                                         920.7004+-0.3683     ?    921.5131+-1.9427        ?
   3d-raytrace                                      968.7795+-3.3165     ?    973.6702+-2.8502        ?
   access-binary-trees                             1257.3333+-25.1617        1252.7005+-22.1948       
   access-fannkuch                                  464.2554+-26.1997         443.7499+-39.4881         might be 1.0462x faster
   access-nbody                                     799.5085+-5.0980          797.1594+-0.6421        
   access-nsieve                                    513.5686+-4.5027          511.1152+-2.2543        
   bitops-3bit-bits-in-byte                          51.9554+-0.8214           51.5436+-0.1049        
   bitops-bits-in-byte                              168.5128+-2.3962     ?    168.6420+-2.2807        ?
   bitops-nsieve-bits                               598.6717+-2.0805          597.9127+-4.3338        
   controlflow-recursive                            706.9135+-1.8897          706.7847+-1.8461        
   crypto-aes                                       991.0749+-7.7627          989.0860+-4.8379        
   crypto-md5                                       919.4498+-10.0727    ?    956.1241+-70.0299       ? might be 1.0399x slower
   crypto-sha1                                     1154.7932+-18.3630        1145.5314+-4.7912        
   date-format-tofte                                896.6587+-21.1073         871.5286+-12.1393         might be 1.0288x faster
   date-format-xparb                               1006.9630+-5.7653     ?   1073.3900+-122.4274      ? might be 1.0660x slower
   hash-map                                         237.4641+-4.5349     ?    238.8645+-3.8205        ?
   math-cordic                                      736.5042+-8.0466          733.5936+-6.0873        
   math-partial-sums                                636.1102+-0.2458          635.6807+-1.8775        
   math-spectral-norm                               854.2440+-0.5634     ?    854.9320+-1.8372        ?
   string-base64                                    580.5926+-4.3454          576.1747+-4.2678        
   string-fasta                                     544.8398+-5.5651          543.5369+-3.8175        
   string-tagcloud                                  256.6876+-1.3237          255.5600+-1.0049        

   <geometric>                                      597.8508+-2.4182          597.1774+-4.9495          might be 1.0011x faster

                                                            og                   proxyChange                                    
V8Spider:
   crypto                                            57.4310+-0.3178           57.4111+-0.3923        
   deltablue                                         76.8689+-1.7991     ?     77.3070+-1.6592        ?
   earley-boyer                                      59.8966+-0.7679     ?     60.9863+-1.3562        ? might be 1.0182x slower
   raytrace                                          30.6981+-0.3645     ?     31.0980+-0.3876        ? might be 1.0130x slower
   regexp                                           100.6296+-9.5301           95.6357+-1.5682          might be 1.0522x faster
   richards                                          63.5811+-2.4931           62.7164+-0.6621          might be 1.0138x faster
   splay                                             51.1426+-6.8545           48.5316+-0.6330          might be 1.0538x faster

   <geometric>                                       59.4356+-1.3115           58.8612+-0.3183          might be 1.0098x faster

                                                            og                   proxyChange                                    
Octane:
   encrypt                                           0.23888+-0.00331    ?     0.24168+-0.00246       ? might be 1.0117x slower
   decrypt                                           4.32035+-0.01219    ?     4.32461+-0.01509       ?
   deltablue                                x2       0.21163+-0.01165          0.20712+-0.00297         might be 1.0217x faster
   earley                                            0.45290+-0.00413          0.44938+-0.00558       
   boyer                                             7.59791+-0.30834          7.42364+-0.03350         might be 1.0235x faster
   navier-stokes                            x2       7.60917+-0.01028          7.60205+-0.00536       
   raytrace                                 x2       1.39999+-0.00956    ?     1.40327+-0.00830       ?
   richards                                 x2       0.12627+-0.00138          0.12595+-0.00102       
   splay                                    x2       0.51819+-0.00609    ?     0.52295+-0.00713       ?
   regexp                                   x2      40.54022+-0.41417         39.52752+-0.84991         might be 1.0256x faster
   pdfjs                                    x2      58.35193+-0.49585    ?    58.35548+-0.54808       ?
   mandreel                                 x2      70.37693+-0.64425    ?    70.45091+-0.95391       ?
   gbemu                                    x2      42.28767+-0.72050         41.84394+-0.25511         might be 1.0106x faster
   closure                                           0.86712+-0.00187    ?     0.87603+-0.01351       ? might be 1.0103x slower
   jquery                                           11.42017+-0.13328         11.31840+-0.03222       
   box2d                                    x2      15.43918+-0.05835    ?    15.50155+-0.18505       ?
   zlib                                     x2     567.10389+-13.13708   ?   568.69585+-13.63543      ?
   typescript                               x2     960.60086+-7.54712    ?   961.47641+-3.44683       ?

   <geometric>                                       8.20724+-0.03643          8.18137+-0.00741         might be 1.0032x faster

                                                            og                   proxyChange                                    
Kraken:
   ai-astar                                          152.028+-3.616            147.834+-2.465           might be 1.0284x faster
   audio-beat-detection                               65.334+-0.359             65.209+-0.153         
   audio-dft                                         144.558+-0.354      ?     145.237+-0.641         ?
   audio-fft                                          49.188+-1.252             48.690+-0.141           might be 1.0102x faster
   audio-oscillator                                   81.190+-15.386            74.363+-0.269           might be 1.0918x faster
   imaging-darkroom                                   89.858+-0.448             89.306+-0.309         
   imaging-desaturate                                 69.523+-1.550      ?      71.598+-2.825         ? might be 1.0298x slower
   imaging-gaussian-blur                             116.959+-4.089      ?     117.473+-6.760         ?
   json-parse-financial                               56.486+-0.399             56.017+-0.553         
   json-stringify-tinderbox                           36.633+-0.543      !      38.244+-0.524         ! definitely 1.0440x slower
   stanford-crypto-aes                                60.504+-0.317      ?      60.528+-0.537         ?
   stanford-crypto-ccm                                55.231+-1.967      ?      56.128+-1.581         ? might be 1.0163x slower
   stanford-crypto-pbkdf2                            155.417+-3.108            154.791+-0.597         
   stanford-crypto-sha256-iterative                   59.384+-1.018             59.288+-0.371         

   <arithmetic>                                       85.164+-1.110             84.622+-0.499           might be 1.0064x faster

                                                            og                   proxyChange                                    
JSRegress:
   abc-forward-loop-equal                            36.3361+-0.2999           36.0953+-0.1320        
   abc-postfix-backward-loop                         45.6347+-0.3442           45.5258+-0.0775        
   abc-simple-backward-loop                          35.9806+-0.1546     ?     36.0252+-0.0808        ?
   abc-simple-forward-loop                           36.2376+-0.0677     ?     36.2919+-0.2734        ?
   abc-skippy-loop                                   31.7246+-0.3503           31.7077+-0.7026        
   abs-boolean                                        3.6869+-0.0231     ?      3.7486+-0.0796        ? might be 1.0167x slower
   adapt-to-double-divide                            22.1665+-0.2071     ?     22.1805+-0.1805        ?
   aliased-arguments-getbyval                         1.6642+-0.0324     ?      1.7383+-0.0974        ? might be 1.0445x slower
   allocate-big-object                                3.3011+-0.1925     ?      3.3646+-0.0551        ? might be 1.0192x slower
   arguments-named-and-reflective                    12.5925+-0.8679           12.5040+-0.4416        
   arguments-out-of-bounds                           10.2285+-0.0450           10.2110+-0.0712        
   arguments-strict-mode                             71.9798+-0.7437     ?     72.9438+-3.1924        ? might be 1.0134x slower
   arguments                                         10.2112+-0.0209     ?     10.2440+-0.0588        ?
   arity-mismatch-inlining                            1.2789+-0.0205            1.2630+-0.0419          might be 1.0126x faster
   array-access-polymorphic-structure                11.0752+-0.2635           10.9177+-0.2527          might be 1.0144x faster
   array-nonarray-polymorhpic-access                 29.7630+-0.2682     ?     29.9141+-0.4841        ?
   array-prototype-every                            105.6543+-1.4309     ?    106.5237+-0.9671        ?
   array-prototype-forEach                          104.6103+-1.0292     ?    105.6260+-0.4944        ?
   array-prototype-map                              113.0716+-1.7536          112.4147+-0.7056        
   array-prototype-reduce                            99.8792+-0.2320     ?    111.8891+-25.4544       ? might be 1.1202x slower
   array-prototype-reduceRight                      124.1609+-0.2302     ^    123.2921+-0.5309        ^ definitely 1.0070x faster
   array-prototype-some                             106.3005+-0.3461          106.0297+-0.9979        
   array-splice-contiguous                           33.8611+-0.3708     ?     34.4256+-0.3062        ? might be 1.0167x slower
   array-with-double-add                              5.2325+-0.0330     ?      5.2457+-0.0399        ?
   array-with-double-increment                        4.6484+-0.0376     ?      5.0209+-0.7429        ? might be 1.0801x slower
   array-with-double-mul-add                          6.7155+-0.0651     ?      6.7565+-0.0609        ?
   array-with-double-sum                              4.7485+-0.0241     ?      4.7910+-0.0766        ?
   array-with-int32-add-sub                           9.3643+-0.0935            9.3570+-0.0837        
   array-with-int32-or-double-sum                     4.9061+-0.0528            4.8760+-0.0254        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     42.8138+-0.6421           42.1647+-0.3798          might be 1.0154x faster
   ArrayBuffer-DataView-alloc-long-lived             19.1696+-0.1221     ?     19.2391+-0.1021        ?
   ArrayBuffer-Int32Array-byteOffset                  5.3870+-0.0462     ?      5.4023+-0.0308        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     42.4205+-0.5700           42.4038+-0.6139        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     31.4386+-0.9250           30.9793+-0.8911          might be 1.0148x faster
   ArrayBuffer-Int8Array-alloc-long-lived            17.5070+-0.1293     ?     17.6127+-0.2091        ?
   ArrayBuffer-Int8Array-alloc                       14.8887+-0.2030           14.7742+-0.1790        
   arrowfunction-call                                15.1301+-0.2238           14.9845+-0.1758        
   asmjs_bool_bug                                    11.2910+-0.1563           11.2318+-0.0492        
   assign-custom-setter-polymorphic                   3.8345+-0.0384     ?      3.9727+-0.1317        ? might be 1.0360x slower
   assign-custom-setter                               5.6200+-0.5781            5.4927+-0.0355          might be 1.0232x faster
   basic-set                                         11.9464+-0.3870           11.8595+-0.4183        
   big-int-mul                                        4.6283+-0.0272     ?      4.6372+-0.0309        ?
   boolean-test                                       5.0277+-0.1351            4.9843+-0.0277        
   branch-fold                                        5.3142+-0.0324     ?      5.3165+-0.0877        ?
   branch-on-string-as-boolean                       17.6567+-0.4225     ?     17.7931+-0.4429        ?
   by-val-generic                                     6.7682+-0.2682            6.6095+-0.3664          might be 1.0240x faster
   call-spread-apply                                 68.2819+-0.6453           67.3885+-1.2369          might be 1.0133x faster
   call-spread-call                                 105.9384+-2.0797          104.4588+-1.9866          might be 1.0142x faster
   captured-assignments                               0.6632+-0.0188            0.6533+-0.0142          might be 1.0151x faster
   cast-int-to-double                                 7.5128+-0.0278     ?      7.5370+-0.0340        ?
   cell-argument                                      4.2494+-0.0843     ?      4.5166+-0.6775        ? might be 1.0629x slower
   cfg-simplify                                       4.3155+-0.1188            4.3085+-0.0495        
   chain-getter-access                               17.0460+-0.1272     ?     17.0599+-0.1923        ?
   cmpeq-obj-to-obj-other                            13.1789+-0.2739     ?     13.5444+-0.5691        ? might be 1.0277x slower
   constant-test                                      7.1140+-0.0532            7.0613+-0.0377        
   create-lots-of-functions                          11.9521+-1.0099           11.4361+-0.8998          might be 1.0451x faster
   cse-new-array-buffer                               3.2037+-0.0345     ?      3.2261+-0.0344        ?
   cse-new-array                                      3.3116+-0.1650            3.2489+-0.1353          might be 1.0193x faster
   custom-setter-getter-as-put-get-by-id              0.7269+-0.0110     ?      0.7495+-0.0184        ? might be 1.0311x slower
   DataView-custom-properties                        50.5493+-0.6149     ?     51.1683+-0.7531        ? might be 1.0122x slower
   delay-tear-off-arguments-strictmode               17.7763+-0.1496           17.6463+-0.2808        
   deltablue-varargs                                 64.8590+-16.7251          57.9390+-0.4535          might be 1.1194x faster
   destructuring-arguments                          244.4657+-1.7781          240.7522+-2.3845          might be 1.0154x faster
   destructuring-parameters-overridden-by-function   
                                                      0.6743+-0.0105     ?      0.6883+-0.0361        ? might be 1.0208x slower
   destructuring-swap                                 7.0356+-0.0845            7.0150+-0.0340        
   direct-arguments-getbyval                          1.6905+-0.0586     ?      1.7927+-0.2767        ? might be 1.0604x slower
   div-boolean-double                                 7.0488+-0.0962            6.9760+-0.0420          might be 1.0104x faster
   div-boolean                                       11.6628+-0.0857     ?     11.8021+-0.1880        ? might be 1.0119x slower
   double-get-by-val-out-of-bounds                    6.5097+-0.2066            6.2938+-0.2043          might be 1.0343x faster
   double-pollution-getbyval                         12.6805+-0.0812           12.6386+-0.0737        
   double-pollution-putbyoffset                       5.2752+-0.0380     ?      5.4993+-0.4039        ? might be 1.0425x slower
   double-real-use                                   38.0400+-1.9998     ?     39.7208+-2.8717        ? might be 1.0442x slower
   double-to-int32-typed-array-no-inline              2.9654+-0.0333     ?      2.9992+-0.0703        ? might be 1.0114x slower
   double-to-int32-typed-array                        2.9760+-0.0637     ?      3.0700+-0.1881        ? might be 1.0316x slower
   double-to-uint32-typed-array-no-inline             3.0442+-0.0531     ?      3.3785+-0.8329        ? might be 1.1098x slower
   double-to-uint32-typed-array                       3.0498+-0.0329     ^      2.9844+-0.0308        ^ definitely 1.0219x faster
   elidable-new-object-dag                           46.5600+-0.1043     ?     47.0118+-0.5709        ?
   elidable-new-object-roflcopter                    48.5388+-0.4337           48.0928+-0.2282        
   elidable-new-object-then-call                     38.4742+-6.4870           35.7544+-0.1637          might be 1.0761x faster
   elidable-new-object-tree                          48.8749+-1.8081           47.9422+-0.1393          might be 1.0195x faster
   empty-string-plus-int                              7.2811+-0.0894     ?      7.3471+-0.0883        ?
   emscripten-cube2hash                              37.0045+-0.5207           36.9743+-0.5139        
   exit-length-on-plain-object                       23.3378+-0.4406           23.2857+-0.4208        
   external-arguments-getbyval                        1.7163+-0.1015     ?      1.7437+-0.2672        ? might be 1.0160x slower
   external-arguments-putbyval                        3.3283+-0.1119            3.2159+-0.0314          might be 1.0350x faster
   fixed-typed-array-storage-var-index                1.7636+-0.0394     ?      1.8098+-0.0966        ? might be 1.0261x slower
   fixed-typed-array-storage                          1.3387+-0.0211     ?      1.3493+-0.0343        ?
   Float32Array-matrix-mult                           6.8128+-0.1110     ?      6.8403+-0.0959        ?
   Float32Array-to-Float64Array-set                  66.1976+-0.6145           65.3823+-1.1414          might be 1.0125x faster
   Float64Array-alloc-long-lived                     83.8807+-0.8409           83.3891+-0.7736        
   Float64Array-to-Int16Array-set                    85.4021+-0.4365     !     87.2577+-0.4184        ! definitely 1.0217x slower
   fold-double-to-int                                19.6282+-0.0442     ?     19.9161+-0.3277        ? might be 1.0147x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     13.2616+-0.2898           13.0324+-0.2575          might be 1.0176x faster
   fold-get-by-id-to-multi-get-by-offset             10.6023+-0.1072     ?     10.6619+-0.1347        ?
   fold-multi-get-by-offset-to-get-by-offset   
                                                     12.1537+-1.7519           10.9781+-2.0273          might be 1.1071x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     12.7043+-1.4243           11.1005+-2.1026          might be 1.1445x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     12.2674+-1.4085           11.9451+-1.4198          might be 1.0270x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.2485+-1.5237     ?     10.7878+-1.2350        ? might be 1.0526x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     14.3481+-0.1699     ?     14.8160+-0.9205        ? might be 1.0326x slower
   fold-put-by-id-to-multi-put-by-offset             12.4695+-0.1973           12.4210+-0.3024        
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     12.2432+-0.2078     ?     12.5438+-0.1462        ? might be 1.0245x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     12.8825+-1.1465           12.4646+-0.2521          might be 1.0335x faster
   fold-put-structure                                 8.4883+-2.9229            7.2859+-0.1197          might be 1.1650x faster
   for-of-iterate-array-entries                      14.7395+-0.2222           14.6226+-0.1583        
   for-of-iterate-array-keys                          4.9472+-0.0743     ?      5.2033+-0.5410        ? might be 1.0518x slower
   for-of-iterate-array-values                        4.7767+-0.0758            4.7659+-0.1036        
   fround                                            17.9857+-0.2171     ?     18.0558+-0.2322        ?
   ftl-library-inlining-dataview                     93.3969+-0.1315     ^     88.3304+-0.1378        ^ definitely 1.0574x faster
   ftl-library-inlining                              35.8470+-0.7388           35.3511+-0.2206          might be 1.0140x faster
   ftl-polymorphic-bitand                           173.7003+-2.5802     ?    174.7766+-1.1258        ?
   ftl-polymorphic-bitor                            171.8883+-2.1768     ?    173.1668+-0.5463        ?
   ftl-polymorphic-bitxor                           171.8810+-1.0612     !    174.8039+-0.9654        ! definitely 1.0170x slower
   ftl-polymorphic-div                              683.9837+-1.0755     !    686.8210+-1.1273        ! definitely 1.0041x slower
   ftl-polymorphic-lshift                           217.3232+-1.3706     ?    218.5643+-0.3090        ?
   ftl-polymorphic-mul                              335.9874+-1.5144     ?    336.4486+-1.1917        ?
   ftl-polymorphic-rshift                           217.2646+-1.0602     !    221.5540+-1.5838        ! definitely 1.0197x slower
   ftl-polymorphic-StringFromCharCode                64.2830+-0.1369     ?     69.7814+-12.3227       ? might be 1.0855x slower
   ftl-polymorphic-sub                              252.4412+-0.7900     ?    252.5656+-0.4131        ?
   ftl-polymorphic-urshift                          238.3672+-1.5292     ?    242.4545+-5.2932        ? might be 1.0171x slower
   function-call                                     15.8697+-0.1994     ?     15.9641+-0.2165        ?
   function-dot-apply                                 3.0619+-0.0440            2.9986+-0.0348          might be 1.0211x faster
   function-test                                      4.7297+-0.0278     ?      4.9663+-0.5424        ? might be 1.0500x slower
   function-with-eval                               141.8480+-0.4952     ?    142.3727+-0.5559        ?
   gcse-poly-get-less-obvious                        22.8405+-0.5368           22.5198+-0.2119          might be 1.0142x faster
   gcse-poly-get                                     24.2095+-2.8020     ?     25.6432+-2.0030        ? might be 1.0592x slower
   gcse                                               5.0132+-0.0316     ?      5.0150+-0.0189        ?
   generator-create                                   1.0811+-0.0204     ?      1.0860+-0.0213        ?
   generator-fib                                    153.6734+-4.8649          153.2467+-0.4585        
   generator-function-create                          5.6309+-0.3920            5.3423+-0.0970          might be 1.0540x faster
   generator-sunspider-access-nsieve                  8.4795+-0.0835            8.4119+-0.0785        
   generator-with-several-types                     489.3354+-14.3327         488.9330+-15.4995       
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.9434+-0.1563            3.8932+-0.0393          might be 1.0129x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      7.1729+-0.0270     ?      7.3916+-0.6440        ? might be 1.0305x slower
   get-by-id-chain-from-try-block                     2.8907+-0.0872            2.8504+-0.0305          might be 1.0141x faster
   get-by-id-check-structure-elimination              5.8807+-0.0371            5.8574+-0.0286        
   get-by-id-proto-or-self                           15.5116+-1.0483           15.0007+-0.8221          might be 1.0341x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.4218+-0.3113            4.2965+-0.0551          might be 1.0292x faster
   get-by-id-self-or-proto                           14.8944+-0.9230           14.4814+-0.7626          might be 1.0285x faster
   get-by-val-out-of-bounds                           5.9720+-0.2006     ?      6.0272+-0.1930        ?
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      4.0607+-0.0401            4.0519+-0.0694        
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      9.5435+-0.0717     ?      9.5588+-0.1154        ?
   get-by-val-with-string-chain-from-try-block   
                                                      3.0368+-0.2510            2.9190+-0.0414          might be 1.0404x faster
   get-by-val-with-string-check-structure-elimination   
                                                      8.4633+-0.0452            8.4511+-0.0346        
   get-by-val-with-string-proto-or-self              19.1771+-1.5496           17.9925+-1.7444          might be 1.0658x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      4.5280+-0.0590     ?      4.9384+-0.8186        ? might be 1.0906x slower
   get-by-val-with-string-self-or-proto              18.7235+-1.4321           18.4016+-1.1363          might be 1.0175x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      4.6526+-0.0270     ?      4.6920+-0.0655        ?
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     18.5738+-0.1258     ?     18.5771+-0.1866        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.9041+-0.0593     ?      3.1577+-0.5108        ? might be 1.0873x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     17.1390+-0.2033           17.0316+-0.1534        
   get-by-val-with-symbol-proto-or-self              19.0211+-0.6379           17.7319+-1.8706          might be 1.0727x faster
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      5.5698+-0.0685            5.5019+-0.0356          might be 1.0123x faster
   get-by-val-with-symbol-self-or-proto              17.5632+-1.2142     ?     17.9904+-1.7572        ? might be 1.0243x slower
   get_callee_monomorphic                             3.1821+-0.1453     ?      3.2200+-0.1284        ? might be 1.0119x slower
   get_callee_polymorphic                             4.7663+-0.0916     ?      4.8193+-0.0308        ? might be 1.0111x slower
   getter-no-activation                               5.6604+-0.0549     ?      5.6785+-0.0265        ?
   getter-prototype                                   7.2393+-0.0919            7.2132+-0.0665        
   getter-richards-try-catch                       1522.9624+-21.0320    ?   1541.5680+-23.6719       ? might be 1.0122x slower
   getter-richards                                  118.1818+-27.9387         105.9038+-1.4359          might be 1.1159x faster
   getter                                             6.5079+-0.0373     ?      6.5209+-0.0952        ?
   global-object-access-with-mutating-structure   
                                                      6.9633+-0.1318     ?      7.2594+-0.6013        ? might be 1.0425x slower
   global-var-const-infer-fire-from-opt               1.1829+-0.1546            1.1273+-0.0958          might be 1.0492x faster
   global-var-const-infer                             0.9956+-0.0486            0.9756+-0.0185          might be 1.0205x faster
   hard-overflow-check-equal                         36.1069+-1.2057           35.4628+-0.1120          might be 1.0182x faster
   hard-overflow-check                               35.3305+-0.0602           35.3302+-0.0551        
   HashMap-put-get-iterate-keys                      35.8952+-4.2073           34.1398+-0.3423          might be 1.0514x faster
   HashMap-put-get-iterate                           33.8590+-0.1644     ?     34.1164+-0.6492        ?
   HashMap-string-put-get-iterate                    37.5590+-0.6527     ?     43.4051+-14.1966       ? might be 1.1557x slower
   hoist-make-rope                                    5.6078+-0.0951     ?      5.7280+-0.2638        ? might be 1.0214x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.3387+-0.0559            4.3097+-0.0744        
   hoist-poly-check-structure                         3.0908+-0.1025     ?      3.1834+-0.1586        ? might be 1.0300x slower
   imul-double-only                                   4.8215+-0.1280            4.7563+-0.1263          might be 1.0137x faster
   imul-int-only                                      7.4237+-0.0360            7.4140+-0.0469        
   imul-mixed                                         5.0756+-0.0885            5.0720+-0.1211        
   in-four-cases                                     23.4564+-0.2275     ?     23.5954+-0.2668        ?
   in-one-case-false                                 14.3851+-0.2087           14.2573+-0.2290        
   in-one-case-true                                  15.5325+-2.9136           14.3069+-0.1383          might be 1.0857x faster
   in-two-cases                                      14.4051+-0.3100     ?     14.4296+-0.1898        ?
   indexed-properties-in-objects                      4.1893+-0.0269     ?      4.2089+-0.0267        ?
   infer-closure-const-then-mov-no-inline             4.1642+-0.0537            4.1307+-0.0299        
   infer-closure-const-then-mov                      12.8798+-0.4442           12.6823+-0.2550          might be 1.0156x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     15.5789+-0.0733     ?     15.7153+-0.2061        ?
   infer-closure-const-then-put-to-scope             33.0500+-0.9767           32.9811+-0.8874        
   infer-closure-const-then-reenter-no-inline   
                                                     76.9274+-0.6582           76.7123+-0.1176        
   infer-closure-const-then-reenter                  34.3584+-0.7284     ?     34.7270+-0.3363        ? might be 1.0107x slower
   infer-constant-global-property                     5.1668+-0.0224     ?      5.2604+-0.1860        ? might be 1.0181x slower
   infer-constant-property                            3.9207+-0.0680     ?      3.9341+-0.0373        ?
   infer-one-time-closure-ten-vars                   10.3382+-0.0602           10.3242+-0.0263        
   infer-one-time-closure-two-vars                    9.6653+-0.0624     ?      9.7186+-0.0783        ?
   infer-one-time-closure                             9.6017+-0.0379     ?      9.6141+-0.0395        ?
   infer-one-time-deep-closure                       17.8183+-0.2218           17.5708+-0.0715          might be 1.0141x faster
   inline-arguments-access                            5.1877+-0.1373            5.1781+-0.2186        
   inline-arguments-aliased-access                    5.5066+-0.2842            5.3083+-0.1116          might be 1.0374x faster
   inline-arguments-local-escape                      5.3022+-0.1389     ?      5.3084+-0.1117        ?
   inline-get-scoped-var                              4.7354+-0.0305            4.7285+-0.0264        
   inlined-put-by-id-transition                      12.2202+-0.2268     ?     12.3578+-0.4849        ? might be 1.0113x slower
   inlined-put-by-val-with-string-transition   
                                                     62.5209+-0.4297     ?     62.6252+-0.4308        ?
   inlined-put-by-val-with-symbol-transition   
                                                     62.8344+-0.5252           62.3865+-0.3501        
   instanceof-bound                                  31.5696+-0.6157           31.4603+-0.1222        
   int-or-other-abs-then-get-by-val                   6.8304+-0.0359            6.8241+-0.0426        
   int-or-other-abs-zero-then-get-by-val             24.4081+-0.3112           24.0895+-0.2928          might be 1.0132x faster
   int-or-other-add-then-get-by-val                   6.2264+-0.0601            6.2055+-0.0451        
   int-or-other-add                                   7.2651+-0.0395     ?      7.3292+-0.1362        ?
   int-or-other-div-then-get-by-val                   5.6071+-0.0328            5.6064+-0.0269        
   int-or-other-max-then-get-by-val                   5.8682+-0.0245     ?      5.9004+-0.0357        ?
   int-or-other-min-then-get-by-val                   5.8738+-0.0850     ?      5.9717+-0.2594        ? might be 1.0167x slower
   int-or-other-mod-then-get-by-val                   5.2123+-0.0594     ?      5.2223+-0.0937        ?
   int-or-other-mul-then-get-by-val                   5.2789+-0.0594            5.2701+-0.0414        
   int-or-other-neg-then-get-by-val                   6.3691+-0.0255     ?      6.4218+-0.0988        ?
   int-or-other-neg-zero-then-get-by-val             23.9037+-0.0742           23.8958+-0.1473        
   int-or-other-sub-then-get-by-val                   6.2282+-0.2101     ?      6.2873+-0.2387        ?
   int-or-other-sub                                   5.1840+-0.0328            5.1496+-0.0322        
   int-overflow-local                                 6.0473+-0.1008     ?      6.0677+-0.0512        ?
   Int16Array-alloc-long-lived                       62.8468+-0.2907     ?     62.8699+-0.4970        ?
   Int16Array-bubble-sort-with-byteLength            29.9664+-1.3255     ?     30.5769+-0.8703        ? might be 1.0204x slower
   Int16Array-bubble-sort                            24.5555+-0.3096     ?     24.7281+-0.7713        ?
   Int16Array-load-int-mul                            2.1948+-0.0187     ?      2.2129+-0.0097        ?
   Int16Array-to-Int32Array-set                      65.8331+-0.2850     ?     65.8820+-0.4114        ?
   Int32Array-alloc-large                            17.2617+-0.4015           16.8440+-0.3124          might be 1.0248x faster
   Int32Array-alloc-long-lived                       69.2657+-2.2663           68.9286+-2.5896        
   Int32Array-alloc                                   3.7521+-0.0640     ?      3.7585+-0.1459        ?
   Int32Array-Int8Array-view-alloc                    9.3407+-0.4791            9.1984+-0.4224          might be 1.0155x faster
   int52-spill                                        7.2760+-0.4830            7.0139+-0.0637          might be 1.0374x faster
   Int8Array-alloc-long-lived                        57.6043+-0.4169     ?     57.6668+-0.8404        ?
   Int8Array-load-with-byteLength                     5.0153+-0.0612     ?      5.3296+-0.6608        ? might be 1.0627x slower
   Int8Array-load                                     5.0375+-0.0195     ?      5.5522+-0.8877        ? might be 1.1022x slower
   integer-divide                                    16.1094+-0.0831     ?     17.6361+-3.1195        ? might be 1.0948x slower
   integer-modulo                                     2.3519+-0.0353     ?      2.3669+-0.0366        ?
   is-boolean-fold-tricky                             5.7531+-0.0298            5.7241+-0.0766        
   is-boolean-fold                                    4.2717+-0.6696            3.9740+-0.0373          might be 1.0749x faster
   is-function-fold-tricky-internal-function   
                                                     15.5594+-0.1753     ^     14.9393+-0.1252        ^ definitely 1.0415x faster
   is-function-fold-tricky                            6.0409+-0.0200     !      6.1341+-0.0578        ! definitely 1.0154x slower
   is-function-fold                                   4.0399+-0.0270     ?      4.3310+-0.7196        ? might be 1.0721x slower
   is-number-fold-tricky                              5.9999+-0.0532            5.9789+-0.0501        
   is-number-fold                                     4.0955+-0.2273            4.0511+-0.2114          might be 1.0110x faster
   is-object-or-null-fold-functions                   4.0350+-0.0350     ?      4.0519+-0.0283        ?
   is-object-or-null-fold-less-tricky                 6.1070+-0.0643            6.0841+-0.0535        
   is-object-or-null-fold-tricky                      7.3634+-0.1188     ?      7.4122+-0.2030        ?
   is-object-or-null-fold                             4.0468+-0.0322     ?      4.0517+-0.0493        ?
   is-object-or-null-trickier-function                6.3055+-0.4037            6.1133+-0.0655          might be 1.0314x faster
   is-object-or-null-trickier-internal-function   
                                                     16.7815+-3.6362           15.1963+-0.1405          might be 1.1043x faster
   is-object-or-null-tricky-function                  6.0970+-0.0557     ?      6.1104+-0.0635        ?
   is-object-or-null-tricky-internal-function   
                                                     10.8958+-0.1110     !     11.3734+-0.3179        ! definitely 1.0438x slower
   is-string-fold-tricky                              5.9859+-0.0498            5.9675+-0.0632        
   is-string-fold                                     3.9924+-0.0479            3.9690+-0.0200        
   is-undefined-fold-tricky                           5.0600+-0.0373     ?      5.0718+-0.0853        ?
   is-undefined-fold                                  3.9804+-0.0329            3.9792+-0.0254        
   JSONP-negative-0                                   0.3985+-0.0130     ?      0.4101+-0.0139        ? might be 1.0291x slower
   large-int-captured                                 4.3930+-0.5757            4.2246+-0.2336          might be 1.0399x faster
   large-int-neg                                     19.7072+-0.7862           19.2707+-0.3585          might be 1.0227x faster
   large-int                                         17.5024+-0.2607     ?     17.5494+-0.2737        ?
   load-varargs-elimination                          29.0326+-0.2677     ?     29.0754+-0.2797        ?
   logical-not-weird-types                            3.8886+-0.0711     ?      3.9663+-0.1031        ? might be 1.0200x slower
   logical-not                                        5.8940+-0.0616     ?      5.9741+-0.1340        ? might be 1.0136x slower
   lots-of-fields                                    13.1725+-0.3948           13.1644+-0.1881        
   make-indexed-storage                               3.9971+-0.0525     ^      3.7374+-0.1594        ^ definitely 1.0695x faster
   make-rope-cse                                      5.5727+-0.4701            5.4402+-0.1586          might be 1.0244x faster
   map-for-each                                       7.4753+-0.0419     ?      7.4926+-0.0416        ?
   map-for-of                                        24.7532+-0.1723           24.3918+-0.8776          might be 1.0148x faster
   marsaglia-larger-ints                             48.8179+-0.1725     ?     48.8713+-0.1000        ?
   marsaglia-osr-entry                               26.9283+-0.1566           26.7641+-0.0963        
   math-random                                       23.3682+-0.2214           23.1389+-0.1468        
   math-with-out-of-bounds-array-values              43.4211+-0.1342     ?     43.6467+-0.6143        ?
   max-boolean                                        3.9654+-0.0543     ?      4.0982+-0.3039        ? might be 1.0335x slower
   method-on-number                                  25.8767+-0.6550           25.4478+-0.3200          might be 1.0169x faster
   min-boolean                                        4.0323+-0.0896            3.9725+-0.0400          might be 1.0151x faster
   minus-boolean-double                               4.6540+-0.0770            4.6515+-0.0907        
   minus-boolean                                      3.5413+-0.0338     ?      3.6203+-0.1515        ? might be 1.0223x slower
   misc-strict-eq                                    34.2281+-1.0253           31.9740+-1.4381          might be 1.0705x faster
   mod-boolean-double                                14.9933+-0.1977     ?     15.1786+-0.8462        ? might be 1.0124x slower
   mod-boolean                                       11.5327+-0.2282           11.5303+-0.1568        
   mul-boolean-double                                 5.1750+-0.1158     ?      5.2780+-0.0766        ? might be 1.0199x slower
   mul-boolean                                        4.3407+-0.0697            4.2873+-0.0425          might be 1.0124x faster
   neg-boolean                                        4.6639+-0.0215     ?      4.6791+-0.0422        ?
   negative-zero-divide                               0.5354+-0.0104            0.5341+-0.0138        
   negative-zero-modulo                               0.5377+-0.0276            0.5290+-0.0162          might be 1.0165x faster
   negative-zero-negate                               0.5044+-0.0034     ?      0.5081+-0.0099        ?
   nested-function-parsing                           50.2484+-1.2376           49.4436+-0.2964          might be 1.0163x faster
   new-array-buffer-dead                            117.9307+-0.7414          117.8274+-0.5789        
   new-array-buffer-push                              8.1481+-0.1404            7.9745+-0.1931          might be 1.0218x faster
   new-array-dead                                    13.3529+-0.2519     ?     14.1997+-1.5097        ? might be 1.0634x slower
   new-array-push                                     5.6221+-0.1517     ?      5.6437+-0.1350        ?
   no-inline-constructor                             44.4926+-0.8178     ?     45.4482+-1.2004        ? might be 1.0215x slower
   number-test                                        4.9844+-0.0441            4.9442+-0.0236        
   object-closure-call                                7.0704+-0.0784     ?      7.0767+-0.1459        ?
   object-get-own-property-symbols-on-large-array   
                                                      5.8216+-0.1470     ?      6.0448+-0.2309        ? might be 1.0383x slower
   object-test                                        4.7399+-0.0531     ?      4.8108+-0.1013        ? might be 1.0150x slower
   obvious-sink-pathology-taken                     161.2893+-0.6961     ?    171.8881+-25.9691       ? might be 1.0657x slower
   obvious-sink-pathology                            35.2794+-0.2242           35.0896+-0.2365        
   obviously-elidable-new-object                     32.1866+-0.2072           32.1841+-0.2837        
   plus-boolean-arith                                 3.5977+-0.0481     ?      3.6156+-0.0909        ?
   plus-boolean-double                                4.7802+-0.2117            4.6217+-0.0569          might be 1.0343x faster
   plus-boolean                                       3.8399+-0.0754            3.7281+-0.0816          might be 1.0300x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.9045+-0.0824            3.8848+-0.0099        
   poly-chain-access-different-prototypes             3.7989+-0.0328     ?      3.8145+-0.0282        ?
   poly-chain-access-simpler                          3.8654+-0.0265     ?      3.8915+-0.0572        ?
   poly-chain-access                                  3.7676+-0.0289     ?      3.7831+-0.0322        ?
   poly-stricteq                                     81.6447+-0.1093     ^     79.5761+-0.1712        ^ definitely 1.0260x faster
   polymorphic-array-call                             1.7480+-0.0260     ?      1.7570+-0.0674        ?
   polymorphic-get-by-id                              2.8849+-0.0651     ?      2.9036+-0.1102        ?
   polymorphic-put-by-id                             40.0562+-0.3651           39.9093+-0.3495        
   polymorphic-put-by-val-with-string                41.6633+-0.3204           41.1744+-0.3117          might be 1.0119x faster
   polymorphic-put-by-val-with-symbol                41.4432+-0.3318     ?     41.5225+-0.4110        ?
   polymorphic-structure                             19.2795+-0.4576           18.9647+-0.0582          might be 1.0166x faster
   polyvariant-monomorphic-get-by-id                  7.2101+-0.0538            7.1602+-0.0455        
   proto-getter-access                               16.9752+-0.1914     ?     17.0139+-0.1887        ?
   prototype-access-with-mutating-prototype           6.5910+-0.1723            6.5435+-0.2079        
   put-by-id-replace-and-transition                  11.1862+-0.4890           11.0780+-0.4701        
   put-by-id-slightly-polymorphic                     4.0420+-0.0601            4.0267+-0.0168        
   put-by-id                                         13.7204+-1.1031           13.2573+-0.1585          might be 1.0349x faster
   put-by-val-direct                                  0.6277+-0.0427            0.6039+-0.0138          might be 1.0394x faster
   put-by-val-large-index-blank-indexing-type   
                                                      7.5161+-0.0676     ?      7.6055+-0.1567        ? might be 1.0119x slower
   put-by-val-machine-int                             3.5205+-0.1000     ?      3.5767+-0.0419        ? might be 1.0160x slower
   put-by-val-with-string-replace-and-transition   
                                                     14.4226+-0.2634           14.3203+-0.2858        
   put-by-val-with-string-slightly-polymorphic   
                                                      4.2229+-0.0611            4.2030+-0.0311        
   put-by-val-with-string                            13.8620+-0.2401           13.7765+-0.1361        
   put-by-val-with-symbol-replace-and-transition   
                                                     15.0728+-0.2862           15.0035+-0.1556        
   put-by-val-with-symbol-slightly-polymorphic   
                                                      4.8788+-0.0199     ^      4.8074+-0.0505        ^ definitely 1.0148x faster
   put-by-val-with-symbol                            13.9158+-0.2089           13.8102+-0.1329        
   rare-osr-exit-on-local                            21.1559+-3.2243           19.8445+-0.4429          might be 1.0661x faster
   raytrace-with-empty-try-catch                      9.1619+-0.2675            8.8488+-0.2636          might be 1.0354x faster
   raytrace-with-try-catch                           14.5651+-0.3195           14.4473+-0.3351        
   register-pressure-from-osr                        23.7005+-0.2015           23.6738+-0.1261        
   repeat-multi-get-by-offset                        28.0985+-0.0891     ?     28.1972+-0.1660        ?
   richards-empty-try-catch                          69.7075+-1.2316           69.0013+-0.3595          might be 1.0102x faster
   richards-try-catch                               323.7489+-1.3653     ?    325.2354+-0.7586        ?
   set-for-each                                       6.6721+-0.0799            6.6694+-0.1386        
   set-for-of                                        12.5648+-0.2718     ?     12.5663+-0.1504        ?
   setter-prototype                                   6.8944+-0.0876            6.8838+-0.0420        
   setter                                             6.0511+-0.0880            5.9995+-0.0476        
   simple-activation-demo                            33.3482+-0.1599           33.3228+-0.1840        
   simple-getter-access                              26.1145+-0.1278     ?     26.2340+-0.2771        ?
   simple-poly-call-nested                            8.5837+-0.3788            8.3532+-0.0765          might be 1.0276x faster
   simple-poly-call                                   1.7480+-0.0542     ?      1.7685+-0.0886        ? might be 1.0117x slower
   sin-boolean                                       21.6209+-0.1761     ?     22.0388+-0.5358        ? might be 1.0193x slower
   singleton-scope                                   84.8455+-0.1708           84.8094+-0.0564        
   sink-function                                      9.5870+-0.7307            9.3564+-0.9313          might be 1.0246x faster
   sink-huge-activation                              17.7086+-0.3803     ?     17.9445+-0.2180        ? might be 1.0133x slower
   sinkable-new-object-dag                           76.6638+-2.4568           75.6274+-0.8089          might be 1.0137x faster
   sinkable-new-object-taken                         58.9533+-0.1525     ?     59.1017+-0.4310        ?
   sinkable-new-object                               35.2811+-0.1759           35.2006+-0.1864        
   slow-array-profile-convergence                     3.8170+-0.1078            3.7691+-0.1387          might be 1.0127x faster
   slow-convergence                                   3.8282+-0.0609            3.7904+-0.0245        
   slow-ternaries                                    22.6042+-4.6918           20.7440+-0.3142          might be 1.0897x faster
   sorting-benchmark                                 26.9682+-0.2841     ?     27.4068+-0.3287        ? might be 1.0163x slower
   sparse-conditional                                 1.7260+-0.0323     ?      1.7380+-0.0457        ?
   splice-to-remove                                  20.0354+-0.1000           19.9795+-0.1308        
   string-char-code-at                               21.7851+-0.2144           21.6015+-0.1216        
   string-concat-object                               2.8764+-0.1224     ?      2.9317+-0.1019        ? might be 1.0192x slower
   string-concat-pair-object                          2.8707+-0.1132     ?      2.9160+-0.1448        ? might be 1.0158x slower
   string-concat-pair-simple                         12.7625+-0.0641     ?     13.0876+-0.5591        ? might be 1.0255x slower
   string-concat-simple                              13.0988+-0.1735           12.9944+-0.0643        
   string-cons-repeat                                 9.4752+-0.2765     ?      9.5669+-0.4831        ?
   string-cons-tower                                  9.8091+-0.1315            9.7310+-0.1391        
   string-equality                                   27.2510+-0.2223           27.1876+-0.1806        
   string-from-char-code                             10.2584+-0.0460           10.2129+-0.0704        
   string-get-by-val-big-char                         9.8427+-0.2724            9.6994+-0.3224          might be 1.0148x faster
   string-get-by-val-out-of-bounds-insane             4.9914+-0.1829            4.9114+-0.0483          might be 1.0163x faster
   string-get-by-val-out-of-bounds                    6.6420+-0.0593            6.5940+-0.0567        
   string-get-by-val                                  4.1828+-0.0538     ?      4.2867+-0.1003        ? might be 1.0248x slower
   string-hash                                        2.7746+-0.0319     ?      2.8426+-0.1141        ? might be 1.0245x slower
   string-long-ident-equality                        22.1812+-0.2907     ?     22.3050+-0.1563        ?
   string-out-of-bounds                               9.9604+-0.0583            9.9579+-0.0530        
   string-repeat-arith                               38.2129+-11.6431          33.6110+-0.2549          might be 1.1369x faster
   string-rope-with-object                           23.9638+-0.1755     ?     24.0262+-0.1189        ?
   string-sub                                        54.4128+-0.2465     ?     54.6054+-0.0844        ?
   string-test                                        4.7462+-0.0381     ?      4.8120+-0.0982        ? might be 1.0139x slower
   string-var-equality                               43.1371+-0.6333           42.7549+-0.1945        
   structure-hoist-over-transitions                   3.3874+-0.0263            3.3687+-0.0577        
   substring-concat-weird                            55.0164+-0.3494           54.7564+-0.2089        
   substring-concat                                  60.0378+-0.5526     ?     61.2937+-2.1025        ? might be 1.0209x slower
   substring                                         67.8298+-0.0515     !     68.0756+-0.1271        ! definitely 1.0036x slower
   switch-char-constant                               4.0161+-0.0657            3.9457+-0.0321          might be 1.0179x faster
   switch-char                                        7.8608+-0.0771            7.8452+-0.0542        
   switch-constant                                    9.7530+-0.3011     ?      9.8802+-0.3644        ? might be 1.0130x slower
   switch-string-basic-big-var                       21.5758+-0.1122     ?     21.6736+-0.1823        ?
   switch-string-basic-big                           18.7775+-0.1564           18.7606+-0.2058        
   switch-string-basic-var                           21.3913+-0.1339     ?     21.4017+-0.2234        ?
   switch-string-basic                               17.1540+-0.1059     ?     17.2222+-0.1075        ?
   switch-string-big-length-tower-var                29.5555+-0.2345           29.4424+-0.1582        
   switch-string-length-tower-var                    21.2765+-0.1507           21.2358+-0.0935        
   switch-string-length-tower                        16.4341+-0.1114     ?     16.5332+-0.1548        ?
   switch-string-short                               16.5953+-0.2571           16.4867+-0.1566        
   switch                                            14.1568+-0.4887           14.0163+-1.0122          might be 1.0100x faster
   symbol-tostringtag                                 4.8847+-0.5879            4.6284+-0.0234          might be 1.0554x faster
   tear-off-arguments-simple                          3.5661+-0.0754     ?      3.8981+-0.7746        ? might be 1.0931x slower
   tear-off-arguments                                 4.8554+-0.0536            4.8251+-0.0971        
   temporal-structure                                18.0463+-0.2163     ^     17.6635+-0.1432        ^ definitely 1.0217x faster
   to-int32-boolean                                  20.7237+-0.0992     ?     20.8977+-0.2309        ?
   try-catch-get-by-val-cloned-arguments              9.3968+-0.2194     ?      9.9892+-0.4079        ? might be 1.0630x slower
   try-catch-get-by-val-direct-arguments              2.9506+-0.0744     ?      2.9631+-0.0840        ?
   try-catch-get-by-val-scoped-arguments              6.1166+-0.1185     ?      6.1982+-0.1491        ? might be 1.0133x slower
   typed-array-get-set-by-val-profiling              29.9327+-0.1569     ?     30.1447+-0.1995        ?
   undefined-property-access                        435.9730+-0.2449     ?    437.3591+-1.9004        ?
   undefined-test                                     5.0366+-0.0469            5.0291+-0.0438        
   unprofiled-licm                                    9.1922+-0.1477            9.1775+-0.2300        
   untyped-string-from-char-code                     16.3684+-0.2298     ?     16.4197+-0.3229        ?
   v8-raytrace-with-empty-try-catch                  75.0970+-0.6355     ?     77.3665+-2.3118        ? might be 1.0302x slower
   v8-raytrace-with-try-catch-high-frequency-throws   
                                                    580.7301+-3.2505     ?    582.5197+-4.6125        ?
   v8-raytrace-with-try-catch                        94.5211+-0.9413     ?     94.6595+-0.4332        ?
   v8-regexp-search                                  78.4705+-0.3415     ?     87.4689+-20.0549       ? might be 1.1147x slower
   varargs-call                                      18.4760+-0.0450           18.4552+-0.1062        
   varargs-construct-inline                          27.9250+-0.5593     ?     28.5342+-0.5965        ? might be 1.0218x slower
   varargs-construct                                 36.8081+-0.1368     ?     37.1172+-0.5674        ?
   varargs-inline                                    12.4366+-0.0578     ?     12.4807+-0.0863        ?
   varargs-strict-mode                               14.0750+-0.1488     ?     14.8805+-1.7868        ? might be 1.0572x slower
   varargs                                           14.4083+-1.1871           14.2198+-0.7897          might be 1.0133x faster
   weird-inlining-const-prop                          2.9881+-0.0553     ?      3.0102+-0.0745        ?

   <geometric>                                       12.3082+-0.0118           12.3025+-0.0318          might be 1.0005x faster

                                                            og                   proxyChange                                    
AsmBench:
   bigfib.cpp                                       656.3740+-9.9477     ?    661.2441+-10.4875       ?
   cray.c                                           561.7526+-0.9358     ?    561.8357+-1.3565        ?
   dry.c                                            699.0316+-75.1415    ?    708.3568+-76.2570       ? might be 1.0133x slower
   FloatMM.c                                       1102.5650+-7.5409         1101.4511+-6.6142        
   gcc-loops.cpp                                   5536.2467+-7.3613     ?   5550.9092+-13.0143       ?
   n-body.c                                        1245.2029+-2.0641     ?   1246.5170+-3.9409        ?
   Quicksort.c                                      617.1970+-4.5458     ?    617.3183+-4.5441        ?
   stepanov_container.cpp                          5162.4799+-52.0534        5143.1206+-24.4504       
   Towers.c                                         413.6564+-1.1582          412.7647+-0.7648        

   <geometric>                                     1110.3760+-11.7796    ?   1112.5813+-15.2551       ? might be 1.0020x slower

                                                            og                   proxyChange                                    
CompressionBench:
   huffman                                           44.2266+-0.6327           44.1172+-0.2114        
   arithmetic-simple                                407.7043+-10.5615         403.3882+-1.2796          might be 1.0107x faster
   arithmetic-precise                               374.8503+-0.8862     ?    376.9473+-2.3662        ?
   arithmetic-complex-precise                       377.2675+-1.9009     ?    380.9084+-2.2982        ?
   arithmetic-precise-order-0                       408.4185+-1.2078     ?    408.5169+-0.7248        ?
   arithmetic-precise-order-1                       459.4550+-1.5960     ?    462.4607+-1.6116        ?
   arithmetic-precise-order-2                       528.0421+-2.7235     ?    529.2390+-3.0640        ?
   arithmetic-simple-order-1                        473.9734+-2.2016     ?    476.3744+-1.7762        ?
   arithmetic-simple-order-2                        549.1588+-4.3257     ?    552.4953+-3.6972        ?
   lz-string                                        493.1142+-6.5482          491.6933+-10.1734       

   <geometric>                                      355.6859+-1.2905     ?    356.3841+-0.8571        ? might be 1.0020x slower

                                                            og                   proxyChange                                    
Geomean of preferred means:
   <scaled-result>                                   73.3035+-0.2457           73.2189+-0.1492          might be 1.0012x faster
Comment 12 Saam Barati 2016-02-25 13:29:16 PST
Dynbench results:

3 runs of baseline version:
Non Strict Dynamic Get By Id: 25.459114 ms.
Non Strict Dynamic Put By Id Replace: 57.614040 ms.
Non Strict Dynamic Allocation and Put By Id Transition: 105.483635 ms.
Non Strict Dynamic Get By Id With Dynamic Store Context: 20.167006 ms.
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: 37.867042 ms.
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: 84.399685 ms.
~/WK/a/OpenSource $ DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/dynbench 
Non Strict Dynamic Get By Id: 21.886131 ms.
Non Strict Dynamic Put By Id Replace: 66.505328 ms.
Non Strict Dynamic Allocation and Put By Id Transition: 107.604908 ms.
Non Strict Dynamic Get By Id With Dynamic Store Context: 20.194181 ms.
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: 33.599729 ms.
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: 87.153118 ms.
~/WK/a/OpenSource $ DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/dynbench 
Non Strict Dynamic Get By Id: 20.796533 ms.
Non Strict Dynamic Put By Id Replace: 58.799648 ms.
Non Strict Dynamic Allocation and Put By Id Transition: 107.189133 ms.
Non Strict Dynamic Get By Id With Dynamic Store Context: 20.269449 ms.
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: 33.956090 ms.
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: 82.797676 ms.


3 runs of proxy changes:
Non Strict Dynamic Get By Id: 21.082398 ms.
Non Strict Dynamic Put By Id Replace: 59.691301 ms.
Non Strict Dynamic Allocation and Put By Id Transition: 105.253568 ms.
Non Strict Dynamic Get By Id With Dynamic Store Context: 20.553612 ms.
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: 35.185132 ms.
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: 82.790028 ms.
~/WK/b/OpenSource $ DYLD_FRAMEWORK_PATH=./WebKitBuild/Release/ ./WebKitBuild/Release/dynbench 
Non Strict Dynamic Get By Id: 21.738562 ms.
Non Strict Dynamic Put By Id Replace: 58.487482 ms.
Non Strict Dynamic Allocation and Put By Id Transition: 105.037340 ms.
Non Strict Dynamic Get By Id With Dynamic Store Context: 20.408665 ms.
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: 35.811473 ms.
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: 90.754568 ms.
~/WK/b/OpenSource $ DYLD_FRAMEWORK_PATH=./WebKitBuild/Release/ ./WebKitBuild/Release/dynbench 
Non Strict Dynamic Get By Id: 21.018869 ms.
Non Strict Dynamic Put By Id Replace: 57.060267 ms.
Non Strict Dynamic Allocation and Put By Id Transition: 105.995514 ms.
Non Strict Dynamic Get By Id With Dynamic Store Context: 20.414194 ms.
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: 35.766752 ms.
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: 83.488039 ms.
Comment 13 Saam Barati 2016-02-25 14:58:55 PST
landed in:
http://trac.webkit.org/changeset/197136