Bug 144396

Summary: TypeOf should be fast
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, benjamin, commit-queue, ggaren, mark.lam, mhahnenb, mmirman, msaboff, nrotem, oliver, rniwa, saam, sam
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Bug Depends on: 144397, 144409, 144462, 144500    
Bug Blocks:    
Attachments:
Description Flags
work in progress
none
more
none
getting closer
none
a bit more
none
it is written
none
so close
none
with fixes
none
the patch ggaren: review+

Description Filip Pizlo 2015-04-29 10:15:16 PDT
Currently TypeOf for a cell requires a runtime call because we don't know if something should be called "function" unless we call getCallData().  TypeOf is used often enough that we should have a good inline implementation.  To do that, we need to add some stuff to the object model.
Comment 1 Geoffrey Garen 2015-04-29 10:56:40 PDT
Side note: The DOM would like more control over the behavior of "typeof x == 'function'". For example, I believe that global constructors want to be 'function' even though they are not callable. So, adding something explicit to the object model may help the DOM.
Comment 2 Filip Pizlo 2015-04-29 10:58:11 PDT
(In reply to comment #1)
> Side note: The DOM would like more control over the behavior of "typeof x ==
> 'function'". For example, I believe that global constructors want to be
> 'function' even though they are not callable. So, adding something explicit
> to the object model may help the DOM.

Interesting. My changes will preserve current behavior. If we want global constructors to claim to be functions even though this doesn't happen currently, then we should add another type flag for this purpose.
Comment 3 Filip Pizlo 2015-04-30 11:36:30 PDT
Created attachment 252073 [details]
work in progress
Comment 4 Filip Pizlo 2015-04-30 17:31:21 PDT
Created attachment 252120 [details]
more
Comment 5 Filip Pizlo 2015-05-01 13:15:29 PDT
Created attachment 252168 [details]
getting closer
Comment 6 Filip Pizlo 2015-05-01 19:56:52 PDT
Created attachment 252212 [details]
a bit more
Comment 7 Filip Pizlo 2015-05-01 21:37:20 PDT
Created attachment 252216 [details]
it is written

Still need to test it.
Comment 8 Filip Pizlo 2015-05-01 21:54:04 PDT
Created attachment 252217 [details]
so close
Comment 9 Filip Pizlo 2015-05-02 10:50:51 PDT
Created attachment 252237 [details]
with fixes

It's almost ready for perf testing.
Comment 10 WebKit Commit Bot 2015-05-02 10:53:29 PDT
Attachment 252237 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4733:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7421:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4912:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4917:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 11 Filip Pizlo 2015-05-02 12:09:30 PDT
Looks like there is still work to be done to make typeof-using benchmarks fast.  But this looks like overall it's a step in the right direction.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
"TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r183718)
"FastTypeOf" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r183718)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                 FastTypeOf                                    
SunSpider:
   3d-cube                                            5.1978+-0.1718     ?      5.2157+-0.1295        ?
   3d-morph                                           6.1007+-0.6261            5.7732+-0.1070          might be 1.0567x faster
   3d-raytrace                                        6.9741+-0.6144            6.5796+-0.2424          might be 1.0600x faster
   access-binary-trees                                2.3698+-0.1982            2.2744+-0.0524          might be 1.0420x faster
   access-fannkuch                                    6.3851+-0.6029            5.9056+-0.0886          might be 1.0812x faster
   access-nbody                                       2.9767+-0.2060     ?      3.0334+-0.3142        ? might be 1.0190x slower
   access-nsieve                                      3.3925+-0.0574            3.3277+-0.0312          might be 1.0195x faster
   bitops-3bit-bits-in-byte                           1.6095+-0.0744            1.5567+-0.0253          might be 1.0339x faster
   bitops-bits-in-byte                                3.4137+-0.0897     ?      3.4755+-0.1500        ? might be 1.0181x slower
   bitops-bitwise-and                                 2.1482+-0.0248     ?      2.1496+-0.0259        ?
   bitops-nsieve-bits                                 3.4326+-0.5044            3.3822+-0.1519          might be 1.0149x faster
   controlflow-recursive                              2.3929+-0.2622     ?      2.4299+-0.2116        ? might be 1.0154x slower
   crypto-aes                                         4.6319+-0.3212            4.4743+-0.1642          might be 1.0352x faster
   crypto-md5                                         2.9866+-0.1567     ^      2.6630+-0.0230        ^ definitely 1.1215x faster
   crypto-sha1                                        2.6339+-0.2026     ?      2.7572+-0.3353        ? might be 1.0468x slower
   date-format-tofte                                  9.3375+-0.1066            9.2644+-0.1101        
   date-format-xparb                                  5.9204+-0.1365            5.8075+-0.0839          might be 1.0194x faster
   math-cordic                                        3.2512+-0.1810            3.2406+-0.3291        
   math-partial-sums                                  5.6469+-0.6456            5.5345+-0.6952          might be 1.0203x faster
   math-spectral-norm                                 2.1170+-0.2291            2.0013+-0.1234          might be 1.0578x faster
   regexp-dna                                         7.1612+-0.1176     ?      8.1350+-1.6398        ? might be 1.1360x slower
   string-base64                                      4.7490+-0.1701            4.7023+-0.1500        
   string-fasta                                       6.7386+-0.1421     ?      6.8193+-0.2436        ? might be 1.0120x slower
   string-tagcloud                                   10.0119+-0.6465     ?     11.0955+-1.2711        ? might be 1.1082x slower
   string-unpack-code                                19.8405+-0.9113           19.6479+-0.7282        
   string-validate-input                              4.9638+-0.2305     ?      4.9899+-0.1157        ?

   <arithmetic>                                       5.2455+-0.1026            5.2399+-0.0960          might be 1.0011x faster

                                                        TipOfTree                 FastTypeOf                                    
