Bug 117377 - fourthTier: DFG GetById patching shouldn't distinguish between self lists and proto lists
Summary: fourthTier: DFG GetById patching shouldn't distinguish between self lists and...
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-06-08 18:35 PDT by Filip Pizlo
Modified: 2013-06-09 12:19 PDT (History)
7 users (show)

See Also:


Attachments
the patch (24.70 KB, patch)
2013-06-08 18: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 2013-06-08 18:35:13 PDT
Patch forthcoming.
Comment 1 Filip Pizlo 2013-06-08 18:39:38 PDT
Created attachment 204106 [details]
the patch
Comment 2 Filip Pizlo 2013-06-08 18:44:33 PDT
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.
Comment 3 Filip Pizlo 2013-06-08 19:33:48 PDT
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
Comment 4 Geoffrey Garen 2013-06-09 10:13:35 PDT
   gbemu                                 x2     253.92247+-16.72937   ^   142.70076+-2.92763    ^   136.96312+-1.94993       ^ definitely 1.8539x faster

Delicious.
Comment 5 Geoffrey Garen 2013-06-09 10:18:16 PDT
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().
Comment 6 Filip Pizlo 2013-06-09 10:36:49 PDT
(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!
Comment 7 Filip Pizlo 2013-06-09 11:22:45 PDT
(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.
Comment 8 Filip Pizlo 2013-06-09 12:19:37 PDT
Landed in http://trac.webkit.org/changeset/151355