Bug 136724 - Eliminate Scope slot from JavaScript CallFrame
Summary: Eliminate Scope slot from JavaScript CallFrame
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: All All
: P2 Normal
Assignee: Michael Saboff
URL:
Keywords: InRadar
Depends on: 136725 136785 136800 136840 136894 136901 137839 137906 137907 138252 138253 138254 138326 138587 138588 138637 138651 138706 138707 138793 139166 139167 139202
Blocks:
  Show dependency treegraph
 
Reported: 2014-09-10 16:37 PDT by Michael Saboff
Modified: 2015-01-21 13:43 PST (History)
5 users (show)

See Also:


Attachments
Draft Patch. Testing now. (31.49 KB, patch)
2015-01-20 18:54 PST, Michael Saboff
no flags Details | Formatted Diff | Diff
Patch (34.49 KB, patch)
2015-01-21 13:00 PST, Michael Saboff
ggaren: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Saboff 2014-09-10 16:37:48 PDT
This bug is to track the removal of the JSScope slot from the CallFrame and use alternative means to access the appropriate JSScope.

The current use cases for JSScope are:
 A. VM Helper functions that do dynamic resolution
 B. The opcodes op_create_activation, op_push_with_scope, op_push_name_scope, op_pop_scope, op_catch, op_call_eval and op_new_func_* store the scope, including to have a reference so the scope doesn't get GC'ed.
 C. JSObject uses JSScope to get the VM.
 D. Debugger uses JSScope to walk the tree and display variables at every scope level.
 E. API access methods use JSScope to get the global object.
 F. Helper functions use JSScope to  to access global object.

Proposed steps to eliminate using a call frame header slot to store the JSScope.

 1A. Create a new base class to JSFunction that only contains a JSScope.  Tentative name is JSCallee, but is open to be changed.
 1B. Add a JSCallee for program and eval call frames.
 1C. Add a JSCallee to GlobalExec.
 2A. Change CallFrame::lexicalGlobalObject() to use JSCallee -> struct -> GlobalObject
 2B. Change C++ code to load the call, mask and load the VM for the VM.
 3. Add scope register to CodeBlock and fill it in with JSStack::ScopeChain.
 4A. Change CallFrame::scope() to use a CodeBlock scope register or to with the scope via the JSCallee in the Callee slot.
 4B. Edit op codes to use the new register
 5. Actually allocate a register in the CodeBlock and eliminate the JSStack::ScopeChain slot

<rdar://problem/18024006>
Comment 1 Michael Saboff 2015-01-20 18:54:09 PST
Created attachment 245041 [details]
Draft Patch.  Testing now.

Builds and runs 32 and 64 bit JS tests.  Runs 64 bit WK tests.  Will test with 32 bit and run perf tests.
Comment 2 Michael Saboff 2015-01-21 13:00:40 PST
Created attachment 245079 [details]
Patch

Performance seems to be neutral to slight improvement overall.  Noticeable highlights from the performance tests
 - LongSpider version of access-binary-trees is 5.5% slower
 - LongSpider version of bitops-bits-in-byte is 2% faster
 - LongSpider version of controlflow-recursive is 1.6% slower
 - Kraken audio-oscillator is 4% faster, which raises Kraken's total by almost 1%
 - The JSRegress test Int16Array-to-Int32Array-set is 5-6% faster (two runs)
 - The JSRegress test switch-string-basic-big is 13-19% faster (two runs)

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSBench, JSRegress, and CompressionBench on msaboff-pro (MacPro5,1).

VMs tested:
"Baseline" at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r178757)
"NoScopeSlot" at /Volumes/Data/src/webkit/WebKitBuild/Release/DumpRenderTree (r178795)

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

                                                         Baseline                NoScopeSlot                                    
SunSpider:
   3d-cube                                            8.2032+-0.2899            7.9053+-0.2968          might be 1.0377x faster
   3d-morph                                           8.0392+-0.1823            7.8415+-0.1010          might be 1.0252x faster
   3d-raytrace                                        8.7214+-0.2592     ?      8.9064+-0.1817        ? might be 1.0212x slower
   access-binary-trees                                3.7053+-0.2704            3.6841+-0.3725        
   access-fannkuch                                    7.5298+-0.9632            7.3582+-0.7566          might be 1.0233x faster
   access-nbody                                       3.9158+-0.1831     ?      3.9573+-0.2015        ? might be 1.0106x slower
   access-nsieve                                      4.5915+-0.1547     ?      4.6581+-0.1089        ? might be 1.0145x slower
   bitops-3bit-bits-in-byte                           1.6822+-0.0672     ?      1.7286+-0.0764        ? might be 1.0276x slower
   bitops-bits-in-byte                                5.2422+-0.0918            5.2346+-0.1390        
   bitops-bitwise-and                                 2.6332+-0.0759     ?      2.7415+-0.3232        ? might be 1.0411x slower
   bitops-nsieve-bits                                 4.8501+-0.2205     ?      4.9033+-0.2393        ? might be 1.0110x slower
   controlflow-recursive                              3.0684+-0.1397            2.9452+-0.0823          might be 1.0418x faster
   crypto-aes                                         6.1458+-0.2799            6.0269+-0.2132          might be 1.0197x faster
   crypto-md5                                         3.2868+-0.1644     ?      3.3893+-0.2812        ? might be 1.0312x slower
   crypto-sha1                                        3.2078+-0.1097     ?      3.2418+-0.1247        ? might be 1.0106x slower
   date-format-tofte                                 15.2903+-0.5102           15.1601+-0.3911        
   date-format-xparb                                  8.7455+-0.1723     ?      9.0962+-0.1986        ? might be 1.0401x slower
   math-cordic                                        4.0781+-0.0972            4.0076+-0.0972          might be 1.0176x faster
   math-partial-sums                                  8.7215+-0.2080            8.6214+-0.1028          might be 1.0116x faster
   math-spectral-norm                                 2.7054+-0.1086     ?      2.7239+-0.2807        ?
   regexp-dna                                        10.6263+-0.2739     ?     10.7648+-0.2934        ? might be 1.0130x slower
   string-base64                                      7.1027+-0.2807            7.0259+-0.1806          might be 1.0109x faster
   string-fasta                                       9.6738+-0.3309     ?      9.7151+-0.4681        ?
   string-tagcloud                                   13.3876+-0.4241     ?     13.8761+-1.4442        ? might be 1.0365x slower
   string-unpack-code                                29.9473+-0.9851     ?     29.9525+-1.8803        ?
   string-validate-input                              8.4226+-0.2104            8.3911+-0.1447        

   <arithmetic> *                                     7.4432+-0.0746     ?      7.4560+-0.1255        ? might be 1.0017x slower
   <geometric>                                        6.0409+-0.0721     ?      6.0536+-0.0620        ? might be 1.0021x slower
   <harmonic>                                         5.0102+-0.0896     ?      5.0336+-0.0644        ? might be 1.0047x slower

                                                         Baseline                NoScopeSlot                                    