LongSpider:
   3d-cube                                          880.3381+-3.4118     ?    882.3793+-10.4645       ?
   3d-morph                                        1530.3024+-4.8921         1529.3130+-3.7923        
   3d-raytrace                                      727.6813+-7.0710     ?    738.3579+-3.6105        ? might be 1.0147x slower
   access-binary-trees                             1034.8072+-10.1980        1029.8719+-3.4155        
   access-fannkuch                                  329.0429+-7.8237          324.3267+-11.9226         might be 1.0145x faster
   access-nbody                                     611.7271+-2.4877     ?    613.0899+-5.3711        ?
   access-nsieve                                    870.5586+-11.3136         862.9816+-15.5793       
   bitops-3bit-bits-in-byte                          45.3083+-2.0964           45.1043+-1.2853        
   bitops-bits-in-byte                              102.6775+-2.8672          101.5868+-1.2259          might be 1.0107x faster
   bitops-nsieve-bits                               617.9013+-2.3705          616.3745+-2.9901        
   controlflow-recursive                            477.8512+-0.4097     !    483.8485+-1.6928        ! definitely 1.0126x slower
   crypto-aes                                       705.6414+-7.8845     ?    706.9118+-5.2168        ?
   crypto-md5                                       529.1755+-12.1179    ?    529.5449+-8.9423        ?
   crypto-sha1                                      601.6514+-8.3305     ?    608.1436+-8.4102        ? might be 1.0108x slower
   date-format-tofte                                757.4471+-19.4434    ?    759.3667+-10.3663       ?
   date-format-xparb                                781.4366+-22.4936    ?    782.7607+-16.5367       ?
   math-cordic                                      596.3478+-8.8185          592.0996+-4.0884        
   math-partial-sums                                505.3558+-1.9734     ?    508.5758+-3.6045        ?
   math-spectral-norm                               572.3764+-9.4229          566.2964+-3.1767          might be 1.0107x faster
   string-base64                                    377.9574+-4.5151     ?    380.7909+-5.1230        ?
   string-fasta                                     441.1704+-4.1692          437.8365+-3.4771        
   string-tagcloud                                  199.4079+-3.9801          197.4165+-1.8625          might be 1.0101x faster

   <geometric>                                      494.3570+-1.8106          493.9562+-1.6228          might be 1.0008x faster

                                                        TipOfTree                 FastTypeOf                                    
V8Spider:
   crypto                                            56.2641+-1.2448           56.1795+-2.3175        
   deltablue                                         96.2640+-3.1731     ?     97.3871+-4.9884        ? might be 1.0117x slower
   earley-boyer                                      44.7097+-1.0347     ?     44.9069+-0.6713        ?
   raytrace                                          40.9255+-2.6427           40.8937+-3.3104        
   regexp                                            80.5355+-1.2319     ?     82.4106+-1.9097        ? might be 1.0233x slower
   richards                                          79.9155+-1.7866           79.6371+-2.9089        
   splay                                             42.4974+-9.2390           39.8397+-1.8951          might be 1.0667x faster

   <geometric>                                       59.5900+-1.7002           59.4135+-0.8336          might be 1.0030x faster

                                                        TipOfTree                 FastTypeOf                                    
Octane:
   encrypt                                           0.20474+-0.00265          0.20323+-0.00147       
   decrypt                                           3.60210+-0.07386          3.57359+-0.03399       
   deltablue                                x2       0.20826+-0.00146          0.20801+-0.00092       
   earley                                            0.53688+-0.00374    ?     0.54122+-0.00485       ?
   boyer                                             6.78210+-0.06802          6.72953+-0.04320       
   navier-stokes                            x2       5.21766+-0.06723          5.21691+-0.07875       
   raytrace                                 x2       1.24945+-0.06802    ?     1.27082+-0.03130       ? might be 1.0171x slower
   richards                                 x2       0.12232+-0.00078    ?     0.12282+-0.00152       ?
   splay                                    x2       0.40021+-0.00385          0.39840+-0.00226       
   regexp                                   x2      31.92321+-0.24547    ?    32.09864+-0.26782       ?
   pdfjs                                    x2      44.26175+-0.43166         43.67249+-0.28474         might be 1.0135x faster
   mandreel                                 x2      50.38151+-0.19348    ?    50.53112+-0.28637       ?
   gbemu                                    x2      41.79057+-0.52837         41.71339+-0.45591       
   closure                                           0.57061+-0.00987          0.56849+-0.00672       
   jquery                                            7.45023+-0.86786          7.14372+-0.04106         might be 1.0429x faster
   box2d                                    x2      12.35265+-0.06649         12.34629+-0.20538       
   zlib                                     x2     389.81420+-15.59398       382.16678+-17.97486        might be 1.0200x faster
   typescript                               x2     893.08639+-123.07095      841.23006+-11.11539        might be 1.0616x faster

   <geometric>                                       6.76509+-0.09238          6.72284+-0.03124         might be 1.0063x faster

                                                        TipOfTree                 FastTypeOf                                    
Kraken:
   ai-astar                                          271.298+-1.767            270.646+-3.798         
   audio-beat-detection                              106.991+-1.108            106.878+-1.161         
   audio-dft                                         150.411+-3.122      ?     150.913+-5.912         ?
   audio-fft                                          84.771+-4.220             82.329+-1.695           might be 1.0297x faster
   audio-oscillator                                  208.314+-1.957      ?     210.349+-6.439         ?
   imaging-darkroom                                  105.872+-1.699            105.072+-2.094         
   imaging-desaturate                                 63.458+-1.405      ?      64.391+-1.870         ? might be 1.0147x slower
   imaging-gaussian-blur                             114.915+-4.848            113.765+-2.086           might be 1.0101x faster
   json-parse-financial                               46.298+-1.650             46.268+-2.481         
   json-stringify-tinderbox                           56.712+-2.488      ?      57.773+-2.194         ? might be 1.0187x slower
   stanford-crypto-aes                                58.584+-0.414      ?      58.964+-0.740         ?
   stanford-crypto-ccm                                60.328+-3.758             60.309+-2.102         
   stanford-crypto-pbkdf2                            136.570+-1.094      ?     138.600+-1.298         ? might be 1.0149x slower
   stanford-crypto-sha256-iterative                   54.152+-3.595             51.672+-1.435           might be 1.0480x faster

   <arithmetic>                                      108.477+-0.367            108.423+-0.741           might be 1.0005x faster

                                                        TipOfTree                 FastTypeOf                                    
