Bug 156087

Summary: [JSC] CFA's valuesAtHead should be a list, not a map
Product: WebKit Reporter: Benjamin Poulain <benjamin>
Component: New BugsAssignee: Benjamin Poulain <benjamin>
Status: RESOLVED FIXED    
Severity: Normal CC: commit-queue, keith_miller, mark.lam, msaboff, saam
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
Attachments:
Description Flags
Patch
none
Patch for landing
none
Patch
none
Patch none

Description Benjamin Poulain 2016-03-31 15:39:30 PDT
[JSC] CFA's valuesAtHead should be a list, not a map
Comment 1 Benjamin Poulain 2016-03-31 15:41:55 PDT
Created attachment 275343 [details]
Patch
Comment 2 Benjamin Poulain 2016-03-31 15:42:13 PDT
                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                    5.0124+-0.1095     ?      5.0495+-0.1649        ?
   3d-morph                                   5.2697+-0.0952     ?      5.3258+-0.1489        ? might be 1.0107x slower
   3d-raytrace                                5.6004+-0.0559     ?      5.6452+-0.0747        ?
   access-binary-trees                        2.1611+-0.0345     ?      2.2603+-0.1425        ? might be 1.0459x slower
   access-fannkuch                            5.9909+-0.1478     ?      5.9946+-0.1222        ?
   access-nbody                               2.5929+-0.0700            2.5786+-0.0741        
   access-nsieve                              3.2500+-0.0844     ?      3.2807+-0.0344        ?
   bitops-3bit-bits-in-byte                   1.1734+-0.0652            1.1367+-0.0111          might be 1.0323x faster
   bitops-bits-in-byte                        2.7953+-0.0645     ?      2.8072+-0.0750        ?
   bitops-bitwise-and                         2.0582+-0.0202     ?      2.0760+-0.0156        ?
   bitops-nsieve-bits                         3.1624+-0.0833            3.1225+-0.0143          might be 1.0128x faster
   controlflow-recursive                      2.3448+-0.0275     ?      2.3459+-0.0204        ?
   crypto-aes                                 4.0596+-0.0582     ?      4.0630+-0.0314        ?
   crypto-md5                                 2.4968+-0.0493     ?      2.5639+-0.0964        ? might be 1.0269x slower
   crypto-sha1                                2.3092+-0.0268     ?      2.3446+-0.0294        ? might be 1.0153x slower
   date-format-tofte                          6.6700+-0.2007     ?      6.7207+-0.3148        ?
   date-format-xparb                          4.8888+-0.0453     ?      4.8957+-0.0996        ?
   math-cordic                                2.8755+-0.0680            2.8470+-0.0354          might be 1.0100x faster
   math-partial-sums                          4.8273+-0.1244            4.8156+-0.1142        
   math-spectral-norm                         2.0146+-0.0121            2.0107+-0.0211        
   regexp-dna                                 6.2893+-0.0666     ?      6.3829+-0.2097        ? might be 1.0149x slower
   string-base64                              4.4897+-0.0622            4.4598+-0.0668        
   string-fasta                               5.9860+-0.1249     ?      6.0070+-0.1505        ?
   string-tagcloud                            8.2003+-0.1059     ?      8.2580+-0.1416        ?
   string-unpack-code                        19.7223+-0.6065           18.9724+-0.5338          might be 1.0395x faster
   string-validate-input                      4.3760+-0.0587     ?      4.5129+-0.1157        ? might be 1.0313x slower

   <arithmetic>                               4.6391+-0.0293            4.6337+-0.0290          might be 1.0012x faster

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.16570+-0.00128          0.16392+-0.00077         might be 1.0109x faster
   decrypt                                   2.84671+-0.00361    ?     2.84968+-0.00424       ?
   deltablue                        x2       0.14134+-0.00145          0.13976+-0.00201         might be 1.0113x faster
   earley                                    0.28660+-0.00147          0.28592+-0.00127       
   boyer                                     5.00582+-0.06893    ?     5.01403+-0.04398       ?
   navier-stokes                    x2       5.00782+-0.00921          5.00033+-0.00779       
   raytrace                         x2       0.90237+-0.00319          0.89788+-0.00260       
   richards                         x2       0.08282+-0.00056    ?     0.08318+-0.00058       ?
   splay                            x2       0.35541+-0.00203          0.35212+-0.00271       
   regexp                           x2      18.88801+-0.17953         18.81963+-0.15750       
   pdfjs                            x2      39.45263+-0.35712         39.24387+-0.21780       
   mandreel                         x2      42.92651+-0.15591    ^    42.63580+-0.11702       ^ definitely 1.0068x faster
   gbemu                            x2      24.22296+-0.12918         24.16282+-0.09183       
   closure                                   0.55798+-0.00163          0.55783+-0.00170       
   jquery                                    7.23966+-0.02246          7.21009+-0.01784       
   box2d                            x2       9.28564+-0.04629    ?     9.29676+-0.05766       ?
   zlib                             x2     364.82151+-1.48672        364.29013+-4.55952       
   typescript                       x2     637.38728+-2.41539        636.77105+-3.40731       

   <geometric>                               5.18058+-0.00643    ^     5.16347+-0.00824       ^ definitely 1.0033x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                   88.454+-0.513      ?      89.055+-1.202         ?
   audio-beat-detection                       42.457+-0.103             42.290+-0.086         
   audio-dft                                 100.360+-1.766             98.818+-0.891           might be 1.0156x faster
   audio-fft                                  33.039+-0.471             32.827+-0.044         
   audio-oscillator                           48.470+-0.141      ?      48.548+-0.355         ?
   imaging-darkroom                           60.220+-0.110      ?      60.281+-0.332         ?
   imaging-desaturate                         45.902+-1.206             45.296+-0.211           might be 1.0134x faster
   imaging-gaussian-blur                      61.880+-0.920             61.762+-1.189         
   json-parse-financial                       38.174+-0.293      ^      37.275+-0.255         ^ definitely 1.0241x faster
   json-stringify-tinderbox                   24.590+-0.683      ^      22.721+-0.625         ^ definitely 1.0822x faster
   stanford-crypto-aes                        40.209+-0.666             40.152+-0.663         
   stanford-crypto-ccm                        36.426+-1.295             35.396+-1.116           might be 1.0291x faster
   stanford-crypto-pbkdf2                    100.125+-0.498             99.911+-0.193         
   stanford-crypto-sha256-iterative           39.341+-0.639             39.175+-0.194         

   <arithmetic>                               54.260+-0.244             53.822+-0.214           might be 1.0081x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               442.4133+-4.7837     ?    446.6549+-2.0427        ?
   cray.c                                   357.1573+-1.8432          356.9566+-2.2301        
   dry.c                                    447.4224+-33.0504    ?    463.2113+-40.5820       ? might be 1.0353x slower
   FloatMM.c                                731.9868+-1.8324     ?    733.0239+-1.8757        ?
   gcc-loops.cpp                           3719.1458+-12.1226        3713.4890+-3.4340        
   n-body.c                                 810.4151+-1.5719     ?    811.5347+-2.5391        ?
   Quicksort.c                              398.8821+-1.8514          398.2057+-1.3629        
   stepanov_container.cpp                  3326.1429+-14.8132        3307.3530+-14.7376       
   Towers.c                                 272.6502+-1.2299          272.1253+-0.5854        

   <geometric>                              726.0555+-5.1672     ?    728.7385+-6.4754        ? might be 1.0037x slower

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   <scaled-result>                           31.1929+-0.0960           31.1233+-0.0931          might be 1.0022x faster
Comment 3 Mark Lam 2016-03-31 15:50:02 PDT
Comment on attachment 275343 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=275343&action=review