LongSpider:
   3d-cube                                         1574.4730+-156.0459       1539.5296+-22.1580         might be 1.0227x faster
   3d-morph                                        1872.7057+-3.7387     ?   1875.9737+-12.6079       ?
   3d-raytrace                                     1075.2107+-20.3410        1059.1740+-5.5601          might be 1.0151x faster
   access-binary-trees                             1302.5200+-4.6336     !   1374.1434+-1.1430        ! definitely 1.0550x slower
   access-fannkuch                                  437.6233+-21.8829    ?    453.3674+-22.3888       ? might be 1.0360x slower
   access-nbody                                    1001.2140+-15.7581         996.2579+-2.3865        
   access-nsieve                                   1334.8472+-31.7991        1320.9979+-12.6117         might be 1.0105x faster
   bitops-3bit-bits-in-byte                          49.8621+-0.4460     ?     50.1541+-1.0543        ?
   bitops-bits-in-byte                              331.0018+-3.4097     ^    324.5901+-2.3129        ^ definitely 1.0198x faster
   bitops-nsieve-bits                               961.4368+-5.6038          961.1949+-6.8003        
   controlflow-recursive                            717.4920+-0.4511     !    729.0785+-1.9996        ! definitely 1.0161x slower
   crypto-aes                                       916.8375+-7.8799          913.3093+-6.8440        
   crypto-md5                                       803.9736+-2.7834     ?    812.3015+-8.7357        ? might be 1.0104x slower
   crypto-sha1                                      935.3741+-26.9900    ?    946.0521+-28.5589       ? might be 1.0114x slower
   date-format-tofte                               1022.6110+-12.1339    ?   1026.6420+-36.2162       ?
   date-format-xparb                                992.2853+-77.7880         963.0093+-10.0564         might be 1.0304x faster
   math-cordic                                      676.3646+-8.2845     ?    678.7476+-2.3903        ?
   math-partial-sums                               1040.9702+-5.5986         1033.7117+-10.8287       
   math-spectral-norm                              1080.3638+-6.8771         1077.9869+-2.9742        
   string-base64                                    633.9053+-12.0274    ?    637.8085+-4.2267        ?
   string-fasta                                     579.6824+-10.7183    ?    584.8298+-3.4992        ?
   string-tagcloud                                  307.3727+-3.9998          304.6969+-3.3272        

   <arithmetic>                                     893.0967+-10.4458    ?    893.7980+-1.0704        ? might be 1.0008x slower
   <geometric> *                                    747.3029+-6.0469     ?    748.4658+-1.3076        ? might be 1.0016x slower
   <harmonic>                                       460.9535+-1.0284     ?    462.3796+-4.1344        ? might be 1.0031x slower

                                                         Baseline                NoScopeSlot                                    
V8Spider:
   crypto                                            71.9127+-0.8322     ?     72.0225+-1.1899        ?
   deltablue                                        125.8665+-7.0826          123.9465+-2.8463          might be 1.0155x faster
   earley-boyer                                      68.0761+-0.2396           67.6390+-1.4670        
   raytrace                                          59.3583+-1.1646           58.7692+-1.5841          might be 1.0100x faster
   regexp                                           100.8847+-0.3759     ?    101.6783+-1.3250        ?
   richards                                         111.7941+-7.5246     ?    112.1810+-6.1481        ?
   splay                                             48.2245+-4.0661     ?     48.9276+-3.5370        ? might be 1.0146x slower

   <arithmetic>                                      83.7310+-2.1078           83.5949+-1.7541          might be 1.0016x faster
   <geometric> *                                     79.3809+-2.0667           79.3359+-1.7337          might be 1.0006x faster
   <harmonic>                                        75.2497+-2.2242     ?     75.2905+-1.8056        ? might be 1.0005x slower

                                                         Baseline                NoScopeSlot                                    
Octane:
   encrypt                                           0.32726+-0.00102    ?     0.32876+-0.00402       ?
   decrypt                                           5.78146+-0.04155          5.78100+-0.01055       
   deltablue                                x2       0.30442+-0.00534    ?     0.30756+-0.00403       ? might be 1.0103x slower
   earley                                            0.98696+-0.01353          0.97345+-0.01368         might be 1.0139x faster
   boyer                                             8.31711+-0.14855          8.30948+-0.14397       
   navier-stokes                            x2       6.73514+-0.03104    ?     6.73908+-0.05434       ?
   raytrace                                 x2       2.47481+-0.21376    ?     2.51517+-0.12158       ? might be 1.0163x slower
   richards                                 x2       0.17465+-0.00475    ?     0.17872+-0.00576       ? might be 1.0233x slower
   splay                                    x2       0.54940+-0.02769          0.53971+-0.00567         might be 1.0179x faster
   regexp                                   x2      45.44029+-0.90509         44.91104+-0.49773         might be 1.0118x faster
   pdfjs                                    x2      72.29432+-0.75924         71.50624+-1.36602         might be 1.0110x faster
   mandreel                                 x2      72.93277+-0.90470         71.91960+-1.85316         might be 1.0141x faster
   gbemu                                    x2      61.34221+-1.40704         60.90043+-0.41778       
   closure                                           0.46076+-0.00243    ?     0.46110+-0.00246       ?
   jquery                                            5.36328+-0.02562          5.34835+-0.05259       
   box2d                                    x2      21.53933+-0.25305    ?    21.69466+-0.63522       ?
   zlib                                     x2     632.76849+-67.91501   ?   633.74131+-64.83702      ?
   typescript                               x2    1121.48395+-15.03705   ?  1122.90735+-23.48857      ?

   <arithmetic>                                    136.57721+-5.46327        136.56413+-5.84924         might be 1.0001x faster
   <geometric> *                                     9.74148+-0.03885          9.73743+-0.13809         might be 1.0004x faster
   <harmonic>                                        1.00938+-0.01403    ?     1.01895+-0.01595       ? might be 1.0095x slower

                                                         Baseline                NoScopeSlot                                    