JSRegress:
   abs-boolean                                        2.6248+-0.0359     ?      2.6301+-0.0275        ?
   adapt-to-double-divide                            16.8876+-0.3110           16.8081+-0.5773        
   aliased-arguments-getbyval                         1.2246+-0.1004            1.2113+-0.0585          might be 1.0109x faster
   allocate-big-object                                2.8471+-0.1084            2.7976+-0.0387          might be 1.0177x faster
   arguments-named-and-reflective                    14.3944+-3.1329           13.2748+-1.0204          might be 1.0843x faster
   arguments-out-of-bounds                           14.8252+-0.3968     ?     16.0652+-1.3475        ? might be 1.0836x slower
   arguments-strict-mode                             12.6161+-1.2077     ?     13.0170+-2.0328        ? might be 1.0318x slower
   arguments                                         10.5736+-0.3336     ?     11.0134+-0.8006        ? might be 1.0416x slower
   arity-mismatch-inlining                            0.8086+-0.0364     ?      0.8108+-0.0172        ?
   array-access-polymorphic-structure                 7.4624+-1.2664            7.0724+-0.9264          might be 1.0551x faster
   array-nonarray-polymorhpic-access                 34.6226+-2.1188     ?     35.1212+-1.7208        ? might be 1.0144x slower
   array-prototype-every                             89.4485+-1.1914     ?     90.5056+-1.5491        ? might be 1.0118x slower
   array-prototype-forEach                           86.3842+-1.7857           84.4786+-2.7437          might be 1.0226x faster
   array-prototype-map                               94.4806+-2.6895     ?     94.9690+-2.4177        ?
   array-prototype-some                              87.9235+-0.5314     ?     88.8664+-1.6014        ? might be 1.0107x slower
   array-splice-contiguous                           42.1298+-1.9099     ?     42.8798+-3.5425        ? might be 1.0178x slower
   array-with-double-add                              4.2785+-0.2329            4.2266+-0.1347          might be 1.0123x faster
   array-with-double-increment                        3.2021+-0.0634     ?      3.3259+-0.2649        ? might be 1.0387x slower
   array-with-double-mul-add                          5.0289+-0.0575     ?      5.2085+-0.3884        ? might be 1.0357x slower
   array-with-double-sum                              3.2504+-0.0336     ?      3.2743+-0.0349        ?
   array-with-int32-add-sub                           6.8724+-0.1469            6.8173+-0.1456        
   array-with-int32-or-double-sum                     3.4225+-0.3560            3.2902+-0.0349          might be 1.0402x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.4743+-1.5509           33.8180+-2.3306          might be 1.0194x faster
   ArrayBuffer-DataView-alloc-long-lived             14.4612+-1.7936     ?     14.7930+-1.2535        ? might be 1.0229x slower
   ArrayBuffer-Int32Array-byteOffset                  3.7642+-0.0746     ?      3.9733+-0.4760        ? might be 1.0556x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.5054+-1.1361     ?     32.5603+-2.2264        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.0710+-1.8315           23.0732+-1.9543          might be 1.0432x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.7895+-2.1292     ?     13.9473+-1.6149        ? might be 1.0114x slower
   ArrayBuffer-Int8Array-alloc                       11.3704+-0.9853           10.8163+-0.9504          might be 1.0512x faster
   asmjs_bool_bug                                     7.6805+-0.0945     ?      7.8042+-0.2468        ? might be 1.0161x slower
   assign-custom-setter-polymorphic                   3.5660+-0.6048            3.1132+-0.2402          might be 1.1455x faster
   assign-custom-setter                               4.5755+-0.1346            4.2610+-0.3412          might be 1.0738x faster
   basic-set                                          8.9433+-0.6820            8.6831+-0.5394          might be 1.0300x faster
   big-int-mul                                        4.1926+-0.3540     ?      4.2985+-0.4338        ? might be 1.0253x slower
   boolean-test                                       3.1510+-0.3105            3.0488+-0.0510          might be 1.0335x faster
   branch-fold                                        3.7198+-0.0375     ?      3.9154+-0.3571        ? might be 1.0526x slower
   branch-on-string-as-boolean                       19.8280+-1.7955     ?     21.5415+-1.4594        ? might be 1.0864x slower
   by-val-generic                                     8.3127+-0.2180            8.0630+-0.1795          might be 1.0310x faster
   call-spread-apply                                 29.4803+-0.5740     ?     30.8560+-1.0766        ? might be 1.0467x slower
   call-spread-call                                  26.0701+-1.5059           25.5861+-1.0846          might be 1.0189x faster
   captured-assignments                               0.4309+-0.0081     ?      0.4383+-0.0205        ? might be 1.0170x slower
   cast-int-to-double                                 5.2982+-0.0744     ?      5.3204+-0.1076        ?
   cell-argument                                      8.5564+-0.2643            8.4507+-0.1218          might be 1.0125x faster
   cfg-simplify                                       3.1458+-0.1440            3.1139+-0.1505          might be 1.0103x faster
   chain-getter-access                                9.9703+-0.1225            9.9180+-0.1803        
   cmpeq-obj-to-obj-other                            11.9819+-0.9253           11.5838+-1.6553          might be 1.0344x faster
   constant-test                                      4.9392+-0.0145     ?      5.3604+-0.9620        ? might be 1.0853x slower
   create-lots-of-functions                          11.6708+-0.2675           11.5595+-0.2180        
   DataView-custom-properties                        38.4908+-1.6033     ?     38.7067+-2.0391        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.4742+-0.0171     ?      0.5045+-0.0306        ? might be 1.0639x slower
   delay-tear-off-arguments-strictmode               14.7065+-0.9164           14.1676+-0.1617          might be 1.0380x faster
   deltablue-varargs                                202.8655+-2.4070     ?    204.0972+-1.9032        ?
   destructuring-arguments                           18.4803+-1.4837           18.4185+-1.4307        
   destructuring-swap                                 6.1582+-2.7980            5.1167+-0.0968          might be 1.2036x faster
   direct-arguments-getbyval                          1.3134+-0.0936            1.2746+-0.0606          might be 1.0305x faster
   div-boolean-double                                 5.2415+-0.0228            5.2380+-0.0970        
   div-boolean                                        7.8019+-0.0626     ?      7.8062+-0.1303        ?
   double-get-by-val-out-of-bounds                    4.4833+-0.0475     ?      4.5898+-0.1550        ? might be 1.0237x slower
   double-pollution-getbyval                          8.8397+-0.0841     ?      8.8416+-0.0840        ?
   double-pollution-putbyoffset                       4.4404+-0.1637     ?      4.4971+-0.2690        ? might be 1.0128x slower
   double-to-int32-typed-array-no-inline              2.4385+-0.2811            2.3180+-0.1047          might be 1.0520x faster
   double-to-int32-typed-array                        2.0723+-0.1267            1.9851+-0.1177          might be 1.0440x faster
   double-to-uint32-typed-array-no-inline             2.4514+-0.1292            2.3415+-0.1002          might be 1.0470x faster
   double-to-uint32-typed-array                       2.0380+-0.0672     ?      2.1596+-0.2159        ? might be 1.0597x slower
   elidable-new-object-dag                           43.8846+-0.8933     ?     43.9627+-1.0511        ?
   elidable-new-object-roflcopter                    47.2490+-2.6587     ?     47.5752+-2.1047        ?
   elidable-new-object-then-call                     39.2255+-0.9689     ?     39.9129+-2.5309        ? might be 1.0175x slower
   elidable-new-object-tree                          45.8738+-1.9745     ?     46.1765+-1.5406        ?
   empty-string-plus-int                              5.5063+-0.2359     ?      6.0791+-1.5219        ? might be 1.1040x slower
   emscripten-cube2hash                              37.9571+-1.3843     ?     39.7899+-1.8022        ? might be 1.0483x slower
   exit-length-on-plain-object                       16.6745+-4.9957           14.6216+-1.3396          might be 1.1404x faster
   external-arguments-getbyval                        1.2303+-0.0689     ?      1.2397+-0.0664        ?
   external-arguments-putbyval                        2.2798+-0.0211     ?      2.3869+-0.2236        ? might be 1.0470x slower
   fixed-typed-array-storage-var-index                1.2486+-0.0525            1.2096+-0.0180          might be 1.0323x faster
   fixed-typed-array-storage                          0.9398+-0.0197            0.9186+-0.0306          might be 1.0230x faster
   Float32Array-matrix-mult                           4.6354+-0.3627            4.6219+-0.2953        
   Float32Array-to-Float64Array-set                  57.9956+-3.7263           57.4209+-1.9787          might be 1.0100x faster
   Float64Array-alloc-long-lived                     75.1390+-2.3103           73.3345+-2.1316          might be 1.0246x faster
   Float64Array-to-Int16Array-set                    69.3288+-2.5074           68.9473+-2.9251        
   fold-double-to-int                                13.4522+-0.2213           13.4479+-0.2178        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.0073+-0.9411     ?     10.7937+-1.3751        ? might be 1.0786x slower
   fold-get-by-id-to-multi-get-by-offset             10.0979+-1.0768            9.8765+-1.0376          might be 1.0224x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.9212+-1.1766            9.2601+-1.7149          might be 1.0714x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.2013+-1.3604            8.6543+-0.5924          might be 1.0632x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.4580+-1.3693            8.8411+-1.2579          might be 1.0698x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.7642+-0.6168     ?      6.1501+-0.8617        ? might be 1.2909x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.7837+-0.5569            9.5467+-0.3883          might be 1.0248x faster
   fold-put-by-id-to-multi-put-by-offset              9.7256+-0.6577     ?      9.8959+-1.1125        ? might be 1.0175x slower
   fold-put-structure                                 5.9780+-1.5624     ?      7.5050+-0.6105        ? might be 1.2554x slower
   for-of-iterate-array-entries                       4.6434+-0.1256     ?      4.7114+-0.1685        ? might be 1.0147x slower
   for-of-iterate-array-keys                          3.8145+-0.1370            3.6957+-0.0837          might be 1.0321x faster
   for-of-iterate-array-values                        4.1182+-1.0198            3.9602+-0.3569          might be 1.0399x faster
   fround                                            20.9076+-0.7269     ?     20.9276+-1.0082        ?
   ftl-library-inlining-dataview                     67.2757+-1.4068           64.4880+-1.6152          might be 1.0432x faster
   ftl-library-inlining                              83.2637+-22.2214    ?     88.5769+-24.6823       ? might be 1.0638x slower
   function-dot-apply                                 2.2740+-0.0766     ?      2.2780+-0.1171        ?
   function-test                                      3.5122+-0.1507     ^      2.8512+-0.1140        ^ definitely 1.2318x faster
   function-with-eval                               104.7519+-1.6377     ?    106.6278+-1.7812        ? might be 1.0179x slower
   gcse-poly-get-less-obvious                        18.4354+-0.8965     ?     18.5396+-1.3075        ?
   gcse-poly-get                                     22.2178+-1.7148           21.9518+-1.6693          might be 1.0121x faster
   gcse                                               4.4045+-0.2725            4.3334+-0.0867          might be 1.0164x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7504+-0.0901            2.7400+-0.0470        
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0734+-0.0907     ?      6.1186+-0.1346        ?
   get-by-id-chain-from-try-block                     7.1271+-1.0832            6.7293+-0.2243          might be 1.0591x faster
   get-by-id-check-structure-elimination              5.3867+-0.6494            5.2376+-0.3434          might be 1.0285x faster
   get-by-id-proto-or-self                           17.2213+-0.8901     ?     17.9669+-0.2838        ? might be 1.0433x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.3560+-0.3952            3.1567+-0.0423          might be 1.0631x faster
   get-by-id-self-or-proto                           17.4854+-1.0909           17.3374+-0.4100        
   get-by-val-out-of-bounds                           4.4735+-0.2003            4.3855+-0.0302          might be 1.0201x faster
   get_callee_monomorphic                             2.8568+-0.1891     ?      2.9163+-0.2149        ? might be 1.0209x slower
   get_callee_polymorphic                             3.9430+-0.3174     ?      4.3176+-0.4758        ? might be 1.0950x slower
   getter-no-activation                               5.0694+-0.3387     ?      5.1956+-0.2803        ? might be 1.0249x slower
   getter-richards                                  124.0921+-6.4450     ?    126.1174+-7.5749        ? might be 1.0163x slower
   getter                                             5.8917+-0.5421     ?      6.0798+-0.4546        ? might be 1.0319x slower
   global-var-const-infer-fire-from-opt               0.9921+-0.1527            0.9770+-0.2203          might be 1.0155x faster
   global-var-const-infer                             0.8130+-0.0864            0.7839+-0.0622          might be 1.0372x faster
   HashMap-put-get-iterate-keys                      25.5789+-0.3477     ?     26.7727+-1.2658        ? might be 1.0467x slower
   HashMap-put-get-iterate                           25.3098+-0.4576     ?     26.0723+-0.6055        ? might be 1.0301x slower
   HashMap-string-put-get-iterate                    28.5695+-1.4949     ?     28.5865+-0.7891        ?
   hoist-make-rope                                   11.7022+-0.4921     ?     12.4984+-0.6721        ? might be 1.0680x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.1181+-0.1908            5.0966+-0.1928        
   hoist-poly-check-structure                         3.6512+-0.0237     ?      3.8150+-0.3772        ? might be 1.0449x slower
   imul-double-only                                   8.6482+-1.0850     ?      8.9990+-0.7118        ? might be 1.0406x slower
   imul-int-only                                     10.0415+-0.6541           10.0367+-0.6289        
   imul-mixed                                         8.3157+-0.0840     ?      8.4320+-0.5623        ? might be 1.0140x slower
   in-four-cases                                     20.7322+-0.3573     ?     20.8867+-0.5254        ?
   in-one-case-false                                 10.1618+-0.4626     ?     10.2876+-0.3736        ? might be 1.0124x slower
   in-one-case-true                                  10.0902+-0.3966     ?     11.0101+-0.5471        ? might be 1.0912x slower
   in-two-cases                                      10.3376+-0.2917     ?     10.6019+-0.6263        ? might be 1.0256x slower
   indexed-properties-in-objects                      3.0717+-0.0474            2.9731+-0.1921          might be 1.0332x faster
   infer-closure-const-then-mov-no-inline             4.7029+-0.4642            4.3742+-0.4450          might be 1.0752x faster
   infer-closure-const-then-mov                      20.0017+-0.4138           19.6655+-0.3005          might be 1.0171x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.6551+-1.4390     ?     14.8466+-1.3895        ? might be 1.0131x slower
   infer-closure-const-then-put-to-scope             22.9206+-1.1320     ?     22.9934+-1.0209        ?
   infer-closure-const-then-reenter-no-inline   
                                                     63.2528+-1.6614           62.4329+-1.2799          might be 1.0131x faster
   infer-closure-const-then-reenter                  24.1999+-2.0163           23.3806+-1.6236          might be 1.0350x faster
   infer-constant-global-property                    31.1348+-1.6761           31.0642+-1.6611        
   infer-constant-property                            2.6956+-0.0400     ?      2.7779+-0.1187        ? might be 1.0305x slower
   infer-one-time-closure-ten-vars                   12.6685+-0.9149     ?     12.7612+-0.6671        ?
   infer-one-time-closure-two-vars                   12.0938+-0.3310     ?     13.7252+-1.5483        ? might be 1.1349x slower
   infer-one-time-closure                            12.5203+-1.0953           12.1119+-0.7235          might be 1.0337x faster
   infer-one-time-deep-closure                       22.8330+-1.3150           21.6907+-1.5107          might be 1.0527x faster
   inline-arguments-access                            4.6253+-0.0737            4.5846+-0.0456        
   inline-arguments-aliased-access                    4.6583+-0.0880            4.6340+-0.0737        
   inline-arguments-local-escape                      5.0531+-0.7324            4.7271+-0.1196          might be 1.0690x faster
   inline-get-scoped-var                              5.0445+-0.2921            4.7312+-0.0567          might be 1.0662x faster
   inlined-put-by-id-transition                      10.8984+-0.1732     ?     11.0619+-0.9459        ? might be 1.0150x slower
   int-or-other-abs-then-get-by-val                   4.7897+-0.1498            4.6824+-0.0158          might be 1.0229x faster
   int-or-other-abs-zero-then-get-by-val             17.6657+-1.0983     ?     18.2265+-1.2433        ? might be 1.0317x slower
   int-or-other-add-then-get-by-val                   4.3315+-0.0984            4.2944+-0.0208        
   int-or-other-add                                   5.3500+-0.0517            5.3131+-0.0471        
   int-or-other-div-then-get-by-val                   4.2976+-0.0993     ?      4.3031+-0.0446        ?
   int-or-other-max-then-get-by-val                   4.3969+-0.0209     ?      4.4422+-0.0644        ? might be 1.0103x slower
   int-or-other-min-then-get-by-val                   4.5327+-0.2367            4.4716+-0.0777          might be 1.0137x faster
   int-or-other-mod-then-get-by-val                   4.0958+-0.4345            3.9041+-0.0473          might be 1.0491x faster
   int-or-other-mul-then-get-by-val                   4.0174+-0.0511     ?      4.1244+-0.2395        ? might be 1.0266x slower
   int-or-other-neg-then-get-by-val                   4.5474+-0.1508     ?      4.5542+-0.1323        ?
   int-or-other-neg-zero-then-get-by-val             17.9198+-1.4959           17.4259+-0.2224          might be 1.0283x faster
   int-or-other-sub-then-get-by-val                   4.5802+-0.1427            4.5315+-0.0606          might be 1.0107x faster
   int-or-other-sub                                   3.5310+-0.0359            3.5152+-0.0692        
   int-overflow-local                                 4.5201+-0.0958     ?      4.6803+-0.2747        ? might be 1.0354x slower
   Int16Array-alloc-long-lived                       53.5530+-1.8536     ?     53.7943+-1.0243        ?
   Int16Array-bubble-sort-with-byteLength            20.5167+-0.2541     ?     20.7196+-0.3299        ?
   Int16Array-bubble-sort                            19.7780+-0.5981     ?     20.5556+-1.0508        ? might be 1.0393x slower
   Int16Array-load-int-mul                            1.5744+-0.1786            1.5481+-0.1191          might be 1.0170x faster
   Int16Array-to-Int32Array-set                      51.9712+-1.9310     ?     53.7487+-2.0937        ? might be 1.0342x slower
   Int32Array-alloc-large                            23.5892+-0.6049     ?     24.0756+-0.7261        ? might be 1.0206x slower
   Int32Array-alloc-long-lived                       59.1001+-2.3070           57.6514+-1.2425          might be 1.0251x faster
   Int32Array-alloc                                   3.7969+-0.3637     ?      3.9956+-0.6505        ? might be 1.0523x slower
   Int32Array-Int8Array-view-alloc                    6.8914+-0.2133     !      8.5462+-0.9440        ! definitely 1.2401x slower
   int52-spill                                        6.3459+-0.0383     ?      6.3751+-0.0740        ?
   Int8Array-alloc-long-lived                        47.1632+-1.1694     ?     49.3937+-1.7833        ? might be 1.0473x slower
   Int8Array-load-with-byteLength                     3.3260+-0.0368     ?      3.4867+-0.2747        ? might be 1.0483x slower
   Int8Array-load                                     3.3127+-0.0555     ?      3.3470+-0.0659        ? might be 1.0104x slower
   integer-divide                                    11.0798+-0.1001     ?     11.1480+-0.1118        ?
   integer-modulo                                     2.0716+-0.1404     ?      2.3278+-0.5134        ? might be 1.1237x slower
   is-boolean-fold-tricky                             4.5984+-0.3050            4.3895+-0.0531          might be 1.0476x faster
   is-boolean-fold                                    2.8420+-0.0465     ?      2.9842+-0.3795        ? might be 1.0500x slower
   is-function-fold-tricky-internal-function   
                                                      9.8033+-0.1497     !     12.1025+-0.2236        ! definitely 1.2345x slower
   is-function-fold-tricky                            4.5329+-0.1181     ?      4.6007+-0.1890        ? might be 1.0150x slower
   is-function-fold                                   2.8483+-0.0693     ?      2.8719+-0.0483        ?
   is-number-fold-tricky                              4.4537+-0.1139     ?      4.6582+-0.3317        ? might be 1.0459x slower
   is-number-fold                                     3.0008+-0.3130            2.8259+-0.0198          might be 1.0619x faster
   is-object-or-null-fold-functions                   2.8950+-0.0443     ?      2.9642+-0.1321        ? might be 1.0239x slower
   is-object-or-null-fold-less-tricky                 4.6128+-0.1051            4.4965+-0.0542          might be 1.0259x faster
   is-object-or-null-fold-tricky                     10.0801+-0.1066     ^      6.6509+-0.1253        ^ definitely 1.5156x faster
   is-object-or-null-fold                             2.8765+-0.0765     ?      3.0099+-0.3061        ? might be 1.0464x slower
   is-object-or-null-trickier-function                4.6642+-0.0927            4.6000+-0.0854          might be 1.0139x faster
   is-object-or-null-trickier-internal-function   
                                                     12.6065+-1.0585     ?     12.8415+-0.1160        ? might be 1.0186x slower
   is-object-or-null-tricky-function                  4.6377+-0.0677            4.5503+-0.1046          might be 1.0192x faster
   is-object-or-null-tricky-internal-function   
                                                     10.2681+-0.0696     ^      9.5515+-0.2200        ^ definitely 1.0750x faster
   is-string-fold-tricky                              4.5194+-0.1643            4.4990+-0.1757        
   is-string-fold                                     2.8265+-0.1358     ?      3.1156+-0.4118        ? might be 1.1023x slower
   is-undefined-fold-tricky                           4.1049+-0.4807            3.7006+-0.0498          might be 1.1093x faster
   is-undefined-fold                                  3.0297+-0.2437            2.8525+-0.0862          might be 1.0621x faster
   large-int-captured                                 4.7378+-0.1614            4.6451+-0.1095          might be 1.0200x faster
   large-int-neg                                     16.8859+-0.7019           16.6057+-0.6067          might be 1.0169x faster
   large-int                                         15.0487+-0.3107     ?     15.6858+-1.0861        ? might be 1.0423x slower
   logical-not                                        4.6521+-0.2330            4.4960+-0.0588          might be 1.0347x faster
   lots-of-fields                                    14.3793+-2.7672           13.3656+-0.9201          might be 1.0758x faster
   make-indexed-storage                               3.3182+-0.3585            2.9945+-0.3454          might be 1.1081x faster
   make-rope-cse                                      4.9051+-0.4446     ?      5.0069+-0.6812        ? might be 1.0208x slower
   marsaglia-larger-ints                             37.3949+-2.0185           36.4942+-1.5837          might be 1.0247x faster
   marsaglia-osr-entry                               23.2267+-0.5145           23.0927+-0.8381        
   max-boolean                                        2.6024+-0.3162            2.5220+-0.0478          might be 1.0319x faster
   method-on-number                                  17.1045+-0.4053     ?     17.1810+-0.2897        ?
   min-boolean                                        2.6331+-0.3135            2.4511+-0.0211          might be 1.0742x faster
   minus-boolean-double                               3.1453+-0.0418     ?      3.1932+-0.0714        ? might be 1.0152x slower
   minus-boolean                                      2.3565+-0.1285     ?      2.4644+-0.2962        ? might be 1.0458x slower
   misc-strict-eq                                    37.6771+-0.7570           37.5186+-0.6075        
   mod-boolean-double                                11.0610+-0.3442           11.0224+-0.2565        
   mod-boolean                                        7.8180+-0.0401     ?      7.8572+-0.0743        ?
   mul-boolean-double                                 3.7751+-0.1240            3.6802+-0.0335          might be 1.0258x faster
   mul-boolean                                        2.9045+-0.0905     ?      2.9968+-0.2277        ? might be 1.0318x slower
   neg-boolean                                        3.2088+-0.0983            3.1921+-0.0707        
   negative-zero-divide                               0.3631+-0.0490            0.3583+-0.0093          might be 1.0135x faster
   negative-zero-modulo                               0.3477+-0.0190     ?      0.3611+-0.0190        ? might be 1.0386x slower
   negative-zero-negate                               0.3199+-0.0091     ?      0.3246+-0.0148        ? might be 1.0145x slower
   nested-function-parsing                           39.6425+-1.8376           38.8528+-1.2872          might be 1.0203x faster
   new-array-buffer-dead                            112.5321+-1.3871     ?    113.1478+-3.7468        ?
   new-array-buffer-push                              6.9789+-0.2553            6.9732+-0.2029        
   new-array-dead                                    18.9426+-0.5794     ?     19.0050+-0.4309        ?
   new-array-push                                     3.9288+-0.1702     ?      4.3426+-0.8600        ? might be 1.1053x slower
   no-inline-constructor                            123.5755+-2.3196     !    131.0090+-1.2610        ! definitely 1.0602x slower
   number-test                                        3.2253+-0.4094            3.1568+-0.3421          might be 1.0217x faster
   object-closure-call                                5.6568+-0.0965     ?      5.8025+-0.2526        ? might be 1.0258x slower
   object-test                                        3.3962+-0.5036            3.0461+-0.3710          might be 1.1149x faster
   obvious-sink-pathology-taken                     140.6009+-2.3708     ?    140.6113+-1.8045        ?
   obvious-sink-pathology                           132.5070+-1.5988          131.2062+-2.5259        
   obviously-elidable-new-object                     35.9722+-1.3809           35.9237+-0.7701        
   plus-boolean-arith                                 2.4879+-0.0507     ?      2.5849+-0.2267        ? might be 1.0390x slower
   plus-boolean-double                                3.2158+-0.0608     ?      3.2184+-0.0950        ?
   plus-boolean                                       2.4832+-0.1744            2.3537+-0.0315          might be 1.0550x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.4668+-0.4026            3.2955+-0.0946          might be 1.0520x faster
   poly-chain-access-different-prototypes             2.6695+-0.3418            2.6087+-0.1295          might be 1.0233x faster
   poly-chain-access-simpler                          3.2826+-0.0756            3.2714+-0.0395        
   poly-chain-access                                  2.5348+-0.1265     ?      2.6523+-0.3188        ? might be 1.0463x slower
   poly-stricteq                                     63.0007+-2.1962     ?     63.1503+-1.0247        ?
   polymorphic-array-call                             1.3424+-0.1553            1.2455+-0.0275          might be 1.0778x faster
   polymorphic-get-by-id                              3.0853+-0.0580     ?      3.1412+-0.0589        ? might be 1.0181x slower
   polymorphic-put-by-id                             29.8818+-3.3842           28.9084+-0.9984          might be 1.0337x faster
   polymorphic-structure                             15.2430+-0.9330     ?     15.4735+-1.4465        ? might be 1.0151x slower
   polyvariant-monomorphic-get-by-id                  8.5368+-0.1551     ?      8.7110+-0.4815        ? might be 1.0204x slower
   proto-getter-access                               10.1388+-0.1281     ^      9.8070+-0.1148        ^ definitely 1.0338x faster
   put-by-id-replace-and-transition                   9.3521+-0.3356            9.1877+-0.2692          might be 1.0179x faster
   put-by-id-slightly-polymorphic                     2.8243+-0.0856            2.7491+-0.0569          might be 1.0274x faster
   put-by-id                                         12.6666+-0.3076           12.5829+-0.3329        
   put-by-val-direct                                  0.4559+-0.0334            0.4128+-0.0142          might be 1.1043x faster
   put-by-val-large-index-blank-indexing-type   
                                                      6.1807+-0.6348     ?      6.2935+-0.7867        ? might be 1.0183x slower
   put-by-val-machine-int                             2.8691+-0.1686     ?      2.8910+-0.3267        ?
   rare-osr-exit-on-local                            15.9410+-2.0278           14.8478+-0.2401          might be 1.0736x faster
   register-pressure-from-osr                        21.9861+-1.0871           21.9609+-1.2092        
   setter                                             5.8956+-0.7369            5.7069+-0.6786          might be 1.0331x faster
   simple-activation-demo                            25.5389+-1.1657           24.8955+-0.4875          might be 1.0258x faster
   simple-getter-access                              12.7457+-0.2119     ?     12.7474+-0.2339        ?
   simple-poly-call-nested                            8.2498+-0.1799            8.1348+-0.2712          might be 1.0141x faster
   simple-poly-call                                   1.3024+-0.0496     ?      1.3307+-0.1347        ? might be 1.0217x slower
   sin-boolean                                       22.6650+-0.5475     ?     24.2918+-1.1057        ? might be 1.0718x slower
   singleton-scope                                   68.3917+-1.6811     ?     68.4198+-1.6625        ?
   sink-function                                     12.4308+-0.3752           12.3936+-0.3723        
   sinkable-new-object-dag                           69.2089+-0.5359     ?     70.7182+-1.8237        ? might be 1.0218x slower
   sinkable-new-object-taken                         54.2608+-2.6451           53.5833+-2.9129          might be 1.0126x faster
   sinkable-new-object                               39.6253+-2.2511     ?     40.7083+-1.8308        ? might be 1.0273x slower
   slow-array-profile-convergence                     2.8648+-0.1246     ?      3.0032+-0.3610        ? might be 1.0483x slower
   slow-convergence                                   2.7576+-0.1516            2.7010+-0.1621          might be 1.0210x faster
   sorting-benchmark                                 20.8746+-0.5832     ?     21.7457+-1.3301        ? might be 1.0417x slower
   sparse-conditional                                 1.1337+-0.0562            1.1060+-0.0177          might be 1.0251x faster
   splice-to-remove                                  17.3232+-1.6753           17.0988+-1.4058          might be 1.0131x faster
   string-char-code-at                               18.2097+-1.6253           17.2783+-0.2304          might be 1.0539x faster
   string-concat-object                               2.5251+-0.0701     ?      2.6067+-0.1269        ? might be 1.0323x slower
   string-concat-pair-object                          2.5669+-0.1792     ?      2.7063+-0.2907        ? might be 1.0543x slower
   string-concat-pair-simple                         12.0251+-0.9622     ?     12.4455+-0.9984        ? might be 1.0350x slower
   string-concat-simple                              12.7947+-1.3268           12.3322+-1.3114          might be 1.0375x faster
   string-cons-repeat                                 8.5297+-0.9981     ?      8.7627+-1.2204        ? might be 1.0273x slower
   string-cons-tower                                  8.5420+-0.9764     ?      8.6149+-0.7992        ?
   string-equality                                   18.1510+-1.6135     ?     18.7796+-1.7310        ? might be 1.0346x slower
   string-get-by-val-big-char                         7.1410+-0.0743            7.0996+-0.0400        
   string-get-by-val-out-of-bounds-insane             3.7356+-0.0984            3.7312+-0.4341        
   string-get-by-val-out-of-bounds                    5.2684+-0.2344            5.2015+-0.0823          might be 1.0129x faster
   string-get-by-val                                  3.4442+-0.0414     ^      3.2854+-0.0265        ^ definitely 1.0483x faster
   string-hash                                        2.1818+-0.2442            2.0649+-0.0458          might be 1.0567x faster
   string-long-ident-equality                        15.9530+-1.0263           15.2242+-0.3893          might be 1.0479x faster
   string-out-of-bounds                              15.1478+-0.9240           14.9458+-0.2220          might be 1.0135x faster
   string-repeat-arith                               35.0408+-1.9992           31.4628+-1.6236          might be 1.1137x faster
   string-sub                                        68.5024+-4.6726           67.6466+-3.5300          might be 1.0127x faster
   string-test                                        2.9639+-0.0839            2.9344+-0.0228          might be 1.0101x faster
   string-var-equality                               33.4323+-1.5907           32.7492+-1.2900          might be 1.0209x faster
   structure-hoist-over-transitions                   2.6178+-0.1015     ?      2.7149+-0.1570        ? might be 1.0371x slower
   substring-concat-weird                            40.5321+-1.8374     ?     42.2543+-2.4492        ? might be 1.0425x slower
   substring-concat                                  41.1139+-1.1979     ?     41.8407+-1.9623        ? might be 1.0177x slower
   substring                                         46.6278+-1.8131     ?     47.5215+-2.0886        ? might be 1.0192x slower
   switch-char-constant                               2.6895+-0.0446     ?      2.7041+-0.0602        ?
   switch-char                                        7.1014+-0.9462            6.9963+-0.9547          might be 1.0150x faster
   switch-constant                                    8.4379+-0.2892     ?      8.7167+-0.5159        ? might be 1.0330x slower
   switch-string-basic-big-var                       18.4140+-0.7589           18.3156+-0.6279        
   switch-string-basic-big                           14.6460+-0.3378           14.5602+-0.2081        
   switch-string-basic-var                           14.5818+-0.1523     ?     14.6547+-0.2842        ?
   switch-string-basic                               13.5048+-0.3160     ?     13.6800+-0.2974        ? might be 1.0130x slower
   switch-string-big-length-tower-var                21.1015+-1.7141           20.2431+-0.9330          might be 1.0424x faster
   switch-string-length-tower-var                    15.5881+-0.5938     ?     15.9134+-1.3171        ? might be 1.0209x slower
   switch-string-length-tower                        12.9159+-0.3600     ?     12.9202+-0.1835        ?
   switch-string-short                               12.7500+-0.1721     ?     12.7839+-0.1692        ?
   switch                                            12.7271+-0.1884     ?     12.9423+-0.5514        ? might be 1.0169x slower
   tear-off-arguments-simple                          3.5063+-0.1618     ?      3.5229+-0.1476        ?
   tear-off-arguments                                 4.6535+-0.0421     ?      4.7522+-0.1575        ? might be 1.0212x slower
   temporal-structure                                12.2433+-0.1222     ?     12.5517+-0.3537        ? might be 1.0252x slower
   to-int32-boolean                                  13.8214+-0.2588     ?     14.0861+-0.9323        ? might be 1.0192x slower
   try-catch-get-by-val-cloned-arguments             15.3340+-1.5564           14.6546+-0.5055          might be 1.0464x faster
   try-catch-get-by-val-direct-arguments              7.1213+-0.9795     ?      7.2033+-1.3605        ? might be 1.0115x slower
   try-catch-get-by-val-scoped-arguments              7.6374+-0.0560     ?      8.3050+-1.0117        ? might be 1.0874x slower
   typed-array-get-set-by-val-profiling              33.6586+-2.4616           32.5028+-1.3606          might be 1.0356x faster
   undefined-property-access                        358.7854+-2.5306          355.1364+-2.9223          might be 1.0103x faster
   undefined-test                                     3.0203+-0.0279     ?      3.1891+-0.2964        ? might be 1.0559x slower
   unprofiled-licm                                   24.3934+-1.6659           22.9065+-0.2706          might be 1.0649x faster
   varargs-call                                      16.2912+-1.0503           15.9132+-0.4635          might be 1.0238x faster
   varargs-construct-inline                          23.6945+-1.6544     ?     23.8232+-1.2817        ?
   varargs-construct                                 31.8429+-0.2191           31.7965+-0.3332        
   varargs-inline                                     9.3855+-0.2674     ?      9.6024+-0.7296        ? might be 1.0231x slower
   varargs-strict-mode                               10.4270+-0.3662     ?     10.4302+-0.3953        ?
   varargs                                           10.3014+-0.1855     ?     10.5271+-0.7686        ? might be 1.0219x slower
   weird-inlining-const-prop                          2.4225+-0.1477            2.2753+-0.1046          might be 1.0647x faster

   <geometric>                                        8.6178+-0.0480            8.6119+-0.0158          might be 1.0007x faster

                                                        TipOfTree                 FastTypeOf                                    
