RESOLVED FIXED Bug 136724
Eliminate Scope slot from JavaScript CallFrame
https://bugs.webkit.org/show_bug.cgi?id=136724
Summary Eliminate Scope slot from JavaScript CallFrame
Michael Saboff
Reported 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>
Attachments
Draft Patch. Testing now. (31.49 KB, patch)
2015-01-20 18:54 PST, Michael Saboff
no flags
Patch (34.49 KB, patch)
2015-01-21 13:00 PST, Michael Saboff
ggaren: review+
Michael Saboff
Comment 1 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.
Michael Saboff
Comment 2 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
Geoffrey Garen
Comment 3 2015-01-21 13:13:16 PST
Comment on attachment 245079 [details] Patch r=me
Michael Saboff
Comment 4 2015-01-21 13:43:49 PST
Note You need to log in before you can comment on or make changes to this bug.