Bug 144725 - [JSC] Add basic DFG/FTL support for Math.round
Summary: [JSC] Add basic DFG/FTL support for Math.round
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: New Bugs (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Benjamin Poulain
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-05-06 20:53 PDT by Benjamin Poulain
Modified: 2015-05-08 09:27 PDT (History)
3 users (show)

See Also:


Attachments
Patch (36.82 KB, patch)
2015-05-06 20:59 PDT, Benjamin Poulain
no flags Details | Formatted Diff | Diff
Patch (39.07 KB, patch)
2015-05-06 23:33 PDT, Benjamin Poulain
no flags Details | Formatted Diff | Diff
Patch (39.85 KB, patch)
2015-05-07 15:49 PDT, Benjamin Poulain
fpizlo: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Benjamin Poulain 2015-05-06 20:53:21 PDT
[JSC] Add basic DFG/FTL support for Math.round
Comment 1 Benjamin Poulain 2015-05-06 20:59:57 PDT
Created attachment 252562 [details]
Patch
Comment 2 Benjamin Poulain 2015-05-06 21:09:37 PDT
Comment on attachment 252562 [details]
Patch

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

> Source/JavaScriptCore/tests/stress/math-round-basics.js:21
> +for (var i = 1; i < 1e7; ++i) {

Note to self: change all the 1e7 to 1e4 before landing.
Comment 3 Filip Pizlo 2015-05-06 21:12:55 PDT
Comment on attachment 252562 [details]
Patch

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

> Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:771
> +        if (node->result() == NodeResultInt32)

Please use an OpInfo to convey this.  We currently don't use NodeResult for this purpose.  We probably could, but it's not how we do this elsewhere.  Look at the ArithMode that a lot of other Arith* ops use.  Maybe you can just adopt that?
Comment 4 Benjamin Poulain 2015-05-06 23:33:25 PDT
Created attachment 252575 [details]
Patch
Comment 5 Benjamin Poulain 2015-05-06 23:57:46 PDT
                                                          Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                            4.1408+-0.1538            4.0276+-0.1259          might be 1.0281x faster
   3d-morph                                           4.8290+-0.2785     ?      5.0485+-0.8525        ? might be 1.0455x slower
   3d-raytrace                                        4.7953+-0.0668     ?      5.0070+-0.1707        ? might be 1.0441x slower
   access-binary-trees                                1.8532+-0.0437            1.8175+-0.0575          might be 1.0196x faster
   access-fannkuch                                    4.8389+-0.0320     ?      4.8873+-0.2649        ?
   access-nbody                                       2.3209+-0.2143            2.2186+-0.0189          might be 1.0461x faster
   access-nsieve                                      2.9828+-0.2532            2.9258+-0.0861          might be 1.0195x faster
   bitops-3bit-bits-in-byte                           1.3005+-0.0642     ?      1.3358+-0.0813        ? might be 1.0271x slower
   bitops-bits-in-byte                                3.2125+-0.2960     ?      3.3729+-0.2112        ? might be 1.0499x slower
   bitops-bitwise-and                                 2.0087+-0.5399            1.7947+-0.0220          might be 1.1192x faster
   bitops-nsieve-bits                                 2.8845+-0.8473            2.6803+-0.1700          might be 1.0762x faster
   controlflow-recursive                              1.9271+-0.3576     ?      1.9525+-0.1982        ? might be 1.0132x slower
   crypto-aes                                         3.4355+-0.2600            3.4088+-0.1603        
   crypto-md5                                         2.3564+-0.4712            2.3140+-0.1180          might be 1.0184x faster
   crypto-sha1                                        2.3710+-0.3813            2.1962+-0.2614          might be 1.0796x faster
   date-format-tofte                                  6.3610+-0.2712     ?      6.9952+-0.8896        ? might be 1.0997x slower
   date-format-xparb                                  4.5204+-0.4078            4.3065+-0.1562          might be 1.0497x faster
   math-cordic                                        2.5794+-0.0978     ?      2.6075+-0.1006        ? might be 1.0109x slower
   math-partial-sums                                  3.9824+-0.0925     ?      4.2279+-0.7474        ? might be 1.0616x slower
   math-spectral-norm                                 1.6602+-0.0723     ?      1.7245+-0.2965        ? might be 1.0387x slower
   regexp-dna                                         5.7232+-0.2834     ?      6.0850+-0.6615        ? might be 1.0632x slower
   string-base64                                      3.8460+-0.4509            3.7258+-0.2409          might be 1.0323x faster
   string-fasta                                       5.2444+-0.1163     ?      5.3200+-0.2242        ? might be 1.0144x slower
   string-tagcloud                                    7.7955+-0.4066            7.5438+-0.1482          might be 1.0334x faster
   string-unpack-code                                18.3552+-2.2503           17.8423+-0.9125          might be 1.0287x faster
   string-validate-input                              4.0030+-0.1147            3.9822+-0.0517        

   <arithmetic>                                       4.2049+-0.0894     ?      4.2057+-0.0697        ? might be 1.0002x slower

                                                          Conf#1                    Conf#2                                      
LongSpider:
   3d-cube                                          742.0926+-6.2050     ?    748.6735+-1.4699        ?
   3d-morph                                        1441.7476+-1.2056     ?   1443.6202+-3.6666        ?
   3d-raytrace                                      625.7559+-0.8364     ?    626.2554+-1.3328        ?
   access-binary-trees                              910.2609+-22.9322    ?    918.5071+-10.6800       ?
   access-fannkuch                                  250.7925+-10.5322         247.9307+-6.3436          might be 1.0115x faster
   access-nbody                                     519.2402+-2.5508     ?    521.3293+-1.9713        ?
   access-nsieve                                    478.1918+-14.2554         473.7713+-4.5105        
   bitops-3bit-bits-in-byte                          38.9532+-1.5190           38.1597+-0.4094          might be 1.0208x faster
   bitops-bits-in-byte                               68.2141+-3.5217     ?     69.2349+-3.0288        ? might be 1.0150x slower
   bitops-nsieve-bits                               372.9376+-2.1016     ?    373.1197+-0.8348        ?
   controlflow-recursive                            438.1106+-1.6255          429.1138+-15.3511         might be 1.0210x faster
   crypto-aes                                       539.0515+-4.0504     ?    540.9770+-12.4616       ?
   crypto-md5                                       464.2847+-6.1039          455.7278+-14.1588         might be 1.0188x faster
   crypto-sha1                                      544.1443+-17.1713    ?    546.0656+-17.2581       ?
   date-format-tofte                                486.2997+-9.5814     ?    493.7668+-12.9947       ? might be 1.0154x slower
   date-format-xparb                                614.8380+-10.5116         604.2457+-5.0432          might be 1.0175x faster
   hash-map                                         147.1874+-4.6784     ?    165.6903+-49.0994       ? might be 1.1257x slower
   math-cordic                                      473.6155+-0.8228     ?    474.5190+-2.0292        ?
   math-partial-sums                                402.8023+-2.4723     ^    398.3118+-0.5093        ^ definitely 1.0113x faster
   math-spectral-norm                               529.7989+-2.0975          529.5065+-0.5446        
   string-base64                                    321.1147+-1.9659          320.8398+-3.8377        
   string-fasta                                     356.5018+-3.1154     ?    358.2148+-5.3363        ?
   string-tagcloud                                  169.4116+-2.0863          169.3607+-1.2258        

   <geometric>                                      378.1451+-2.0365     ?    379.2141+-4.9575        ? might be 1.0028x slower

                                                          Conf#1                    Conf#2                                      
V8Spider:
   crypto                                            48.5956+-0.7492           47.2966+-2.3150          might be 1.0275x faster
   deltablue                                         81.5040+-8.0517           78.2980+-9.4841          might be 1.0409x faster
   earley-boyer                                      37.7719+-1.8089           37.5505+-0.9757        
   raytrace                                          29.8913+-2.3763           29.0375+-1.5596          might be 1.0294x faster
   regexp                                            66.0854+-2.4834     ?     66.4735+-6.2305        ?
   richards                                          74.1684+-4.6052           67.4373+-4.0951          might be 1.0998x faster
   splay                                             36.6972+-3.1347     ?     36.7380+-2.6863        ?

   <geometric>                                       50.1832+-1.6333           48.8375+-2.1782          might be 1.0276x faster

                                                          Conf#1                    Conf#2                                      
Octane:
   encrypt                                           0.18806+-0.00181    ?     0.18836+-0.00155       ?
   decrypt                                           3.24250+-0.02470    ?     3.27323+-0.05516       ?
   deltablue                                x2       0.15486+-0.00602          0.15431+-0.00241       
   earley                                            0.44752+-0.00927          0.43919+-0.00905         might be 1.0190x faster
   boyer                                             5.68789+-0.07786          5.62806+-0.06387         might be 1.0106x faster
   navier-stokes                            x2       4.82803+-0.01536    ?     4.83638+-0.02194       ?
   raytrace                                 x2       1.10704+-0.02818          1.03943+-0.09239         might be 1.0651x faster
   richards                                 x2       0.08731+-0.00099    ?     0.08807+-0.00110       ?
   splay                                    x2       0.39588+-0.00676    ?     0.40022+-0.00880       ? might be 1.0110x slower
   regexp                                   x2      27.04717+-1.26738         26.96558+-0.57982       
   pdfjs                                    x2      37.08901+-0.90512         36.51697+-0.78912         might be 1.0157x faster
   mandreel                                 x2      42.85548+-0.82111         42.30857+-0.50992         might be 1.0129x faster
   gbemu                                    x2      31.27731+-0.43313         30.98388+-0.40018       
   closure                                           0.45630+-0.00151    ?     0.45999+-0.00713       ?
   jquery                                            5.64665+-0.04966    ?     5.65332+-0.01967       ?
   box2d                                    x2       9.80045+-0.22828          9.70455+-0.08865       
   zlib                                     x2     365.98088+-7.60072        355.77212+-26.12710        might be 1.0287x faster
   typescript                               x2     653.52350+-21.57603   ?   668.55707+-32.34518      ? might be 1.0230x slower

   <geometric>                                       5.62825+-0.04750          5.58802+-0.02906         might be 1.0072x faster

                                                          Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                          394.653+-18.956     ^     286.637+-9.304         ^ definitely 1.3768x faster
   audio-beat-detection                               93.189+-1.486             92.837+-0.733         
   audio-dft                                          99.570+-2.315      ?     101.089+-4.512         ? might be 1.0152x slower
   audio-fft                                          77.202+-0.354      ?      77.341+-0.292         ?
   audio-oscillator                                  171.940+-6.512      ^      61.136+-1.465         ^ definitely 2.8124x faster
   imaging-darkroom                                   89.956+-1.418      ?      90.223+-1.107         ?
   imaging-desaturate                                 53.181+-4.543             52.268+-2.165           might be 1.0175x faster
   imaging-gaussian-blur                              82.337+-2.067             81.076+-1.237           might be 1.0155x faster
   json-parse-financial                               36.527+-1.276             35.209+-0.493           might be 1.0374x faster
   json-stringify-tinderbox                           41.711+-0.986             41.298+-1.239         
   stanford-crypto-aes                                51.029+-1.578             50.444+-1.555           might be 1.0116x faster
   stanford-crypto-ccm                                46.250+-1.079      ?      47.291+-2.726         ? might be 1.0225x slower
   stanford-crypto-pbkdf2                            116.369+-1.113      ^     114.677+-0.443         ^ definitely 1.0148x faster
   stanford-crypto-sha256-iterative                   43.652+-0.443             43.093+-1.236           might be 1.0130x faster

   <arithmetic>                                       99.826+-1.340      ^      83.901+-1.001         ^ definitely 1.1898x faster

                                                          Conf#1                    Conf#2                                      
JSRegress:
   abs-boolean                                        2.1707+-0.0391     ?      2.2059+-0.0651        ? might be 1.0162x slower
   adapt-to-double-divide                            14.9608+-0.2445     ?     15.3970+-1.2129        ? might be 1.0292x slower
   aliased-arguments-getbyval                         0.9788+-0.0727            0.9706+-0.0899        
   allocate-big-object                                2.3665+-0.1130     ?      2.4035+-0.0896        ? might be 1.0157x slower
   arguments-named-and-reflective                     9.9796+-0.2786     ?     10.1203+-0.2851        ? might be 1.0141x slower
   arguments-out-of-bounds                            9.3035+-0.2992     ?      9.5052+-0.7641        ? might be 1.0217x slower
   arguments-strict-mode                              8.7437+-0.7168            8.5001+-0.0935          might be 1.0287x faster
   arguments                                          7.6077+-0.2753            7.4965+-0.2800          might be 1.0148x faster
   arity-mismatch-inlining                            0.7410+-0.0693     ?      0.7617+-0.1125        ? might be 1.0279x slower
   array-access-polymorphic-structure                 5.6805+-0.3525     ?      5.7295+-0.3969        ?
   array-nonarray-polymorhpic-access                 26.3643+-1.3444           26.2675+-2.1015        
   array-prototype-every                             74.4895+-2.3182           72.1460+-1.6974          might be 1.0325x faster
   array-prototype-forEach                           71.5989+-1.0636           71.1128+-1.6782        
   array-prototype-map                               81.1539+-4.6785           77.8512+-3.0128          might be 1.0424x faster
   array-prototype-some                              73.3917+-1.9823     ?     74.6633+-5.7543        ? might be 1.0173x slower
   array-splice-contiguous                           38.0793+-0.5818     ?     38.7025+-1.4564        ? might be 1.0164x slower
   array-with-double-add                              3.1910+-0.4039     ?      3.2274+-0.5017        ? might be 1.0114x slower
   array-with-double-increment                        2.7560+-0.1725            2.7161+-0.0231          might be 1.0147x faster
   array-with-double-mul-add                          3.7534+-0.0831     ?      3.8052+-0.2257        ? might be 1.0138x slower
   array-with-double-sum                              3.0185+-0.4226            2.8887+-0.0476          might be 1.0449x faster
   array-with-int32-add-sub                           5.3752+-0.0781            5.3067+-0.2354          might be 1.0129x faster
   array-with-int32-or-double-sum                     2.8518+-0.0311     ?      2.8998+-0.0419        ? might be 1.0168x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     29.9050+-1.1446     ?     30.0977+-1.8736        ?
   ArrayBuffer-DataView-alloc-long-lived             11.6537+-0.6909     ?     11.8667+-0.3449        ? might be 1.0183x slower
   ArrayBuffer-Int32Array-byteOffset                  3.3138+-0.0885     ?      3.4898+-0.3809        ? might be 1.0531x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     30.2892+-2.1806     ?     45.4797+-33.9094       ? might be 1.5015x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.8328+-1.0598           19.5480+-0.3432          might be 1.0146x faster
   ArrayBuffer-Int8Array-alloc-long-lived            10.9482+-0.2063     ?     11.3303+-0.9217        ? might be 1.0349x slower
   ArrayBuffer-Int8Array-alloc                        9.4655+-0.3181     ?      9.7499+-0.5644        ? might be 1.0301x slower
   asmjs_bool_bug                                     6.9682+-0.8248            6.7121+-0.2364          might be 1.0382x faster
   assign-custom-setter-polymorphic                   2.2917+-0.0479            2.2416+-0.0415          might be 1.0224x faster
   assign-custom-setter                               3.0968+-0.0925     ?      3.2080+-0.2058        ? might be 1.0359x slower
   basic-set                                          7.8178+-1.3821            7.3928+-0.9171          might be 1.0575x faster
   big-int-mul                                        3.2222+-0.1583            3.1298+-0.0234          might be 1.0295x faster
   boolean-test                                       2.5367+-0.1253            2.5140+-0.0452        
   branch-fold                                        3.3301+-0.1599            3.2914+-0.0469          might be 1.0118x faster
   branch-on-string-as-boolean                       13.7684+-0.4069     ?     13.8007+-0.7698        ?
   by-val-generic                                     6.9795+-0.8140            6.5595+-0.0893          might be 1.0640x faster
   call-spread-apply                                 26.6556+-3.1630           25.5533+-0.9641          might be 1.0431x faster
   call-spread-call                                  21.1185+-1.2235           20.4924+-0.6770          might be 1.0306x faster
   captured-assignments                               0.3192+-0.0156     ?      0.3246+-0.0201        ? might be 1.0172x slower
   cast-int-to-double                                 4.3957+-0.0992            4.3669+-0.2977        
   cell-argument                                      5.6570+-0.0544            5.6190+-0.3151        
   cfg-simplify                                       2.4593+-0.0234     ?      2.5029+-0.1319        ? might be 1.0177x slower
   chain-getter-access                                7.5379+-0.1469            7.5150+-0.1175        
   cmpeq-obj-to-obj-other                             9.6130+-1.9721     ?     12.0886+-3.4838        ? might be 1.2575x slower
   constant-test                                      4.0902+-0.0727     ?      4.2035+-0.1620        ? might be 1.0277x slower
   create-lots-of-functions                          10.7288+-0.2483           10.7117+-0.2308        
   DataView-custom-properties                        34.1357+-1.4443     ?     34.8354+-2.1948        ? might be 1.0205x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.3622+-0.0299     ?      0.3767+-0.0554        ? might be 1.0399x slower
   delay-tear-off-arguments-strictmode               11.7769+-0.3293           11.6714+-0.1642        
   deltablue-varargs                                149.9948+-5.8519          148.8525+-1.5563        
   destructuring-arguments                           14.7909+-0.2301           14.7690+-0.5764        
   destructuring-swap                                 4.4656+-0.3919     ?      4.4686+-0.5351        ?
   direct-arguments-getbyval                          0.9990+-0.0931            0.9937+-0.1043        
   div-boolean-double                                 5.1048+-0.3680            4.9713+-0.1325          might be 1.0269x faster
   div-boolean                                        7.6152+-0.1349     ?      7.6910+-0.1582        ?
   double-get-by-val-out-of-bounds                    3.8902+-0.1048     ?      4.0157+-0.1354        ? might be 1.0323x slower
   double-pollution-getbyval                          8.6411+-1.3076            8.2016+-0.2874          might be 1.0536x faster
   double-pollution-putbyoffset                       3.4963+-0.0562     ?      3.7742+-0.8879        ? might be 1.0795x slower
   double-to-int32-typed-array-no-inline              1.9650+-0.0984     ?      2.0133+-0.3036        ? might be 1.0246x slower
   double-to-int32-typed-array                        1.6549+-0.1376            1.5928+-0.0909          might be 1.0390x faster
   double-to-uint32-typed-array-no-inline             2.0097+-0.0780            1.9711+-0.1486          might be 1.0196x faster
   double-to-uint32-typed-array                       1.6829+-0.2157            1.6038+-0.0827          might be 1.0493x faster
   elidable-new-object-dag                           37.1661+-0.7730     ?     37.3814+-1.1081        ?
   elidable-new-object-roflcopter                    39.4862+-1.3082           39.1473+-1.7006        
   elidable-new-object-then-call                     31.8257+-4.7430           30.2048+-1.6187          might be 1.0537x faster
   elidable-new-object-tree                          40.7846+-1.0998           40.3422+-1.6529          might be 1.0110x faster
   empty-string-plus-int                              4.4610+-0.0841     ?      4.4715+-0.1468        ?
   emscripten-cube2hash                              24.1464+-2.3437     ?     25.1727+-2.4360        ? might be 1.0425x slower
   exit-length-on-plain-object                       11.5229+-0.0323     ?     11.5255+-0.2975        ?
   external-arguments-getbyval                        0.9725+-0.0575     ?      0.9900+-0.0734        ? might be 1.0180x slower
   external-arguments-putbyval                        1.9135+-0.1551     ?      1.9439+-0.1653        ? might be 1.0159x slower
   fixed-typed-array-storage-var-index                0.9724+-0.0145     ?      1.0333+-0.0627        ? might be 1.0627x slower
   fixed-typed-array-storage                          0.7640+-0.0812     ?      0.7833+-0.1327        ? might be 1.0252x slower
   Float32Array-matrix-mult                           3.5615+-0.1680            3.4761+-0.0939          might be 1.0245x faster
   Float32Array-to-Float64Array-set                  44.3898+-0.8819     ?     44.8405+-0.5586        ? might be 1.0102x slower
   Float64Array-alloc-long-lived                     63.2968+-2.1876           61.4168+-0.7875          might be 1.0306x faster
   Float64Array-to-Int16Array-set                    53.2209+-1.4505           52.5873+-1.4437          might be 1.0120x faster
   fold-double-to-int                                11.2084+-0.1455     ?     11.2532+-0.2173        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.7832+-0.7676     ?     10.0682+-0.5893        ? might be 1.0291x slower
   fold-get-by-id-to-multi-get-by-offset              8.4203+-0.5027            8.0818+-0.2958          might be 1.0419x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.2079+-1.2179            7.5118+-2.3483          might be 1.0927x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.2023+-0.5107            7.8900+-1.3132          might be 1.0396x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      6.6140+-2.2769     ?      7.1415+-1.4050        ? might be 1.0798x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      3.5494+-0.4411            3.5005+-0.3918          might be 1.0140x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.3168+-0.1272            8.1092+-0.3521          might be 1.0256x faster
   fold-put-by-id-to-multi-put-by-offset              8.4591+-0.1240            8.1842+-0.4866          might be 1.0336x faster
   fold-put-structure                                 4.3883+-0.8894            3.9022+-0.4871          might be 1.1246x faster
   for-of-iterate-array-entries                       4.1708+-0.8784            3.8546+-0.2674          might be 1.0820x faster
   for-of-iterate-array-keys                          2.9442+-0.1111     ?      3.0408+-0.2597        ? might be 1.0328x slower
   for-of-iterate-array-values                        2.9077+-0.1185     ?      3.0927+-0.5521        ? might be 1.0636x slower
   fround                                            17.0254+-0.5693           16.8832+-0.8294        
   ftl-library-inlining-dataview                     55.3542+-1.8304           54.8253+-1.2813        
   ftl-library-inlining                             104.3007+-1.9121          104.0242+-0.6178        
   function-dot-apply                                 1.5593+-0.1843            1.4932+-0.0665          might be 1.0442x faster
   function-test                                      2.6245+-0.5554            2.4208+-0.0417          might be 1.0842x faster
   function-with-eval                                89.4238+-1.5689     ?     90.6534+-9.3003        ? might be 1.0137x slower
   gcse-poly-get-less-obvious                        13.4318+-0.1460     ?     13.5419+-0.9975        ?
   gcse-poly-get                                     15.2101+-0.4316           13.5820+-1.4045          might be 1.1199x faster
   gcse                                               3.4615+-0.0867     ?      3.4977+-0.1152        ? might be 1.0105x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.3269+-0.0175     ?      2.3625+-0.1076        ? might be 1.0153x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.4736+-0.2125     ?      5.5251+-1.0522        ?
   get-by-id-chain-from-try-block                     6.0765+-0.5667     ?      6.1981+-0.6636        ? might be 1.0200x slower
   get-by-id-check-structure-elimination              4.0150+-0.2311     ?      4.0515+-0.2335        ?
   get-by-id-proto-or-self                           12.6577+-0.3821     ?     13.0318+-0.5290        ? might be 1.0296x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.7283+-0.2481            2.6121+-0.0292          might be 1.0445x faster
   get-by-id-self-or-proto                           13.4865+-0.5841     ?     13.6916+-0.4031        ? might be 1.0152x slower
   get-by-val-out-of-bounds                           3.7668+-0.0999     ?      3.8310+-0.0737        ? might be 1.0170x slower
   get_callee_monomorphic                             2.6112+-0.1780     ?      2.6520+-0.1272        ? might be 1.0156x slower
   get_callee_polymorphic                             3.1920+-0.3127            3.0980+-0.2279          might be 1.0303x faster
   getter-no-activation                               4.9032+-0.4013     ?      5.0738+-0.4276        ? might be 1.0348x slower
   getter-richards                                  113.4353+-5.2670          112.8447+-4.8488        
   getter                                             5.7241+-0.8872            5.1642+-0.5850          might be 1.1084x faster
   global-var-const-infer-fire-from-opt               0.8569+-0.1929            0.8132+-0.0774          might be 1.0538x faster
   global-var-const-infer                             0.6580+-0.0687     ?      0.7058+-0.0321        ? might be 1.0726x slower
   HashMap-put-get-iterate-keys                      25.5944+-1.7445     ?     26.8098+-3.5296        ? might be 1.0475x slower
   HashMap-put-get-iterate                           27.6923+-3.2380           26.1259+-1.3076          might be 1.0600x faster
   HashMap-string-put-get-iterate                    25.0150+-0.7988     ?     25.5265+-2.1316        ? might be 1.0204x slower
   hoist-make-rope                                    8.3896+-1.0298     ?      9.3361+-0.7858        ? might be 1.1128x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.8001+-0.1741            3.7828+-0.2115        
   hoist-poly-check-structure                         3.0587+-0.1156            2.9454+-0.0369          might be 1.0385x faster
   imul-double-only                                   6.1921+-0.1695     ?      6.7007+-0.6829        ? might be 1.0821x slower
   imul-int-only                                      7.3465+-0.6455     ?      7.3607+-0.3277        ?
   imul-mixed                                         5.8228+-0.6710            5.8026+-0.3281        
   in-four-cases                                     14.3038+-0.4504     ?     14.6633+-1.0914        ? might be 1.0251x slower
   in-one-case-false                                  8.0408+-0.4386     ?      8.0644+-0.7126        ?
   in-one-case-true                                   8.2823+-1.1438            8.2745+-1.7483        
   in-two-cases                                       8.2083+-0.4324     ?      8.3016+-0.4569        ? might be 1.0114x slower
   indexed-properties-in-objects                      2.6780+-0.5483            2.5317+-0.0947          might be 1.0578x faster
   infer-closure-const-then-mov-no-inline             2.9228+-0.0242            2.9077+-0.0437        
   infer-closure-const-then-mov                      15.2515+-0.3419     ?     15.5440+-0.5407        ? might be 1.0192x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.0257+-0.7936            9.7704+-0.2326          might be 1.0261x faster
   infer-closure-const-then-put-to-scope             20.9005+-2.0851           20.0665+-0.6853          might be 1.0416x faster
   infer-closure-const-then-reenter-no-inline   
                                                     45.6380+-1.5487     ?     45.6658+-1.5421        ?
   infer-closure-const-then-reenter                  20.3535+-0.1657           20.1694+-0.3476        
   infer-constant-global-property                    28.2578+-0.9717           28.1545+-0.6691        
   infer-constant-property                            2.3542+-0.1386            2.3322+-0.0355        
   infer-one-time-closure-ten-vars                    7.5142+-0.3343     ?      7.5958+-0.3031        ? might be 1.0109x slower
   infer-one-time-closure-two-vars                    7.1171+-0.0395     ?      7.3277+-0.5174        ? might be 1.0296x slower
   infer-one-time-closure                             7.2236+-0.2996            7.2191+-0.3326        
   infer-one-time-deep-closure                       11.9421+-0.8327     ?     12.3832+-1.1461        ? might be 1.0369x slower
   inline-arguments-access                            3.8728+-0.2725     ?      4.0796+-0.4238        ? might be 1.0534x slower
   inline-arguments-aliased-access                    3.7840+-0.1797            3.7528+-0.0785        
   inline-arguments-local-escape                      4.1345+-0.5682            3.9146+-0.2381          might be 1.0562x faster
   inline-get-scoped-var                              4.5453+-0.3100     ?      4.7855+-0.1326        ? might be 1.0529x slower
   inlined-put-by-id-transition                      10.8926+-0.5313     ?     10.9107+-0.4387        ?
   int-or-other-abs-then-get-by-val                   3.8561+-0.1046     ?      4.1108+-0.6229        ? might be 1.0661x slower
   int-or-other-abs-zero-then-get-by-val             15.0338+-0.7155           14.7530+-0.2031          might be 1.0190x faster
   int-or-other-add-then-get-by-val                   3.6936+-0.0981     ?      3.8492+-0.2109        ? might be 1.0421x slower
   int-or-other-add                                   4.5243+-0.0937     ?      4.5733+-0.0723        ? might be 1.0108x slower
   int-or-other-div-then-get-by-val                   3.4083+-0.1668     ?      3.5550+-0.2938        ? might be 1.0430x slower
   int-or-other-max-then-get-by-val                   3.5591+-0.0510            3.5114+-0.2419          might be 1.0136x faster
   int-or-other-min-then-get-by-val                   3.6993+-0.1471     ?      3.8854+-0.4623        ? might be 1.0503x slower
   int-or-other-mod-then-get-by-val                   3.4073+-0.3753            3.1743+-0.1261          might be 1.0734x faster
   int-or-other-mul-then-get-by-val                   3.3234+-0.2592            3.1547+-0.0675          might be 1.0535x faster
   int-or-other-neg-then-get-by-val                   3.6777+-0.2503     ?      3.7334+-0.2488        ? might be 1.0151x slower
   int-or-other-neg-zero-then-get-by-val             14.7737+-0.3340           14.7569+-0.4032        
   int-or-other-sub-then-get-by-val                   3.6284+-0.0425     ?      3.8123+-0.2697        ? might be 1.0507x slower
   int-or-other-sub                                   3.0503+-0.0891     ?      3.1030+-0.5057        ? might be 1.0173x slower
   int-overflow-local                                 3.5140+-0.1998            3.3987+-0.0697          might be 1.0339x faster
   Int16Array-alloc-long-lived                       44.7080+-1.0773           44.2729+-2.5796        
   Int16Array-bubble-sort-with-byteLength            16.5726+-0.8970     ?     16.5844+-1.5458        ?
   Int16Array-bubble-sort                            15.5959+-0.6807     ?     15.7161+-0.9000        ?
   Int16Array-load-int-mul                            1.2321+-0.0063     ?      1.2517+-0.0441        ? might be 1.0159x slower
   Int16Array-to-Int32Array-set                      41.2156+-3.5637           41.0414+-1.8321        
   Int32Array-alloc-large                            11.1010+-0.4580     ?     11.2252+-1.0276        ? might be 1.0112x slower
   Int32Array-alloc-long-lived                       48.6909+-1.2204     ?     49.6205+-1.5392        ? might be 1.0191x slower
   Int32Array-alloc                                   2.8950+-0.0689     ?      3.0235+-0.2435        ? might be 1.0444x slower
   Int32Array-Int8Array-view-alloc                    5.7628+-0.1169     ?      5.8920+-0.1278        ? might be 1.0224x slower
   int52-spill                                        5.4438+-0.2175     ?      5.6097+-0.4728        ? might be 1.0305x slower
   Int8Array-alloc-long-lived                        38.7594+-1.5162     ?     39.1125+-2.1541        ?
   Int8Array-load-with-byteLength                     3.0244+-0.0729     ?      3.0392+-0.1216        ?
   Int8Array-load                                     3.0805+-0.0764            3.0081+-0.0690          might be 1.0241x faster
   integer-divide                                     9.2883+-0.7360     ?      9.3298+-0.0706        ?
   integer-modulo                                     1.5623+-0.1488     ?      1.5735+-0.0722        ?
   is-boolean-fold-tricky                             3.4228+-0.1070            3.4085+-0.1086        
   is-boolean-fold                                    2.3828+-0.1037     ?      2.4297+-0.2425        ? might be 1.0197x slower
   is-function-fold-tricky-internal-function   
                                                      9.5034+-0.7941            9.0765+-0.2419          might be 1.0470x faster
   is-function-fold-tricky                            3.7399+-0.2312     ?      3.7572+-0.1078        ?
   is-function-fold                                   2.4930+-0.2062     ?      2.6176+-0.6188        ? might be 1.0500x slower
   is-number-fold-tricky                              3.7845+-0.4448            3.6795+-0.1799          might be 1.0285x faster
   is-number-fold                                     2.4998+-0.3696            2.3650+-0.0516          might be 1.0570x faster
   is-object-or-null-fold-functions                   2.5558+-0.5516            2.4266+-0.0672          might be 1.0532x faster
   is-object-or-null-fold-less-tricky                 3.6617+-0.0234     ?      3.9813+-0.4931        ? might be 1.0873x slower
   is-object-or-null-fold-tricky                      4.8658+-0.2274     ?      4.9384+-0.4873        ? might be 1.0149x slower
   is-object-or-null-fold                             2.3505+-0.0195     ?      2.3721+-0.0176        ?
   is-object-or-null-trickier-function                3.7864+-0.1979     ?      3.9188+-0.5193        ? might be 1.0350x slower
   is-object-or-null-trickier-internal-function   
                                                      9.6810+-0.3789     ?     10.0200+-1.3901        ? might be 1.0350x slower
   is-object-or-null-tricky-function                  3.7424+-0.2150     ?      3.7600+-0.1263        ?
   is-object-or-null-tricky-internal-function   
                                                      7.2961+-0.7081            7.1132+-0.1167          might be 1.0257x faster
   is-string-fold-tricky                              3.6204+-0.0661     ?      3.6423+-0.0676        ?
   is-string-fold                                     2.3476+-0.0220     ?      2.5370+-0.3832        ? might be 1.0807x slower
   is-undefined-fold-tricky                           2.9507+-0.0127     ?      2.9777+-0.0232        ?
   is-undefined-fold                                  2.4963+-0.4662     ?      2.5267+-0.2914        ? might be 1.0122x slower
   large-int-captured                                 4.0579+-0.2811            4.0442+-0.2365        
   large-int-neg                                     13.4100+-0.2363           13.3930+-0.2713        
   large-int                                         12.6317+-0.3122     ?     13.3435+-0.9117        ? might be 1.0563x slower
   logical-not                                        3.6992+-0.0812            3.6312+-0.1752          might be 1.0187x faster
   lots-of-fields                                     9.5557+-0.1845            9.3506+-0.2083          might be 1.0219x faster
   make-indexed-storage                               2.5885+-0.0849     ?      2.6447+-0.1465        ? might be 1.0217x slower
   make-rope-cse                                      4.3372+-0.0793     ?      4.8917+-1.2945        ? might be 1.1278x slower
   marsaglia-larger-ints                             30.6463+-2.0049     ?     30.7347+-1.3156        ?
   marsaglia-osr-entry                               19.5237+-0.4422     ?     20.2422+-1.3112        ? might be 1.0368x slower
   max-boolean                                        2.4637+-0.1338            2.4388+-0.0373          might be 1.0102x faster
   method-on-number                                  14.7213+-0.5013           14.5630+-0.4039          might be 1.0109x faster
   min-boolean                                        2.4130+-0.0537     ?      2.4326+-0.0939        ?
   minus-boolean-double                               2.7503+-0.0223     ?      2.7979+-0.0936        ? might be 1.0173x slower
   minus-boolean                                      2.3549+-0.4863            2.0927+-0.0829          might be 1.1253x faster
   misc-strict-eq                                    27.7948+-2.5275           26.6064+-1.1510          might be 1.0447x faster
   mod-boolean-double                                10.3531+-0.1636     ?     10.4375+-0.1610        ?
   mod-boolean                                        7.6772+-0.0308     ?      7.6798+-0.0617        ?
   mul-boolean-double                                 3.6855+-0.7669            3.2261+-0.0137          might be 1.1424x faster
   mul-boolean                                        2.5177+-0.0747     ?      2.8488+-0.6124        ? might be 1.1315x slower
   neg-boolean                                        2.8023+-0.1287            2.7727+-0.0392          might be 1.0107x faster
   negative-zero-divide                               0.2582+-0.0193     ?      0.2610+-0.0124        ? might be 1.0106x slower
   negative-zero-modulo                               0.2920+-0.1037            0.2905+-0.1217        
   negative-zero-negate                               0.2401+-0.0035     ?      0.2416+-0.0129        ?
   nested-function-parsing                           33.0396+-0.2871     ?     33.1509+-0.6180        ?
   new-array-buffer-dead                             96.2360+-1.0873     ?     98.0498+-6.0321        ? might be 1.0188x slower
   new-array-buffer-push                              6.3149+-0.3794            6.1479+-0.2788          might be 1.0272x faster
   new-array-dead                                    13.8781+-1.9851           13.2360+-1.1044          might be 1.0485x faster
   new-array-push                                     3.6558+-0.1577            3.6023+-0.3399          might be 1.0149x faster
   no-inline-constructor                            110.4818+-4.5973          105.9281+-1.1793          might be 1.0430x faster
   number-test                                        2.7247+-0.5615            2.5497+-0.0743          might be 1.0686x faster
   object-closure-call                                4.5638+-0.1317     ?      4.7870+-0.7263        ? might be 1.0489x slower
   object-test                                        2.3453+-0.0442     ?      2.5340+-0.5049        ? might be 1.0805x slower
   obvious-sink-pathology-taken                     118.2666+-2.2391     ?    120.0546+-5.2881        ? might be 1.0151x slower
   obvious-sink-pathology                           113.5497+-0.8640          113.5235+-1.8269        
   obviously-elidable-new-object                     29.2182+-2.6200           27.0430+-0.1487          might be 1.0804x faster
   plus-boolean-arith                                 2.1182+-0.0169     ?      2.2325+-0.1988        ? might be 1.0540x slower
   plus-boolean-double                                2.8306+-0.2716     ?      2.8593+-0.1440        ? might be 1.0101x slower
   plus-boolean                                       2.4205+-0.4506            2.3298+-0.0146          might be 1.0389x faster
   poly-chain-access-different-prototypes-simple   
                                                      2.4305+-0.0050     ?      2.5050+-0.2599        ? might be 1.0307x slower
   poly-chain-access-different-prototypes             2.2637+-0.0431     ?      2.3345+-0.1515        ? might be 1.0312x slower
   poly-chain-access-simpler                          2.4450+-0.0817     ?      2.4713+-0.0792        ? might be 1.0107x slower
   poly-chain-access                                  2.3954+-0.3330            2.2760+-0.0858          might be 1.0525x faster
   poly-stricteq                                     42.0096+-1.4723           41.7791+-1.5912        
   polymorphic-array-call                             0.9795+-0.0629     ?      1.0243+-0.0637        ? might be 1.0457x slower
   polymorphic-get-by-id                              2.5228+-0.0873     ?      2.5433+-0.0605        ?
   polymorphic-put-by-id                             23.1641+-1.7473           22.9447+-0.4531        
   polymorphic-structure                             11.6145+-0.1370           11.5432+-0.1030        
   polyvariant-monomorphic-get-by-id                  6.1240+-0.0724     ?      6.4543+-1.1397        ? might be 1.0539x slower
   proto-getter-access                                7.6945+-0.3600     ?      8.0447+-0.7053        ? might be 1.0455x slower
   put-by-id-replace-and-transition                   8.0762+-1.0025     ?      8.1398+-1.0559        ?
   put-by-id-slightly-polymorphic                     2.3002+-0.0329     ?      2.4075+-0.1524        ? might be 1.0466x slower
   put-by-id                                         12.2438+-0.2799     ^     11.8952+-0.0661        ^ definitely 1.0293x faster
   put-by-val-direct                                  0.3331+-0.0148            0.3265+-0.0116          might be 1.0202x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.3245+-0.3421     ?      5.3817+-0.5417        ? might be 1.0107x slower
   put-by-val-machine-int                             2.1646+-0.0443     ?      2.3138+-0.1457        ? might be 1.0689x slower
   rare-osr-exit-on-local                            13.6348+-0.4297     ?     13.6457+-0.4007        ?
   register-pressure-from-osr                        15.2329+-0.4038           14.9760+-0.3111          might be 1.0172x faster
   setter                                             5.3923+-0.2533     ?      5.5655+-0.3316        ? might be 1.0321x slower
   simple-activation-demo                            22.6383+-0.6282     ?     22.7936+-0.3713        ?
   simple-getter-access                               9.7494+-0.2171            9.6143+-0.1835          might be 1.0141x faster
   simple-poly-call-nested                            8.3760+-0.4468     ?      8.8411+-0.6401        ? might be 1.0555x slower
   simple-poly-call                                   1.1470+-0.0510     ?      1.1710+-0.1467        ? might be 1.0209x slower
   sin-boolean                                       16.6793+-1.6030           16.2102+-0.5963          might be 1.0289x faster
   singleton-scope                                   58.1704+-1.6125     ?     58.4650+-1.2252        ?
   sink-function                                      9.2067+-0.3572            9.1561+-0.3759        
   sink-huge-activation                              15.3687+-1.2797           14.9748+-0.3616          might be 1.0263x faster
   sinkable-new-object-dag                           56.9877+-3.8169           55.4910+-2.3970          might be 1.0270x faster
   sinkable-new-object-taken                         46.1378+-1.7054     ?     46.5231+-2.0160        ?
   sinkable-new-object                               32.1895+-1.7768     ?     32.4302+-1.1209        ?
   slow-array-profile-convergence                     2.4015+-0.7592            2.1943+-0.0853          might be 1.0944x faster
   slow-convergence                                   2.3362+-0.4279            2.1356+-0.0359          might be 1.0940x faster
   sorting-benchmark                                 17.3640+-0.2545           17.1731+-0.3448          might be 1.0111x faster
   sparse-conditional                                 0.9967+-0.0286            0.9579+-0.0316          might be 1.0405x faster
   splice-to-remove                                  12.4217+-0.2645           12.4190+-0.2155        
   string-char-code-at                               11.7400+-0.7929     ?     11.9744+-0.7138        ? might be 1.0200x slower
   string-concat-object                               2.2735+-0.2910            2.2472+-0.1128          might be 1.0117x faster
   string-concat-pair-object                          2.0671+-0.0470     ?      2.1863+-0.3453        ? might be 1.0577x slower
   string-concat-pair-simple                         10.4166+-0.2181     ?     10.8223+-0.2571        ? might be 1.0390x slower
   string-concat-simple                              10.6625+-0.2285     ?     10.7858+-0.8069        ? might be 1.0116x slower
   string-cons-repeat                                 7.6285+-0.5966            7.3878+-0.2928          might be 1.0326x faster
   string-cons-tower                                  7.7446+-0.3511     ?      7.7896+-0.3686        ?
   string-equality                                   14.0413+-1.1127     ?     14.5976+-1.1919        ? might be 1.0396x slower
   string-get-by-val-big-char                         6.0761+-0.0668     ?      6.2242+-0.2175        ? might be 1.0244x slower
   string-get-by-val-out-of-bounds-insane             3.2073+-0.3097            3.0142+-0.1232          might be 1.0640x faster
   string-get-by-val-out-of-bounds                    3.7384+-0.4442            3.7291+-0.2073        
   string-get-by-val                                  2.6218+-0.3024     ?      2.7733+-0.7391        ? might be 1.0578x slower
   string-hash                                        1.6666+-0.0145     ?      1.6974+-0.1064        ? might be 1.0185x slower
   string-long-ident-equality                        11.0800+-0.1088     ?     11.1030+-0.1014        ?
   string-out-of-bounds                               9.3950+-0.1560            9.3912+-0.2349        
   string-repeat-arith                               25.8444+-1.8103           24.7103+-0.2293          might be 1.0459x faster
   string-sub                                        48.2728+-1.4096           47.2511+-0.8146          might be 1.0216x faster
   string-test                                        2.3976+-0.0131     ?      2.4615+-0.1239        ? might be 1.0267x slower
   string-var-equality                               24.0847+-0.3989     ?     24.3770+-1.0953        ? might be 1.0121x slower
   structure-hoist-over-transitions                   2.1474+-0.1309     ?      2.1786+-0.0889        ? might be 1.0146x slower
   substring-concat-weird                            35.9947+-0.7102           35.4572+-1.7101          might be 1.0152x faster
   substring-concat                                  36.5112+-1.2844           36.0167+-0.4761          might be 1.0137x faster
   substring                                         41.2643+-0.8130           40.8342+-1.7899          might be 1.0105x faster
   switch-char-constant                               2.6982+-0.2274     ?      2.7703+-0.1284        ? might be 1.0267x slower
   switch-char                                        5.6874+-0.8582     ?      5.9475+-1.0229        ? might be 1.0457x slower
   switch-constant                                    8.1365+-0.1827            7.9464+-0.3308          might be 1.0239x faster
   switch-string-basic-big-var                       13.0591+-0.9093           12.4024+-0.1166          might be 1.0529x faster
   switch-string-basic-big                           13.0443+-0.1635           12.9399+-1.2147        
   switch-string-basic-var                           12.2295+-0.2097     ?     12.5209+-1.4352        ? might be 1.0238x slower
   switch-string-basic                               11.6801+-0.7866           11.2132+-0.2156          might be 1.0416x faster
   switch-string-big-length-tower-var                17.8444+-0.2779     ^     16.4628+-0.7524        ^ definitely 1.0839x faster
   switch-string-length-tower-var                    12.1469+-0.2548           11.7234+-0.2283          might be 1.0361x faster
   switch-string-length-tower                        10.7536+-1.0482           10.2365+-0.1534          might be 1.0505x faster
   switch-string-short                               10.2935+-0.2334           10.2232+-0.0671        
   switch                                            12.3239+-1.2827           11.5049+-0.3304          might be 1.0712x faster
   tear-off-arguments-simple                          3.1315+-0.5644            2.8785+-0.0493          might be 1.0879x faster
   tear-off-arguments                                 4.1161+-0.0596            4.0854+-0.3137        
   temporal-structure                                10.8801+-0.2433     ?     10.8967+-0.1949        ?
   to-int32-boolean                                  12.1490+-1.0787           12.0208+-0.4317          might be 1.0107x faster
   try-catch-get-by-val-cloned-arguments             13.0632+-1.3594           12.4051+-0.0912          might be 1.0531x faster
   try-catch-get-by-val-direct-arguments              5.4548+-0.2681     ?      5.5142+-0.2833        ? might be 1.0109x slower
   try-catch-get-by-val-scoped-arguments              6.7856+-0.6834            6.6713+-0.3479          might be 1.0171x faster
   typed-array-get-set-by-val-profiling              29.2254+-1.9634           28.8467+-2.3882          might be 1.0131x faster
   undefined-property-access                        201.9491+-0.3253     ?    202.2845+-0.5593        ?
   undefined-test                                     2.5217+-0.0458     ?      2.5873+-0.0649        ? might be 1.0260x slower
   unprofiled-licm                                   12.9734+-0.5255           12.8461+-0.7174        
   varargs-call                                      12.7744+-1.0065           11.8988+-0.0821          might be 1.0736x faster
   varargs-construct-inline                          18.9385+-0.3374     ?     18.9477+-0.7582        ?
   varargs-construct                                 26.8636+-0.3642     ?     27.1548+-1.1879        ? might be 1.0108x slower
   varargs-inline                                     7.6400+-0.4426     ?      7.8483+-1.0337        ? might be 1.0273x slower
   varargs-strict-mode                                8.3412+-0.3056            8.1160+-0.0829          might be 1.0277x faster
   varargs                                            8.1857+-0.2864            8.1345+-0.1240        
   weird-inlining-const-prop                          2.0535+-0.3187            1.9532+-0.3059          might be 1.0513x faster

   <geometric>                                        6.9995+-0.0432     ?      7.0024+-0.0500        ? might be 1.0004x slower

                                                          Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                                       430.0673+-5.3406          429.0679+-5.9068        
   cray.c                                           370.9434+-2.6266          370.7574+-3.4957        
   dry.c                                            391.3120+-28.1714    ?    400.3206+-28.4863       ? might be 1.0230x slower
   FloatMM.c                                        660.6706+-0.6043     ?    660.8911+-3.3617        ?
   gcc-loops.cpp                                   3379.4714+-42.2538        3365.6600+-24.2746       
   n-body.c                                         784.8190+-1.8584     ?    788.0121+-6.5370        ?
   Quicksort.c                                      394.7753+-6.9276          393.2552+-1.7536        
   stepanov_container.cpp                          3319.1298+-64.8832        3290.7164+-19.7912       
   Towers.c                                         224.2418+-0.3797     ?    224.3572+-1.1079        ?

   <geometric>                                      682.4591+-4.0381     ?    683.0945+-4.3673        ? might be 1.0009x slower

                                                          Conf#1                    Conf#2                                      
CompressionBench:
   huffman                                          283.3488+-4.0389          283.3203+-5.2277        
   arithmetic-simple                                326.0441+-1.0772     ?    326.1645+-1.5984        ?
   arithmetic-precise                               254.1752+-3.0214     ?    254.5490+-1.1787        ?
   arithmetic-complex-precise                       256.6270+-3.7170          256.3231+-5.2345        
   arithmetic-precise-order-0                       337.7275+-7.0976     ?    341.2655+-3.3992        ? might be 1.0105x slower
   arithmetic-precise-order-1                       284.0228+-2.2518          282.9955+-4.1211        
   arithmetic-precise-order-2                       316.1408+-2.9216     ?    322.2546+-10.5952       ? might be 1.0193x slower
   arithmetic-simple-order-1                        316.1196+-1.5161          315.2775+-4.2455        
   arithmetic-simple-order-2                        384.5463+-45.0267         363.9423+-10.0071         might be 1.0566x faster
   lz-string                                        292.8047+-6.6800     ?    293.0391+-5.9172        ?

   <geometric>                                      302.8536+-3.1452          301.9800+-1.3922          might be 1.0029x faster

                                                          Conf#1                    Conf#2                                      
Geomean of preferred means:
   <scaled-result>                                   53.2699+-0.2365     ^     51.9108+-0.3804        ^ definitely 1.0262x faster
Comment 6 Geoffrey Garen 2015-05-07 11:24:46 PDT
Comment on attachment 252575 [details]
Patch

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

Looks good to me. Probably needs review from Phil too.

> Source/JavaScriptCore/ChangeLog:14
> +        Since ArithRound speculate it produces int32, the MacroAssembler assembler

speculate => speculates

> Source/JavaScriptCore/ChangeLog:20
> +        but it is a good start known to be valid and inlining alone alread provides

alread => already
Comment 7 Geoffrey Garen 2015-05-07 11:25:27 PDT
c:\cygwin\home\buildbot\webkit\webkitbuild\release\include\private\javascriptcore\X86Assembler.h(1811): error C2039: 'twoByteOp64' : is not a member of 'JSC::X86Assembler::X86InstructionFormatter' [C:\cygwin\home\buildbot\WebKit\Source\JavaScriptCore\JavaScriptCore.vcxproj\LLInt\LLIntOffsetsExtractor\LLIntOffsetsExtractor.vcxproj]
          c:\cygwin\home\buildbot\webkit\webkitbuild\release\include\private\javascriptcore\X86Assembler.h(2332) : see declaration of 'JSC::X86Assembler::X86InstructionFormatter'
Comment 8 Filip Pizlo 2015-05-07 11:34:31 PDT
Comment on attachment 252575 [details]
Patch

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

> Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:770
> +        if (operand && operand.isNumber()) {
> +            setConstant(node, jsNumber(jsRound(operand.asNumber())));
> +            break;
> +        }

This constant folding should correctly consider what happens under all of the rounding modes.

- This is wrong for Int32, since it fails to convert -0 to 0.  It also fails to always produce an int32.  There is sort of another bug.  It also will remove the Int32: check, which is pretty catastrophic: you could have previously had code that assumed that the incoming value was checked for Int32, but now the check will be gone and you'll have a double constant instead.  That's not quite true since: (1) This code is reached only after the edge checks are executed.  But the guiding principle of the abstract interpreter is that anytime it sets an abstract value to be V, it could instead set it to W if W is a superset of V.  Therefore, it would be legal to change the Int32: check logic in the abstract interpreter to just do nothing for a double constant: the right result would be the clear value (i.e. the empty set of values), but you'd be setting it to some value instead, and some value is a superset of no values. Also: (2) the constant folder will try keep the edge checks intact after removing a node. But that all gets weird, because you'd then have an Int32: check on a double constant and a node that previously returned an int32 will now return a double.  Soooooper weird.
- This is wrong for Int32WithNegBlahBlah, since it will sort of remove the Int32:.  This would be catastrophic if it weren't for other mitigations, but we still want to avoid it.

Look at the pattern used for other arith nodes. Roughly, we do:

- Don't constant fold if we know that some check that this does would have failed.  Basically, this means that if you're in the Int32 modes, check that operand.isInt32().
- Make sure you correctly model the behavior of the node in the DFG and FTL backends.  In the Int32 rounding mode, then will not return the same result as jsRound() for -0.
- Make sure that when calling setConstant(), you set a constant that matches the type this would have otherwise returned.  In the Int32 rounding mode, this node will always return Int32, but you might return a double (due to -0).  A good idiom to follow is to make damn sure that when you construct a jsNumber() for an int32-returning node, you call the jsNumber() overload that takes an int32.
Comment 9 Benjamin Poulain 2015-05-07 15:49:12 PDT
Created attachment 252639 [details]
Patch
Comment 10 Filip Pizlo 2015-05-07 16:37:23 PDT
Comment on attachment 252639 [details]
Patch

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

> Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:980
> +    LValue convertDoubleToInt32(LValue value, bool shouldCheckNegativeZero)

Something I try to do is put all of the helpers below the compileNodeType methods.
Comment 11 Benjamin Poulain 2015-05-07 17:24:51 PDT
Committed r183963: <http://trac.webkit.org/changeset/183963>
Comment 12 Chris Dumez 2015-05-08 09:27:53 PDT
Looks like a 9% progression on Kraken on the bots.