AsmBench:
   bigfib.cpp                                       496.1573+-2.2942          495.7375+-5.2356        
   cray.c                                           475.4874+-133.6488        423.3683+-3.3488          might be 1.1231x faster
   dry.c                                            483.9148+-7.3464     ?    488.8380+-7.3494        ? might be 1.0102x slower
   FloatMM.c                                        728.3402+-6.7959          727.6390+-6.1537        
   gcc-loops.cpp                                   4276.1742+-5.9658     ?   4276.9834+-17.9059       ?
   n-body.c                                         983.0286+-5.7620          979.4143+-0.9579        
   Quicksort.c                                      422.4576+-4.9618          419.7352+-3.0048        
   stepanov_container.cpp                          3618.1105+-23.2676        3604.4108+-15.0399       
   Towers.c                                         261.8316+-3.7934          260.4954+-0.4316        

   <geometric>                                      801.7464+-21.4629         792.4357+-1.2606          might be 1.0117x faster

                                                        TipOfTree                 FastTypeOf                                    
CompressionBench:
   huffman                                          371.4502+-2.3921     ^    361.1787+-3.4249        ^ definitely 1.0284x faster
   arithmetic-simple                                392.5138+-4.3091     ?    400.6689+-6.6296        ? might be 1.0208x slower
   arithmetic-precise                               298.2770+-2.5733          297.6355+-4.9673        
   arithmetic-complex-precise                       299.6568+-2.7860     ?    300.2652+-3.0324        ?
   arithmetic-precise-order-0                       427.9771+-7.5552          423.1330+-6.0784          might be 1.0114x faster
   arithmetic-precise-order-1                       328.3070+-3.4293     ?    329.2343+-4.4209        ?
   arithmetic-precise-order-2                       364.0974+-3.1693     ?    392.7399+-83.4007       ? might be 1.0787x slower
   arithmetic-simple-order-1                        422.6135+-5.6010          421.9578+-3.3853        
   arithmetic-simple-order-2                        472.9729+-5.0464          471.9146+-9.5995        
   lz-string                                        320.1600+-1.7817     ?    323.8259+-5.8925        ? might be 1.0115x slower

   <geometric>                                      365.5865+-1.4104     ?    367.5551+-6.4319        ? might be 1.0054x slower

                                                        TipOfTree                 FastTypeOf                                    
