Summary: | Don't segregate heap objects based on Structure immortality. | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Andreas Kling <kling> | ||||||||
Component: | JavaScriptCore | Assignee: | Andreas Kling <kling> | ||||||||
Status: | RESOLVED FIXED | ||||||||||
Severity: | Normal | CC: | ggaren, kling, mhahnenb | ||||||||
Priority: | P2 | Keywords: | Performance | ||||||||
Version: | 528+ (Nightly build) | ||||||||||
Hardware: | Unspecified | ||||||||||
OS: | Unspecified | ||||||||||
Attachments: |
|
Description
Andreas Kling
2015-04-11 19:05:38 PDT
Created attachment 250591 [details]
Snack for EWS
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on megalol (MacBookPro10,1). VMs tested: "Vanilla" at /Users/kling/Source/Safari/ToT-Clean/WebKitBuild/Release/jsc "Chocolate" at /Users/kling/Source/Safari/OpenSource/WebKitBuild/Release/jsc Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. Vanilla Chocolate SunSpider: 3d-cube 5.2593+-0.4856 5.1050+-0.3191 might be 1.0302x faster 3d-morph 5.8705+-0.1659 ? 6.1027+-0.3479 ? might be 1.0396x slower 3d-raytrace 6.8584+-0.7573 6.6626+-0.3816 might be 1.0294x faster access-binary-trees 2.4452+-0.0509 2.3532+-0.1076 might be 1.0391x faster access-fannkuch 6.0312+-0.2398 5.9554+-0.0296 might be 1.0127x faster access-nbody 3.0800+-0.2620 ? 3.1417+-0.1327 ? might be 1.0201x slower access-nsieve 3.4506+-0.1279 ? 3.4614+-0.1411 ? bitops-3bit-bits-in-byte 1.6819+-0.0278 ? 1.7048+-0.0276 ? might be 1.0136x slower bitops-bits-in-byte 3.5290+-0.0650 3.4850+-0.0460 might be 1.0126x faster bitops-bitwise-and 2.1972+-0.0672 ? 2.2802+-0.1918 ? might be 1.0378x slower bitops-nsieve-bits 3.8852+-0.1011 ? 4.0129+-0.1785 ? might be 1.0329x slower controlflow-recursive 2.3497+-0.2248 2.2250+-0.0512 might be 1.0561x faster crypto-aes 4.3132+-0.1069 ? 4.6793+-1.0247 ? might be 1.0849x slower crypto-md5 2.6218+-0.2737 2.4984+-0.0774 might be 1.0494x faster crypto-sha1 2.9915+-0.6794 2.6693+-0.2206 might be 1.1207x faster date-format-tofte 9.6045+-0.3433 ? 9.6757+-0.7314 ? date-format-xparb 5.7089+-0.1748 ? 5.8035+-0.1217 ? might be 1.0166x slower math-cordic 3.2627+-0.1370 3.2135+-0.1351 might be 1.0153x faster math-partial-sums 5.7245+-1.4567 5.6372+-0.4732 might be 1.0155x faster math-spectral-norm 2.0723+-0.0387 2.0703+-0.0245 regexp-dna 9.2399+-2.2493 8.7835+-2.4920 might be 1.0520x faster string-base64 5.4716+-1.6751 4.6800+-0.1463 might be 1.1691x faster string-fasta 6.9545+-0.1511 6.8262+-0.0660 might be 1.0188x faster string-tagcloud 10.3986+-0.5471 10.3863+-0.1766 string-unpack-code 21.3397+-1.7174 21.0079+-0.4905 might be 1.0158x faster string-validate-input 5.2018+-0.0626 5.0957+-0.1609 might be 1.0208x faster <arithmetic> 5.4440+-0.0673 5.3660+-0.0591 might be 1.0145x faster Vanilla Chocolate LongSpider: 3d-cube 876.8975+-32.3745 ? 890.7485+-17.5201 ? might be 1.0158x slower 3d-morph 1574.5983+-4.6800 ? 1577.5056+-7.8021 ? 3d-raytrace 768.5930+-7.4748 ? 768.7429+-16.8365 ? access-binary-trees 1043.7885+-11.9021 ? 1049.7832+-7.2471 ? access-fannkuch 351.3836+-31.4498 345.9742+-12.6238 might be 1.0156x faster access-nbody 629.9861+-1.1358 ? 631.2038+-1.8754 ? access-nsieve 879.6464+-11.9222 ? 883.9374+-14.6119 ? bitops-3bit-bits-in-byte 48.9081+-2.9110 ? 48.9441+-1.4068 ? bitops-bits-in-byte 94.5201+-4.9817 ? 97.0079+-4.6505 ? might be 1.0263x slower bitops-nsieve-bits 754.4360+-8.3354 ^ 738.1306+-5.7224 ^ definitely 1.0221x faster controlflow-recursive 506.5503+-0.6749 ! 516.7132+-7.9777 ! definitely 1.0201x slower crypto-aes 720.8593+-8.2610 719.5157+-3.3806 crypto-md5 567.1433+-5.5794 ? 572.1542+-10.2877 ? crypto-sha1 662.3470+-29.2788 662.3163+-61.7000 date-format-tofte 788.9193+-29.4545 783.8463+-9.7165 date-format-xparb 777.4066+-13.6520 ! 820.0955+-25.8354 ! definitely 1.0549x slower math-cordic 608.3392+-0.9476 ? 608.7089+-0.7911 ? math-partial-sums 524.1835+-6.1472 523.4189+-4.7907 math-spectral-norm 580.7155+-0.3041 580.4293+-1.5012 string-base64 372.0099+-5.9361 ! 386.5706+-8.2037 ! definitely 1.0391x slower string-fasta 456.3035+-4.5244 ? 457.9473+-3.0889 ? string-tagcloud 225.2457+-5.4263 ? 226.1123+-4.4916 ? <geometric> 514.4761+-1.7778 ? 517.7246+-2.4292 ? might be 1.0063x slower Vanilla Chocolate V8Spider: crypto 57.6511+-4.1754 ? 58.4796+-3.0779 ? might be 1.0144x slower deltablue 100.2304+-5.3248 ? 102.3293+-5.1072 ? might be 1.0209x slower earley-boyer 44.3036+-1.4757 42.7087+-1.2094 might be 1.0373x faster raytrace 43.5338+-6.0057 40.1332+-1.0490 might be 1.0847x faster regexp 71.3325+-2.9763 69.9002+-3.4284 might be 1.0205x faster richards 85.1258+-3.3096 ? 85.8648+-2.9198 ? splay 41.6972+-4.1207 ? 42.0938+-3.7914 ? <geometric> 60.0186+-0.9186 59.3246+-1.5343 might be 1.0117x faster Vanilla Chocolate Octane: encrypt 0.22692+-0.00145 ? 0.22892+-0.00913 ? decrypt 4.03608+-0.12663 3.97795+-0.03141 might be 1.0146x faster deltablue x2 0.21045+-0.00280 ? 0.21081+-0.00245 ? earley 0.59706+-0.01013 ? 0.59898+-0.00263 ? boyer 6.57959+-0.01784 ? 6.59718+-0.08425 ? navier-stokes x2 5.35477+-0.01423 5.34915+-0.00384 raytrace x2 1.29628+-0.03203 ? 1.31495+-0.07347 ? might be 1.0144x slower richards x2 0.11930+-0.00242 ? 0.12025+-0.00258 ? splay x2 0.39947+-0.00907 0.39688+-0.00518 regexp x2 34.98955+-0.30959 ? 35.08465+-0.40378 ? pdfjs x2 45.97834+-0.21984 ? 46.64381+-0.56745 ? might be 1.0145x slower mandreel x2 54.70050+-1.00709 ? 54.79463+-1.03966 ? gbemu x2 41.95623+-4.39626 40.90548+-0.45744 might be 1.0257x faster closure 0.58113+-0.00531 ^ 0.57049+-0.00417 ^ definitely 1.0186x faster jquery 7.41118+-0.04189 7.35877+-0.05754 box2d x2 12.71943+-0.15802 ? 12.72699+-0.02141 ? zlib x2 407.24949+-0.65149 406.63298+-3.40417 typescript x2 857.19025+-16.16211 854.73541+-16.98076 <geometric> 6.97341+-0.06204 6.97080+-0.03091 might be 1.0004x faster Vanilla Chocolate Kraken: ai-astar 275.144+-3.011 ? 276.914+-4.131 ? audio-beat-detection 110.423+-2.574 109.957+-1.690 audio-dft 192.671+-9.090 ? 194.950+-9.552 ? might be 1.0118x slower audio-fft 80.470+-1.118 ? 82.402+-6.209 ? might be 1.0240x slower audio-oscillator 212.073+-2.847 ? 213.216+-2.888 ? imaging-darkroom 109.870+-5.175 108.895+-2.777 imaging-desaturate 68.026+-3.392 65.981+-2.356 might be 1.0310x faster imaging-gaussian-blur 115.949+-2.437 113.737+-1.613 might be 1.0194x faster json-parse-financial 50.999+-3.214 48.195+-2.369 might be 1.0582x faster json-stringify-tinderbox 60.330+-1.785 ? 60.893+-3.929 ? stanford-crypto-aes 63.128+-2.925 62.014+-0.494 might be 1.0180x faster stanford-crypto-ccm 51.927+-2.448 50.903+-1.382 might be 1.0201x faster stanford-crypto-pbkdf2 175.615+-1.934 173.978+-5.988 stanford-crypto-sha256-iterative 58.608+-2.031 57.835+-3.979 might be 1.0134x faster <arithmetic> 116.088+-1.013 115.705+-0.476 might be 1.0033x faster Vanilla Chocolate JSRegress: abs-boolean 2.8505+-0.1441 2.7382+-0.0265 might be 1.0410x faster adapt-to-double-divide 17.2767+-0.2322 ? 17.4042+-0.3550 ? aliased-arguments-getbyval 1.4221+-0.4549 1.3208+-0.0828 might be 1.0767x faster allocate-big-object 3.0625+-0.7396 2.8810+-0.0748 might be 1.0630x faster arguments-named-and-reflective 13.3830+-1.9581 ? 13.4837+-2.3145 ? arguments-out-of-bounds 14.9613+-0.3301 ? 15.7365+-1.7643 ? might be 1.0518x slower arguments-strict-mode 11.3931+-0.3942 ? 11.6232+-0.9674 ? might be 1.0202x slower arguments 10.4743+-1.3601 10.0594+-0.3544 might be 1.0412x faster arity-mismatch-inlining 0.9122+-0.0236 ? 1.0446+-0.1614 ? might be 1.1451x slower array-access-polymorphic-structure 6.7751+-0.2372 ? 7.0487+-0.3048 ? might be 1.0404x slower array-nonarray-polymorhpic-access 34.6505+-2.5587 ? 35.8128+-2.6252 ? might be 1.0335x slower array-prototype-every 89.5349+-3.7561 ? 114.6033+-72.3069 ? might be 1.2800x slower array-prototype-forEach 91.7844+-2.9313 88.9874+-4.8712 might be 1.0314x faster array-prototype-map 98.2361+-2.3348 ? 98.3002+-3.6285 ? array-prototype-some 88.8912+-5.4570 ? 92.5170+-3.7671 ? might be 1.0408x slower array-splice-contiguous 43.5978+-1.7575 ? 45.1972+-3.0576 ? might be 1.0367x slower array-with-double-add 4.3342+-0.1315 ? 4.3698+-0.3519 ? array-with-double-increment 3.4840+-0.1799 3.3582+-0.0689 might be 1.0375x faster array-with-double-mul-add 5.2286+-0.1216 ? 5.2474+-0.1934 ? array-with-double-sum 3.4483+-0.0620 ? 3.5318+-0.3694 ? might be 1.0242x slower array-with-int32-add-sub 7.0204+-0.1562 ? 7.1384+-0.2730 ? might be 1.0168x slower array-with-int32-or-double-sum 3.5243+-0.0810 3.4758+-0.1144 might be 1.0139x faster ArrayBuffer-DataView-alloc-large-long-lived 35.0003+-1.8465 ? 37.1609+-2.1986 ? might be 1.0617x slower ArrayBuffer-DataView-alloc-long-lived 16.0860+-3.8848 ? 16.2927+-3.2921 ? might be 1.0129x slower ArrayBuffer-Int32Array-byteOffset 3.8450+-0.1978 ? 3.9673+-0.3639 ? might be 1.0318x slower ArrayBuffer-Int8Array-alloc-large-long-lived 35.9656+-3.1108 ? 36.5292+-2.9536 ? might be 1.0157x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 22.9293+-0.4839 ? 25.2572+-7.4159 ? might be 1.1015x slower ArrayBuffer-Int8Array-alloc-long-lived 13.4725+-0.4898 ? 16.0270+-2.6948 ? might be 1.1896x slower ArrayBuffer-Int8Array-alloc 12.1072+-2.0381 11.5989+-0.8279 might be 1.0438x faster asmjs_bool_bug 8.5217+-1.6659 8.1405+-0.6036 might be 1.0468x faster assign-custom-setter-polymorphic 3.3470+-0.0608 ^ 3.1308+-0.1369 ^ definitely 1.0691x faster assign-custom-setter 4.6286+-0.2730 4.3310+-0.0653 might be 1.0687x faster basic-set 9.3418+-1.1906 9.2752+-0.1690 big-int-mul 4.3264+-0.3911 4.1725+-0.0620 might be 1.0369x faster boolean-test 3.1790+-0.1382 3.1280+-0.0139 might be 1.0163x faster branch-fold 3.9252+-0.2358 3.8127+-0.0331 might be 1.0295x faster by-val-generic 8.1760+-0.3284 ! 8.9697+-0.3458 ! definitely 1.0971x slower call-spread-apply 32.0479+-3.1559 31.0922+-2.0057 might be 1.0307x faster call-spread-call 25.4057+-0.4680 ? 26.2829+-1.4866 ? might be 1.0345x slower captured-assignments 0.4797+-0.0127 0.4755+-0.0179 cast-int-to-double 5.6230+-0.3336 5.4208+-0.0634 might be 1.0373x faster cell-argument 8.6620+-0.3429 8.5187+-0.2063 might be 1.0168x faster cfg-simplify 2.9849+-0.0925 ? 3.0175+-0.2102 ? might be 1.0109x slower chain-getter-access 9.9519+-0.1992 ? 10.1432+-0.5535 ? might be 1.0192x slower cmpeq-obj-to-obj-other 12.2729+-0.9068 11.9036+-1.5604 might be 1.0310x faster constant-test 5.1266+-0.0604 5.0997+-0.0312 DataView-custom-properties 40.2454+-1.9065 ? 41.2012+-3.3949 ? might be 1.0237x slower deconstructing-parameters-overridden-by-function 0.5475+-0.0795 0.5474+-0.1165 delay-tear-off-arguments-strictmode 15.3028+-2.2434 13.8484+-0.4374 might be 1.1050x faster deltablue-varargs 206.2977+-2.3774 205.7591+-1.3179 destructuring-arguments 18.7173+-2.5533 17.3550+-1.3083 might be 1.0785x faster destructuring-swap 5.1874+-0.0527 ? 5.2217+-0.1419 ? direct-arguments-getbyval 1.2988+-0.1698 1.2687+-0.0700 might be 1.0237x faster div-boolean-double 5.3942+-0.0243 ? 5.5302+-0.2961 ? might be 1.0252x slower div-boolean 8.0604+-0.1247 7.9575+-0.0145 might be 1.0129x faster double-get-by-val-out-of-bounds 4.9522+-0.8728 4.6808+-0.0178 might be 1.0580x faster double-pollution-getbyval 9.2515+-0.2313 ? 9.4180+-0.7314 ? might be 1.0180x slower double-pollution-putbyoffset 4.4229+-0.0975 ? 4.5701+-0.2961 ? might be 1.0333x slower double-to-int32-typed-array-no-inline 2.4133+-0.1526 2.3821+-0.1396 might be 1.0131x faster double-to-int32-typed-array 2.0322+-0.0507 ? 2.0406+-0.0283 ? double-to-uint32-typed-array-no-inline 2.5227+-0.3676 2.5107+-0.3433 double-to-uint32-typed-array 2.1241+-0.0428 2.1025+-0.0928 might be 1.0103x faster elidable-new-object-dag 44.1537+-2.1793 43.4955+-2.4640 might be 1.0151x faster elidable-new-object-roflcopter 48.8073+-1.5872 48.6384+-2.9913 elidable-new-object-then-call 41.1016+-2.6137 ? 41.9865+-2.0017 ? might be 1.0215x slower elidable-new-object-tree 46.9609+-1.3357 46.6912+-3.0315 empty-string-plus-int 5.6396+-0.2302 5.5134+-0.0595 might be 1.0229x faster emscripten-cube2hash 39.9625+-1.8981 ? 40.8588+-2.9801 ? might be 1.0224x slower exit-length-on-plain-object 14.9265+-2.5562 14.2688+-0.2298 might be 1.0461x faster external-arguments-getbyval 1.3138+-0.0911 1.3133+-0.1366 external-arguments-putbyval 2.4555+-0.2485 2.4453+-0.1447 fixed-typed-array-storage-var-index 1.3755+-0.0712 ? 1.4097+-0.2845 ? might be 1.0249x slower fixed-typed-array-storage 1.0171+-0.0485 0.9756+-0.0289 might be 1.0425x faster Float32Array-matrix-mult 4.5505+-0.0764 4.5218+-0.0463 Float32Array-to-Float64Array-set 60.8813+-3.3144 ^ 54.0015+-1.5759 ^ definitely 1.1274x faster Float64Array-alloc-long-lived 76.6037+-2.7884 74.8830+-1.3130 might be 1.0230x faster Float64Array-to-Int16Array-set 71.0206+-3.0738 ? 77.7768+-6.6803 ? might be 1.0951x slower fold-double-to-int 14.4783+-0.3233 ? 14.8643+-1.3144 ? might be 1.0267x slower fold-get-by-id-to-multi-get-by-offset-rare-int 11.7030+-0.9111 11.3424+-1.4075 might be 1.0318x faster fold-get-by-id-to-multi-get-by-offset 9.9055+-0.1781 9.6994+-0.5771 might be 1.0213x faster fold-multi-get-by-offset-to-get-by-offset 8.7646+-1.2005 ? 9.4385+-1.4057 ? might be 1.0769x slower fold-multi-get-by-offset-to-poly-get-by-offset 8.5150+-1.2761 ? 8.6652+-2.0442 ? might be 1.0176x slower fold-multi-put-by-offset-to-poly-put-by-offset 8.2055+-1.8524 ? 8.2840+-0.5914 ? fold-multi-put-by-offset-to-put-by-offset 4.1033+-1.2602 ? 5.1868+-0.4844 ? might be 1.2641x slower fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 10.0004+-0.2394 9.5828+-0.5686 might be 1.0436x faster fold-put-by-id-to-multi-put-by-offset 9.5815+-2.0438 8.8173+-0.3280 might be 1.0867x faster fold-put-structure 6.0390+-0.2882 ? 6.0615+-1.3184 ? for-of-iterate-array-entries 4.6528+-0.1000 ? 4.9360+-0.2011 ? might be 1.0609x slower for-of-iterate-array-keys 4.0590+-0.0844 4.0055+-0.1038 might be 1.0133x faster for-of-iterate-array-values 3.8528+-0.1344 ? 3.9755+-0.1058 ? might be 1.0319x slower fround 20.3715+-0.7173 20.0106+-1.0150 might be 1.0180x faster ftl-library-inlining-dataview 84.4370+-3.3389 82.3295+-5.4317 might be 1.0256x faster ftl-library-inlining 79.4368+-27.6062 79.4171+-28.8631 function-dot-apply 2.0460+-0.2811 1.9516+-0.0364 might be 1.0484x faster function-test 3.5811+-0.1076 3.5625+-0.1781 function-with-eval 96.2352+-4.1256 93.9195+-1.4014 might be 1.0247x faster gcse-poly-get-less-obvious 20.4130+-2.0139 19.6150+-1.5507 might be 1.0407x faster gcse-poly-get 23.1650+-2.6003 ? 23.5443+-1.5341 ? might be 1.0164x slower gcse 4.5631+-0.1888 4.4955+-0.1484 might be 1.0150x faster get-by-id-bimorphic-check-structure-elimination-simple 2.9807+-0.1281 2.8977+-0.0444 might be 1.0286x faster get-by-id-bimorphic-check-structure-elimination 6.2600+-0.0621 ? 6.5240+-0.3008 ? might be 1.0422x slower get-by-id-chain-from-try-block 7.8746+-2.2746 ? 8.0807+-2.0285 ? might be 1.0262x slower get-by-id-check-structure-elimination 5.2618+-0.0177 ! 5.3340+-0.0535 ! definitely 1.0137x slower get-by-id-proto-or-self 17.3008+-0.7284 ? 18.0066+-1.3219 ? might be 1.0408x slower get-by-id-quadmorphic-check-structure-elimination-simple 3.0541+-0.0611 ? 3.0753+-0.0684 ? get-by-id-self-or-proto 18.2318+-1.3056 17.4990+-0.3800 might be 1.0419x faster get-by-val-out-of-bounds 4.6962+-0.2530 4.6355+-0.4960 might be 1.0131x faster get_callee_monomorphic 3.8200+-0.1427 ? 3.9890+-0.2677 ? might be 1.0442x slower get_callee_polymorphic 4.1227+-0.7453 3.8948+-0.4371 might be 1.0585x faster getter-no-activation 4.8213+-0.7314 4.6517+-0.5772 might be 1.0364x faster getter-richards 132.5937+-13.0667 123.6292+-11.8178 might be 1.0725x faster getter 5.9795+-0.4298 ? 6.0554+-0.7356 ? might be 1.0127x slower global-var-const-infer-fire-from-opt 0.9186+-0.1409 ? 1.1142+-0.4245 ? might be 1.2130x slower global-var-const-infer 0.9664+-0.0570 0.9365+-0.0457 might be 1.0320x faster HashMap-put-get-iterate-keys 28.0896+-0.8943 27.9587+-0.6370 HashMap-put-get-iterate 27.6287+-0.4826 ? 28.1765+-1.7184 ? might be 1.0198x slower HashMap-string-put-get-iterate 28.7181+-1.6490 28.3534+-1.0206 might be 1.0129x faster hoist-make-rope 12.3358+-1.8327 ? 12.5195+-0.8813 ? might be 1.0149x slower hoist-poly-check-structure-effectful-loop 5.2323+-0.0748 5.1757+-0.2041 might be 1.0109x faster hoist-poly-check-structure 3.8425+-0.0653 3.8362+-0.1203 imul-double-only 8.4985+-1.2454 7.8279+-0.0744 might be 1.0857x faster imul-int-only 10.1088+-0.3852 10.0084+-0.8274 might be 1.0100x faster imul-mixed 8.2195+-1.3630 ? 8.3494+-0.2618 ? might be 1.0158x slower in-four-cases 19.9299+-0.4547 19.5334+-0.2036 might be 1.0203x faster in-one-case-false 10.5730+-0.6908 10.5100+-0.7879 in-one-case-true 10.3608+-0.2022 ? 10.7911+-1.0305 ? might be 1.0415x slower in-two-cases 10.4617+-0.0860 ? 10.8655+-0.6294 ? might be 1.0386x slower indexed-properties-in-objects 3.0970+-0.2809 3.0087+-0.0443 might be 1.0294x faster infer-closure-const-then-mov-no-inline 3.7805+-0.3239 ? 3.8601+-0.2664 ? might be 1.0211x slower infer-closure-const-then-mov 17.0070+-0.5642 ? 17.3196+-0.6389 ? might be 1.0184x slower infer-closure-const-then-put-to-scope-no-inline 12.1075+-0.2015 ? 13.4257+-2.6467 ? might be 1.1089x slower infer-closure-const-then-put-to-scope 23.2585+-1.7637 ? 23.3239+-1.9686 ? infer-closure-const-then-reenter-no-inline 50.0488+-1.3070 ? 51.7751+-3.4030 ? might be 1.0345x slower infer-closure-const-then-reenter 130.0842+-2.5610 ? 133.4355+-4.4796 ? might be 1.0258x slower infer-constant-global-property 31.9245+-2.7792 ? 33.5731+-4.0660 ? might be 1.0516x slower infer-constant-property 2.8525+-0.0680 ? 2.8671+-0.1618 ? infer-one-time-closure-ten-vars 12.8653+-1.2087 12.5645+-0.4504 might be 1.0239x faster infer-one-time-closure-two-vars 12.1858+-0.4480 11.8857+-0.1905 might be 1.0252x faster infer-one-time-closure 11.9984+-0.2051 11.9908+-0.4980 infer-one-time-deep-closure 22.0626+-2.9252 21.2612+-0.4942 might be 1.0377x faster inline-arguments-access 4.5212+-0.2137 ? 4.5767+-0.4987 ? might be 1.0123x slower inline-arguments-aliased-access 4.4979+-0.4806 ? 4.7552+-0.6129 ? might be 1.0572x slower inline-arguments-local-escape 4.5390+-0.3838 ? 5.0810+-0.3323 ? might be 1.1194x slower inline-get-scoped-var 4.6477+-0.4593 4.5239+-0.3821 might be 1.0274x faster inlined-put-by-id-transition 11.4587+-1.4563 ? 11.7420+-1.4983 ? might be 1.0247x slower int-or-other-abs-then-get-by-val 5.1860+-0.1997 5.1139+-0.0447 might be 1.0141x faster int-or-other-abs-zero-then-get-by-val 17.2260+-0.4267 ? 17.8947+-1.7213 ? might be 1.0388x slower int-or-other-add-then-get-by-val 4.4290+-0.0545 ? 4.4310+-0.0421 ? int-or-other-add 5.5532+-0.1270 5.4623+-0.0484 might be 1.0166x faster int-or-other-div-then-get-by-val 4.4125+-0.0646 ? 4.4226+-0.0826 ? int-or-other-max-then-get-by-val 4.5190+-0.0552 4.5026+-0.0434 int-or-other-min-then-get-by-val 4.6031+-0.0389 ? 4.6180+-0.0888 ? int-or-other-mod-then-get-by-val 4.0503+-0.1316 ? 4.1781+-0.2944 ? might be 1.0316x slower int-or-other-mul-then-get-by-val 4.2066+-0.1859 4.1407+-0.0341 might be 1.0159x faster int-or-other-neg-then-get-by-val 4.7930+-0.0185 ? 4.8256+-0.2025 ? int-or-other-neg-zero-then-get-by-val 17.4423+-0.3243 ? 18.9487+-2.3019 ? might be 1.0864x slower int-or-other-sub-then-get-by-val 4.5312+-0.2115 4.4775+-0.0696 might be 1.0120x faster int-or-other-sub 3.7001+-0.1037 3.6730+-0.0062 int-overflow-local 4.5162+-0.1706 4.5076+-0.0133 Int16Array-alloc-long-lived 53.6224+-3.1208 52.7483+-2.9620 might be 1.0166x faster Int16Array-bubble-sort-with-byteLength 21.3760+-0.7251 ? 21.3896+-1.2231 ? Int16Array-bubble-sort 21.9354+-3.1794 21.6563+-2.4458 might be 1.0129x faster Int16Array-load-int-mul 1.5958+-0.0293 ? 1.6040+-0.0203 ? Int16Array-to-Int32Array-set 61.0342+-3.2310 59.3398+-3.0788 might be 1.0286x faster Int32Array-alloc-large 27.3370+-1.3215 26.6630+-1.9398 might be 1.0253x faster Int32Array-alloc-long-lived 59.3235+-1.1146 ? 59.6234+-0.6497 ? Int32Array-alloc 3.5887+-0.2141 3.4852+-0.0789 might be 1.0297x faster Int32Array-Int8Array-view-alloc 8.5151+-1.4795 8.2250+-1.5452 might be 1.0353x faster int52-spill 6.5405+-0.1225 ? 6.8791+-0.5155 ? might be 1.0518x slower Int8Array-alloc-long-lived 48.6860+-1.6846 ? 49.7970+-1.3155 ? might be 1.0228x slower Int8Array-load-with-byteLength 3.5793+-0.2118 3.5008+-0.0688 might be 1.0224x faster Int8Array-load 3.5576+-0.1021 3.5294+-0.0846 integer-divide 12.0565+-0.1549 ? 12.5912+-1.5581 ? might be 1.0444x slower integer-modulo 2.2595+-0.1345 2.2085+-0.1185 might be 1.0231x faster large-int-captured 5.8019+-0.0723 ? 5.9114+-0.4529 ? might be 1.0189x slower large-int-neg 17.2123+-0.2631 ? 17.5643+-1.6377 ? might be 1.0204x slower large-int 15.7283+-0.3632 ? 16.6520+-2.7693 ? might be 1.0587x slower logical-not 4.6768+-0.0260 4.6689+-0.0490 lots-of-fields 13.8820+-1.0509 ? 14.4700+-1.9736 ? might be 1.0424x slower make-indexed-storage 3.2833+-0.0692 ? 3.3857+-0.3178 ? might be 1.0312x slower make-rope-cse 4.9207+-0.7355 4.6788+-0.2703 might be 1.0517x faster marsaglia-larger-ints 40.8651+-1.5773 40.1308+-1.6373 might be 1.0183x faster marsaglia-osr-entry 24.5448+-2.1703 23.3406+-0.6890 might be 1.0516x faster max-boolean 2.9070+-0.6143 2.6953+-0.1621 might be 1.0786x faster method-on-number 17.9919+-0.3237 ! 20.2424+-1.1514 ! definitely 1.1251x slower min-boolean 2.5980+-0.0392 ? 2.8089+-0.5239 ? might be 1.0812x slower minus-boolean-double 3.3120+-0.0885 3.2692+-0.0544 might be 1.0131x faster minus-boolean 2.4321+-0.0682 ? 2.6010+-0.5260 ? might be 1.0695x slower misc-strict-eq 40.6736+-3.8856 ? 41.1609+-4.9408 ? might be 1.0120x slower mod-boolean-double 11.7618+-0.6281 11.1960+-0.3173 might be 1.0505x faster mod-boolean 8.0599+-0.0875 ? 8.1713+-0.4818 ? might be 1.0138x slower mul-boolean-double 3.8729+-0.1598 3.8173+-0.1474 might be 1.0146x faster mul-boolean 2.9892+-0.0273 2.9784+-0.0951 neg-boolean 3.3752+-0.1443 3.3088+-0.2579 might be 1.0201x faster negative-zero-divide 0.4194+-0.1505 0.3668+-0.0075 might be 1.1433x faster negative-zero-modulo 0.3868+-0.0385 0.3842+-0.0682 negative-zero-negate 0.3728+-0.0945 0.3410+-0.0127 might be 1.0933x faster nested-function-parsing 39.6183+-3.5077 39.6093+-2.7608 new-array-buffer-dead 2.8963+-0.0621 ? 2.9306+-0.0921 ? might be 1.0118x slower new-array-buffer-push 6.8108+-0.1706 ? 7.2497+-1.2098 ? might be 1.0644x slower new-array-dead 12.4606+-0.4844 ? 12.6086+-0.3677 ? might be 1.0119x slower new-array-push 4.0424+-0.1111 ? 4.1028+-0.1648 ? might be 1.0149x slower number-test 3.1306+-0.0428 3.1083+-0.0851 object-closure-call 5.9149+-0.0382 ^ 5.7348+-0.0792 ^ definitely 1.0314x faster object-test 3.2444+-0.0284 3.2316+-0.1183 obvious-sink-pathology-taken 151.7202+-2.0247 149.1495+-2.7097 might be 1.0172x faster obvious-sink-pathology 145.8488+-3.9213 142.6227+-3.7078 might be 1.0226x faster obviously-elidable-new-object 37.4105+-3.8953 ? 37.5935+-4.3754 ? plus-boolean-arith 2.6666+-0.0766 ? 2.7058+-0.2510 ? might be 1.0147x slower plus-boolean-double 3.3098+-0.0726 3.2881+-0.1203 plus-boolean 2.5545+-0.0429 2.5253+-0.0781 might be 1.0116x faster poly-chain-access-different-prototypes-simple 3.4142+-0.0442 3.4090+-0.0711 poly-chain-access-different-prototypes 2.7258+-0.0423 ? 2.8146+-0.3816 ? might be 1.0326x slower poly-chain-access-simpler 3.4363+-0.0898 ? 3.4808+-0.1713 ? might be 1.0129x slower poly-chain-access 2.7209+-0.0471 ? 2.7233+-0.0635 ? poly-stricteq 61.9720+-1.7917 59.2036+-2.8166 might be 1.0468x faster polymorphic-array-call 1.6503+-0.1817 ^ 1.2704+-0.0384 ^ definitely 1.2990x faster polymorphic-get-by-id 3.2861+-0.0850 3.2661+-0.1297 polymorphic-put-by-id 30.3610+-1.5506 ? 31.3870+-2.5151 ? might be 1.0338x slower polymorphic-structure 16.0514+-3.2583 15.3928+-0.4615 might be 1.0428x faster polyvariant-monomorphic-get-by-id 8.8271+-0.1101 ? 8.8398+-0.1621 ? proto-getter-access 9.9374+-0.3309 ? 10.0385+-0.2735 ? might be 1.0102x slower put-by-id-replace-and-transition 9.8205+-1.7893 9.5883+-1.1908 might be 1.0242x faster put-by-id-slightly-polymorphic 2.9927+-0.0419 ? 3.0087+-0.0425 ? put-by-id 14.2062+-0.9227 14.1702+-1.4972 put-by-val-direct 0.6605+-0.0520 ^ 0.5859+-0.0174 ^ definitely 1.1273x faster put-by-val-large-index-blank-indexing-type 6.2250+-0.6399 ? 6.3312+-0.4985 ? might be 1.0171x slower put-by-val-machine-int 2.7677+-0.1192 2.7460+-0.0719 rare-osr-exit-on-local 15.6710+-0.4058 ? 15.8860+-1.8664 ? might be 1.0137x slower register-pressure-from-osr 22.7346+-1.8093 22.2213+-0.2917 might be 1.0231x faster setter 5.7191+-0.7343 ? 5.7878+-0.8677 ? might be 1.0120x slower simple-activation-demo 28.0626+-2.4595 26.1052+-0.9779 might be 1.0750x faster simple-getter-access 13.1030+-0.4993 ? 13.3005+-1.5880 ? might be 1.0151x slower simple-poly-call-nested 8.2285+-0.2209 ? 8.4359+-1.0258 ? might be 1.0252x slower simple-poly-call 1.4301+-0.1054 1.4286+-0.1584 sin-boolean 24.2855+-1.8325 ? 24.8975+-1.2066 ? might be 1.0252x slower sinkable-new-object-dag 73.8885+-5.4357 ? 75.1243+-3.6712 ? might be 1.0167x slower sinkable-new-object-taken 52.6788+-2.7322 51.8333+-1.8672 might be 1.0163x faster sinkable-new-object 40.5078+-1.9891 39.5819+-2.1702 might be 1.0234x faster slow-array-profile-convergence 2.8437+-0.2601 ? 2.9272+-0.1077 ? might be 1.0294x slower slow-convergence 3.3817+-0.3030 ? 3.6255+-0.5350 ? might be 1.0721x slower sorting-benchmark 22.8145+-1.5779 ? 24.2878+-2.4690 ? might be 1.0646x slower sparse-conditional 1.2437+-0.0146 1.2225+-0.0384 might be 1.0173x faster splice-to-remove 17.6395+-0.6224 ? 18.0823+-2.1924 ? might be 1.0251x slower string-char-code-at 16.5711+-0.7166 ? 16.6688+-0.5397 ? string-concat-object 2.8398+-0.6927 2.6166+-0.1321 might be 1.0853x faster string-concat-pair-object 2.7083+-0.4407 2.5596+-0.0824 might be 1.0581x faster string-concat-pair-simple 11.5196+-1.2587 ? 13.7687+-1.9338 ? might be 1.1952x slower string-concat-simple 12.9269+-1.5729 12.7280+-2.3895 might be 1.0156x faster string-cons-repeat 9.3944+-0.6038 ? 9.7007+-2.1792 ? might be 1.0326x slower string-cons-tower 8.8104+-0.9834 8.5385+-1.1839 might be 1.0319x faster string-equality 18.6157+-2.3703 ? 18.8691+-2.0778 ? might be 1.0136x slower string-get-by-val-big-char 7.3536+-0.0701 ? 7.6168+-0.2297 ? might be 1.0358x slower string-get-by-val-out-of-bounds-insane 3.9525+-0.2452 ? 4.4874+-1.0909 ? might be 1.1353x slower string-get-by-val-out-of-bounds 5.4192+-0.1069 ? 5.5419+-0.0650 ? might be 1.0226x slower string-get-by-val 3.5580+-0.0598 ^ 3.4096+-0.0622 ^ definitely 1.0435x faster string-hash 2.1770+-0.0070 2.1479+-0.0760 might be 1.0135x faster string-long-ident-equality 15.9767+-2.1789 15.5358+-2.1266 might be 1.0284x faster string-out-of-bounds 15.7789+-1.6181 15.1697+-0.3320 might be 1.0402x faster string-repeat-arith 34.1717+-3.3084 ? 34.9545+-3.3442 ? might be 1.0229x slower string-sub 71.7735+-3.6738 71.7545+-5.5474 string-test 3.1256+-0.0424 3.0577+-0.0348 might be 1.0222x faster string-var-equality 31.7166+-3.5139 30.8367+-0.4539 might be 1.0285x faster structure-hoist-over-transitions 2.7120+-0.0860 2.6825+-0.2358 might be 1.0110x faster substring-concat-weird 40.1957+-2.7115 40.1521+-3.4643 substring-concat 42.0344+-2.0612 41.5757+-1.7027 might be 1.0110x faster substring 48.8387+-3.3396 48.2365+-1.8110 might be 1.0125x faster switch-char-constant 2.8821+-0.0145 ? 2.8869+-0.0958 ? switch-char 7.5957+-0.4992 7.2709+-1.6305 might be 1.0447x faster switch-constant 8.6159+-0.7821 8.3000+-0.4317 might be 1.0381x faster switch-string-basic-big-var 16.0525+-1.2128 ? 17.0074+-2.7001 ? might be 1.0595x slower switch-string-basic-big 14.3300+-0.1560 14.1895+-0.1202 switch-string-basic-var 15.2181+-0.5239 ? 16.0228+-2.5126 ? might be 1.0529x slower switch-string-basic 13.5820+-0.4264 ? 14.6091+-2.0714 ? might be 1.0756x slower switch-string-big-length-tower-var 21.3647+-2.3355 ? 22.3046+-3.4698 ? might be 1.0440x slower switch-string-length-tower-var 16.3331+-2.3117 15.2426+-0.2953 might be 1.0715x faster switch-string-length-tower 13.1304+-0.1401 ? 15.1423+-2.5895 ? might be 1.1532x slower switch-string-short 14.0088+-2.6475 13.0826+-0.1402 might be 1.0708x faster switch 12.8443+-0.5251 ? 13.1055+-0.8217 ? might be 1.0203x slower tear-off-arguments-simple 3.3702+-0.0839 ? 3.5972+-0.2397 ? might be 1.0674x slower tear-off-arguments 4.6345+-0.0988 ? 4.6605+-0.0321 ? temporal-structure 12.6454+-0.2703 ? 12.9739+-1.7665 ? might be 1.0260x slower to-int32-boolean 14.2952+-0.4462 14.1019+-0.1224 might be 1.0137x faster try-catch-get-by-val-cloned-arguments 15.8500+-2.7738 15.1260+-2.6972 might be 1.0479x faster try-catch-get-by-val-direct-arguments 6.2993+-0.4304 6.1835+-0.6581 might be 1.0187x faster try-catch-get-by-val-scoped-arguments 7.9197+-0.5566 ^ 7.0079+-0.0670 ^ definitely 1.1301x faster undefined-property-access 393.5723+-6.8992 ? 396.8580+-5.8033 ? undefined-test 3.2735+-0.1837 3.1530+-0.0499 might be 1.0382x faster unprofiled-licm 24.7155+-2.6027 23.2974+-1.5176 might be 1.0609x faster varargs-call 15.4370+-0.2554 15.2589+-0.0466 might be 1.0117x faster varargs-construct-inline 24.3502+-2.5780 22.9890+-1.5495 might be 1.0592x faster varargs-construct 33.1280+-0.9383 ? 34.9989+-4.5097 ? might be 1.0565x slower varargs-inline 9.4832+-0.5239 9.2231+-0.2092 might be 1.0282x faster varargs-strict-mode 9.8345+-0.1240 ? 10.3357+-1.2485 ? might be 1.0510x slower varargs 9.9796+-0.8077 9.9591+-0.4163 weird-inlining-const-prop 2.6328+-0.5683 2.4565+-0.4356 might be 1.0718x faster <geometric> 8.9038+-0.0300 ? 8.9122+-0.0346 ? might be 1.0009x slower Vanilla Chocolate AsmBench: bigfib.cpp 506.1097+-4.1926 ? 506.1874+-3.6188 ? cray.c 444.6219+-1.9594 443.7471+-1.1116 dry.c 509.1544+-1.3349 499.6282+-18.2110 might be 1.0191x faster FloatMM.c 801.7592+-12.9608 799.3370+-3.1181 gcc-loops.cpp 4284.0927+-11.6206 ? 4299.0363+-14.9316 ? n-body.c 1019.6232+-7.4517 1015.4982+-2.2716 Quicksort.c 459.5056+-6.7374 ? 460.2643+-4.0573 ? stepanov_container.cpp 3776.5687+-14.3043 ? 3780.9139+-15.6689 ? Towers.c 281.2679+-2.0933 ^ 272.3129+-4.1433 ^ definitely 1.0329x faster <geometric> 834.3013+-4.3130 829.3074+-2.6056 might be 1.0060x faster Vanilla Chocolate CompressionBench: huffman 388.9741+-1.0976 ^ 375.0577+-2.4090 ^ definitely 1.0371x faster arithmetic-simple 413.6960+-5.7744 408.3135+-3.6967 might be 1.0132x faster arithmetic-precise 307.6225+-2.5547 ? 308.2158+-12.4833 ? arithmetic-complex-precise 305.7736+-1.4695 ? 308.5398+-5.2116 ? arithmetic-precise-order-0 445.4406+-18.1473 432.0716+-4.7045 might be 1.0309x faster arithmetic-precise-order-1 339.1055+-3.2461 334.8203+-3.5012 might be 1.0128x faster arithmetic-precise-order-2 379.4807+-8.3791 377.9154+-3.4060 arithmetic-simple-order-1 430.4996+-9.2633 ? 431.3104+-2.4022 ? arithmetic-simple-order-2 478.9820+-3.3279 ? 484.5358+-4.0746 ? might be 1.0116x slower lz-string 349.8705+-10.9710 ? 350.9981+-3.4344 ? <geometric> 379.8642+-1.3744 377.2494+-1.4579 might be 1.0069x faster Vanilla Chocolate Geomean of preferred means: <scaled-result> 66.5330+-0.1977 66.2387+-0.1136 might be 1.0044x faster Created attachment 250620 [details]
Proposed patch
Comment on attachment 250620 [details] Proposed patch View in context: https://bugs.webkit.org/attachment.cgi?id=250620&action=review ChangeLog doesn’t make clear why StructureFlags all have to be public now despite the fact that this is one of the most frequent changes in the patch. Also doesn’t mention moving Base::StructureFlags to the front of all the StructureFlags expressions, which is a small thing, but done so many times I think it makes sense to mention in change log. Note that in most cases where I say StructureFlags isn’t needed, we also don’t use or need the Base typedef either. > Source/JavaScriptCore/API/JSCallbackObject.h:128 > + static const unsigned StructureFlags = Parent::StructureFlags | ProhibitsPropertyCaching | OverridesGetOwnPropertySlot | InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | ImplementsHasInstance | OverridesHasInstance | OverridesGetPropertyNames; Why use Parent here instead of Base? > Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:270 > + static const unsigned StructureFlags = StructureIsImmortal | Base::StructureFlags; In other cases we put the base structure flags first, but here we put them last. > Source/JavaScriptCore/heap/MarkedAllocator.h:77 > + , m_needsDestruction(false) Would be nicer to initialize this in the class definition rather than here. bool m_needsDestruction { false }; > Source/JavaScriptCore/inspector/JSInjectedScriptHost.h:38 > + static const unsigned StructureFlags = Base::StructureFlags; I don’t think this line of code is needed, but maybe it’s useful for clarity that no flags are being added? > Source/JavaScriptCore/inspector/JSJavaScriptCallFrame.h:37 > + static const unsigned StructureFlags = Base::StructureFlags; Ditto. > Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.h:40 > private: > ArrayBufferNeuteringWatchpoint(VM&); Wonder why this one lonely constructor is up here by itself instead of down with the other private members. > Source/JavaScriptCore/runtime/ExceptionHelpers.h:61 > TerminatedExecutionError(VM& vm) This should probably be marked explicit. Also seems like it would be nicer if this class used the more normal "public members first" style. > Source/JavaScriptCore/runtime/Executable.h:87 > + static const unsigned StructureFlags = Base::StructureFlags; Why no StructureIsImmortal here? Also, if there are no flags being added, then why define this at all? > Source/JavaScriptCore/runtime/Executable.h:-120 > - static const unsigned StructureFlags = StructureIsImmortal; Since it was here. > Source/JavaScriptCore/runtime/JSEnvironmentRecord.h:48 > + static const unsigned StructureFlags = Base::StructureFlags; Not sure this is needed (as mentioned above). > Source/JavaScriptCore/runtime/JSFunction.h:60 > + const static unsigned StructureFlags = OverridesGetOwnPropertySlot | ImplementsHasInstance | OverridesGetPropertyNames | JSObject::StructureFlags; Strange that this starts with JSObject::StructureFlags instead of starting with Base::StructureFlags. Could omit ImplementsHasInstance if we started with Base instead of JSObject. Also better to put the inherited flags first as we did elsewhere. > Source/JavaScriptCore/runtime/JSNameScope.h:38 > + static const unsigned StructureFlags = Base::StructureFlags| OverridesGetOwnPropertySlot; Missing space before "|". > Source/JavaScriptCore/runtime/JSObject.h:1034 > + static const unsigned StructureFlags = Base::StructureFlags; Not sure this is needed (see other comments like this above). > Source/JavaScriptCore/runtime/JSScope.h:152 > + static const unsigned StructureFlags = Base::StructureFlags; We didn’t need to add this, I don’t think. > Source/JavaScriptCore/runtime/NumberConstructor.h:33 > + static const unsigned StructureFlags = OverridesGetOwnPropertySlot | ImplementsHasInstance | Base::StructureFlags; Did not put Base at the start here. > Source/JavaScriptCore/runtime/StringPrototype.h:36 > + static const unsigned StructureFlags = Base::StructureFlags; Not sure we need this. > Source/JavaScriptCore/runtime/Structure.cpp:205 > + TypeInfo typeInfo = TypeInfo(CellType, StructureFlags); TypeInfo x = TypeInfo(...) is OK but a little wordy. Maybe one of these: TypeInfo x(...); TypeInfo x { ... }; > Source/JavaScriptCore/runtime/WeakMapData.h:40 > + static const unsigned StructureFlags = StructureIsImmortal | Base::StructureFlags; Did not put Base::StructureFlags first here. > Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:1113 > + push(@headerContent, "Base::StructureFlags;\n"); Did not put Base first here in generated code. > Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4308 > if (%structureFlags) { > - push(@$outputArray, "protected:\n"); > + push(@$outputArray, "public:\n"); > push(@$outputArray, " static const unsigned StructureFlags = "); Seems like we should factor this into a function so we can share code between this and the nearly identical code above. > Source/WebCore/bridge/runtime_object.h:38 > + static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesGetPropertyNames | Base::StructureFlags; Did not put Base::StructureFlags first here. Created attachment 250658 [details]
Patch for landing
Fixed most of the above comments. Will tweak code generator separately.
Committed r182747: <http://trac.webkit.org/changeset/182747> |