RESOLVED FIXED Bug 154511
[ES6] Implement Proxy.[[Set]]
https://bugs.webkit.org/show_bug.cgi?id=154511
Summary [ES6] Implement Proxy.[[Set]]
Saam Barati
Reported 2016-02-21 00:31:07 PST
...
Attachments
RFC WIP (29.71 KB, patch)
2016-02-22 19:29 PST, Saam Barati
no flags
RFC WIP (29.71 KB, patch)
2016-02-22 19:30 PST, Saam Barati
no flags
patch (31.79 KB, patch)
2016-02-23 15:01 PST, Saam Barati
fpizlo: review+
Saam Barati
Comment 1 2016-02-22 19:29:17 PST
Saam Barati
Comment 2 2016-02-22 19:30:28 PST
Saam Barati
Comment 3 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.
Oliver Hunt
Comment 4 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)) { ... }
Filip Pizlo
Comment 5 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.
Saam Barati
Comment 6 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; } ```
Saam Barati
Comment 7 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) ```
Saam Barati
Comment 8 2016-02-23 15:01:56 PST
WebKit Commit Bot
Comment 9 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.
Filip Pizlo
Comment 10 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.
Saam Barati
Comment 11 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
Saam Barati
Comment 12 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.
Saam Barati
Comment 13 2016-02-25 14:58:55 PST
Note You need to log in before you can comment on or make changes to this bug.