Geomean of preferred means:
   <scaled-result>                                   64.1345+-0.3756           63.9887+-0.2779          might be 1.0023x faster
Comment 12 Filip Pizlo 2015-05-02 12:19:58 PDT
Created attachment 252243 [details]
the patch
Comment 13 WebKit Commit Bot 2015-05-02 12:22:25 PDT
Attachment 252243 [details] did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:4733:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7421:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4912:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:4917:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.
Comment 14 Geoffrey Garen 2015-05-02 15:21:32 PDT
Comment on attachment 252243 [details]
the patch

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

r=me

> Source/JavaScriptCore/ChangeLog:10
> +        Adds comprehensive support for fast typeof to the optimizing JITs. Calls into the runtime
> +        are only used for very exotic objects - they must have either the MasqueradesAsUndefined or
> +        TypeOfShouldCallGetCallData type flags set. All other cases are handled inline.

When do we need to use this flag? Seems weird.
Comment 15 Filip Pizlo 2015-05-02 17:13:12 PDT
(In reply to comment #14)
> Comment on attachment 252243 [details]
> the patch
> 
> View in context:
> https://bugs.webkit.org/attachment.cgi?id=252243&action=review
> 
> r=me
> 
> > Source/JavaScriptCore/ChangeLog:10
> > +        Adds comprehensive support for fast typeof to the optimizing JITs. Calls into the runtime
> > +        are only used for very exotic objects - they must have either the MasqueradesAsUndefined or
> > +        TypeOfShouldCallGetCallData type flags set. All other cases are handled inline.
> 
> When do we need to use this flag? Seems weird.

TypeOfShouldCallGetCallData means that there is a getCallData() override. Currently if there is such an override then we need to call it since it may still return CallTypeNone. The flag allows us to avoid the call in cases where getCallData() is not overridden.
Comment 16 Filip Pizlo 2015-05-02 17:17:23 PDT
Landed in http://trac.webkit.org/changeset/183724
Comment 17 Ryosuke Niwa 2015-05-04 20:17:02 PDT
Looks like this was a 2% improvement on Speedometer.