Kraken:
   ai-astar                                          471.673+-1.278            471.255+-7.297         
   audio-beat-detection                              178.746+-4.920            177.260+-4.317         
   audio-dft                                         213.524+-3.651            212.253+-4.287         
   audio-fft                                         110.618+-1.863            110.571+-1.282         
   audio-oscillator                                  306.033+-6.982      ^     293.601+-1.077         ^ definitely 1.0423x faster
   imaging-darkroom                                  266.917+-2.160            263.464+-1.561           might be 1.0131x faster
   imaging-desaturate                                 95.817+-0.838      ?      95.911+-1.197         ?
   imaging-gaussian-blur                             159.034+-1.250      ?     160.028+-3.336         ?
   json-parse-financial                               71.893+-1.035             70.646+-1.086           might be 1.0177x faster
   json-stringify-tinderbox                           86.201+-1.199      ?      86.271+-0.844         ?
   stanford-crypto-aes                               100.552+-3.779            100.133+-0.749         
   stanford-crypto-ccm                               115.690+-3.441            114.767+-3.143         
   stanford-crypto-pbkdf2                            222.043+-5.476            218.909+-1.713           might be 1.0143x faster
   stanford-crypto-sha256-iterative                  100.467+-1.457      ?     100.727+-1.822         ?

   <arithmetic> *                                    178.515+-0.507      ^     176.843+-0.546         ^ definitely 1.0095x faster
   <geometric>                                       153.366+-0.482      ^     152.241+-0.298         ^ definitely 1.0074x faster
   <harmonic>                                        134.946+-0.441      ^     134.169+-0.277         ^ definitely 1.0058x faster

                                                         Baseline                NoScopeSlot                                    
JSBench:
   amazon                                             9.0000+-0.0000            8.7500+-0.7956          might be 1.0286x faster
   facebook                                          28.0000+-0.0000     ?     28.5000+-0.9187        ? might be 1.0179x slower
   google                                            67.0000+-2.2503           66.2500+-4.5704          might be 1.0113x faster
   twitter                                            8.5000+-0.9187     ?      8.7500+-0.7956        ? might be 1.0294x slower
   yahoo                                              4.2500+-0.7956            4.2500+-0.7956        

   <arithmetic> *                                    23.3500+-0.7057           23.3000+-1.4113          might be 1.0021x faster
   <geometric>                                       14.3441+-0.8102     ?     14.3663+-1.0938        ? might be 1.0015x slower
   <harmonic>                                         9.6921+-0.9600     ?      9.7048+-1.0318        ? might be 1.0013x slower

                                                         Baseline                NoScopeSlot                                    
