Patch forthcoming.
Created attachment 204106 [details] the patch
Comment on attachment 204106 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=204106&action=review > LayoutTests/ChangeLog:8 > + Add tests that show why this is important. These tests speed up by more than 2x. Make that more than 3x.
Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1). VMs tested: "Old" at /Volumes/Data/pizlo/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r150814) "TipOfTree" at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r151350) "UnifiedPolyGet" at /Volumes/Data/fromMiniMe/fourthTier/primary/OpenSource/WebKitBuild/Release/jsc (r151350) Collected 12 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. Old TipOfTree UnifiedPolyGet UnifiedPolyGet v. Old SunSpider: 3d-cube 6.6471+-0.0872 ? 6.7610+-0.1102 6.7123+-0.0994 ? 3d-morph 8.4750+-0.0945 ! 8.7180+-0.1189 ^ 8.4305+-0.0936 3d-raytrace 8.3790+-0.1352 ? 8.5237+-0.1071 ! 8.7268+-0.0880 ! definitely 1.0415x slower access-binary-trees 1.8393+-0.0093 ^ 1.8163+-0.0117 1.8015+-0.0083 ^ definitely 1.0210x faster access-fannkuch 7.4534+-0.0782 ? 7.4711+-0.0609 ? 7.5981+-0.0821 ? might be 1.0194x slower access-nbody 3.9661+-0.0366 ! 4.0346+-0.0125 ? 4.0468+-0.0224 ! definitely 1.0203x slower access-nsieve 4.7838+-0.1122 ? 4.8524+-0.0383 4.8131+-0.0722 ? bitops-3bit-bits-in-byte 1.7762+-0.0195 ? 1.7808+-0.0177 ? 1.7855+-0.0165 ? bitops-bits-in-byte 6.6059+-0.1160 ? 6.7170+-0.0697 ? 6.7579+-0.0764 ? might be 1.0230x slower bitops-bitwise-and 2.7229+-0.0209 2.7201+-0.0223 2.6960+-0.0464 bitops-nsieve-bits 4.1852+-0.0543 ! 4.3269+-0.0136 ? 4.3665+-0.0583 ! definitely 1.0433x slower controlflow-recursive 3.2911+-0.1894 ^ 2.9942+-0.0316 ? 3.0361+-0.0584 ^ definitely 1.0840x faster crypto-aes 5.1810+-0.0760 ? 5.3060+-0.1041 5.2623+-0.0788 ? might be 1.0157x slower crypto-md5 3.0676+-0.0240 ! 3.1571+-0.0269 ^ 3.0803+-0.0226 ? crypto-sha1 2.8331+-0.0192 ? 2.9095+-0.0594 2.8688+-0.0265 ? might be 1.0126x slower date-format-tofte 14.8885+-0.2787 14.8012+-0.1904 ? 14.8552+-0.3156 date-format-xparb 8.4939+-0.1451 ? 8.5746+-0.1437 8.5548+-0.1553 ? math-cordic 3.9247+-0.0116 ? 3.9491+-0.0161 ? 3.9831+-0.0504 ? might be 1.0149x slower math-partial-sums 12.0567+-0.1119 11.9006+-0.1233 ? 11.9331+-0.1408 might be 1.0104x faster math-spectral-norm 2.6987+-0.0083 ! 2.7282+-0.0208 2.7224+-0.0203 ? regexp-dna 11.3417+-0.1724 11.2975+-0.1811 ? 11.3029+-0.1503 string-base64 4.8564+-0.1765 4.8344+-0.0544 ? 4.9263+-0.0801 ? might be 1.0144x slower string-fasta 10.6780+-0.1316 ? 10.8243+-0.2779 10.6765+-0.1150 string-tagcloud 14.1440+-0.1619 ? 14.4411+-0.1403 ? 14.4978+-0.2362 ? might be 1.0250x slower string-unpack-code 28.0420+-0.0826 ! 29.1296+-0.0498 ? 29.7608+-0.7922 ! definitely 1.0613x slower string-validate-input 6.4606+-0.1019 6.4459+-0.1200 6.4360+-0.1109 <arithmetic> * 7.2612+-0.0457 ? 7.3467+-0.0481 ? 7.3704+-0.0660 ? might be 1.0150x slower <geometric> 5.7589+-0.0338 ? 5.8019+-0.0313 ? 5.8021+-0.0319 ? might be 1.0075x slower <harmonic> 4.6686+-0.0241 ? 4.6878+-0.0189 4.6799+-0.0170 ? might be 1.0024x slower Old TipOfTree UnifiedPolyGet UnifiedPolyGet v. Old V8Spider: crypto 79.5437+-0.1945 ? 79.8214+-0.2113 ? 79.9207+-0.1710 ! definitely 1.0047x slower deltablue 104.3275+-0.4176 ^ 101.4076+-1.1714 ? 102.8474+-1.9719 might be 1.0144x faster earley-boyer 69.6713+-0.3008 ! 71.8912+-0.3518 71.7349+-0.2236 ! definitely 1.0296x slower raytrace 37.9899+-0.3217 ! 40.0980+-0.3664 ^ 39.3617+-0.2623 ! definitely 1.0361x slower regexp 99.9139+-0.4498 ! 100.8937+-0.3541 100.7127+-0.2652 ! definitely 1.0080x slower richards 113.0453+-1.2847 112.0754+-0.8933 ? 113.6185+-1.6951 ? splay 47.2896+-0.3000 47.2642+-0.4259 47.2028+-0.2990 <arithmetic> 78.8259+-0.2532 ? 79.0645+-0.2861 ? 79.3427+-0.4336 ? might be 1.0066x slower <geometric> * 73.6269+-0.2232 ! 74.2710+-0.2501 ? 74.3232+-0.2861 ! definitely 1.0095x slower <harmonic> 68.0661+-0.2384 ! 69.1424+-0.2613 68.9566+-0.1636 ! definitely 1.0131x slower Old TipOfTree UnifiedPolyGet UnifiedPolyGet v. Old Octane and V8v7: encrypt 0.46636+-0.00069 ^ 0.46389+-0.00056 0.46314+-0.00039 ^ definitely 1.0069x faster decrypt 8.62195+-0.01466 ^ 8.56890+-0.02393 ? 8.59384+-0.02992 deltablue x2 0.56651+-0.00204 ! 0.57500+-0.00302 ? 0.57558+-0.00205 ! definitely 1.0160x slower earley 0.89447+-0.01052 ^ 0.86218+-0.00828 ? 0.86842+-0.00396 ^ definitely 1.0300x faster boyer 12.77044+-0.04179 ! 12.94519+-0.03646 12.91063+-0.04799 ! definitely 1.0110x slower raytrace x2 4.46441+-0.04492 ? 4.52141+-0.04287 ^ 4.36084+-0.05215 ^ definitely 1.0237x faster regexp x2 32.69172+-0.38203 ? 32.79450+-0.26411 32.49730+-0.30661 richards x2 0.30838+-0.00377 0.30744+-0.00103 ? 0.30995+-0.00274 ? splay x2 0.64749+-0.02873 0.64046+-0.01432 0.64018+-0.01698 might be 1.0114x faster navier-stokes x2 10.77583+-0.00841 ! 10.80567+-0.00737 10.80197+-0.00670 ! definitely 1.0024x slower closure 0.31883+-0.03436 ? 0.32020+-0.03532 ? 0.32250+-0.03556 ? might be 1.0115x slower jquery 4.53347+-0.55644 ? 4.55121+-0.55619 ? 4.56849+-0.55526 ? gbemu x2 253.92247+-16.72937 ^ 142.70076+-2.92763 ^ 136.96312+-1.94993 ^ definitely 1.8539x faster box2d x2 32.38644+-0.18687 ! 32.89246+-0.10297 ? 33.29310+-0.44378 ! definitely 1.0280x slower V8v7: <arithmetic> 7.60387+-0.04809 ? 7.63307+-0.03578 7.57548+-0.04394 might be 1.0037x faster <geometric> * 2.42678+-0.01627 ? 2.42790+-0.00891 2.41754+-0.01175 might be 1.0038x faster <harmonic> 0.92656+-0.00875 0.92444+-0.00392 ? 0.92666+-0.00541 ? might be 1.0001x slower Octane including V8v7: <arithmetic> 31.77873+-1.53879 ^ 21.73577+-0.27812 ^ 21.20960+-0.21233 ^ definitely 1.4983x faster <geometric> * 4.39042+-0.06040 ^ 4.17672+-0.04836 4.15487+-0.04692 ^ definitely 1.0567x faster <harmonic> 1.05920+-0.01690 1.05772+-0.01815 ? 1.06099+-0.01763 ? might be 1.0017x slower Old TipOfTree UnifiedPolyGet UnifiedPolyGet v. Old Kraken: ai-astar 491.433+-0.387 ? 492.072+-0.573 491.861+-0.616 ? audio-beat-detection 246.806+-3.988 242.642+-0.560 ! 246.800+-2.100 audio-dft 316.236+-10.418 307.348+-1.048 306.855+-0.634 might be 1.0306x faster audio-fft 143.414+-0.220 ! 144.970+-0.076 144.778+-0.135 ! definitely 1.0095x slower audio-oscillator 232.337+-0.734 ! 245.766+-5.690 ? 246.395+-6.033 ! definitely 1.0605x slower imaging-darkroom 290.120+-0.657 290.039+-9.462 285.362+-1.089 ^ definitely 1.0167x faster imaging-desaturate 159.958+-0.093 ^ 157.669+-0.106 157.640+-0.081 ^ definitely 1.0147x faster imaging-gaussian-blur 403.314+-0.235 ^ 399.818+-0.136 ? 399.880+-0.147 ^ definitely 1.0086x faster json-parse-financial 80.426+-0.158 ! 81.449+-0.673 81.235+-0.407 ! definitely 1.0101x slower json-stringify-tinderbox 101.580+-0.743 ^ 99.099+-0.404 ? 99.473+-1.030 ^ definitely 1.0212x faster stanford-crypto-aes 94.325+-0.572 ^ 93.052+-0.381 92.935+-0.469 ^ definitely 1.0150x faster stanford-crypto-ccm 100.648+-2.493 96.690+-1.465 94.232+-4.201 might be 1.0681x faster stanford-crypto-pbkdf2 268.477+-0.860 268.418+-0.701 267.601+-2.615 stanford-crypto-sha256-iterative 116.105+-0.389 ? 116.555+-1.522 115.437+-0.180 ^ definitely 1.0058x faster <arithmetic> * 217.513+-1.018 216.828+-0.518 216.463+-0.538 might be 1.0048x faster <geometric> 185.636+-0.736 184.803+-0.290 184.282+-0.780 might be 1.0074x faster <harmonic> 159.309+-0.607 ^ 158.280+-0.363 157.577+-1.066 ^ definitely 1.0110x faster Old TipOfTree UnifiedPolyGet UnifiedPolyGet v. Old JSRegress: adapt-to-double-divide 22.5317+-0.0627 ? 22.5739+-0.0772 ? 22.5898+-0.1272 ? aliased-arguments-getbyval 0.8337+-0.0068 ! 0.8547+-0.0071 0.8499+-0.0072 ! definitely 1.0194x slower allocate-big-object 2.4885+-0.0255 ? 2.5051+-0.0251 2.4983+-0.0274 ? arity-mismatch-inlining 0.7917+-0.0303 ? 0.8053+-0.0204 ? 0.8069+-0.0203 ? might be 1.0192x slower array-access-polymorphic-structure 6.7949+-0.1070 ? 6.8556+-0.1687 6.7986+-0.1092 ? array-with-double-add 5.8730+-0.1407 5.8717+-0.0689 ? 5.9266+-0.0530 ? array-with-double-increment 4.2224+-0.0857 4.1434+-0.0814 ? 4.1485+-0.0428 might be 1.0178x faster array-with-double-mul-add 7.0769+-0.0562 ^ 6.6465+-0.0506 ? 6.7018+-0.0632 ^ definitely 1.0560x faster array-with-double-sum 7.8998+-0.0934 ? 7.9135+-0.0986 7.8590+-0.0720 array-with-int32-add-sub 10.5511+-0.0940 ? 10.5793+-0.0840 ? 10.5842+-0.0708 ? array-with-int32-or-double-sum 7.9422+-0.0948 ? 7.9892+-0.0687 ? 8.0244+-0.1096 ? might be 1.0103x slower big-int-mul 4.7901+-0.0506 ? 4.8486+-0.0421 ? 4.8878+-0.0170 ! definitely 1.0204x slower boolean-test 4.4370+-0.0697 4.4099+-0.0610 4.3988+-0.0897 cast-int-to-double 13.9027+-0.1203 13.8970+-0.0933 13.7902+-0.0983 cell-argument 14.4202+-0.1095 ? 14.4537+-0.1048 14.4184+-0.0801 cfg-simplify 3.9510+-0.0735 ^ 3.8530+-0.0150 ? 3.8551+-0.0136 ^ definitely 1.0249x faster cmpeq-obj-to-obj-other 10.6184+-0.1939 ? 10.9971+-0.2446 ? 11.0871+-0.1825 ! definitely 1.0441x slower constant-test 8.5114+-0.1413 ? 8.6566+-0.1623 8.6543+-0.0782 ? might be 1.0168x slower direct-arguments-getbyval 0.7325+-0.0098 0.7316+-0.0084 ? 0.7402+-0.0083 ? might be 1.0105x slower double-pollution-getbyval 10.8447+-0.0959 10.8290+-0.0798 10.8073+-0.0672 double-pollution-putbyoffset 4.8126+-0.0841 ? 4.9423+-0.0836 4.9403+-0.0698 ? might be 1.0265x slower external-arguments-getbyval 1.9975+-0.0170 ^ 1.9237+-0.0230 1.9128+-0.0192 ^ definitely 1.0443x faster external-arguments-putbyval 3.1447+-0.0205 ^ 3.0390+-0.0174 3.0321+-0.0106 ^ definitely 1.0371x faster Float32Array-matrix-mult 13.9539+-0.3143 13.9397+-0.1615 ? 14.2772+-0.3376 ? might be 1.0232x slower fold-double-to-int 22.7797+-0.3908 ^ 22.0659+-0.1207 22.0575+-0.2714 ^ definitely 1.0327x faster function-dot-apply 3.1141+-0.0133 ^ 3.0587+-0.0139 3.0572+-0.0135 ^ definitely 1.0186x faster function-test 5.1683+-0.0735 5.0165+-0.0795 4.9732+-0.1306 might be 1.0392x faster get-by-id-chain-from-try-block 6.6736+-0.1546 ? 6.7177+-0.1703 6.7154+-0.1221 ? get-by-id-proto-or-self 88.5038+-10.9461 ? 93.9929+-7.7281 ^ 22.9150+-0.3986 ^ definitely 3.8623x faster get-by-id-self-or-proto 77.4939+-8.3832 ? 93.5840+-9.0334 ^ 23.2360+-0.4549 ^ definitely 3.3351x faster HashMap-put-get-iterate-keys 85.9905+-0.6022 85.2178+-0.4312 84.9744+-0.6584 might be 1.0120x faster HashMap-put-get-iterate 89.1902+-0.8937 ? 90.9055+-0.8570 ? 91.0667+-0.6971 ! definitely 1.0210x slower HashMap-string-put-get-iterate 72.5963+-0.5256 ? 73.4586+-0.6337 ? 73.6254+-0.3767 ! definitely 1.0142x slower indexed-properties-in-objects 4.3451+-0.0636 ! 4.4402+-0.0113 4.4325+-0.0156 ! definitely 1.0201x slower inline-arguments-access 1.2758+-0.0330 ! 1.3632+-0.0138 ? 1.3656+-0.0148 ! definitely 1.0704x slower inline-arguments-local-escape 25.4749+-0.4816 ^ 23.1775+-0.3295 22.9538+-0.2450 ^ definitely 1.1098x faster inline-get-scoped-var 6.4871+-0.0684 ? 6.5056+-0.0745 ? 6.5531+-0.0795 ? might be 1.0102x slower inlined-put-by-id-transition 16.2780+-0.3036 ^ 14.8304+-0.2027 14.5252+-0.2582 ^ definitely 1.1207x faster int-or-other-abs-then-get-by-val 8.7706+-0.0887 ! 8.9808+-0.0881 8.9360+-0.0897 ? might be 1.0189x slower int-or-other-abs-zero-then-get-by-val 36.8646+-0.0844 ? 36.9991+-0.1302 ? 37.1567+-0.2785 ? int-or-other-add-then-get-by-val 10.1781+-0.0850 ? 10.2212+-0.0914 ? 10.2762+-0.1145 ? int-or-other-add 10.4812+-0.0667 ? 10.4980+-0.1084 ? 10.5137+-0.0718 ? int-or-other-div-then-get-by-val 6.3658+-0.0831 ? 6.3999+-0.0746 6.3035+-0.0790 int-or-other-max-then-get-by-val 7.2332+-0.0767 ? 7.3387+-0.1070 7.3274+-0.0954 ? might be 1.0130x slower int-or-other-min-then-get-by-val 7.3011+-0.0862 7.2822+-0.0701 ? 7.3933+-0.0948 ? might be 1.0126x slower int-or-other-mod-then-get-by-val 6.2039+-0.0763 6.1833+-0.1012 6.1624+-0.0738 int-or-other-mul-then-get-by-val 6.5467+-0.0965 6.4610+-0.0752 ? 6.5724+-0.0835 ? int-or-other-neg-then-get-by-val 8.0529+-0.0923 7.9717+-0.0752 ? 8.0986+-0.1006 ? int-or-other-neg-zero-then-get-by-val 36.7673+-0.3192 36.5204+-0.2644 ? 36.6889+-0.2520 int-or-other-sub-then-get-by-val 10.1413+-0.0670 ? 10.2789+-0.0947 10.2339+-0.1124 ? int-or-other-sub 8.1879+-0.0926 ? 8.2793+-0.1179 8.1801+-0.0815 int-overflow-local 11.9078+-0.2204 11.8227+-0.1812 11.7633+-0.1304 might be 1.0123x faster Int16Array-bubble-sort 49.1989+-0.1528 ! 49.7234+-0.1660 49.6636+-0.0730 ! definitely 1.0094x slower Int16Array-load-int-mul 1.9200+-0.0099 ? 1.9251+-0.0072 ? 1.9341+-0.0150 ? Int8Array-load 4.8002+-0.0659 ? 4.8134+-0.0526 ? 4.8180+-0.0593 ? integer-divide 15.3799+-0.2384 ? 15.3955+-0.1370 15.3171+-0.1149 integer-modulo 1.9954+-0.0201 1.9795+-0.0138 1.9727+-0.0103 might be 1.0115x faster make-indexed-storage 3.7304+-0.0342 ? 3.7599+-0.1022 ? 3.9216+-0.1453 ! definitely 1.0512x slower marsaglia 521.5661+-0.6712 520.8473+-0.5476 ? 521.3623+-0.2989 method-on-number 27.2531+-0.3917 26.5825+-0.3032 ^ 25.8539+-0.3782 ^ definitely 1.0541x faster nested-function-parsing-random 385.0966+-13.3681 380.6488+-13.0704 ? 394.6828+-13.3224 ? might be 1.0249x slower nested-function-parsing 47.8988+-0.9486 ? 48.2393+-1.1056 48.2193+-1.0325 ? new-array-buffer-dead 3.6648+-0.0202 ? 3.6960+-0.0657 ? 3.6992+-0.0683 ? new-array-buffer-push 10.2172+-0.1273 ? 10.2424+-0.1712 10.1984+-0.1949 new-array-dead 28.4345+-0.1260 28.3978+-0.0902 ? 28.8231+-0.4293 ? might be 1.0137x slower new-array-push 6.7966+-0.0513 ? 6.8387+-0.0498 6.8305+-0.0565 ? number-test 4.3675+-0.0630 4.3266+-0.0696 ? 4.3807+-0.0733 ? object-closure-call 12.9149+-1.4157 10.5454+-1.9110 ? 10.5542+-1.9159 might be 1.2237x faster object-test 4.8190+-0.0575 ? 4.8691+-0.0737 ? 4.9385+-0.1423 ? might be 1.0248x slower poly-stricteq 92.0432+-0.2317 91.8998+-0.2668 ? 93.0736+-1.2031 ? might be 1.0112x slower polymorphic-structure 20.9705+-0.1892 20.8193+-0.0833 ? 21.0303+-0.5561 ? polyvariant-monomorphic-get-by-id 12.5440+-0.0828 12.5417+-0.0999 ? 12.5760+-0.1046 ? rare-osr-exit-on-local 20.0151+-0.1034 ? 20.0200+-0.0636 ? 20.1111+-0.0574 ? register-pressure-from-osr 31.6860+-0.0844 31.4304+-0.1804 31.2382+-0.0460 ^ definitely 1.0143x faster simple-activation-demo 34.3251+-0.1015 ? 34.6341+-0.4088 34.2606+-0.0801 slow-array-profile-convergence 3.8994+-0.0213 3.8418+-0.0498 3.8202+-0.0569 ^ definitely 1.0207x faster slow-convergence 3.4244+-0.0144 ? 3.4535+-0.0189 ? 3.4645+-0.0131 ! definitely 1.0117x slower sparse-conditional 1.3228+-0.0186 1.3160+-0.0249 ^ 1.2622+-0.0235 ^ definitely 1.0480x faster splice-to-remove 49.4806+-0.2197 ! 50.1436+-0.2307 ? 50.3002+-0.4603 ! definitely 1.0166x slower string-concat-object 2.7493+-0.0488 2.7247+-0.0316 ? 2.7474+-0.0409 string-concat-pair-object 2.6498+-0.0449 ? 2.6506+-0.0122 ? 2.6623+-0.0295 ? string-concat-pair-simple 17.2728+-0.2463 17.0527+-0.2037 17.0116+-0.2578 might be 1.0154x faster string-concat-simple 17.2851+-0.3536 16.9752+-0.3118 ? 17.4068+-0.3865 ? string-cons-repeat 10.2054+-0.0219 10.1925+-0.0180 ? 10.1934+-0.0175 string-cons-tower 10.9177+-0.0293 10.8838+-0.0351 10.8716+-0.0349 string-hash 2.5622+-0.0138 ? 2.5721+-0.0104 2.5715+-0.0099 ? string-repeat-arith 45.0630+-0.3495 ^ 43.3468+-0.3528 ? 43.8571+-0.8397 ^ definitely 1.0275x faster string-sub 87.9294+-0.7877 ^ 85.7649+-0.6254 ? 86.5203+-0.5675 ^ definitely 1.0163x faster string-test 4.2099+-0.0438 ? 4.2458+-0.0715 ! 4.3853+-0.0487 ! definitely 1.0417x slower structure-hoist-over-transitions 3.1782+-0.0287 ? 3.1891+-0.0190 3.1829+-0.0211 ? tear-off-arguments-simple 1.7572+-0.0100 ! 1.9795+-0.0126 1.9785+-0.0121 ! definitely 1.1259x slower tear-off-arguments 3.1917+-0.0099 ! 3.3206+-0.0053 ? 3.3321+-0.0063 ! definitely 1.0440x slower temporal-structure 21.0500+-0.1098 ? 21.2926+-0.3760 21.0476+-0.0753 to-int32-boolean 23.1854+-0.1147 ^ 21.3925+-0.1140 21.3353+-0.0611 ^ definitely 1.0867x faster undefined-test 4.5156+-0.0519 4.4975+-0.0314 4.4863+-0.0483 <arithmetic> 26.4314+-0.1533 ? 26.5036+-0.1908 ^ 25.1952+-0.1629 ^ definitely 1.0491x faster <geometric> * 9.7911+-0.0302 9.7798+-0.0424 ^ 9.5115+-0.0402 ^ definitely 1.0294x faster <harmonic> 5.0970+-0.0294 ? 5.1259+-0.0195 5.1099+-0.0201 ? might be 1.0025x slower Old TipOfTree UnifiedPolyGet UnifiedPolyGet v. Old All benchmarks: <arithmetic> 42.6577+-0.3166 ^ 41.3176+-0.1554 ^ 40.4736+-0.0999 ^ definitely 1.0540x faster <geometric> 11.3249+-0.0459 11.2551+-0.0537 ^ 11.0651+-0.0514 ^ definitely 1.0235x faster <harmonic> 3.6303+-0.0296 ? 3.6383+-0.0307 3.6380+-0.0300 ? might be 1.0021x slower Old TipOfTree UnifiedPolyGet UnifiedPolyGet v. Old Geomean of preferred means: <scaled-result> 21.8654+-0.1020 21.7184+-0.1010 21.5848+-0.0996 ^ definitely 1.0130x faster
gbemu x2 253.92247+-16.72937 ^ 142.70076+-2.92763 ^ 136.96312+-1.94993 ^ definitely 1.8539x faster Delicious.
Comment on attachment 204106 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=204106&action=review r=me, but I think I spotted a bug. > Source/JavaScriptCore/ChangeLog:17 > + I believe that this was introduced way back in the days of the old interpreter, > + where distinguishing between self lists, proto lists, and chain lists was meaningful > + for interpreter performance: it meant fewer branches to evaluate those lists. Then Yup. > Source/JavaScriptCore/bytecode/PolymorphicAccessStructureList.h:69 > - this->isDirect = isDirect; > + isDirect = _isDirect; I prefer the this-> style, but I guess it's the minority in this function. > Source/JavaScriptCore/dfg/DFGRepatch.cpp:423 > + || baseValue.asCell()->structure()->isUncacheableDictionary()) I think we need to check propertyAccessesAreCacheable() instead of isUncacheableDictionary(), to account for prohibitsPropertyCaching().
(In reply to comment #4) > gbemu x2 253.92247+-16.72937 ^ 142.70076+-2.92763 ^ 136.96312+-1.94993 ^ definitely 1.8539x faster > > Delicious. Note most of that is from merging some fixes from trunk!
(In reply to comment #5) > (From update of attachment 204106 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=204106&action=review > > r=me, but I think I spotted a bug. > > > Source/JavaScriptCore/ChangeLog:17 > > + I believe that this was introduced way back in the days of the old interpreter, > > + where distinguishing between self lists, proto lists, and chain lists was meaningful > > + for interpreter performance: it meant fewer branches to evaluate those lists. Then > > Yup. > > > Source/JavaScriptCore/bytecode/PolymorphicAccessStructureList.h:69 > > - this->isDirect = isDirect; > > + isDirect = _isDirect; > > I prefer the this-> style, but I guess it's the minority in this function. > > > Source/JavaScriptCore/dfg/DFGRepatch.cpp:423 > > + || baseValue.asCell()->structure()->isUncacheableDictionary()) > > I think we need to check propertyAccessesAreCacheable() instead of isUncacheableDictionary(), to account for prohibitsPropertyCaching(). Yup, we do that check everywhere else. Will change and retest performance.
Landed in http://trac.webkit.org/changeset/151355