Bug 71195 - DFG ValueAdd(string, int) should not fail speculation
Summary: DFG ValueAdd(string, int) should not fail speculation
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-10-30 16:19 PDT by Filip Pizlo
Modified: 2011-10-30 17:21 PDT (History)
0 users

See Also:


Attachments
the patch (1.53 KB, patch)
2011-10-30 16:37 PDT, Filip Pizlo
no flags Details | Formatted Diff | Diff
the patch (1.31 KB, patch)
2011-10-30 16:39 PDT, Filip Pizlo
ggaren: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Filip Pizlo 2011-10-30 16:19:45 PDT
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.
Comment 1 Filip Pizlo 2011-10-30 16:37:11 PDT
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
Comment 2 Filip Pizlo 2011-10-30 16:39:23 PDT
Created attachment 113003 [details]
the patch

Removed a dead method.
Comment 3 Geoffrey Garen 2011-10-30 16:50:54 PDT
Comment on attachment 113003 [details]
the patch

shouldSpeculate vs shouldNotSpeculate vs canSpeculate is mind-boggling in the bad way :(.
Comment 4 Filip Pizlo 2011-10-30 17:21:40 PDT
Landed in http://trac.webkit.org/changeset/98832