JSRegress:
   abs-boolean                                        3.4542+-0.0729            3.3915+-0.1133          might be 1.0185x faster
   adapt-to-double-divide                            17.5408+-0.4550           17.5165+-0.4709        
   aliased-arguments-getbyval                         1.5623+-0.1619     ?      1.6787+-0.1127        ? might be 1.0745x slower
   allocate-big-object                                7.1093+-0.1182     ?      7.1248+-0.2569        ?
   arity-mismatch-inlining                            1.0256+-0.1699     ?      1.0652+-0.0832        ? might be 1.0386x slower
   array-access-polymorphic-structure                14.6903+-0.3349           14.4827+-0.6025          might be 1.0143x faster
   array-nonarray-polymorhpic-access                 47.4214+-0.7990           47.3215+-0.4533        
   array-prototype-every                            100.5305+-2.7635     ?    101.3437+-2.7165        ?
   array-prototype-forEach                          100.1848+-2.6702           98.3315+-3.1401          might be 1.0188x faster
   array-prototype-map                              127.3467+-1.2082          126.8830+-1.0034        
   array-prototype-some                             101.5084+-1.7991           99.9865+-3.1116          might be 1.0152x faster
   array-splice-contiguous                           58.1848+-2.4269           57.3477+-0.4833          might be 1.0146x faster
   array-with-double-add                              5.4409+-0.2135            5.3070+-0.0264          might be 1.0252x faster
   array-with-double-increment                        3.9053+-0.0653     ?      3.9782+-0.0720        ? might be 1.0187x slower
   array-with-double-mul-add                          6.4068+-0.2136     ?      6.7242+-0.1490        ? might be 1.0495x slower
   array-with-double-sum                              4.0811+-0.0677     ?      4.1300+-0.1052        ? might be 1.0120x slower
   array-with-int32-add-sub                           9.6481+-0.4592            9.4267+-0.2770          might be 1.0235x faster
   array-with-int32-or-double-sum                     4.1700+-0.0574            4.1642+-0.0451        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     51.3513+-0.5858           50.7825+-0.8006          might be 1.0112x faster
   ArrayBuffer-DataView-alloc-long-lived             31.5009+-0.3330     ?     31.8835+-0.9985        ? might be 1.0121x slower
   ArrayBuffer-Int32Array-byteOffset                  4.3252+-0.1311     ?      4.4708+-0.1518        ? might be 1.0337x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     55.3112+-1.0254           54.2675+-1.0708          might be 1.0192x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     69.3191+-0.6857     ?     70.4846+-3.5550        ? might be 1.0168x slower
   ArrayBuffer-Int8Array-alloc-long-lived            30.2581+-0.2924           29.9061+-0.9336          might be 1.0118x faster
   ArrayBuffer-Int8Array-alloc                       26.8705+-0.1679     ?     27.0865+-0.8112        ?
   asmjs_bool_bug                                     8.3607+-0.1625     ?      8.3728+-0.2379        ?
   assign-custom-setter-polymorphic                   3.9429+-0.1085            3.9417+-0.0604        
   assign-custom-setter                               5.2842+-0.2462     ?      5.3106+-0.2533        ?
   basic-set                                         13.3769+-0.3600     ?     13.6317+-0.6532        ? might be 1.0190x slower
   big-int-mul                                        5.5565+-0.0833            5.5127+-0.0570        
   boolean-test                                       3.9595+-0.1249            3.9500+-0.1656        
   branch-fold                                        4.4081+-0.1735     ?      4.4779+-0.0162        ? might be 1.0158x slower
   by-val-generic                                     0.2393+-0.0293            0.2374+-0.0244        
   call-spread-apply                                 32.8936+-0.6352     ?     33.2365+-0.5149        ? might be 1.0104x slower
   call-spread-call                                  26.5762+-0.6399     ?     26.6685+-1.2480        ?
   captured-assignments                               0.5092+-0.0606            0.4595+-0.0284          might be 1.1081x faster
   cast-int-to-double                                 7.7692+-0.1374     ?      7.7861+-0.1522        ?
   cell-argument                                      9.6448+-0.2604            9.4088+-0.5887          might be 1.0251x faster
   cfg-simplify                                       3.4280+-0.0808            3.3640+-0.0314          might be 1.0190x faster
   chain-getter-access                                0.2650+-0.0256            0.2532+-0.0172          might be 1.0465x faster
   cmpeq-obj-to-obj-other                            11.6712+-0.5585     ?     12.3151+-0.4151        ? might be 1.0552x slower
   constant-test                                      7.1918+-0.1537     ?      7.2083+-0.1297        ?
   DataView-custom-properties                        57.5146+-0.5036     ?     58.0009+-0.9892        ?
   delay-tear-off-arguments-strictmode               16.7756+-0.2252           16.7728+-0.3869        
   destructuring-arguments                            9.3093+-0.3336            9.1873+-0.1958          might be 1.0133x faster
   destructuring-swap                                 7.4265+-0.1278            7.4042+-0.2346        
   direct-arguments-getbyval                          1.6462+-0.4347     ?      1.6689+-0.0690        ? might be 1.0138x slower
   div-boolean-double                                 5.3215+-0.2312            5.2555+-0.1518          might be 1.0126x faster
   div-boolean                                        9.4293+-0.1417            9.3566+-0.1299        
   double-get-by-val-out-of-bounds                    0.2236+-0.0224     ?      0.2339+-0.0306        ? might be 1.0464x slower
   double-pollution-getbyval                          9.3403+-0.0605     ?      9.5897+-0.3028        ? might be 1.0267x slower
   double-pollution-putbyoffset                       7.1025+-0.3463            6.8701+-0.0483          might be 1.0338x faster
   double-to-int32-typed-array-no-inline              0.2612+-0.0387            0.2414+-0.0066          might be 1.0819x faster
   double-to-int32-typed-array                        2.5609+-0.1090            2.4972+-0.0789          might be 1.0255x faster
   double-to-uint32-typed-array-no-inline             0.2516+-0.0102     ?      0.2554+-0.0167        ? might be 1.0153x slower
   double-to-uint32-typed-array                       2.5780+-0.2158     ?      2.5797+-0.0217        ?
   elidable-new-object-dag                           53.5561+-1.6509           53.0840+-1.2694        
   elidable-new-object-roflcopter                   202.3112+-1.7847          200.9690+-1.2554        
   elidable-new-object-then-call                     48.8707+-1.1485     ?     49.5015+-1.3856        ? might be 1.0129x slower
   elidable-new-object-tree                          63.0620+-1.5539     ?     63.1932+-1.8075        ?
   empty-string-plus-int                             10.9376+-0.3285           10.7739+-0.3053          might be 1.0152x faster
   emscripten-cube2hash                              50.3442+-1.4181           50.3218+-1.4364        
   external-arguments-getbyval                        2.2531+-0.3108            2.2450+-0.2092        
   external-arguments-putbyval                        3.5611+-0.1134     ?      3.5877+-0.2248        ?
   fixed-typed-array-storage-var-index                1.3302+-0.1373     ?      1.3435+-0.1555        ? might be 1.0100x slower
   fixed-typed-array-storage                          1.0346+-0.0113     ?      1.0835+-0.0904        ? might be 1.0473x slower
   Float32Array-matrix-mult                           6.1818+-0.2179            6.1236+-0.3344        
   Float32Array-to-Float64Array-set                  85.0519+-0.3248     ^     81.1888+-1.2765        ^ definitely 1.0476x faster
   Float64Array-alloc-long-lived                    103.5242+-0.6125          102.8075+-0.2909        
   Float64Array-to-Int16Array-set                   104.7207+-1.0987          103.7360+-1.7484        
   fold-double-to-int                                17.4785+-0.3646           17.4666+-0.6364        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     23.5547+-1.8383     ?     23.9290+-1.5250        ? might be 1.0159x slower
   fold-get-by-id-to-multi-get-by-offset             23.7888+-4.5294           22.4717+-1.7944          might be 1.0586x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     15.0367+-0.6337     ?     15.3668+-0.2306        ? might be 1.0219x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     15.3752+-0.6374           15.2784+-0.0732        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     15.4628+-0.2555           14.9527+-0.3014          might be 1.0341x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     13.9325+-0.3452           13.7766+-0.5476          might be 1.0113x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     31.8361+-0.8306     ?     32.2525+-2.2717        ? might be 1.0131x slower
   fold-put-by-id-to-multi-put-by-offset             24.7879+-2.0148     ?     24.9612+-1.6476        ?
   fold-put-structure                                14.6821+-0.4078           14.3984+-0.4342          might be 1.0197x faster
   for-of-iterate-array-entries                       8.7819+-0.1862     ?      8.7952+-0.3273        ?
   for-of-iterate-array-keys                          3.4620+-0.2258            3.4570+-0.2158        
   for-of-iterate-array-values                        3.0780+-0.1840            3.0455+-0.2210          might be 1.0107x faster
   fround                                            21.9169+-0.8129     ?     22.3768+-0.7345        ? might be 1.0210x slower
   ftl-library-inlining-dataview                     97.6334+-13.9020          91.1820+-3.6005          might be 1.0708x faster
   ftl-library-inlining                              87.7455+-1.3387     ^     84.2312+-1.1440        ^ definitely 1.0417x faster
   function-dot-apply                                 2.3295+-0.2285            2.2363+-0.0481          might be 1.0417x faster
   function-test                                      4.3125+-0.2161     ?      4.4629+-0.1328        ? might be 1.0349x slower
   function-with-eval                                 0.2273+-0.0161     ?      0.2323+-0.0239        ? might be 1.0220x slower
   gcse-poly-get-less-obvious                        24.2917+-0.0117     ?     24.3627+-0.2181        ?
   gcse-poly-get                                     24.4299+-0.3110     ?     24.5392+-0.6252        ?
   gcse                                               6.2377+-0.0358     ?      6.3342+-0.1653        ? might be 1.0155x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.0977+-0.1171     ?      3.1304+-0.0542        ? might be 1.0106x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      7.9970+-0.2329     ?      8.0140+-0.1808        ?
   get-by-id-chain-from-try-block                    15.7795+-0.5866           15.4267+-0.2120          might be 1.0229x faster
   get-by-id-check-structure-elimination              7.6320+-0.1034     ^      7.1916+-0.1335        ^ definitely 1.0612x faster
   get-by-id-proto-or-self                           22.0463+-1.3290           21.9203+-0.7725        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.7403+-0.1115            3.7307+-0.0658        
   get-by-id-self-or-proto                           22.8207+-3.3434           22.3673+-1.3969          might be 1.0203x faster
   get-by-val-out-of-bounds                           0.2125+-0.0058     ?      0.2227+-0.0173        ? might be 1.0480x slower
   get_callee_monomorphic                            10.3707+-0.4156           10.0630+-0.2468          might be 1.0306x faster
   get_callee_polymorphic                             8.8898+-0.5836            8.6242+-0.2755          might be 1.0308x faster
   getter-no-activation                               5.4658+-0.0567     ?      5.4681+-0.1211        ?
   getter-richards                                  168.8679+-21.7458         167.4086+-16.5685       
   getter                                             6.0655+-0.1141     !      6.4492+-0.2219        ! definitely 1.0633x slower
   global-var-const-infer-fire-from-opt               0.2673+-0.0236     ?      0.2983+-0.0640        ? might be 1.1158x slower
   global-var-const-infer                             0.2424+-0.0276            0.2403+-0.0206        
   HashMap-put-get-iterate-keys                      35.9313+-0.3536     ?     35.9897+-0.3169        ?
   HashMap-put-get-iterate                           35.6966+-0.5061           35.4632+-0.7137        
   HashMap-string-put-get-iterate                    47.4545+-1.1546     ?     48.1389+-1.6754        ? might be 1.0144x slower
   hoist-make-rope                                    0.2440+-0.0132            0.2347+-0.0208          might be 1.0398x faster
   hoist-poly-check-structure-effectful-loop   
                                                      0.2415+-0.0086     ?      0.2483+-0.0184        ? might be 1.0283x slower
   hoist-poly-check-structure                         0.2595+-0.0178     ?      0.2862+-0.0536        ? might be 1.1030x slower
   imul-double-only                                   9.8333+-0.6621     ?      9.8620+-0.2266        ?
   imul-int-only                                     12.3770+-0.3508           12.2061+-0.7587          might be 1.0140x faster
   imul-mixed                                         9.2681+-0.0616     ?      9.4933+-1.0369        ? might be 1.0243x slower
   in-four-cases                                     23.3472+-0.1547     ?     23.6968+-0.7706        ? might be 1.0150x slower
   in-one-case-false                                 12.0992+-0.1695     ?     12.1506+-0.3490        ?
   in-one-case-true                                  12.1198+-0.4693           12.0572+-0.3217        
   in-two-cases                                      12.5514+-0.2502     ?     12.6693+-0.2903        ?
   indexed-properties-in-objects                      3.5935+-0.0774            3.5931+-0.1270        
   infer-closure-const-then-mov-no-inline             0.2498+-0.0372            0.2480+-0.0290        
   infer-closure-const-then-mov                      24.5153+-0.9249           24.2491+-0.1419          might be 1.0110x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                      0.2419+-0.0088     ?      0.2564+-0.0429        ? might be 1.0598x slower
   infer-closure-const-then-put-to-scope             27.8485+-0.4273     !     29.3968+-0.1611        ! definitely 1.0556x slower
   infer-closure-const-then-reenter-no-inline   
                                                      0.2490+-0.0153     ?      0.2510+-0.0209        ?
   infer-closure-const-then-reenter                  27.6063+-0.2315     !     30.2597+-2.2329        ! definitely 1.0961x slower
   infer-constant-global-property                     4.4399+-0.1261     ?      4.4744+-0.1006        ?
   infer-constant-property                            3.0505+-0.1551     ?      3.1290+-0.1407        ? might be 1.0258x slower
   infer-one-time-closure-ten-vars                    0.2666+-0.0384            0.2479+-0.0281          might be 1.0753x faster
   infer-one-time-closure-two-vars                    0.2653+-0.0223            0.2510+-0.0239          might be 1.0569x faster
   infer-one-time-closure                             0.2602+-0.0203            0.2397+-0.0138          might be 1.0853x faster
   infer-one-time-deep-closure                        0.2531+-0.0138     ?      0.2738+-0.0302        ? might be 1.0817x slower
   inline-arguments-access                            2.4382+-0.0882     ?      2.4847+-0.1022        ? might be 1.0191x slower
   inline-arguments-aliased-access                    2.2936+-0.0298            2.2642+-0.2789          might be 1.0130x faster
   inline-arguments-local-escape                     26.5897+-0.3181           26.5228+-0.9932        
   inline-get-scoped-var                              5.3210+-0.1755     ?      5.3307+-0.1784        ?
   inlined-put-by-id-transition                      15.5064+-0.4422           15.1963+-0.3117          might be 1.0204x faster
   int-or-other-abs-then-get-by-val                   6.8350+-0.8192            6.6097+-0.1263          might be 1.0341x faster
   int-or-other-abs-zero-then-get-by-val             26.0873+-0.4794           26.0544+-0.0906        
   int-or-other-add-then-get-by-val                   5.6198+-0.1566     ?      5.6537+-0.1131        ?
   int-or-other-add                                   7.5157+-0.2988            7.4751+-0.0977        
   int-or-other-div-then-get-by-val                   4.8347+-0.0772            4.8127+-0.1157        
   int-or-other-max-then-get-by-val                   6.4015+-0.2622            6.1430+-0.4286          might be 1.0421x faster
   int-or-other-min-then-get-by-val                   4.9316+-0.1409            4.9187+-0.1253        
   int-or-other-mod-then-get-by-val                   4.7227+-0.0973     ?      4.7500+-0.0694        ?
   int-or-other-mul-then-get-by-val                   4.6553+-0.1403     ?      4.7925+-0.0748        ? might be 1.0295x slower
   int-or-other-neg-then-get-by-val                   5.8820+-0.1967            5.7906+-0.0561          might be 1.0158x faster
   int-or-other-neg-zero-then-get-by-val             26.1895+-0.3502           26.0696+-0.1628        
   int-or-other-sub-then-get-by-val                   5.8198+-0.2024            5.5692+-0.0907          might be 1.0450x faster
   int-or-other-sub                                   4.7819+-0.1301            4.7817+-0.1727        
   int-overflow-local                                 5.5121+-0.0832     ?      5.5703+-0.2592        ? might be 1.0106x slower
   Int16Array-alloc-long-lived                       71.1764+-0.7234           70.6401+-0.4835        
   Int16Array-bubble-sort-with-byteLength            37.9695+-0.5916           37.9189+-0.1631        
   Int16Array-bubble-sort                            37.8939+-0.3115     ^     37.0815+-0.1193        ^ definitely 1.0219x faster
   Int16Array-load-int-mul                            1.8816+-0.0678     ?      1.9124+-0.1472        ? might be 1.0163x slower
   Int16Array-to-Int32Array-set                      86.0366+-2.1753     ^     82.0542+-1.0517        ^ definitely 1.0485x faster
   Int32Array-alloc-large                            36.4352+-1.0438           35.7793+-2.1383          might be 1.0183x faster
   Int32Array-alloc-long-lived                       81.2216+-4.5011           79.6853+-1.0992          might be 1.0193x faster
   Int32Array-alloc                                  12.7860+-0.2839     ?     12.8952+-0.4089        ?
   Int32Array-Int8Array-view-alloc                   17.3110+-0.5847     ?     18.4865+-1.8868        ? might be 1.0679x slower
   int52-spill                                        0.2369+-0.0116     ?      0.2385+-0.0231        ?
   Int8Array-alloc-long-lived                        77.6231+-0.5065           77.4640+-0.4847        
   Int8Array-load-with-byteLength                     4.5579+-0.0718            4.4895+-0.1181          might be 1.0152x faster
   Int8Array-load                                     4.5347+-0.1007     ?      4.6025+-0.1592        ? might be 1.0150x slower
   integer-divide                                    13.8557+-0.0689     ?     13.9360+-0.1518        ?
   integer-modulo                                     2.6899+-0.0675            2.6467+-0.1748          might be 1.0164x faster
   large-int-captured                                17.8251+-0.2694           17.6544+-0.1382        
   large-int-neg                                     20.7984+-0.3417           19.9078+-0.5824          might be 1.0447x faster
   large-int                                         18.4465+-0.8692           17.7535+-0.1437          might be 1.0390x faster
   logical-not                                        0.2624+-0.0267            0.2358+-0.0251          might be 1.1126x faster
   lots-of-fields                                    22.1841+-1.4316     ?     22.4330+-1.2993        ? might be 1.0112x slower
   make-indexed-storage                               5.6183+-0.1585            5.5817+-0.4806        
   make-rope-cse                                     23.8163+-0.7922           23.2128+-0.5367          might be 1.0260x faster
   marsaglia-larger-ints                             54.5433+-0.8627     ?     55.0475+-0.4130        ?
   marsaglia-osr-entry                               27.2485+-0.1974     ?     27.5062+-0.6756        ?
   max-boolean                                        3.0844+-0.0368            3.0503+-0.0710          might be 1.0112x faster
   method-on-number                                  22.9607+-0.3571           21.7967+-1.0411          might be 1.0534x faster
   min-boolean                                        3.1432+-0.1491            3.1046+-0.1060          might be 1.0124x faster
   minus-boolean-double                               3.9583+-0.1584            3.9283+-0.0200        
   minus-boolean                                      3.0431+-0.0751            3.0150+-0.1377        
   misc-strict-eq                                    52.9973+-6.4981           52.0708+-2.5347          might be 1.0178x faster
   mod-boolean-double                                11.2240+-0.1336     ?     11.2655+-0.1860        ?
   mod-boolean                                        8.5846+-0.0625            8.5778+-0.1050        
   mul-boolean-double                                 4.6167+-0.1287            4.5633+-0.0414          might be 1.0117x faster
   mul-boolean                                        3.2467+-0.0273     ?      3.2981+-0.1451        ? might be 1.0158x slower
   neg-boolean                                        4.0328+-0.1383     ?      4.0515+-0.1432        ?
   negative-zero-divide                               0.3108+-0.0435            0.2996+-0.0367          might be 1.0373x faster
   negative-zero-modulo                               0.3348+-0.0212     ^      0.2875+-0.0124        ^ definitely 1.1648x faster
   negative-zero-negate                               0.2880+-0.0220     ?      0.2968+-0.0497        ? might be 1.0303x slower
   nested-function-parsing                           33.4007+-0.2582           33.3918+-0.4465        
   new-array-buffer-dead                              3.9115+-0.0300     ?      3.9705+-0.0960        ? might be 1.0151x slower
   new-array-buffer-push                             17.3077+-0.3745     ?     17.5266+-0.3548        ? might be 1.0126x slower
   new-array-dead                                    13.9325+-0.5998     ?     14.3504+-0.7494        ? might be 1.0300x slower
   new-array-push                                     9.5721+-0.3941     ?      9.6812+-0.7460        ? might be 1.0114x slower
   number-test                                        3.8532+-0.1139     ?      3.9048+-0.0737        ? might be 1.0134x slower
   object-closure-call                                7.9401+-0.1916            7.8430+-0.2360          might be 1.0124x faster
   object-test                                        4.1279+-0.1521            4.0922+-0.1580        
   obvious-sink-pathology-taken                       0.2469+-0.0253            0.2172+-0.0085          might be 1.1372x faster
   obvious-sink-pathology                             0.2534+-0.0243            0.2360+-0.0165          might be 1.0740x faster
   obviously-elidable-new-object                     48.0651+-5.1934     ?     49.2616+-3.6023        ? might be 1.0249x slower
   plus-boolean-arith                                 3.1301+-0.0922     ?      3.1385+-0.0985        ?
   plus-boolean-double                                3.9547+-0.0082     ?      3.9741+-0.0880        ?
   plus-boolean                                       3.0219+-0.1658            3.0107+-0.1332        
   poly-chain-access-different-prototypes-simple   
                                                      3.5337+-0.1206     ?      3.5760+-0.0499        ? might be 1.0120x slower
   poly-chain-access-different-prototypes             2.3384+-0.1088     ?      2.4642+-0.3405        ? might be 1.0538x slower
   poly-chain-access-simpler                          3.5417+-0.0848     ?      3.5984+-0.0279        ? might be 1.0160x slower
   poly-chain-access                                  2.5496+-0.5796            2.4802+-0.4618          might be 1.0280x faster
   poly-stricteq                                     68.6611+-0.6370           68.5103+-0.1569        
   polymorphic-array-call                             2.0096+-0.2276     ?      2.0428+-0.1541        ? might be 1.0165x slower
   polymorphic-get-by-id                              0.2595+-0.0335     ?      0.2618+-0.0174        ?
   polymorphic-put-by-id                              0.2693+-0.0165            0.2500+-0.0072          might be 1.0771x faster
   polymorphic-structure                             24.7728+-0.5618           24.4200+-0.1897          might be 1.0144x faster
   polyvariant-monomorphic-get-by-id                 11.0450+-0.5693           10.9480+-0.2767        
   proto-getter-access                                0.2753+-0.0241            0.2444+-0.0106          might be 1.1263x faster
   put-by-id-replace-and-transition                  13.3404+-0.5094     ?     13.4011+-0.2940        ?
   put-by-id-slightly-polymorphic                     3.2745+-0.0706     ?      3.2777+-0.0377        ?
   put-by-id                                         18.9371+-0.5085           18.9326+-0.3241        
   put-by-val-direct                                  0.4913+-0.0112     ?      0.5998+-0.1260        ? might be 1.2209x slower
   put-by-val-large-index-blank-indexing-type   
                                                     18.5578+-0.7679           18.3607+-0.5523          might be 1.0107x faster
   put-by-val-machine-int                             0.2349+-0.0212            0.2275+-0.0135          might be 1.0322x faster
   rare-osr-exit-on-local                            17.6470+-0.3699     ?     17.8953+-0.5918        ? might be 1.0141x slower
   register-pressure-from-osr                        26.0347+-0.0762     !     26.4014+-0.0721        ! definitely 1.0141x slower
   setter                                             6.1022+-0.1167     ?      6.2406+-0.2100        ? might be 1.0227x slower
   simple-activation-demo                            32.9685+-0.1820     !     33.6638+-0.2825        ! definitely 1.0211x slower
   simple-getter-access                               0.2495+-0.0106            0.2477+-0.0218        
   simple-poly-call-nested                           21.2905+-1.5243           19.8680+-1.3574          might be 1.0716x faster
   simple-poly-call                                   1.4833+-0.2132            1.4833+-0.0962        
   sin-boolean                                       24.1517+-3.9516           24.0224+-3.8140        
   sinkable-new-object-dag                            0.2454+-0.0222            0.2449+-0.0289        
   sinkable-new-object-taken                          0.2442+-0.0211            0.2325+-0.0197          might be 1.0501x faster
   sinkable-new-object                                0.2444+-0.0264     ?      0.2457+-0.0553        ?
   slow-array-profile-convergence                     4.4097+-0.1627            4.3945+-0.0351        
   slow-convergence                                   4.2502+-0.0725            4.1985+-0.3524          might be 1.0123x faster
   sparse-conditional                                 1.4303+-0.1092     ?      1.4368+-0.0883        ?
   splice-to-remove                                  24.4368+-0.3417     ?     24.5098+-0.4902        ?
   string-char-code-at                               19.4059+-0.5406           19.2150+-0.1409        
   string-concat-object                               7.4014+-0.0828     ?      7.4473+-0.3875        ?
   string-concat-pair-object                          7.3344+-0.1346     ?      7.3927+-0.5684        ?
   string-concat-pair-simple                         17.4913+-1.2325           16.7617+-0.2918          might be 1.0435x faster
   string-concat-simple                              17.2352+-1.0948           17.0576+-0.8160          might be 1.0104x faster
   string-cons-repeat                                15.4330+-0.1925     ?     15.4747+-0.1406        ?
   string-cons-tower                                 14.8141+-0.3253           14.7337+-0.2703        
   string-equality                                   21.8012+-0.3125     ?     21.8328+-0.2825        ?
   string-get-by-val-big-char                        12.5673+-0.0436           12.4478+-0.2199        
   string-get-by-val-out-of-bounds-insane             4.7772+-0.2248            4.7267+-0.1675          might be 1.0107x faster
   string-get-by-val-out-of-bounds                    6.4821+-0.3024            6.4552+-0.1109        
   string-get-by-val                                  4.4248+-0.0392     ?      4.5516+-0.1692        ? might be 1.0287x slower
   string-hash                                        2.6035+-0.0814     ?      2.6288+-0.2050        ?
   string-long-ident-equality                        17.6720+-0.1614           17.6400+-0.0863        
   string-repeat-arith                               41.7766+-1.0751           41.5447+-1.0898        
   string-sub                                        80.0786+-0.9901     ?     80.6357+-2.5462        ?
   string-test                                        3.8956+-0.0779     ?      3.9683+-0.1920        ? might be 1.0187x slower
   string-var-equality                               43.4115+-0.2989           43.2240+-0.5156        
   structure-hoist-over-transitions                   4.8917+-0.2397            4.8053+-0.2555          might be 1.0180x faster
   substring-concat-weird                            58.2903+-1.0086           58.2480+-0.7759        
   substring-concat                                  61.0762+-0.7921     ^     59.4862+-0.4142        ^ definitely 1.0267x faster
   substring                                         64.9676+-0.3649     ^     63.8892+-0.1570        ^ definitely 1.0169x faster
   switch-char-constant                               3.0585+-0.0417     ?      3.1542+-0.0546        ? might be 1.0313x slower
   switch-char                                        7.5651+-0.2516     ?      7.5681+-0.0942        ?
   switch-constant                                   16.1133+-1.0542           14.4796+-2.8365          might be 1.1128x faster
   switch-string-basic-big-var                       21.5296+-1.5167     ?     22.0024+-0.3796        ? might be 1.0220x slower
   switch-string-basic-big                           22.7742+-1.3652     ^     19.1885+-1.7025        ^ definitely 1.1869x faster
   switch-string-basic-var                           27.8944+-2.6998           25.4636+-0.7013          might be 1.0955x faster
   switch-string-basic                               21.3986+-1.4836     ?     24.0374+-1.2139        ? might be 1.1233x slower
   switch-string-big-length-tower-var                24.7288+-0.0966           24.5129+-0.2820        
   switch-string-length-tower-var                    19.4232+-0.2337           19.1766+-0.1346          might be 1.0129x faster
   switch-string-length-tower                        14.5271+-0.3925           13.9438+-0.1962          might be 1.0418x faster
   switch-string-short                               14.3741+-0.3410           14.0987+-0.2634          might be 1.0195x faster
   switch                                            16.9108+-1.6135           16.3278+-1.3126          might be 1.0357x faster
   tear-off-arguments-simple                          3.7186+-0.1911     ?      3.8213+-0.0328        ? might be 1.0276x slower
   tear-off-arguments                                 5.6592+-0.3287            5.5958+-0.1299          might be 1.0113x faster
   temporal-structure                                16.9746+-0.2692           16.9684+-0.3803        
   to-int32-boolean                                  20.3023+-0.1021     ?     20.3277+-0.0744        ?
   undefined-property-access                        470.6154+-9.0534          469.0316+-4.4670        
   undefined-test                                     4.0234+-0.0553            4.0094+-0.1838        
   unprofiled-licm                                   27.2519+-0.4702           26.9634+-0.7625          might be 1.0107x faster
   weird-inlining-const-prop                          0.2595+-0.0397            0.2430+-0.0121          might be 1.0681x faster

   <arithmetic>                                      20.5485+-0.0917           20.4066+-0.0825          might be 1.0070x faster
   <geometric> *                                      7.1961+-0.0072            7.1655+-0.0310          might be 1.0043x faster
   <harmonic>                                         1.5651+-0.0160            1.5436+-0.0213          might be 1.0139x faster

                                                         Baseline                NoScopeSlot                                    
