Because we still have some goofy logic left over from the static speculation days, an addition will end up speculating integer if either operand is predicted integer and neither operand has doublyness. But this means that string+int concatenation fails speculation every time.
Created attachment 113002 [details] the patch On my MacBook Pro: Benchmark report for SunSpider, V8, and Kraken. VMs tested: "TipOfTree" at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc "CarefulInt" at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc 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. TipOfTree CarefulInt SunSpider: 3d-cube 7.3259+-0.2009 7.3073+-0.1861 3d-morph 7.9552+-0.2032 ^ 7.5143+-0.1301 ^ definitely 1.0587x faster 3d-raytrace 7.5745+-0.2877 7.4723+-0.1598 might be 1.0137x faster access-binary-trees 1.5919+-0.0532 ? 1.6165+-0.0991 ? might be 1.0155x slower access-fannkuch 6.4633+-0.1043 6.4275+-0.0835 access-nbody 3.7428+-0.0875 ? 3.7665+-0.0755 ? access-nsieve 2.5399+-0.0561 ! 2.7178+-0.1177 ! definitely 1.0700x slower bitops-3bit-bits-in-byte 1.3109+-0.0308 ? 1.3318+-0.0350 ? might be 1.0159x slower bitops-bits-in-byte 2.4184+-0.0493 2.3974+-0.0912 bitops-bitwise-and 3.4004+-0.0707 ? 3.4229+-0.1392 ? bitops-nsieve-bits 5.3733+-0.0885 ? 5.4491+-0.1767 ? might be 1.0141x slower controlflow-recursive 2.1811+-0.0525 2.1350+-0.0572 might be 1.0216x faster crypto-aes 7.5692+-0.3790 ? 7.5974+-0.3586 ? crypto-md5 2.7485+-0.0883 2.6901+-0.0641 might be 1.0217x faster crypto-sha1 2.5225+-0.0831 2.5074+-0.0786 date-format-tofte 10.3182+-0.3545 ? 10.5272+-0.3219 ? might be 1.0203x slower date-format-xparb 9.5610+-0.3060 9.0423+-0.3222 might be 1.0574x faster math-cordic 6.4785+-0.1218 6.3923+-0.0889 might be 1.0135x faster math-partial-sums 7.6059+-0.2173 7.5550+-0.2191 math-spectral-norm 2.6434+-0.0745 2.5893+-0.0622 might be 1.0209x faster regexp-dna 11.7834+-0.3481 ? 11.8475+-0.2318 ? string-base64 4.5257+-0.2658 4.3191+-0.1457 might be 1.0478x faster string-fasta 6.4393+-0.1803 6.3954+-0.1645 string-tagcloud 12.0152+-0.3070 11.7852+-0.3769 might be 1.0195x faster string-unpack-code 20.5993+-0.5628 ? 21.0286+-0.5792 ? might be 1.0208x slower string-validate-input 5.3187+-0.0938 ? 5.3893+-0.1995 ? might be 1.0133x slower <arithmetic> * 6.2310+-0.0409 6.2009+-0.0329 <geometric> 5.0164+-0.0330 4.9932+-0.0270 <harmonic> 3.9982+-0.0342 3.9927+-0.0393 TipOfTree CarefulInt V8: crypto 73.1664+-0.3527 ? 73.1677+-0.2378 ? deltablue 175.2406+-0.6489 ^ 165.6919+-0.9282 ^ definitely 1.0576x faster earley-boyer 90.4457+-0.5623 ? 90.5133+-0.4641 ? raytrace 63.8960+-2.0470 63.4613+-0.4670 regexp 105.8455+-0.5584 105.0330+-0.4212 richards 124.7142+-0.5617 ? 125.4665+-0.7181 ? splay 93.4173+-0.6427 92.2681+-0.5995 might be 1.0125x faster <arithmetic> 103.8179+-0.2809 ^ 102.2288+-0.2332 ^ definitely 1.0155x faster <geometric> * 98.7026+-0.3864 ^ 97.6485+-0.2145 ^ definitely 1.0108x faster <harmonic> 94.2319+-0.5346 93.5308+-0.2211 TipOfTree CarefulInt Kraken: ai-astar 495.6258+-1.4470 495.0451+-1.4095 audio-beat-detection 193.1900+-2.1893 191.1431+-1.4454 might be 1.0107x faster audio-dft 268.4201+-3.4503 268.2043+-3.1973 audio-fft 124.5449+-0.8480 ? 124.6707+-1.0365 ? audio-oscillator 252.6236+-1.2134 ? 252.7995+-2.6054 ? imaging-darkroom 407.1107+-3.2206 403.5027+-3.6943 imaging-desaturate 226.9378+-2.5364 224.5258+-1.4722 might be 1.0107x faster imaging-gaussian-blur 553.4083+-2.3280 552.8223+-1.9311 json-parse-financial 57.1128+-0.1394 ! 57.8648+-0.3231 ! definitely 1.0132x slower json-stringify-tinderbox 68.9238+-0.3309 ? 68.9904+-0.6905 ? stanford-crypto-aes 133.8447+-2.1733 133.1328+-1.1985 stanford-crypto-ccm 100.7223+-1.0065 ? 102.8278+-2.9258 ? might be 1.0209x slower stanford-crypto-pbkdf2 196.1437+-1.4767 ^ 193.2595+-0.7409 ^ definitely 1.0149x faster stanford-crypto-sha256-iterative 71.4571+-0.6219 70.6566+-0.2515 might be 1.0113x faster <arithmetic> * 225.0047+-0.5366 224.2461+-0.7780 <geometric> 177.4582+-0.2696 177.0967+-0.6993 <harmonic> 139.8567+-0.2994 ? 139.9118+-0.5708 ? TipOfTree CarefulInt All benchmarks: <arithmetic> 85.9319+-0.1747 ^ 85.4526+-0.2378 ^ definitely 1.0056x faster <geometric> 22.6161+-0.0923 22.5083+-0.0653 <harmonic> 7.0387+-0.0589 7.0287+-0.0674 TipOfTree CarefulInt Geomean of preferred means: <scaled-result> 51.7234+-0.1504 ^ 51.3977+-0.1042 ^ definitely 1.0063x faster On my Mac Pro: Benchmark report for SunSpider, V8, and Kraken. VMs tested: "TipOfTree" at /Volumes/Data/fromMiniMe/quinary/OpenSource/WebKitBuild/Release/jsc "CarefulInt" at /Volumes/Data/fromMiniMe/tertiary/OpenSource/WebKitBuild/Release/jsc 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. TipOfTree CarefulInt SunSpider: 3d-cube 7.8440+-0.0223 ? 7.8919+-0.0482 ? 3d-morph 8.5234+-0.1301 8.3797+-0.0302 might be 1.0172x faster 3d-raytrace 8.1137+-0.0931 ? 8.1800+-0.1380 ? access-binary-trees 1.7174+-0.0269 1.7090+-0.0218 access-fannkuch 7.7988+-0.0978 7.7535+-0.0110 access-nbody 4.5673+-0.0089 ? 4.5688+-0.0125 ? access-nsieve 3.2088+-0.0402 ? 3.2164+-0.0232 ? bitops-3bit-bits-in-byte 1.3095+-0.0154 ? 1.3096+-0.0161 ? bitops-bits-in-byte 4.9947+-0.0474 4.9710+-0.0331 bitops-bitwise-and 3.4317+-0.0609 ? 3.4607+-0.0715 ? bitops-nsieve-bits 5.6564+-0.0331 5.6477+-0.0377 controlflow-recursive 2.3517+-0.0236 ? 2.3540+-0.0265 ? crypto-aes 7.5701+-0.0587 7.5595+-0.0231 crypto-md5 2.8627+-0.0183 ? 2.8729+-0.0242 ? crypto-sha1 2.6270+-0.0206 ? 2.6472+-0.0230 ? date-format-tofte 10.6375+-0.0808 ? 10.6982+-0.0645 ? date-format-xparb 9.9140+-0.1294 ? 10.0989+-0.1979 ? might be 1.0186x slower math-cordic 7.2762+-0.0594 7.2404+-0.0221 math-partial-sums 10.5791+-0.0490 10.5516+-0.0485 math-spectral-norm 2.8966+-0.0232 2.8933+-0.0177 regexp-dna 13.3787+-0.1628 13.3118+-0.1501 string-base64 4.5195+-0.0185 ? 4.5264+-0.0240 ? string-fasta 7.1627+-0.0211 ? 7.1689+-0.0252 ? string-tagcloud 13.0597+-0.0785 ? 13.2237+-0.1193 ? might be 1.0126x slower string-unpack-code 23.1291+-0.1420 22.9427+-0.1497 string-validate-input 5.7961+-0.0278 ? 5.8358+-0.0317 ? <arithmetic> * 6.9587+-0.0245 ? 6.9621+-0.0279 ? <geometric> 5.6273+-0.0216 ? 5.6330+-0.0249 ? <harmonic> 4.4600+-0.0228 ? 4.4643+-0.0260 ? TipOfTree CarefulInt V8: crypto 81.3621+-0.3232 80.9548+-0.2083 deltablue 192.7184+-1.2097 ^ 182.7422+-1.6153 ^ definitely 1.0546x faster earley-boyer 111.7999+-0.5667 ! 113.0647+-0.4650 ! definitely 1.0113x slower raytrace 69.4843+-0.6571 ? 69.9902+-0.1636 ? regexp 126.1348+-0.8987 ^ 124.0840+-0.3885 ^ definitely 1.0165x faster richards 142.0968+-0.4247 ^ 141.3769+-0.1346 ^ definitely 1.0051x faster splay 121.4775+-0.6170 ? 121.8387+-0.6534 ? <arithmetic> 120.7248+-0.2570 ^ 119.1502+-0.3412 ^ definitely 1.0132x faster <geometric> * 114.9465+-0.1791 ^ 113.9977+-0.2625 ^ definitely 1.0083x faster <harmonic> 109.3425+-0.1394 ^ 108.8668+-0.2012 ^ definitely 1.0044x faster TipOfTree CarefulInt Kraken: ai-astar 816.1167+-13.0761 ? 824.9342+-11.1520 ? might be 1.0108x slower audio-beat-detection 213.2418+-1.3848 212.9750+-0.9994 audio-dft 262.1463+-2.6353 ? 268.3749+-7.2382 ? might be 1.0238x slower audio-fft 133.3075+-0.9497 133.1602+-0.7139 audio-oscillator 290.3676+-1.0905 ? 291.8766+-1.4937 ? imaging-darkroom 442.5757+-2.2209 ? 448.0228+-7.1744 ? might be 1.0123x slower imaging-desaturate 245.2036+-0.1339 245.1909+-0.0931 imaging-gaussian-blur 621.4213+-0.3113 621.1067+-0.1200 json-parse-financial 72.1867+-0.1426 71.6634+-0.8350 json-stringify-tinderbox 79.2767+-0.3358 ^ 78.7205+-0.1798 ^ definitely 1.0071x faster stanford-crypto-aes 151.3100+-1.3998 ? 152.5743+-2.0676 ? stanford-crypto-ccm 115.7618+-0.5269 115.5246+-0.5450 stanford-crypto-pbkdf2 238.1239+-2.3985 ? 239.5616+-4.6322 ? stanford-crypto-sha256-iterative 85.1225+-0.1959 ? 85.5411+-0.2729 ? <arithmetic> * 269.0116+-0.9170 ? 270.6590+-1.7696 ? <geometric> 205.6371+-0.3837 ? 206.3804+-0.9686 ? <harmonic> 162.2444+-0.2454 ? 162.3375+-0.5396 ? TipOfTree CarefulInt All benchmarks: <arithmetic> 101.9609+-0.2875 ? 102.2190+-0.5113 ? <geometric> 25.7602+-0.0695 ? 25.7705+-0.0835 ? <harmonic> 7.8596+-0.0393 ? 7.8668+-0.0449 ? TipOfTree CarefulInt Geomean of preferred means: <scaled-result> 59.9234+-0.1327 59.8887+-0.1594
Created attachment 113003 [details] the patch Removed a dead method.
Comment on attachment 113003 [details] the patch shouldSpeculate vs shouldNotSpeculate vs canSpeculate is mind-boggling in the bad way :(.
Landed in http://trac.webkit.org/changeset/98832