r=me

> Source/JavaScriptCore/ChangeLog:8
> +        One more step toward moving to the Air-style of livness analysis:

typo: /livness/liveness/.

> Source/JavaScriptCore/dfg/DFGNode.h:2354
> +    T sortedMap = nodeValuePairList;
> +    std::sort(sortedMap.begin(), sortedMap.end(), nodeValuePairComparator<decltype(*sortedMap.begin())>);

Why not call it sortedList instead of sortedMap?
Comment 4 Benjamin Poulain 2016-03-31 15:51:53 PDT
Created attachment 275345 [details]
Patch for landing
Comment 5 Benjamin Poulain 2016-03-31 16:06:17 PDT
Created attachment 275348 [details]
Patch
Comment 6 Benjamin Poulain 2016-03-31 16:31:58 PDT
Created attachment 275353 [details]
Patch
Comment 7 WebKit Commit Bot 2016-03-31 18:48:31 PDT
Comment on attachment 275353 [details]
Patch

Clearing flags on attachment: 275353

Committed r198935: <http://trac.webkit.org/changeset/198935>
Comment 8 WebKit Commit Bot 2016-03-31 18:48:35 PDT
All reviewed patches have been landed.  Closing bug.
Comment 9 Darin Adler 2016-03-31 20:47:26 PDT
Comment on attachment 275353 [details]
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=275353&action=review

> Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp:89
> +    values.resize(0);

I think this can be shrink(0) and that might save one branch.
Comment 10 Benjamin Poulain 2016-04-01 18:36:17 PDT
(In reply to comment #9)
> Comment on attachment 275353 [details]
> Patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=275353&action=review
> 
> > Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp:89
> > +    values.resize(0);
> 
> I think this can be shrink(0) and that might save one branch.

If Clang really generates a branch here, we should file a bug.