CompressionBench:
   huffman                                          660.0046+-7.3562          650.7327+-25.8774         might be 1.0142x faster
   arithmetic-simple                                477.4927+-2.3457     ?    480.0530+-4.4076        ?
   arithmetic-precise                               375.3723+-4.8880     ?    381.0594+-6.6050        ? might be 1.0152x slower
   arithmetic-complex-precise                       369.9243+-4.4479     ?    372.9713+-8.0771        ?
   arithmetic-precise-order-0                       504.2570+-4.2365          500.7062+-6.5221        
   arithmetic-precise-order-1                       425.0126+-1.7420          423.9067+-2.7859        
   arithmetic-precise-order-2                       479.3879+-4.0981     ?    482.2355+-5.8851        ?
   arithmetic-simple-order-1                        550.8484+-1.6498     ^    546.8333+-1.7591        ^ definitely 1.0073x faster
   arithmetic-simple-order-2                        622.9067+-0.4728     ^    615.8660+-2.9565        ^ definitely 1.0114x faster
   lz-string                                        436.4780+-17.0656         419.4864+-5.0468          might be 1.0405x faster

   <arithmetic>                                     490.1685+-1.3620          487.3850+-3.4858          might be 1.0057x faster
   <geometric> *                                    481.7387+-1.5122          479.4427+-3.2032          might be 1.0048x faster
   <harmonic>                                       473.6674+-1.7002          471.8562+-3.1296          might be 1.0038x faster

                                                         Baseline                NoScopeSlot                                    
All benchmarks:
   <arithmetic>                                      96.3143+-0.8613           96.1191+-0.3975          might be 1.0020x faster
   <geometric>                                       12.3523+-0.0269           12.3127+-0.0381          might be 1.0032x faster
   <harmonic>                                         1.8376+-0.0146            1.8191+-0.0231          might be 1.0102x faster

                                                         Baseline                NoScopeSlot                                    
Geomean of preferred means:
   <scaled-result>                                   52.9874+-0.4022           52.8637+-0.5274          might be 1.0023x faster
Comment 3 Geoffrey Garen 2015-01-21 13:13:16 PST
Comment on attachment 245079 [details]
Patch

r=me
Comment 4 Michael Saboff 2015-01-21 13:43:49 PST
Committed r178856: <http://trac.webkit.org/changeset/178856>