RESOLVED FIXED 152347
Improve JSObject::put performance
https://bugs.webkit.org/show_bug.cgi?id=152347
Summary Improve JSObject::put performance
Filip Pizlo
Reported 2015-12-16 11:11:47 PST
The JSObject::put code used to be fast, and then we made it slow by incrementally adding stuff to it, like hooks for immutability inference and property type inference. This bug is about recovering some of that lost performance.
Attachments
the patch (50.44 KB, patch)
2015-12-16 11:15 PST, Filip Pizlo
no flags
the patch (49.62 KB, patch)
2015-12-16 11:17 PST, Filip Pizlo
ggaren: review+
patch for landing (47.56 KB, patch)
2015-12-16 12:50 PST, Filip Pizlo
no flags
patch for landing (48.03 KB, patch)
2015-12-16 13:07 PST, Filip Pizlo
no flags
one more time! (48.81 KB, patch)
2015-12-16 13:13 PST, Filip Pizlo
no flags
Filip Pizlo
Comment 1 2015-12-16 11:15:15 PST
Created attachment 267473 [details] the patch
Filip Pizlo
Comment 2 2015-12-16 11:16:48 PST
Comment on attachment 267473 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=267473&action=review > Source/JavaScriptCore/dfg/DFGUnificationPhase.cpp:63 > - > - phi->children.child(childIdx)->variableAccessData()->unify(phi->variableAccessData()); > + > + phi->variableAccessData()->unify(phi->children.child(childIdx)->variableAccessData()); This will go away after rebasing.
Filip Pizlo
Comment 3 2015-12-16 11:17:57 PST
Created attachment 267475 [details] the patch
Filip Pizlo
Comment 4 2015-12-16 11:19:45 PST
There's no real improvement on JS benchmarks, though it is an improvement on dynbench. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3). VMs tested: "TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r194112) "FastDyn" at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r194112) Collected 7 samples per benchmark/VM, with 7 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. TipOfTree FastDyn SunSpider: 3d-cube 4.8062+-0.2261 4.7676+-0.2795 3d-morph 5.4520+-0.2068 ? 5.5819+-0.2702 ? might be 1.0238x slower 3d-raytrace 5.3260+-0.0714 ? 5.3624+-0.0917 ? access-binary-trees 2.2604+-0.1684 2.2272+-0.0889 might be 1.0149x faster access-fannkuch 5.8504+-0.1034 ? 5.9780+-0.4266 ? might be 1.0218x slower access-nbody 2.7314+-0.4145 2.5905+-0.0879 might be 1.0544x faster access-nsieve 3.4799+-0.0697 ? 3.5633+-0.1435 ? might be 1.0240x slower bitops-3bit-bits-in-byte 1.2166+-0.0661 1.1838+-0.0352 might be 1.0277x faster bitops-bits-in-byte 3.1660+-0.0726 ? 3.2013+-0.0615 ? might be 1.0111x slower bitops-bitwise-and 2.0880+-0.1416 2.0553+-0.0640 might be 1.0159x faster bitops-nsieve-bits 3.0582+-0.0579 ? 3.0795+-0.1096 ? controlflow-recursive 2.4509+-0.0811 2.3843+-0.0628 might be 1.0279x faster crypto-aes 4.1283+-0.1386 ? 4.2589+-0.2740 ? might be 1.0316x slower crypto-md5 2.5492+-0.0910 ? 2.6425+-0.2071 ? might be 1.0366x slower crypto-sha1 2.5662+-0.2266 ? 2.7400+-0.3582 ? might be 1.0677x slower date-format-tofte 7.2140+-0.3809 ? 7.2671+-0.3132 ? date-format-xparb 4.8650+-0.3614 4.6654+-0.0397 might be 1.0428x faster math-cordic 2.9746+-0.1056 2.9613+-0.0848 math-partial-sums 4.9702+-0.1396 4.9037+-0.2236 might be 1.0136x faster math-spectral-norm 1.9683+-0.0295 ? 1.9829+-0.0183 ? regexp-dna 6.2741+-0.4020 6.1270+-0.2110 might be 1.0240x faster string-base64 4.3263+-0.2587 4.3100+-0.1055 string-fasta 5.8998+-0.2212 5.8074+-0.1070 might be 1.0159x faster string-tagcloud 8.0880+-0.3777 ? 8.2385+-0.4568 ? might be 1.0186x slower string-unpack-code 18.5733+-0.9530 18.4810+-0.6218 string-validate-input 4.2980+-0.2151 4.2140+-0.0677 might be 1.0199x faster <arithmetic> 4.6377+-0.0507 4.6375+-0.0379 might be 1.0001x faster TipOfTree FastDyn LongSpider: 3d-cube 811.1832+-3.7705 ! 828.4631+-4.2653 ! definitely 1.0213x slower 3d-morph 1505.4361+-13.2534 1504.1077+-18.6474 3d-raytrace 610.5899+-14.4316 ? 611.2495+-7.4107 ? access-binary-trees 793.4760+-3.4673 ? 796.5321+-10.9711 ? access-fannkuch 299.0790+-6.3427 296.0164+-3.0650 might be 1.0103x faster access-nbody 516.2148+-4.7166 511.0889+-3.0352 might be 1.0100x faster access-nsieve 384.0373+-10.7023 376.1438+-9.0207 might be 1.0210x faster bitops-3bit-bits-in-byte 34.8303+-1.4462 34.1868+-1.0368 might be 1.0188x faster bitops-bits-in-byte 91.2872+-5.7748 ? 94.5846+-1.8974 ? might be 1.0361x slower bitops-nsieve-bits 404.3275+-4.1608 403.7714+-6.6485 controlflow-recursive 452.2962+-5.7365 448.6312+-4.1281 crypto-aes 561.3986+-5.1278 ? 562.9038+-7.5903 ? crypto-md5 552.6064+-5.5698 ? 554.9961+-5.2938 ? crypto-sha1 666.0371+-7.3508 ? 668.7074+-10.0379 ? date-format-tofte 554.4112+-13.8950 549.5686+-8.9596 date-format-xparb 653.6119+-13.4359 ? 687.4691+-93.7482 ? might be 1.0518x slower hash-map 151.8223+-2.4795 ? 155.7837+-2.5639 ? might be 1.0261x slower math-cordic 485.3815+-4.8623 ? 488.0196+-5.6387 ? math-partial-sums 466.2560+-2.7411 ^ 458.5137+-2.0950 ^ definitely 1.0169x faster math-spectral-norm 550.6015+-3.3905 ? 551.4488+-4.1872 ? string-base64 380.5418+-6.2917 375.0042+-7.1368 might be 1.0148x faster string-fasta 359.4338+-2.8657 ? 361.2347+-7.4759 ? string-tagcloud 176.5131+-2.3265 174.4681+-1.8429 might be 1.0117x faster <geometric> 399.7619+-2.0639 ? 400.3494+-2.5646 ? might be 1.0015x slower TipOfTree FastDyn V8Spider: crypto 50.0931+-1.8196 ? 51.2071+-1.8449 ? might be 1.0222x slower deltablue 77.7564+-2.8303 77.2987+-2.7958 earley-boyer 41.9518+-1.4075 ? 43.1828+-1.4786 ? might be 1.0293x slower raytrace 30.1456+-1.3002 ? 30.8414+-1.5381 ? might be 1.0231x slower regexp 62.9191+-1.2311 62.7930+-2.2814 richards 52.3614+-0.9243 51.3997+-1.7509 might be 1.0187x faster splay 37.8675+-1.3211 ? 38.3548+-1.3392 ? might be 1.0129x slower <geometric> 48.2891+-0.1818 ? 48.6981+-0.4325 ? might be 1.0085x slower TipOfTree FastDyn Octane: encrypt 0.15892+-0.00442 0.15615+-0.00076 might be 1.0177x faster decrypt 2.85672+-0.01276 ? 2.86967+-0.02125 ? deltablue x2 0.14106+-0.00604 0.13863+-0.00121 might be 1.0175x faster earley 0.28603+-0.00549 0.28245+-0.00245 might be 1.0127x faster boyer 4.35769+-0.13401 ? 4.40072+-0.14975 ? navier-stokes x2 4.84630+-0.02393 4.83823+-0.02869 raytrace x2 0.85385+-0.00549 0.85248+-0.00562 richards x2 0.08789+-0.00115 0.08742+-0.00077 splay x2 0.34617+-0.00272 ? 0.35227+-0.00724 ? might be 1.0176x slower regexp x2 24.96795+-0.56853 24.70541+-0.40982 might be 1.0106x faster pdfjs x2 37.23461+-0.25518 37.10589+-0.09419 mandreel x2 42.82896+-0.74135 42.67242+-0.47356 gbemu x2 31.32761+-3.42886 29.99639+-1.67174 might be 1.0444x faster closure 0.59343+-0.00764 0.58443+-0.00414 might be 1.0154x faster jquery 7.51379+-0.06606 7.40873+-0.05210 might be 1.0142x faster box2d x2 9.22881+-0.07709 9.12857+-0.08669 might be 1.0110x faster zlib x2 386.03731+-14.91993 ? 389.39022+-4.71129 ? typescript x2 675.31459+-4.47539 ? 682.24139+-6.00110 ? might be 1.0103x slower <geometric> 5.34913+-0.04574 5.32111+-0.01827 might be 1.0053x faster TipOfTree FastDyn Kraken: ai-astar 127.062+-1.014 ? 127.731+-1.140 ? audio-beat-detection 49.636+-0.464 49.245+-0.377 audio-dft 96.339+-2.231 ? 96.965+-2.860 ? audio-fft 35.365+-0.728 35.074+-0.540 audio-oscillator 58.136+-0.970 57.770+-0.952 imaging-darkroom 60.127+-0.528 60.078+-0.538 imaging-desaturate 49.163+-2.099 48.525+-0.541 might be 1.0131x faster imaging-gaussian-blur 87.224+-1.089 ? 87.443+-1.067 ? json-parse-financial 39.680+-2.193 38.058+-1.756 might be 1.0426x faster json-stringify-tinderbox 23.564+-1.942 23.541+-0.874 stanford-crypto-aes 43.632+-1.056 ? 44.134+-1.792 ? might be 1.0115x slower stanford-crypto-ccm 38.344+-1.266 36.652+-1.393 might be 1.0462x faster stanford-crypto-pbkdf2 97.123+-0.680 ? 97.506+-1.198 ? stanford-crypto-sha256-iterative 37.923+-1.223 37.887+-1.113 <arithmetic> 60.237+-0.400 60.044+-0.383 might be 1.0032x faster TipOfTree FastDyn JSRegress: abc-forward-loop-equal 30.3678+-0.9492 ? 30.8469+-1.0817 ? might be 1.0158x slower abc-postfix-backward-loop 29.8835+-0.6997 ? 30.5970+-0.9346 ? might be 1.0239x slower abc-simple-backward-loop 30.1996+-1.7415 ? 30.4675+-0.7587 ? abc-simple-forward-loop 29.8619+-0.8809 ? 30.1140+-1.1832 ? abc-skippy-loop 21.6897+-0.5679 ? 23.7615+-5.2538 ? might be 1.0955x slower abs-boolean 2.4729+-0.0360 ? 2.5356+-0.1167 ? might be 1.0254x slower adapt-to-double-divide 16.8593+-0.7659 16.4355+-0.3344 might be 1.0258x faster aliased-arguments-getbyval 1.2899+-0.1509 1.2281+-0.0618 might be 1.0504x faster allocate-big-object 2.6586+-0.2575 2.5814+-0.0585 might be 1.0299x faster arguments-named-and-reflective 10.7203+-0.3251 10.5201+-0.2972 might be 1.0190x faster arguments-out-of-bounds 9.4038+-0.5425 ? 9.4167+-0.2575 ? arguments-strict-mode 9.9556+-0.4220 ? 10.0450+-0.6914 ? arguments 8.5806+-0.2282 ? 8.6060+-0.4281 ? arity-mismatch-inlining 0.9358+-0.0548 0.8800+-0.0204 might be 1.0635x faster array-access-polymorphic-structure 8.4841+-0.5298 8.4053+-0.1742 array-nonarray-polymorhpic-access 25.1267+-0.6771 ? 25.3320+-0.9567 ? array-prototype-every 76.2497+-2.2771 ? 76.2667+-1.3007 ? array-prototype-forEach 74.7102+-1.0581 ? 76.3437+-1.1671 ? might be 1.0219x slower array-prototype-map 83.4722+-2.5562 ? 83.9098+-0.8453 ? array-prototype-reduce 73.6844+-1.0730 73.1017+-0.9279 array-prototype-reduceRight 73.3012+-1.3804 71.6880+-0.8729 might be 1.0225x faster array-prototype-some 77.3660+-1.2181 76.2775+-1.0380 might be 1.0143x faster array-splice-contiguous 23.7749+-0.8498 ? 25.0578+-1.2410 ? might be 1.0540x slower array-with-double-add 3.5936+-0.1049 ? 3.6819+-0.2045 ? might be 1.0246x slower array-with-double-increment 3.3785+-0.2916 ? 3.4098+-0.4074 ? array-with-double-mul-add 4.6214+-0.4204 4.4942+-0.0974 might be 1.0283x faster array-with-double-sum 3.2203+-0.0638 3.2147+-0.0466 array-with-int32-add-sub 6.2881+-0.1715 6.2648+-0.0377 array-with-int32-or-double-sum 3.2889+-0.0458 3.2844+-0.0712 ArrayBuffer-DataView-alloc-large-long-lived 26.0995+-1.2601 ? 26.1315+-1.1334 ? ArrayBuffer-DataView-alloc-long-lived 12.1874+-0.2475 ? 12.3070+-0.3088 ? ArrayBuffer-Int32Array-byteOffset 3.7124+-0.3358 3.5521+-0.0482 might be 1.0451x faster ArrayBuffer-Int8Array-alloc-large-long-lived 27.1693+-1.2032 26.0552+-0.2642 might be 1.0428x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 19.9900+-1.1414 19.8054+-0.8164 ArrayBuffer-Int8Array-alloc-long-lived 11.7475+-0.4018 11.3693+-0.4867 might be 1.0333x faster ArrayBuffer-Int8Array-alloc 9.8566+-0.5481 ? 9.9472+-0.5726 ? arrowfunction-call 11.1985+-0.2350 11.1672+-0.3340 asmjs_bool_bug 7.6768+-0.5224 ? 7.7191+-0.3339 ? assign-custom-setter-polymorphic 2.3007+-0.0237 ? 2.3888+-0.1358 ? might be 1.0383x slower assign-custom-setter 3.4603+-0.0851 ? 3.5687+-0.2818 ? might be 1.0313x slower basic-set 7.6051+-0.3719 ? 7.8968+-0.4935 ? might be 1.0384x slower big-int-mul 3.5455+-0.0806 3.4766+-0.0621 might be 1.0198x faster boolean-test 3.0333+-0.0570 3.0110+-0.0844 branch-fold 3.6310+-0.0678 3.6290+-0.0727 branch-on-string-as-boolean 17.5343+-1.0241 17.3147+-0.6040 might be 1.0127x faster by-val-generic 2.5310+-0.0763 ? 2.5764+-0.1063 ? might be 1.0179x slower call-spread-apply 29.0187+-0.9016 ? 29.4459+-1.5344 ? might be 1.0147x slower call-spread-call 24.5324+-1.0217 22.9454+-0.7867 might be 1.0692x faster captured-assignments 0.4764+-0.0446 0.4583+-0.0151 might be 1.0397x faster cast-int-to-double 5.1061+-0.0361 ? 5.2046+-0.0951 ? might be 1.0193x slower cell-argument 6.0658+-0.4862 5.9245+-0.3843 might be 1.0239x faster cfg-simplify 2.9173+-0.0489 ? 3.1144+-0.2876 ? might be 1.0676x slower chain-getter-access 8.4330+-0.2813 8.3526+-0.2818 cmpeq-obj-to-obj-other 12.0871+-0.7763 ? 12.8947+-1.3523 ? might be 1.0668x slower constant-test 4.8448+-0.1002 ? 4.8789+-0.1095 ? create-lots-of-functions 9.6406+-0.4650 ? 9.7011+-0.6497 ? cse-new-array-buffer 2.3614+-0.0520 ? 2.4289+-0.0856 ? might be 1.0286x slower cse-new-array 2.4915+-0.0798 ? 2.5342+-0.0753 ? might be 1.0171x slower custom-setter-getter-as-put-get-by-id 0.5221+-0.0187 ? 0.5455+-0.0357 ? might be 1.0449x slower DataView-custom-properties 31.9896+-1.2251 31.7383+-0.9300 delay-tear-off-arguments-strictmode 13.5119+-0.5894 13.1191+-0.3344 might be 1.0299x faster deltablue-varargs 165.0703+-2.7391 163.7434+-1.4131 destructuring-arguments 162.7003+-1.2325 ^ 157.0008+-1.7634 ^ definitely 1.0363x faster destructuring-parameters-overridden-by-function 0.5126+-0.0382 0.4835+-0.0162 might be 1.0600x faster destructuring-swap 4.8450+-0.1013 ? 4.9281+-0.1594 ? might be 1.0172x slower direct-arguments-getbyval 1.2267+-0.0854 ? 1.2926+-0.1168 ? might be 1.0536x slower div-boolean-double 5.3580+-0.2529 5.2891+-0.0741 might be 1.0130x faster div-boolean 8.0981+-0.0328 ? 8.2447+-0.3356 ? might be 1.0181x slower double-get-by-val-out-of-bounds 4.6477+-0.2300 4.4949+-0.1400 might be 1.0340x faster double-pollution-getbyval 8.4729+-0.2302 8.3462+-0.0627 might be 1.0152x faster double-pollution-putbyoffset 3.7072+-0.0984 ? 3.8385+-0.2256 ? might be 1.0354x slower double-real-use 24.5242+-0.6690 ? 25.0744+-0.7946 ? might be 1.0224x slower double-to-int32-typed-array-no-inline 2.2827+-0.0951 ? 2.4432+-0.3064 ? might be 1.0703x slower double-to-int32-typed-array 2.2216+-0.2101 2.0852+-0.0526 might be 1.0654x faster double-to-uint32-typed-array-no-inline 2.4415+-0.1511 2.3790+-0.1479 might be 1.0262x faster double-to-uint32-typed-array 2.1309+-0.1003 ? 2.2210+-0.3509 ? might be 1.0423x slower elidable-new-object-dag 35.8098+-1.0152 34.2377+-0.7552 might be 1.0459x faster elidable-new-object-roflcopter 33.7351+-1.5415 33.3510+-2.1961 might be 1.0115x faster elidable-new-object-then-call 32.5748+-2.1756 32.1326+-0.8997 might be 1.0138x faster elidable-new-object-tree 38.4101+-0.8758 37.6004+-0.4345 might be 1.0215x faster empty-string-plus-int 4.7767+-0.0812 ? 4.8769+-0.2843 ? might be 1.0210x slower emscripten-cube2hash 27.1675+-1.1637 ? 27.3705+-1.3202 ? exit-length-on-plain-object 18.2179+-0.9233 ? 18.3368+-0.6717 ? external-arguments-getbyval 1.2479+-0.0684 1.2303+-0.0648 might be 1.0143x faster external-arguments-putbyval 2.3814+-0.1843 2.3045+-0.1686 might be 1.0334x faster fixed-typed-array-storage-var-index 1.2811+-0.0756 1.2557+-0.0518 might be 1.0202x faster fixed-typed-array-storage 1.0582+-0.1747 0.9805+-0.0727 might be 1.0792x faster Float32Array-matrix-mult 4.5790+-0.2868 ? 4.7449+-0.4833 ? might be 1.0362x slower Float32Array-to-Float64Array-set 50.3901+-1.0642 49.3495+-0.8127 might be 1.0211x faster Float64Array-alloc-long-lived 60.9659+-2.1066 ? 61.0994+-1.5003 ? Float64Array-to-Int16Array-set 62.7219+-2.7604 60.3827+-0.7521 might be 1.0387x faster fold-double-to-int 12.7301+-0.5920 12.3301+-0.1298 might be 1.0324x faster fold-get-by-id-to-multi-get-by-offset-rare-int 11.2350+-1.1016 10.9343+-0.8905 might be 1.0275x faster fold-get-by-id-to-multi-get-by-offset 10.4511+-1.0588 10.2013+-1.2393 might be 1.0245x faster fold-multi-get-by-offset-to-get-by-offset 8.6358+-2.0718 7.9908+-1.6846 might be 1.0807x faster fold-multi-get-by-offset-to-poly-get-by-offset 8.2134+-1.7549 ? 8.6477+-1.4992 ? might be 1.0529x slower fold-multi-put-by-offset-to-poly-put-by-offset 9.6757+-2.0741 ? 10.3277+-1.0001 ? might be 1.0674x slower fold-multi-put-by-offset-to-put-by-offset 11.2099+-1.1816 10.7230+-1.3517 might be 1.0454x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 10.1861+-1.1502 ? 10.1878+-0.7855 ? fold-put-by-id-to-multi-put-by-offset 10.3698+-0.9990 ? 11.2558+-2.1708 ? might be 1.0854x slower fold-put-by-val-with-string-to-multi-put-by-offset 10.7600+-0.8686 9.9324+-0.7322 might be 1.0833x faster fold-put-by-val-with-symbol-to-multi-put-by-offset 10.5267+-1.5649 10.5249+-0.9831 fold-put-structure 8.1187+-0.6804 ? 8.7016+-2.2906 ? might be 1.0718x slower for-of-iterate-array-entries 11.2221+-0.2509 10.7841+-0.4220 might be 1.0406x faster for-of-iterate-array-keys 3.8861+-0.2053 ? 3.9280+-0.2628 ? might be 1.0108x slower for-of-iterate-array-values 3.5921+-0.3735 ? 3.6300+-0.2358 ? might be 1.0105x slower fround 18.0648+-0.9057 ? 18.6393+-0.5985 ? might be 1.0318x slower ftl-library-inlining-dataview 58.2903+-0.5542 57.3994+-1.6747 might be 1.0155x faster ftl-library-inlining 18.0017+-1.1066 17.3217+-0.8754 might be 1.0393x faster ftl-polymorphic-div 211.1903+-2.9375 ? 211.7982+-1.5733 ? ftl-polymorphic-mul 236.7826+-2.4343 ? 239.0426+-7.9104 ? ftl-polymorphic-sub 312.5896+-1.2389 312.3924+-2.3536 function-call 11.2376+-0.5674 10.9495+-0.1929 might be 1.0263x faster function-dot-apply 2.1186+-0.1476 2.0889+-0.0264 might be 1.0142x faster function-test 2.8504+-0.1418 2.7290+-0.0323 might be 1.0445x faster function-with-eval 85.1210+-1.6192 ? 87.1676+-2.5999 ? might be 1.0240x slower gcse-poly-get-less-obvious 21.6294+-0.5545 21.6269+-0.6661 gcse-poly-get 21.7802+-0.3703 ? 22.1680+-0.8593 ? might be 1.0178x slower gcse 3.4472+-0.0869 ? 3.4900+-0.1540 ? might be 1.0124x slower generator-create 0.8300+-0.0768 0.7836+-0.0499 might be 1.0593x faster generator-fib 100.4296+-2.0298 ? 100.6447+-4.1837 ? generator-function-create 0.8300+-0.2270 0.7402+-0.0388 might be 1.1214x faster generator-sunspider-access-nsieve 5.6612+-0.1500 ? 5.6693+-0.2305 ? generator-with-several-types 309.5152+-8.1015 307.4637+-4.7430 get-by-id-bimorphic-check-structure-elimination-simple 2.7129+-0.1133 2.6226+-0.0570 might be 1.0344x faster get-by-id-bimorphic-check-structure-elimination 4.7353+-0.0819 4.7286+-0.0954 get-by-id-chain-from-try-block 2.6252+-0.0621 2.6201+-0.0371 get-by-id-check-structure-elimination 4.1045+-0.4231 3.9767+-0.0608 might be 1.0321x faster get-by-id-proto-or-self 16.7927+-1.5234 16.5284+-0.8310 might be 1.0160x faster get-by-id-quadmorphic-check-structure-elimination-simple 2.8888+-0.0397 ? 2.9438+-0.2370 ? might be 1.0191x slower get-by-id-self-or-proto 16.7908+-1.4315 ? 16.8544+-1.2461 ? get-by-val-out-of-bounds 4.4285+-0.1943 ? 4.4360+-0.2639 ? get-by-val-with-string-bimorphic-check-structure-elimination-simple 2.7797+-0.0907 2.7219+-0.0176 might be 1.0212x faster get-by-val-with-string-bimorphic-check-structure-elimination 6.1723+-0.2353 ? 6.1827+-0.4270 ? get-by-val-with-string-chain-from-try-block 2.7337+-0.1310 2.6314+-0.0329 might be 1.0389x faster get-by-val-with-string-check-structure-elimination 5.6674+-0.1534 5.6397+-0.1474 get-by-val-with-string-proto-or-self 17.2842+-1.5714 17.0560+-0.7476 might be 1.0134x faster get-by-val-with-string-quadmorphic-check-structure-elimination-simple 3.0865+-0.0575 3.0818+-0.0656 get-by-val-with-string-self-or-proto 16.1474+-0.7283 ? 16.5557+-0.7376 ? might be 1.0253x slower get-by-val-with-symbol-bimorphic-check-structure-elimination-simple 3.1770+-0.0850 ? 3.2131+-0.0658 ? might be 1.0114x slower get-by-val-with-symbol-bimorphic-check-structure-elimination 12.3881+-0.0832 ? 12.7693+-0.4764 ? might be 1.0308x slower get-by-val-with-symbol-chain-from-try-block 2.6944+-0.0840 ? 2.7632+-0.2064 ? might be 1.0256x slower get-by-val-with-symbol-check-structure-elimination 11.4956+-0.2595 ? 11.5584+-0.1880 ? get-by-val-with-symbol-proto-or-self 17.3272+-1.1096 16.7583+-1.3619 might be 1.0340x faster get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple 3.6763+-0.0099 ? 3.7283+-0.0887 ? might be 1.0142x slower get-by-val-with-symbol-self-or-proto 16.7326+-0.8501 16.5689+-0.8153 get_callee_monomorphic 2.5751+-0.2417 ? 2.7686+-0.2735 ? might be 1.0751x slower get_callee_polymorphic 3.6323+-0.1593 ? 3.6856+-0.2546 ? might be 1.0147x slower getter-no-activation 5.0370+-0.5392 ? 5.1874+-0.8372 ? might be 1.0299x slower getter-prototype 8.1386+-0.4838 ? 8.3270+-0.7917 ? might be 1.0231x slower getter-richards-try-catch 990.6144+-14.0252 ? 993.9612+-14.1654 ? getter-richards 125.3737+-22.6863 114.9616+-5.1629 might be 1.0906x faster getter 5.8913+-0.8444 5.7627+-0.7553 might be 1.0223x faster global-object-access-with-mutating-structure 5.9324+-0.3212 5.6406+-0.1730 might be 1.0517x faster global-var-const-infer-fire-from-opt 0.7453+-0.0530 ? 0.8030+-0.1821 ? might be 1.0774x slower global-var-const-infer 0.6402+-0.0193 ? 0.6435+-0.0252 ? hard-overflow-check-equal 26.8173+-0.8812 ? 27.2498+-0.5897 ? might be 1.0161x slower hard-overflow-check 27.1974+-1.2840 26.8636+-0.8529 might be 1.0124x faster HashMap-put-get-iterate-keys 26.6273+-2.4773 ? 27.3704+-1.7698 ? might be 1.0279x slower HashMap-put-get-iterate 28.6505+-0.4044 28.3879+-1.7276 HashMap-string-put-get-iterate 24.7798+-1.9988 24.7229+-1.0515 hoist-make-rope 8.6926+-0.6866 ? 9.1154+-0.5983 ? might be 1.0486x slower hoist-poly-check-structure-effectful-loop 3.7832+-0.1933 ? 3.7859+-0.2515 ? hoist-poly-check-structure 3.1440+-0.0859 ? 3.2017+-0.0895 ? might be 1.0184x slower imul-double-only 7.6722+-0.3187 7.6594+-0.4216 imul-int-only 8.6572+-1.1333 ? 8.8630+-1.3790 ? might be 1.0238x slower imul-mixed 7.1301+-0.6902 6.9879+-0.6372 might be 1.0204x faster in-four-cases 18.8048+-0.6975 18.4901+-0.2840 might be 1.0170x faster in-one-case-false 10.6331+-0.5864 10.3153+-0.3046 might be 1.0308x faster in-one-case-true 10.3799+-0.4380 10.2549+-0.2928 might be 1.0122x faster in-two-cases 10.5691+-0.2193 ? 10.7924+-0.5743 ? might be 1.0211x slower indexed-properties-in-objects 2.8371+-0.0515 2.8303+-0.0810 infer-closure-const-then-mov-no-inline 3.6836+-0.0757 3.6400+-0.1176 might be 1.0120x faster infer-closure-const-then-mov 16.2108+-0.4772 ? 16.4072+-0.1992 ? might be 1.0121x slower infer-closure-const-then-put-to-scope-no-inline 11.0898+-0.3419 10.9410+-0.2992 might be 1.0136x faster infer-closure-const-then-put-to-scope 23.1510+-0.5746 22.7375+-0.9793 might be 1.0182x faster infer-closure-const-then-reenter-no-inline 46.7696+-1.6995 45.7586+-1.5770 might be 1.0221x faster infer-closure-const-then-reenter 23.5065+-0.7885 23.4614+-0.2335 infer-constant-global-property 3.6318+-0.2888 3.5029+-0.1554 might be 1.0368x faster infer-constant-property 2.7313+-0.1585 2.6191+-0.0408 might be 1.0428x faster infer-one-time-closure-ten-vars 8.0223+-0.5464 7.7778+-0.4264 might be 1.0314x faster infer-one-time-closure-two-vars 7.5074+-0.5435 ? 7.6341+-0.4072 ? might be 1.0169x slower infer-one-time-closure 7.2864+-0.1241 ! 8.1156+-0.6913 ! definitely 1.1138x slower infer-one-time-deep-closure 10.8826+-0.3530 ? 11.0083+-0.3341 ? might be 1.0116x slower inline-arguments-access 3.9367+-0.3641 3.7952+-0.2933 might be 1.0373x faster inline-arguments-aliased-access 3.8150+-0.2379 ? 3.8318+-0.3102 ? inline-arguments-local-escape 3.9107+-0.3002 ? 4.1896+-0.5934 ? might be 1.0713x slower inline-get-scoped-var 4.5689+-0.1568 ? 4.6273+-0.1131 ? might be 1.0128x slower inlined-put-by-id-transition 10.4813+-1.0530 10.3165+-0.5119 might be 1.0160x faster inlined-put-by-val-with-string-transition 44.3980+-1.3479 ? 45.7768+-2.1086 ? might be 1.0311x slower inlined-put-by-val-with-symbol-transition 43.6133+-1.2236 ? 44.0684+-1.2127 ? might be 1.0104x slower int-or-other-abs-then-get-by-val 4.5763+-0.1591 ? 4.5836+-0.1111 ? int-or-other-abs-zero-then-get-by-val 15.9208+-0.5030 ? 16.1219+-1.1718 ? might be 1.0126x slower int-or-other-add-then-get-by-val 4.2619+-0.1037 4.2243+-0.0401 int-or-other-add 5.3857+-0.9832 5.1174+-0.2958 might be 1.0524x faster int-or-other-div-then-get-by-val 3.8485+-0.0869 ? 3.8984+-0.1085 ? might be 1.0130x slower int-or-other-max-then-get-by-val 3.8648+-0.1261 ? 3.8810+-0.0612 ? int-or-other-min-then-get-by-val 3.9876+-0.2084 3.8639+-0.1055 might be 1.0320x faster int-or-other-mod-then-get-by-val 3.6510+-0.0361 ? 3.6537+-0.0387 ? int-or-other-mul-then-get-by-val 3.6299+-0.0199 ? 3.6902+-0.1316 ? might be 1.0166x slower int-or-other-neg-then-get-by-val 4.1597+-0.0361 ! 4.2583+-0.0366 ! definitely 1.0237x slower int-or-other-neg-zero-then-get-by-val 15.9041+-0.4917 15.7674+-0.4763 int-or-other-sub-then-get-by-val 4.1724+-0.0583 4.1645+-0.0711 int-or-other-sub 3.5414+-0.1743 3.5203+-0.0822 int-overflow-local 4.3131+-0.2739 ? 4.3646+-0.3609 ? might be 1.0120x slower Int16Array-alloc-long-lived 45.6779+-1.2955 ? 46.0633+-1.6710 ? Int16Array-bubble-sort-with-byteLength 22.8134+-0.7659 21.9526+-0.3753 might be 1.0392x faster Int16Array-bubble-sort 20.6830+-0.7429 ? 21.4669+-1.1069 ? might be 1.0379x slower Int16Array-load-int-mul 1.6672+-0.2212 1.5969+-0.1113 might be 1.0441x faster Int16Array-to-Int32Array-set 45.5819+-0.7727 ? 46.3759+-1.3484 ? might be 1.0174x slower Int32Array-alloc-large 12.5947+-0.4868 12.1942+-0.5315 might be 1.0328x faster Int32Array-alloc-long-lived 50.5643+-1.6367 50.3169+-1.4325 Int32Array-alloc 3.2571+-0.1001 3.1625+-0.1265 might be 1.0299x faster Int32Array-Int8Array-view-alloc 5.9389+-0.2953 ? 6.0649+-0.2991 ? might be 1.0212x slower int52-spill 4.7963+-0.1696 4.7792+-0.2464 Int8Array-alloc-long-lived 42.2169+-1.5021 41.8659+-1.7092 Int8Array-load-with-byteLength 3.4647+-0.0818 ? 3.4841+-0.0577 ? Int8Array-load 3.4466+-0.0583 ? 3.4493+-0.0534 ? integer-divide 10.3760+-0.1525 ? 10.4465+-0.3007 ? integer-modulo 1.6426+-0.0650 ? 1.7432+-0.2026 ? might be 1.0613x slower is-boolean-fold-tricky 3.8095+-0.0740 3.7481+-0.0248 might be 1.0164x faster is-boolean-fold 2.6830+-0.0556 2.6669+-0.0469 is-function-fold-tricky-internal-function 9.8333+-0.1392 9.5560+-0.1992 might be 1.0290x faster is-function-fold-tricky 4.0459+-0.0901 ? 4.2534+-0.2815 ? might be 1.0513x slower is-function-fold 2.6800+-0.0606 ? 2.8168+-0.1632 ? might be 1.0511x slower is-number-fold-tricky 4.0834+-0.2236 3.9463+-0.0719 might be 1.0347x faster is-number-fold 2.7081+-0.0856 2.6811+-0.0391 might be 1.0101x faster is-object-or-null-fold-functions 2.8922+-0.2271 2.7997+-0.1912 might be 1.0330x faster is-object-or-null-fold-less-tricky 4.0767+-0.1281 ? 4.1368+-0.1788 ? might be 1.0147x slower is-object-or-null-fold-tricky 5.1335+-0.4184 4.8901+-0.1805 might be 1.0498x faster is-object-or-null-fold 2.6891+-0.0505 ? 2.7105+-0.0463 ? is-object-or-null-trickier-function 4.1081+-0.1032 4.0287+-0.0890 might be 1.0197x faster is-object-or-null-trickier-internal-function 9.7331+-0.1236 ? 10.0073+-0.6459 ? might be 1.0282x slower is-object-or-null-tricky-function 4.0703+-0.0715 ? 4.0746+-0.0871 ? is-object-or-null-tricky-internal-function 7.3404+-0.0328 7.3101+-0.2811 is-string-fold-tricky 4.2396+-0.6704 4.0291+-0.1800 might be 1.0522x faster is-string-fold 2.7256+-0.1699 2.6801+-0.0408 might be 1.0170x faster is-undefined-fold-tricky 3.3944+-0.0845 3.3620+-0.0531 is-undefined-fold 2.7233+-0.0958 2.6700+-0.0695 might be 1.0199x faster JSONP-negative-0 0.2864+-0.0114 ? 0.2893+-0.0252 ? large-int-captured 4.1503+-0.0661 ? 4.2484+-0.2341 ? might be 1.0236x slower large-int-neg 13.9961+-0.2439 ? 14.5700+-0.6797 ? might be 1.0410x slower large-int 13.0755+-0.1751 ? 13.6576+-1.2919 ? might be 1.0445x slower load-varargs-elimination 21.4432+-1.4373 20.9776+-0.7784 might be 1.0222x faster logical-not-weird-types 3.1639+-0.2285 3.1019+-0.0617 might be 1.0200x faster logical-not 4.4610+-0.0772 ? 4.5331+-0.0846 ? might be 1.0162x slower lots-of-fields 10.2998+-0.3663 9.6913+-0.5463 might be 1.0628x faster make-indexed-storage 2.9233+-0.0986 2.9162+-0.2040 make-rope-cse 3.9633+-0.2125 3.8304+-0.1586 might be 1.0347x faster marsaglia-larger-ints 32.5304+-1.1504 ? 32.5691+-0.8361 ? marsaglia-osr-entry 21.7617+-0.6664 ? 22.0083+-0.6273 ? might be 1.0113x slower math-random 11.7957+-0.7027 11.4657+-0.2233 might be 1.0288x faster math-with-out-of-bounds-array-values 22.7008+-0.4971 21.7178+-0.6771 might be 1.0453x faster max-boolean 2.7097+-0.1197 2.6726+-0.0555 might be 1.0139x faster method-on-number 17.1987+-1.4205 16.7081+-0.7233 might be 1.0294x faster min-boolean 2.6403+-0.0479 ? 2.7679+-0.1338 ? might be 1.0483x slower minus-boolean-double 3.2539+-0.2761 3.2123+-0.2618 might be 1.0130x faster minus-boolean 2.3518+-0.0516 ? 2.3688+-0.0438 ? misc-strict-eq 29.6355+-1.1038 29.2971+-1.3487 might be 1.0116x faster mod-boolean-double 11.3233+-0.2139 11.2588+-0.2485 mod-boolean 8.3353+-0.1955 ? 8.4618+-0.1349 ? might be 1.0152x slower mul-boolean-double 3.6664+-0.1008 3.6341+-0.1429 mul-boolean 2.9042+-0.1053 ? 2.9470+-0.0874 ? might be 1.0147x slower neg-boolean 3.1341+-0.0464 3.1228+-0.0511 negative-zero-divide 0.4405+-0.0708 0.3915+-0.0375 might be 1.1252x faster negative-zero-modulo 0.3714+-0.0082 ? 0.4129+-0.0387 ? might be 1.1115x slower negative-zero-negate 0.3733+-0.0349 ? 0.3918+-0.0548 ? might be 1.0496x slower nested-function-parsing 46.7397+-0.9239 46.4178+-1.3744 new-array-buffer-dead 87.9237+-0.6844 ? 88.9602+-1.3622 ? might be 1.0118x slower new-array-buffer-push 6.7965+-0.2457 ? 7.3048+-0.6249 ? might be 1.0748x slower new-array-dead 15.5291+-0.7478 15.2931+-0.9425 might be 1.0154x faster new-array-push 4.6360+-0.3747 4.4539+-0.2184 might be 1.0409x faster no-inline-constructor 30.4717+-0.8290 ? 31.0397+-1.2005 ? might be 1.0186x slower number-test 3.0634+-0.1283 3.0229+-0.1556 might be 1.0134x faster object-closure-call 4.8930+-0.0697 ? 5.1064+-0.3300 ? might be 1.0436x slower object-get-own-property-symbols-on-large-array 4.6458+-0.6801 ? 4.8013+-0.7427 ? might be 1.0335x slower object-test 2.7827+-0.1716 ? 2.8650+-0.3666 ? might be 1.0296x slower obvious-sink-pathology-taken 99.4376+-1.7261 99.1679+-1.3846 obvious-sink-pathology 30.0693+-0.3519 ? 31.1021+-2.1565 ? might be 1.0343x slower obviously-elidable-new-object 29.0850+-0.6837 29.0477+-0.7457 plus-boolean-arith 2.4018+-0.0309 ! 2.5015+-0.0648 ! definitely 1.0415x slower plus-boolean-double 3.1506+-0.0427 3.0985+-0.0147 might be 1.0168x faster plus-boolean 2.5464+-0.0537 2.5290+-0.0270 poly-chain-access-different-prototypes-simple 2.6280+-0.0559 ? 2.6615+-0.0760 ? might be 1.0127x slower poly-chain-access-different-prototypes 2.6319+-0.1051 2.6183+-0.1056 poly-chain-access-simpler 2.6465+-0.0376 2.6063+-0.0550 might be 1.0154x faster poly-chain-access 2.5815+-0.0771 2.5572+-0.0226 poly-stricteq 53.2695+-1.0358 52.4821+-0.9138 might be 1.0150x faster polymorphic-array-call 1.4248+-0.2578 1.2704+-0.0401 might be 1.1216x faster polymorphic-get-by-id 2.9204+-0.0532 2.9164+-0.0551 polymorphic-put-by-id 25.6916+-1.0124 ? 27.3895+-1.7828 ? might be 1.0661x slower polymorphic-put-by-val-with-string 27.3751+-0.4162 27.2852+-0.4042 polymorphic-put-by-val-with-symbol 28.0659+-0.6849 ? 28.6196+-1.4889 ? might be 1.0197x slower polymorphic-structure 12.4918+-0.2599 ? 12.6239+-0.2827 ? might be 1.0106x slower polyvariant-monomorphic-get-by-id 6.5589+-0.8719 ? 6.7360+-0.6891 ? might be 1.0270x slower proto-getter-access 8.3059+-0.2952 ? 8.5059+-0.3354 ? might be 1.0241x slower prototype-access-with-mutating-prototype 5.4838+-0.2185 ? 5.5070+-0.1919 ? put-by-id-replace-and-transition 8.4331+-0.7330 ? 9.3868+-1.9798 ? might be 1.1131x slower put-by-id-slightly-polymorphic 2.7363+-0.0324 2.7128+-0.0554 put-by-id 10.4288+-0.3948 9.9801+-0.5461 might be 1.0450x faster put-by-val-direct 0.3945+-0.0197 ? 0.4018+-0.0283 ? might be 1.0185x slower put-by-val-large-index-blank-indexing-type 5.5424+-0.3956 5.3834+-0.1713 might be 1.0295x faster put-by-val-machine-int 2.6846+-0.1395 ? 2.7364+-0.1420 ? might be 1.0193x slower put-by-val-with-string-replace-and-transition 10.5342+-0.2300 ? 10.6267+-0.6077 ? put-by-val-with-string-slightly-polymorphic 3.1549+-0.4190 2.9858+-0.0350 might be 1.0566x faster put-by-val-with-string 10.9401+-0.6417 10.5373+-0.5496 might be 1.0382x faster put-by-val-with-symbol-replace-and-transition 12.0973+-0.4540 ? 12.5972+-0.4060 ? might be 1.0413x slower put-by-val-with-symbol-slightly-polymorphic 3.2365+-0.0911 3.1916+-0.0809 might be 1.0141x faster put-by-val-with-symbol 11.1254+-0.7773 ? 11.1654+-1.7667 ? rare-osr-exit-on-local 14.0502+-0.2537 13.8329+-0.1167 might be 1.0157x faster raytrace-with-empty-try-catch 5.4707+-0.0913 ? 5.4863+-0.1317 ? raytrace-with-try-catch 11.0917+-1.3056 ? 11.6473+-1.0037 ? might be 1.0501x slower register-pressure-from-osr 16.7136+-0.5419 ? 16.7453+-0.5039 ? repeat-multi-get-by-offset 20.7320+-0.7370 ? 21.3690+-0.7724 ? might be 1.0307x slower richards-empty-try-catch 61.4268+-0.7291 60.2858+-1.7372 might be 1.0189x faster richards-try-catch 237.1702+-1.1212 235.8557+-1.6636 setter-prototype 7.9708+-0.2794 7.9325+-0.3730 setter 5.6239+-0.4127 ? 5.6264+-0.6630 ? simple-activation-demo 24.4445+-0.6533 ? 24.6763+-0.7692 ? simple-getter-access 10.6575+-0.1337 ? 10.7454+-0.3555 ? simple-poly-call-nested 8.6481+-0.5471 ? 9.2164+-0.8856 ? might be 1.0657x slower simple-poly-call 1.4904+-0.1727 1.3216+-0.0446 might be 1.1278x faster sin-boolean 20.2495+-1.7737 19.1635+-1.8783 might be 1.0567x faster singleton-scope 57.1729+-2.3547 56.0645+-0.6488 might be 1.0198x faster sink-function 10.0847+-0.7243 9.6688+-1.0804 might be 1.0430x faster sink-huge-activation 17.0705+-0.8813 16.6033+-0.7077 might be 1.0281x faster sinkable-new-object-dag 52.9301+-1.2133 52.1761+-1.5855 might be 1.0145x faster sinkable-new-object-taken 42.0698+-1.5683 ? 42.8830+-2.3188 ? might be 1.0193x slower sinkable-new-object 31.2441+-1.0657 30.2010+-0.8672 might be 1.0345x faster slow-array-profile-convergence 2.7642+-0.1351 2.6420+-0.1177 might be 1.0462x faster slow-convergence 2.6124+-0.1891 2.5796+-0.1349 might be 1.0127x faster slow-ternaries 17.9786+-0.6012 ? 17.9943+-1.5711 ? sorting-benchmark 17.9616+-0.8831 17.7994+-0.6436 sparse-conditional 1.2624+-0.1391 1.1891+-0.0169 might be 1.0617x faster splice-to-remove 12.8320+-0.9285 12.5158+-0.3701 might be 1.0253x faster string-char-code-at 13.4225+-0.4471 13.1915+-0.2235 might be 1.0175x faster string-concat-object 2.4030+-0.2784 2.1897+-0.0618 might be 1.0974x faster string-concat-pair-object 2.1734+-0.1110 ? 2.2109+-0.0668 ? might be 1.0172x slower string-concat-pair-simple 9.6307+-0.3744 ? 9.9141+-0.8784 ? might be 1.0294x slower string-concat-simple 9.7135+-0.9760 9.2987+-0.1994 might be 1.0446x faster string-cons-repeat 6.6109+-0.0854 ? 6.8525+-0.7315 ? might be 1.0365x slower string-cons-tower 7.0437+-0.3795 6.7192+-0.2245 might be 1.0483x faster string-equality 20.7936+-0.3165 ^ 18.3229+-0.3072 ^ definitely 1.1348x faster string-get-by-val-big-char 6.5120+-0.1361 ? 6.5597+-0.0699 ? string-get-by-val-out-of-bounds-insane 3.1029+-0.0760 ? 3.1266+-0.1069 ? string-get-by-val-out-of-bounds 4.0743+-0.1267 3.9530+-0.0837 might be 1.0307x faster string-get-by-val 2.8408+-0.0746 ? 2.9363+-0.1082 ? might be 1.0337x slower string-hash 2.0219+-0.2594 1.8886+-0.0232 might be 1.0706x faster string-long-ident-equality 15.1934+-0.5932 15.1691+-0.4677 string-out-of-bounds 10.0580+-0.2809 ? 10.3759+-0.5642 ? might be 1.0316x slower string-repeat-arith 25.7879+-0.8062 ? 26.8907+-1.3225 ? might be 1.0428x slower string-rope-with-object 20.9983+-1.7417 ? 21.1098+-0.5121 ? string-sub 32.1211+-0.3760 ! 34.7462+-1.6557 ! definitely 1.0817x slower string-test 2.9137+-0.1548 2.8686+-0.0082 might be 1.0157x faster string-var-equality 29.1145+-1.6265 28.1971+-0.3376 might be 1.0325x faster structure-hoist-over-transitions 2.3709+-0.0986 2.3667+-0.0914 substring-concat-weird 35.9656+-0.7267 ? 37.1201+-1.3406 ? might be 1.0321x slower substring-concat 39.6964+-0.9941 39.5175+-0.9661 substring 44.8358+-0.8950 ? 45.8905+-1.7141 ? might be 1.0235x slower switch-char-constant 2.7334+-0.0356 ? 2.7343+-0.0661 ? switch-char 6.7403+-1.0319 6.1025+-0.9188 might be 1.1045x faster switch-constant 10.0359+-1.3205 8.8996+-1.2356 might be 1.1277x faster switch-string-basic-big-var 14.8060+-0.5475 14.3126+-0.4141 might be 1.0345x faster switch-string-basic-big 14.8367+-0.5199 ? 15.2126+-0.5235 ? might be 1.0253x slower switch-string-basic-var 13.2536+-0.2764 ? 13.6806+-0.4608 ? might be 1.0322x slower switch-string-basic 12.8506+-0.2123 ? 13.2926+-0.6779 ? might be 1.0344x slower switch-string-big-length-tower-var 18.5384+-0.4424 ? 19.4410+-1.7357 ? might be 1.0487x slower switch-string-length-tower-var 13.3627+-0.1813 ! 14.2546+-0.3565 ! definitely 1.0667x slower switch-string-length-tower 12.3667+-0.7742 11.9456+-0.3364 might be 1.0353x faster switch-string-short 12.1031+-0.4446 12.0143+-0.3562 switch 11.4988+-0.5910 ? 11.6169+-0.6553 ? might be 1.0103x slower symbol-tostringtag 3.6540+-0.7163 3.3597+-0.2700 might be 1.0876x faster tear-off-arguments-simple 3.1641+-0.2400 ? 3.1747+-0.1877 ? tear-off-arguments 4.1836+-0.2078 4.1208+-0.0975 might be 1.0152x faster temporal-structure 11.6993+-0.0915 ? 11.8173+-0.2786 ? might be 1.0101x slower to-int32-boolean 12.5309+-0.1546 ? 13.1243+-0.6319 ? might be 1.0474x slower try-catch-get-by-val-cloned-arguments 10.1902+-0.7085 9.8657+-0.4423 might be 1.0329x faster try-catch-get-by-val-direct-arguments 2.4705+-0.2983 2.2910+-0.0760 might be 1.0783x faster try-catch-get-by-val-scoped-arguments 4.6873+-0.4757 4.5447+-0.4261 might be 1.0314x faster typed-array-get-set-by-val-profiling 28.1272+-1.1738 27.7713+-0.6721 might be 1.0128x faster undefined-property-access 213.5545+-0.8045 ? 215.7687+-3.7059 ? might be 1.0104x slower undefined-test 3.0206+-0.1574 ? 3.2204+-0.4080 ? might be 1.0661x slower unprofiled-licm 9.6554+-0.6111 9.3550+-0.1878 might be 1.0321x faster v8-raytrace-with-empty-try-catch 57.1261+-1.8032 ? 57.1710+-1.9938 ? v8-raytrace-with-try-catch 68.2616+-2.2285 67.1704+-1.3114 might be 1.0162x faster varargs-call 13.0924+-0.3044 ? 13.4502+-0.6015 ? might be 1.0273x slower varargs-construct-inline 22.6349+-1.0228 22.4932+-1.3316 varargs-construct 20.7483+-0.6551 20.3505+-0.6285 might be 1.0195x faster varargs-inline 8.7249+-0.1966 ? 8.8072+-0.1666 ? varargs-strict-mode 10.0214+-0.6831 9.9267+-0.3989 varargs 9.7186+-0.1755 ? 9.7642+-0.3223 ? weird-inlining-const-prop 2.4086+-0.1799 2.3780+-0.1210 might be 1.0128x faster <geometric> 8.4233+-0.0240 8.4025+-0.0299 might be 1.0025x faster TipOfTree FastDyn AsmBench: bigfib.cpp 488.7426+-90.8830 448.9087+-8.2549 might be 1.0887x faster cray.c 393.4331+-2.6926 392.9294+-2.4441 dry.c 425.0575+-5.6374 424.3868+-8.4364 FloatMM.c 684.5850+-2.5567 ? 689.5412+-11.3132 ? gcc-loops.cpp 3431.6389+-9.4354 ? 3432.8980+-19.2557 ? n-body.c 824.4081+-2.8235 ? 828.0731+-6.7211 ? Quicksort.c 411.6755+-5.2824 408.2388+-2.0263 stepanov_container.cpp 3496.0503+-19.2473 ? 3530.7854+-108.4979 ? Towers.c 237.5852+-4.0042 236.0856+-1.2685 <geometric> 722.1598+-12.3658 716.6909+-4.0888 might be 1.0076x faster TipOfTree FastDyn CompressionBench: huffman 61.9609+-0.5393 ? 62.6242+-1.6132 ? might be 1.0107x slower arithmetic-simple 276.1444+-2.1664 275.6372+-2.5819 arithmetic-precise 253.8611+-2.4425 253.0480+-2.2872 arithmetic-complex-precise 256.5291+-14.3699 249.0761+-2.9646 might be 1.0299x faster arithmetic-precise-order-0 288.7501+-3.8005 286.9470+-0.7351 arithmetic-precise-order-1 308.5241+-2.9162 ? 309.2931+-4.4422 ? arithmetic-precise-order-2 355.7136+-3.0981 355.5125+-4.1996 arithmetic-simple-order-1 322.6538+-3.1348 322.0189+-2.0808 arithmetic-simple-order-2 377.2183+-6.7780 375.4242+-6.4170 lz-string 333.5010+-40.1963 313.2198+-5.9923 might be 1.0648x faster <geometric> 260.1908+-2.5337 257.8413+-1.4029 might be 1.0091x faster TipOfTree FastDyn Geomean of preferred means: <scaled-result> 50.9826+-0.1137 50.8705+-0.0551 might be 1.0022x faster
WebKit Commit Bot
Comment 5 2015-12-16 11:20:56 PST
Attachment 267475 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dynbench.cpp:118: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:140: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:142: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:157: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:184: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:208: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:223: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73: The parameter name "value" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 10 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
Geoffrey Garen
Comment 6 2015-12-16 12:03:39 PST
Build is angry: Last 500 characters of output: __ZN3JSC9Structure33prototypeChainMayInterceptStoreToERNS_2VMENS_12PropertyNameE", referenced from: __ZN3JSC8JSObject11putInternalEPNS_6JSCellEPNS_9ExecStateENS_12PropertyNameENS_7JSValueERNS_15PutPropertySlotE in dynbench.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
Geoffrey Garen
Comment 7 2015-12-16 12:09:36 PST
Comment on attachment 267475 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=267475&action=review r=me if you fix the build > Source/JavaScriptCore/runtime/JSCJSValueInlines.h:755 > +ALWAYS_INLINE void JSValue::putInternal(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot) Why isn't JSValue::putInternal just the new put()? I think either this should be the new put or, if it's too big, it should be renamed to putInline() and called by put(), and put() should move out-of-line. > Source/JavaScriptCore/runtime/JSObject.h:144 > + static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&); I'd call this putInline() or inlinePut(). "Internal" doesn't tell me when I'm allowed to use this. I think I'm allowed to use this whenever I like, as long as I'm willing to pay for inlining.
Filip Pizlo
Comment 8 2015-12-16 12:21:22 PST
(In reply to comment #7) > Comment on attachment 267475 [details] > the patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=267475&action=review > > r=me if you fix the build I think I've got it. An easy fix would have been to make GetterSetter.h into a private header and then mark more things JS_EXPORT_PRIVATE. I'm going in a different direction: I'm adding a putInternalSlow() that goes into JSObject.cpp, and contains all of those parts of putInternal() that require getter/setter code. > > > Source/JavaScriptCore/runtime/JSCJSValueInlines.h:755 > > +ALWAYS_INLINE void JSValue::putInternal(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot) > > Why isn't JSValue::putInternal just the new put()? It's huge. > > I think either this should be the new put or, if it's too big, it should be > renamed to putInline() and called by put(), and put() should move > out-of-line. Sure. > > > Source/JavaScriptCore/runtime/JSObject.h:144 > > + static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&); > > I'd call this putInline() or inlinePut(). Sure. > > "Internal" doesn't tell me when I'm allowed to use this. I think I'm allowed > to use this whenever I like, as long as I'm willing to pay for inlining. That's true.
Filip Pizlo
Comment 9 2015-12-16 12:25:53 PST
> > > Source/JavaScriptCore/runtime/JSObject.h:144 > > > + static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&); > > > > I'd call this putInline() or inlinePut(). > > Sure. I went with putInline().
Filip Pizlo
Comment 10 2015-12-16 12:50:25 PST
Created attachment 267484 [details] patch for landing
WebKit Commit Bot
Comment 11 2015-12-16 12:52:05 PST
Attachment 267484 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dynbench.cpp:118: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:140: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:142: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:157: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:184: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:208: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:223: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73: The parameter name "value" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 10 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 12 2015-12-16 13:02:14 PST
Here's the performance of dynbench before this change: Non Strict Dynamic Get By Id: : 20.1933 +- 0.1588 Non Strict Dynamic Put By Id Replace: : 67.5606 +- 0.9416 Non Strict Dynamic Allocation and Put By Id Transition: : 118.6623 +- 1.5057 Non Strict Dynamic Get By Id With Dynamic Store Context: : 20.9737 +- 1.2768 Non Strict Dynamic Put By Id Replace With Dynamic Store Context: : 46.9602 +- 1.4932 Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: : 99.3949 +- 1.1866 Here's the performance after: Non Strict Dynamic Get By Id: : 19.7731 +- 0.3310 Non Strict Dynamic Put By Id Replace: : 59.9378 +- 0.5400 Non Strict Dynamic Allocation and Put By Id Transition: : 107.3013 +- 2.6068 Non Strict Dynamic Get By Id With Dynamic Store Context: : 20.0169 +- 0.6318 Non Strict Dynamic Put By Id Replace With Dynamic Store Context: : 37.7219 +- 1.5186 Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: : 90.0028 +- 2.8719
Filip Pizlo
Comment 13 2015-12-16 13:07:14 PST
Created attachment 267485 [details] patch for landing
WebKit Commit Bot
Comment 14 2015-12-16 13:08:52 PST
Attachment 267485 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dynbench.cpp:118: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:140: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:142: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:157: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:184: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:208: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:223: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73: The parameter name "value" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 10 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 15 2015-12-16 13:13:48 PST
Created attachment 267486 [details] one more time!
WebKit Commit Bot
Comment 16 2015-12-16 13:15:29 PST
Attachment 267486 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dynbench.cpp:118: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:140: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:142: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:157: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:184: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:206: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:208: This { should be at the end of the previous line [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dynbench.cpp:223: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34: Alphabetical sorting problem. [build/include_order] [4] ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73: The parameter name "value" adds no information, so it should be removed. [readability/parameter_name] [5] Total errors found: 10 in 18 files If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 17 2015-12-16 14:39:59 PST
Note You need to log in before you can comment on or make changes to this bug.