RESOLVED FIXED 144016
Allow function allocation sinking
https://bugs.webkit.org/show_bug.cgi?id=144016
Summary Allow function allocation sinking
Basile Clement
Reported 2015-04-21 15:07:38 PDT
Created attachment 251267 [details] First patch Currently, only object allocations are sunk by the DFG allocation sinking phase. This adds the ability to sink function allocations as well, test cases forthcoming.
Attachments
First patch (14.77 KB, patch)
2015-04-21 15:07 PDT, Basile Clement
no flags
Updated patch (18.11 KB, patch)
2015-04-23 16:15 PDT, Basile Clement
no flags
patch (24.13 KB, patch)
2015-04-23 18:33 PDT, Basile Clement
no flags
Basile Clement
Comment 1 2015-04-23 16:15:17 PDT
Created attachment 251511 [details] Updated patch Hopefully correct; still needs more testing. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Basiles-MacBook-Pro (MacBookPro11,3). VMs tested: "Trunk" at /Volumes/Data/Baseline/OpenSource/WebKitBuild/Release/jsc "SinkNewFunction" at /Volumes/Data/WIP/OpenSource/WebKitBuild/SinkNewFunction/Release/jsc 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. Trunk SinkNewFunction SunSpider: 3d-cube 6.0558+-0.1599 ? 6.0763+-0.3087 ? 3d-morph 7.6472+-0.8357 7.5072+-0.1487 might be 1.0187x faster 3d-raytrace 7.5972+-0.6318 7.2291+-0.1731 might be 1.0509x faster access-binary-trees 3.2697+-1.1773 3.0729+-0.3808 might be 1.0640x faster access-fannkuch 7.8368+-0.3975 7.8275+-0.3418 access-nbody 3.5932+-0.1365 ? 3.7218+-0.2385 ? might be 1.0358x slower access-nsieve 4.3672+-0.2186 ? 4.6677+-0.6555 ? might be 1.0688x slower bitops-3bit-bits-in-byte 2.0238+-0.0807 ? 2.1459+-0.3880 ? might be 1.0603x slower bitops-bits-in-byte 4.3754+-0.0859 4.3442+-0.0339 bitops-bitwise-and 2.9675+-0.0731 2.9280+-0.0436 might be 1.0135x faster bitops-nsieve-bits 4.3915+-0.2255 4.2960+-0.1076 might be 1.0222x faster controlflow-recursive 2.7958+-0.1339 ? 3.0602+-0.3400 ? might be 1.0946x slower crypto-aes 5.2596+-0.2587 ? 5.2834+-0.3849 ? crypto-md5 2.9955+-0.0488 2.9941+-0.0879 crypto-sha1 3.1196+-0.2278 3.0096+-0.1434 might be 1.0365x faster date-format-tofte 9.6734+-0.3199 9.5031+-0.5819 might be 1.0179x faster date-format-xparb 6.8875+-0.2144 ? 7.0329+-0.3250 ? might be 1.0211x slower math-cordic 3.9131+-0.0398 ? 3.9821+-0.2475 ? might be 1.0176x slower math-partial-sums 6.4521+-0.3259 6.3316+-0.1028 might be 1.0190x faster math-spectral-norm 2.4428+-0.0526 ? 2.4634+-0.1486 ? regexp-dna 9.2357+-0.1056 ? 9.3337+-0.2050 ? might be 1.0106x slower string-base64 6.0031+-0.1161 ? 6.2082+-0.3828 ? might be 1.0342x slower string-fasta 8.1678+-0.0489 ? 8.2305+-0.0853 ? string-tagcloud 11.9602+-0.4285 ? 12.3446+-0.4499 ? might be 1.0321x slower string-unpack-code 25.6421+-0.8688 ? 26.1412+-0.9284 ? might be 1.0195x slower string-validate-input 6.1688+-0.1287 6.0859+-0.1378 might be 1.0136x faster <arithmetic> 6.3401+-0.0624 ? 6.3777+-0.0562 ? might be 1.0059x slower Trunk SinkNewFunction LongSpider: 3d-cube 1146.0595+-4.5428 ! 1158.0201+-3.2305 ! definitely 1.0104x slower 3d-morph 2250.4303+-1.4919 ? 2250.4883+-1.2673 ? 3d-raytrace 979.3950+-8.5092 ? 986.6629+-5.5882 ? access-binary-trees 1209.9427+-5.8881 1203.7576+-6.0720 access-fannkuch 402.3108+-14.6796 ? 407.4455+-16.6382 ? might be 1.0128x slower access-nbody 815.6903+-1.5918 ^ 805.0315+-0.9057 ^ definitely 1.0132x faster access-nsieve 896.6053+-10.6931 894.2331+-3.5723 bitops-3bit-bits-in-byte 59.5577+-0.7368 ? 59.6522+-0.8439 ? bitops-bits-in-byte 123.8816+-1.9319 120.8887+-6.0038 might be 1.0248x faster bitops-nsieve-bits 917.8310+-7.4733 917.3359+-7.5826 controlflow-recursive 680.5225+-0.6470 ? 680.5909+-1.1868 ? crypto-aes 808.8571+-1.9803 807.1617+-4.2809 crypto-md5 777.9714+-6.6105 776.4615+-2.4666 crypto-sha1 856.0246+-16.1174 853.6294+-15.2408 date-format-tofte 754.1829+-11.4313 ? 756.5376+-11.0543 ? date-format-xparb 914.3832+-2.8010 ? 922.4829+-5.3666 ? math-cordic 745.0096+-1.1358 744.5284+-0.9926 math-partial-sums 622.1131+-0.2711 ! 625.6687+-0.3868 ! definitely 1.0057x slower math-spectral-norm 826.8765+-2.4319 825.6265+-0.7580 string-base64 472.9468+-3.7305 471.5063+-5.8218 string-fasta 600.6385+-109.2036 556.5824+-3.3802 might be 1.0792x faster string-tagcloud 276.2345+-2.4752 275.7115+-2.4843 <geometric> 634.9739+-4.6945 632.7599+-2.7923 might be 1.0035x faster Trunk SinkNewFunction V8Spider: crypto 75.9754+-3.4253 75.4352+-1.4680 deltablue 129.1040+-25.1924 124.4542+-35.4033 might be 1.0374x faster earley-boyer 58.2167+-1.7655 57.9812+-1.3112 raytrace 44.4368+-2.9330 ? 46.4924+-1.6947 ? might be 1.0463x slower regexp 104.1183+-0.5735 ? 105.5718+-1.6558 ? might be 1.0140x slower richards 102.8855+-5.0799 ? 106.6211+-4.3015 ? might be 1.0363x slower splay 50.6859+-2.7500 ? 51.6397+-2.0612 ? might be 1.0188x slower <geometric> 75.1464+-0.8241 ? 75.7623+-2.8337 ? might be 1.0082x slower Trunk SinkNewFunction Octane: encrypt 0.28961+-0.00048 ? 0.28997+-0.00054 ? decrypt 5.09789+-0.01467 ? 5.11667+-0.03976 ? deltablue x2 0.23359+-0.00062 ? 0.23395+-0.00328 ? earley 0.67858+-0.16546 0.61227+-0.00474 might be 1.1083x faster boyer 8.93664+-0.04057 8.93350+-0.03589 navier-stokes x2 7.55339+-0.00912 ? 7.55911+-0.01520 ? raytrace x2 1.55019+-0.09143 ? 1.58211+-0.06873 ? might be 1.0206x slower richards x2 0.13954+-0.00287 ? 0.14119+-0.00382 ? might be 1.0118x slower splay x2 0.50037+-0.00325 ? 0.50266+-0.00225 ? regexp x2 42.76514+-0.53758 42.74989+-0.92714 pdfjs x2 54.54151+-0.18289 ? 54.80862+-0.14846 ? mandreel x2 72.29088+-0.48097 ? 72.67518+-0.26812 ? gbemu x2 55.87310+-0.97806 ? 57.72494+-3.55873 ? might be 1.0331x slower closure 0.70640+-0.00510 ? 0.70667+-0.00432 ? jquery 8.83669+-0.05497 ? 8.89807+-0.04948 ? box2d x2 16.35254+-0.16447 ? 16.45553+-0.31206 ? zlib x2 527.69638+-22.92335 ? 538.00974+-3.08129 ? might be 1.0195x slower typescript x2 943.27153+-16.97161 937.50557+-16.02971 <geometric> 8.62258+-0.10244 ? 8.65927+-0.04469 ? might be 1.0043x slower Trunk SinkNewFunction Kraken: ai-astar 425.685+-5.810 ? 425.736+-3.375 ? audio-beat-detection 130.245+-1.715 129.153+-1.457 audio-dft 231.138+-2.045 ^ 226.840+-1.632 ^ definitely 1.0189x faster audio-fft 104.089+-3.676 ? 106.617+-1.580 ? might be 1.0243x slower audio-oscillator 263.942+-0.492 ? 267.574+-8.544 ? might be 1.0138x slower imaging-darkroom 129.381+-1.329 ! 138.050+-0.593 ! definitely 1.0670x slower imaging-desaturate 81.521+-2.725 ? 81.608+-2.701 ? imaging-gaussian-blur 128.762+-0.977 ? 129.798+-0.893 ? json-parse-financial 55.955+-1.248 ^ 53.441+-0.185 ^ definitely 1.0470x faster json-stringify-tinderbox 82.750+-22.699 74.050+-1.064 might be 1.1175x faster stanford-crypto-aes 81.760+-0.678 ? 82.093+-0.455 ? stanford-crypto-ccm 70.814+-6.670 ? 71.557+-7.930 ? might be 1.0105x slower stanford-crypto-pbkdf2 218.548+-0.622 ? 219.508+-0.692 ? stanford-crypto-sha256-iterative 71.678+-0.790 70.902+-0.585 might be 1.0109x faster <arithmetic> 148.305+-1.903 ? 148.352+-0.811 ? might be 1.0003x slower Trunk SinkNewFunction JSRegress: abs-boolean 3.3999+-0.1054 ? 3.4453+-0.2595 ? might be 1.0133x slower adapt-to-double-divide 23.2879+-0.5269 23.2767+-0.3232 aliased-arguments-getbyval 1.9814+-0.5452 1.5589+-0.1591 might be 1.2710x faster allocate-big-object 3.3758+-0.1789 ? 3.5243+-0.0980 ? might be 1.0440x slower arguments-named-and-reflective 16.2211+-0.6376 15.9995+-0.2070 might be 1.0139x faster arguments-out-of-bounds 14.7329+-0.3443 ? 14.8163+-0.2780 ? arguments-strict-mode 13.8081+-0.3342 13.7590+-0.4428 arguments 12.3942+-0.2110 12.1899+-0.3624 might be 1.0168x faster arity-mismatch-inlining 1.1050+-0.0289 ? 1.1228+-0.0749 ? might be 1.0161x slower array-access-polymorphic-structure 8.7386+-0.4108 8.6093+-0.2379 might be 1.0150x faster array-nonarray-polymorhpic-access 40.9390+-0.9297 ? 42.7252+-1.4145 ? might be 1.0436x slower array-prototype-every 115.2107+-1.2807 114.2585+-0.9108 array-prototype-forEach 113.6938+-2.3269 112.0770+-2.0029 might be 1.0144x faster array-prototype-map 123.7941+-1.2505 ! 128.7760+-0.4525 ! definitely 1.0402x slower array-prototype-some 115.5448+-0.6399 114.5569+-1.2026 array-splice-contiguous 60.5459+-0.8698 ^ 55.9970+-0.4623 ^ definitely 1.0812x faster array-with-double-add 4.9441+-0.3316 4.8377+-0.1470 might be 1.0220x faster array-with-double-increment 4.2633+-0.0918 ? 4.2902+-0.1966 ? array-with-double-mul-add 6.0363+-0.4150 5.9743+-0.2063 might be 1.0104x faster array-with-double-sum 4.4826+-0.0486 ? 4.5650+-0.1400 ? might be 1.0184x slower array-with-int32-add-sub 8.1949+-0.1337 ? 8.4642+-0.3358 ? might be 1.0329x slower array-with-int32-or-double-sum 4.5372+-0.0981 ? 4.5489+-0.2232 ? ArrayBuffer-DataView-alloc-large-long-lived 39.2582+-0.8700 ? 40.0669+-3.0310 ? might be 1.0206x slower ArrayBuffer-DataView-alloc-long-lived 17.7893+-0.3298 17.7627+-0.3293 ArrayBuffer-Int32Array-byteOffset 5.1892+-0.0684 ? 5.2990+-0.2996 ? might be 1.0211x slower ArrayBuffer-Int8Array-alloc-large-long-lived 40.1953+-2.0738 ? 40.4418+-1.7068 ? ArrayBuffer-Int8Array-alloc-long-lived-buffer 29.7955+-0.7550 29.6172+-0.3910 ArrayBuffer-Int8Array-alloc-long-lived 16.8899+-0.3711 ? 16.9799+-0.3568 ? ArrayBuffer-Int8Array-alloc 14.0555+-0.3182 ? 14.4305+-0.3694 ? might be 1.0267x slower asmjs_bool_bug 10.6202+-0.1463 ? 10.6994+-0.2374 ? assign-custom-setter-polymorphic 3.8340+-0.4245 3.7025+-0.1662 might be 1.0355x faster assign-custom-setter 4.8879+-0.0579 4.8844+-0.0417 basic-set 11.7330+-1.2766 11.3451+-0.8319 might be 1.0342x faster big-int-mul 4.8669+-0.1588 ? 4.9516+-0.2835 ? might be 1.0174x slower boolean-test 4.0267+-0.1106 ? 4.0734+-0.2921 ? might be 1.0116x slower branch-fold 5.0902+-0.2187 4.9797+-0.0914 might be 1.0222x faster by-val-generic 10.4959+-0.3450 10.2039+-0.0516 might be 1.0286x faster call-spread-apply 37.3091+-0.6324 ? 37.9414+-1.4357 ? might be 1.0169x slower call-spread-call 31.8012+-1.1532 31.3204+-1.1177 might be 1.0154x faster captured-assignments 0.5448+-0.0194 0.5320+-0.0136 might be 1.0240x faster cast-int-to-double 6.7421+-0.0614 ? 6.8518+-0.1399 ? might be 1.0163x slower cell-argument 8.8896+-0.1756 ? 9.0823+-0.3423 ? might be 1.0217x slower cfg-simplify 4.0385+-0.0935 4.0264+-0.0987 chain-getter-access 12.9458+-0.0863 ? 13.0929+-0.4136 ? might be 1.0114x slower cmpeq-obj-to-obj-other 16.4757+-1.1568 ? 16.5135+-0.4348 ? constant-test 6.4360+-0.0679 ? 6.4599+-0.1436 ? create-lots-of-functions 12.9023+-0.6246 ? 13.1475+-0.4476 ? might be 1.0190x slower DataView-custom-properties 47.0756+-1.8637 ? 49.5034+-2.4772 ? might be 1.0516x slower deconstructing-parameters-overridden-by-function 0.6020+-0.0329 ? 0.6228+-0.0683 ? might be 1.0346x slower delay-tear-off-arguments-strictmode 17.0798+-0.2453 ! 17.5766+-0.2280 ! definitely 1.0291x slower deltablue-varargs 209.9329+-1.9116 ^ 206.0461+-1.6999 ^ definitely 1.0189x faster destructuring-arguments 19.3271+-0.7224 ? 20.0355+-0.5516 ? might be 1.0366x slower destructuring-swap 6.6596+-0.1285 6.6259+-0.1229 direct-arguments-getbyval 1.5932+-0.1093 1.5779+-0.0704 div-boolean-double 7.6252+-0.2375 7.5154+-0.0452 might be 1.0146x faster div-boolean 11.7355+-0.0870 ? 11.7370+-0.0702 ? double-get-by-val-out-of-bounds 5.8394+-0.2639 5.7353+-0.3145 might be 1.0182x faster double-pollution-getbyval 12.4930+-0.2073 ^ 12.0243+-0.1415 ^ definitely 1.0390x faster double-pollution-putbyoffset 6.2518+-0.8303 5.4622+-0.1721 might be 1.1446x faster double-to-int32-typed-array-no-inline 2.8945+-0.0712 ? 2.9097+-0.1803 ? double-to-int32-typed-array 2.4481+-0.1793 2.4303+-0.1429 double-to-uint32-typed-array-no-inline 3.3903+-0.7217 3.0542+-0.1518 might be 1.1101x faster double-to-uint32-typed-array 2.4654+-0.0433 ? 2.4997+-0.1041 ? might be 1.0139x slower elidable-new-object-dag 50.7652+-2.5448 50.1287+-0.6402 might be 1.0127x faster elidable-new-object-roflcopter 54.9682+-1.4482 54.8502+-2.3408 elidable-new-object-then-call 46.2423+-1.1315 46.0019+-0.7929 elidable-new-object-tree 53.8323+-2.6113 53.3582+-2.2619 empty-string-plus-int 6.6888+-0.1316 ? 6.7816+-0.2957 ? might be 1.0139x slower emscripten-cube2hash 40.6670+-2.8861 39.6838+-0.8475 might be 1.0248x faster exit-length-on-plain-object 17.7862+-0.5378 17.6921+-0.2034 external-arguments-getbyval 1.6318+-0.1754 1.6270+-0.1447 external-arguments-putbyval 2.9572+-0.1950 2.8865+-0.1044 might be 1.0245x faster fixed-typed-array-storage-var-index 1.6136+-0.0274 ? 1.6145+-0.0649 ? fixed-typed-array-storage 1.1335+-0.0443 1.1270+-0.0279 Float32Array-matrix-mult 5.4991+-0.1525 5.4430+-0.0599 might be 1.0103x faster Float32Array-to-Float64Array-set 68.9124+-1.0857 68.5424+-0.5084 Float64Array-alloc-long-lived 86.0849+-5.1336 82.2695+-2.2282 might be 1.0464x faster Float64Array-to-Int16Array-set 85.1279+-1.1475 ? 85.2009+-1.3112 ? fold-double-to-int 17.9659+-0.3470 ? 17.9780+-0.3285 ? fold-get-by-id-to-multi-get-by-offset-rare-int 13.8480+-1.2285 ? 14.5080+-0.8669 ? might be 1.0477x slower fold-get-by-id-to-multi-get-by-offset 10.9937+-0.8287 10.7315+-0.5084 might be 1.0244x faster fold-multi-get-by-offset-to-get-by-offset 10.2020+-1.3146 ? 11.5621+-1.9774 ? might be 1.1333x slower fold-multi-get-by-offset-to-poly-get-by-offset 10.4425+-1.3248 ? 10.8192+-1.9745 ? might be 1.0361x slower fold-multi-put-by-offset-to-poly-put-by-offset 9.8945+-1.6400 ? 10.4341+-1.0846 ? might be 1.0545x slower fold-multi-put-by-offset-to-put-by-offset 5.6930+-0.9979 ? 6.5261+-1.2423 ? might be 1.1464x slower fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 12.3356+-2.0190 12.1596+-1.4839 might be 1.0145x faster fold-put-by-id-to-multi-put-by-offset 11.6135+-0.5703 ? 11.9728+-0.9390 ? might be 1.0309x slower fold-put-structure 5.2809+-0.7587 5.0601+-0.2848 might be 1.0436x faster for-of-iterate-array-entries 5.7679+-0.2669 ? 6.0310+-0.3845 ? might be 1.0456x slower for-of-iterate-array-keys 4.8017+-0.3987 ? 4.8314+-0.3507 ? for-of-iterate-array-values 4.4502+-0.1356 ? 4.4736+-0.1647 ? fround 25.2957+-0.4140 ? 25.3485+-0.2247 ? ftl-library-inlining-dataview 83.9480+-0.5773 ? 84.9423+-0.7008 ? might be 1.0118x slower ftl-library-inlining 162.0490+-0.3040 ? 162.1562+-0.5429 ? function-dot-apply 2.7780+-0.0932 ? 2.7903+-0.1174 ? function-test 4.0978+-0.1102 ? 4.1375+-0.0554 ? function-with-eval 131.6442+-1.7195 130.8906+-1.7076 gcse-poly-get-less-obvious 20.6654+-0.1705 ? 20.8150+-0.3593 ? gcse-poly-get 23.1433+-0.1822 ? 23.4481+-0.7473 ? might be 1.0132x slower gcse 5.4810+-0.1916 ? 5.6754+-0.3167 ? might be 1.0355x slower get-by-id-bimorphic-check-structure-elimination-simple 3.6733+-0.1785 3.6383+-0.1370 get-by-id-bimorphic-check-structure-elimination 8.2531+-0.0596 8.1804+-0.0418 get-by-id-chain-from-try-block 9.2895+-0.1992 ? 9.4149+-0.4505 ? might be 1.0135x slower get-by-id-check-structure-elimination 6.2816+-0.1761 6.2751+-0.1353 get-by-id-proto-or-self 20.7586+-1.0152 ? 22.1797+-2.1518 ? might be 1.0685x slower get-by-id-quadmorphic-check-structure-elimination-simple 4.2340+-0.3105 4.0663+-0.0545 might be 1.0412x faster get-by-id-self-or-proto 21.3423+-1.2369 ? 21.7273+-1.8625 ? might be 1.0180x slower get-by-val-out-of-bounds 5.6410+-0.2287 5.3852+-0.1599 might be 1.0475x faster get_callee_monomorphic 3.3355+-0.1269 ? 3.3605+-0.2632 ? get_callee_polymorphic 4.8358+-0.1860 ? 4.9346+-0.1842 ? might be 1.0204x slower getter-no-activation 6.8124+-0.2224 ? 6.9586+-0.3366 ? might be 1.0215x slower getter-richards 164.8857+-21.8011 159.7603+-9.6267 might be 1.0321x faster getter 7.5975+-0.5268 ? 7.8785+-0.8698 ? might be 1.0370x slower global-var-const-infer-fire-from-opt 1.2217+-0.1482 ? 1.2412+-0.1056 ? might be 1.0160x slower global-var-const-infer 0.9795+-0.1230 ? 1.1546+-0.3398 ? might be 1.1788x slower HashMap-put-get-iterate-keys 34.1730+-1.4078 33.6089+-0.7869 might be 1.0168x faster HashMap-put-get-iterate 33.7718+-0.9651 33.5199+-1.2326 HashMap-string-put-get-iterate 33.6732+-1.2045 ? 34.1111+-1.5828 ? might be 1.0130x slower hoist-make-rope 11.0444+-0.6927 ? 11.0572+-0.6943 ? hoist-poly-check-structure-effectful-loop 5.9280+-0.1787 5.9049+-0.2000 hoist-poly-check-structure 4.5099+-0.0397 ? 4.7035+-0.2068 ? might be 1.0429x slower imul-double-only 9.7502+-0.2343 ? 9.9810+-0.7782 ? might be 1.0237x slower imul-int-only 12.0295+-0.9203 11.4329+-0.1441 might be 1.0522x faster imul-mixed 8.9814+-0.3525 ? 9.2716+-0.5015 ? might be 1.0323x slower in-four-cases 22.7079+-0.7465 ! 24.9793+-0.6688 ! definitely 1.1000x slower in-one-case-false 12.8998+-1.0191 ? 14.1915+-0.3418 ? might be 1.1001x slower in-one-case-true 12.3425+-0.9739 ? 16.4780+-6.0808 ? might be 1.3351x slower in-two-cases 12.4235+-0.4865 ! 14.9775+-0.9099 ! definitely 1.2056x slower indexed-properties-in-objects 3.9235+-0.0303 3.9226+-0.0391 infer-closure-const-then-mov-no-inline 4.2638+-0.0854 ? 4.2774+-0.1533 ? infer-closure-const-then-mov 25.2234+-2.0313 24.2030+-0.6968 might be 1.0422x faster infer-closure-const-then-put-to-scope-no-inline 17.5800+-0.1869 17.5057+-0.0878 infer-closure-const-then-put-to-scope 33.7038+-0.3759 ? 33.9355+-0.5716 ? infer-closure-const-then-reenter-no-inline 82.5398+-1.1291 82.2486+-0.4925 infer-closure-const-then-reenter 34.0998+-0.3059 33.9509+-0.2157 infer-constant-global-property 43.6280+-0.2978 ? 43.8018+-0.6004 ? infer-constant-property 3.6366+-0.0747 ? 3.6645+-0.0565 ? infer-one-time-closure-ten-vars 12.0878+-0.2827 11.9136+-0.2211 might be 1.0146x faster infer-one-time-closure-two-vars 11.4641+-0.2119 ? 11.5442+-0.4158 ? infer-one-time-closure 11.4811+-0.3591 11.3285+-0.2372 might be 1.0135x faster infer-one-time-deep-closure 18.5288+-0.6627 18.0950+-0.3185 might be 1.0240x faster inline-arguments-access 5.4014+-0.1474 ? 5.4306+-0.3685 ? inline-arguments-aliased-access 5.5306+-0.4374 5.3790+-0.2301 might be 1.0282x faster inline-arguments-local-escape 5.7385+-0.4929 ? 5.9489+-1.4345 ? might be 1.0367x slower inline-get-scoped-var 6.6644+-0.3773 6.5432+-0.1817 might be 1.0185x faster inlined-put-by-id-transition 14.2867+-0.4365 13.6209+-1.2416 might be 1.0489x faster int-or-other-abs-then-get-by-val 6.3645+-0.1585 ? 6.4600+-0.3463 ? might be 1.0150x slower int-or-other-abs-zero-then-get-by-val 23.4662+-0.7929 23.4082+-0.2240 int-or-other-add-then-get-by-val 5.8218+-0.2467 5.6551+-0.1836 might be 1.0295x faster int-or-other-add 6.9211+-0.2762 ? 7.0061+-0.2975 ? might be 1.0123x slower int-or-other-div-then-get-by-val 5.4639+-0.1312 ? 5.6455+-0.2717 ? might be 1.0332x slower int-or-other-max-then-get-by-val 5.6665+-0.1317 ? 5.6898+-0.1692 ? int-or-other-min-then-get-by-val 5.8276+-0.1989 5.7896+-0.1171 int-or-other-mod-then-get-by-val 5.0000+-0.0758 4.9682+-0.0662 int-or-other-mul-then-get-by-val 5.2790+-0.1399 5.2327+-0.1461 int-or-other-neg-then-get-by-val 6.0826+-0.1359 ? 6.5420+-0.6837 ? might be 1.0755x slower int-or-other-neg-zero-then-get-by-val 22.9501+-0.3233 ? 23.6600+-0.6484 ? might be 1.0309x slower int-or-other-sub-then-get-by-val 5.8338+-0.0427 ? 5.8398+-0.0330 ? int-or-other-sub 4.7829+-0.1050 4.7537+-0.0773 int-overflow-local 6.0306+-0.2159 ? 6.5289+-1.0016 ? might be 1.0826x slower Int16Array-alloc-long-lived 65.2782+-3.0349 ? 65.4358+-3.1503 ? Int16Array-bubble-sort-with-byteLength 24.9865+-0.3973 ? 25.2877+-0.9761 ? might be 1.0121x slower Int16Array-bubble-sort 24.4202+-0.3140 24.2767+-0.2445 Int16Array-load-int-mul 1.9372+-0.0442 ? 1.9844+-0.0770 ? might be 1.0244x slower Int16Array-to-Int32Array-set 65.2681+-0.3611 64.1526+-0.8236 might be 1.0174x faster Int32Array-alloc-large 17.3995+-0.8504 ? 17.8610+-1.9985 ? might be 1.0265x slower Int32Array-alloc-long-lived 70.3215+-2.7090 ? 71.9063+-2.6969 ? might be 1.0225x slower Int32Array-alloc 3.8875+-0.2323 ? 4.1591+-0.5985 ? might be 1.0699x slower Int32Array-Int8Array-view-alloc 8.8730+-0.1578 ? 9.0479+-0.4057 ? might be 1.0197x slower int52-spill 8.3245+-0.4263 ? 8.3797+-0.4003 ? Int8Array-alloc-long-lived 58.7860+-2.8916 58.5892+-1.9016 Int8Array-load-with-byteLength 4.7588+-0.0433 ? 4.8701+-0.3496 ? might be 1.0234x slower Int8Array-load 4.7578+-0.0654 4.7362+-0.0499 integer-divide 15.0181+-0.1512 ? 15.0365+-0.2532 ? integer-modulo 2.2538+-0.0578 ? 2.2858+-0.1379 ? might be 1.0142x slower large-int-captured 5.6747+-0.2848 ? 5.6750+-0.3869 ? large-int-neg 20.9629+-0.3815 20.9384+-0.3044 large-int 19.9993+-0.1551 ? 20.0737+-0.4116 ? logical-not 5.9327+-0.2914 5.7823+-0.1301 might be 1.0260x faster lots-of-fields 14.1362+-0.2800 ? 14.3491+-0.4816 ? might be 1.0151x slower make-indexed-storage 3.8891+-0.2631 ? 3.9018+-0.2663 ? make-rope-cse 5.3976+-0.1687 ? 5.4202+-0.6482 ? marsaglia-larger-ints 47.4499+-0.4900 ? 47.9634+-1.0151 ? might be 1.0108x slower marsaglia-osr-entry 30.2344+-0.4539 30.1836+-0.4126 max-boolean 3.7865+-0.0888 ? 3.7929+-0.0311 ? method-on-number 25.1819+-4.5212 24.7209+-0.3691 might be 1.0186x faster min-boolean 3.9197+-0.3345 3.8307+-0.1021 might be 1.0232x faster minus-boolean-double 4.3709+-0.0841 ? 4.4761+-0.2577 ? might be 1.0241x slower minus-boolean 3.2108+-0.0632 ? 3.2153+-0.0279 ? misc-strict-eq 42.5302+-0.3665 ? 42.9855+-0.6410 ? might be 1.0107x slower mod-boolean-double 16.1608+-0.2946 ? 16.2891+-0.6693 ? mod-boolean 12.0037+-0.1698 ? 12.0837+-0.2006 ? mul-boolean-double 5.1882+-0.2082 5.1455+-0.1142 mul-boolean 3.9460+-0.0905 3.9320+-0.1143 neg-boolean 4.3519+-0.0760 ? 4.3783+-0.0723 ? negative-zero-divide 0.4233+-0.0132 0.4191+-0.0106 negative-zero-modulo 0.4188+-0.0171 0.4187+-0.0166 negative-zero-negate 0.4059+-0.0305 ? 0.4120+-0.0297 ? might be 1.0150x slower nested-function-parsing 47.4243+-0.5401 47.1072+-0.7733 new-array-buffer-dead 118.9205+-2.0967 ? 121.5295+-3.1396 ? might be 1.0219x slower new-array-buffer-push 8.0500+-0.1741 ? 8.5988+-0.7101 ? might be 1.0682x slower new-array-dead 19.6549+-0.2309 18.6282+-1.0570 might be 1.0551x faster new-array-push 4.8752+-0.3796 4.8608+-0.1845 no-inline-constructor 135.1361+-1.8632 ? 135.2364+-2.4331 ? number-test 4.0086+-0.1502 3.9585+-0.1064 might be 1.0127x faster object-closure-call 6.9781+-0.2230 6.9049+-0.2114 might be 1.0106x faster object-test 4.0233+-0.1010 ? 4.0480+-0.0818 ? obvious-sink-pathology-taken 140.7052+-2.9268 138.5920+-0.9901 might be 1.0152x faster obvious-sink-pathology 136.2088+-6.8387 132.9820+-1.7763 might be 1.0243x faster obviously-elidable-new-object 41.5916+-2.2868 40.0575+-1.1313 might be 1.0383x faster plus-boolean-arith 3.3011+-0.0892 3.2981+-0.0767 plus-boolean-double 4.4174+-0.2169 4.3665+-0.0568 might be 1.0117x faster plus-boolean 3.6480+-0.2164 3.6182+-0.0989 poly-chain-access-different-prototypes-simple 3.8614+-0.2454 ? 3.8916+-0.4153 ? poly-chain-access-different-prototypes 3.5074+-0.0690 ? 3.5892+-0.1294 ? might be 1.0233x slower poly-chain-access-simpler 3.7676+-0.0443 3.7655+-0.0370 poly-chain-access 3.5995+-0.2587 3.4692+-0.0575 might be 1.0376x faster poly-stricteq 75.4893+-0.3383 ? 76.0457+-0.4813 ? polymorphic-array-call 1.5205+-0.0670 ? 1.6516+-0.2202 ? might be 1.0862x slower polymorphic-get-by-id 3.9685+-0.0247 ? 3.9806+-0.0408 ? polymorphic-put-by-id 35.1902+-0.4481 ? 35.5481+-0.9757 ? might be 1.0102x slower polymorphic-structure 18.9527+-0.1370 ? 19.1239+-0.3573 ? polyvariant-monomorphic-get-by-id 9.8743+-1.2148 ? 10.6134+-1.4454 ? might be 1.0749x slower proto-getter-access 12.9716+-0.2757 12.8059+-0.2741 might be 1.0129x faster put-by-id-replace-and-transition 10.4371+-0.4745 ? 11.1864+-0.8636 ? might be 1.0718x slower put-by-id-slightly-polymorphic 3.5330+-0.0880 ? 3.5917+-0.0515 ? might be 1.0166x slower put-by-id 13.7085+-0.5875 13.4425+-0.7098 might be 1.0198x faster put-by-val-direct 0.5562+-0.0309 0.5458+-0.0173 might be 1.0191x faster put-by-val-large-index-blank-indexing-type 7.4006+-0.4019 ? 7.4917+-0.3353 ? might be 1.0123x slower put-by-val-machine-int 3.5645+-0.1694 3.4688+-0.1157 might be 1.0276x faster rare-osr-exit-on-local 21.6645+-1.5251 21.0756+-0.4299 might be 1.0279x faster register-pressure-from-osr 24.8343+-0.4871 24.3025+-0.2041 might be 1.0219x faster setter 7.8890+-0.4947 ? 8.0522+-0.5356 ? might be 1.0207x slower simple-activation-demo 35.1101+-0.4004 ? 35.1249+-0.3191 ? simple-getter-access 17.0806+-0.3081 16.8875+-0.3432 might be 1.0114x faster simple-poly-call-nested 12.8877+-0.7417 12.8057+-0.5395 simple-poly-call 1.6882+-0.0662 1.6554+-0.0317 might be 1.0198x faster sin-boolean 24.9261+-0.8228 ? 26.0091+-0.9221 ? might be 1.0434x slower singleton-scope 94.1577+-0.7094 93.8234+-0.2531 sink-function 21.8820+-1.1524 ^ 14.0673+-1.0145 ^ definitely 1.5555x faster sinkable-new-object-dag 82.6204+-2.5215 82.4327+-3.0211 sinkable-new-object-taken 64.6302+-1.9491 64.0863+-1.1714 sinkable-new-object 44.5973+-2.6627 43.2218+-0.4689 might be 1.0318x faster slow-array-profile-convergence 3.5258+-0.1742 ? 3.7479+-0.3006 ? might be 1.0630x slower slow-convergence 3.3783+-0.0364 ? 3.5123+-0.3466 ? might be 1.0397x slower sorting-benchmark 30.2190+-0.3333 ? 30.6529+-0.6779 ? might be 1.0144x slower sparse-conditional 1.4833+-0.0301 ? 1.5570+-0.1026 ? might be 1.0497x slower splice-to-remove 19.4879+-0.2275 ! 20.0320+-0.2181 ! definitely 1.0279x slower string-char-code-at 19.6391+-0.2637 ? 19.7431+-0.3479 ? string-concat-object 2.9910+-0.0983 ? 3.3200+-0.3588 ? might be 1.1100x slower string-concat-pair-object 3.0854+-0.0990 2.9858+-0.1704 might be 1.0333x faster string-concat-pair-simple 13.4008+-0.7647 12.7008+-0.2112 might be 1.0551x faster string-concat-simple 13.8055+-1.6417 13.5256+-0.8905 might be 1.0207x faster string-cons-repeat 9.7275+-0.9873 9.3255+-0.7243 might be 1.0431x faster string-cons-tower 9.5732+-0.2590 ? 9.9065+-0.6705 ? might be 1.0348x slower string-equality 21.6092+-0.8069 21.3510+-0.2020 might be 1.0121x faster string-get-by-val-big-char 9.4860+-0.3417 9.2716+-0.2783 might be 1.0231x faster string-get-by-val-out-of-bounds-insane 4.4837+-0.1269 ? 4.5728+-0.2321 ? might be 1.0199x slower string-get-by-val-out-of-bounds 5.6753+-0.0641 ? 5.7453+-0.1000 ? might be 1.0123x slower string-get-by-val 4.0157+-0.2491 ? 4.0295+-0.2058 ? string-hash 2.5627+-0.1271 2.5491+-0.0881 string-long-ident-equality 17.8746+-0.5089 ? 17.9563+-0.7332 ? string-out-of-bounds 14.9657+-0.4943 14.7142+-0.2041 might be 1.0171x faster string-repeat-arith 38.3680+-0.1246 38.2082+-0.2546 string-sub 75.2728+-0.7563 ! 77.1105+-0.6414 ! definitely 1.0244x slower string-test 3.7490+-0.0599 ? 3.8890+-0.1406 ? might be 1.0373x slower string-var-equality 36.0415+-0.0966 ! 39.4209+-0.1472 ! definitely 1.0938x slower structure-hoist-over-transitions 3.2940+-0.2480 ? 3.3136+-0.1305 ? substring-concat-weird 51.7722+-0.4674 51.7008+-1.0010 substring-concat 54.7672+-2.0032 ? 54.7927+-1.3746 ? substring 61.8758+-0.9330 ? 62.5852+-0.8863 ? might be 1.0115x slower switch-char-constant 3.6641+-0.0936 3.6227+-0.0461 might be 1.0114x faster switch-char 8.5632+-0.7290 ? 9.8455+-1.3281 ? might be 1.1498x slower switch-constant 11.7530+-0.4672 11.0983+-0.9927 might be 1.0590x faster switch-string-basic-big-var 18.2638+-0.0907 18.1834+-0.0913 switch-string-basic-big 18.3196+-0.1923 ? 18.3871+-0.3124 ? switch-string-basic-var 17.7168+-0.2098 ? 17.9502+-0.6766 ? might be 1.0132x slower switch-string-basic 17.6410+-0.3404 ? 17.8693+-0.5072 ? might be 1.0129x slower switch-string-big-length-tower-var 26.6746+-0.3808 26.4782+-0.2735 switch-string-length-tower-var 18.5502+-0.1209 18.5240+-0.1498 switch-string-length-tower 16.8087+-0.1485 16.7603+-0.0951 switch-string-short 16.8464+-0.2768 ? 16.8986+-0.3607 ? switch 17.1270+-1.0656 ? 17.2012+-1.2018 ? tear-off-arguments-simple 4.2629+-0.2063 ? 4.2970+-0.1643 ? tear-off-arguments 5.9936+-0.4899 5.9231+-0.4797 might be 1.0119x faster temporal-structure 17.4377+-0.2923 ? 17.4447+-0.2354 ? to-int32-boolean 18.5954+-0.3948 18.4288+-0.1161 try-catch-get-by-val-cloned-arguments 18.5626+-0.3223 ? 18.7638+-0.6902 ? might be 1.0108x slower try-catch-get-by-val-direct-arguments 8.2036+-0.1786 ? 8.5107+-0.3148 ? might be 1.0374x slower try-catch-get-by-val-scoped-arguments 10.1815+-0.3660 10.0420+-0.3860 might be 1.0139x faster undefined-property-access 322.1055+-0.4974 ? 322.6034+-1.1442 ? undefined-test 4.0368+-0.1711 ? 4.1702+-0.2753 ? might be 1.0331x slower unprofiled-licm 20.1143+-0.1412 ? 20.2863+-0.5892 ? varargs-call 19.4628+-0.1933 19.1355+-0.3765 might be 1.0171x faster varargs-construct-inline 25.4820+-0.5293 ? 26.0420+-1.5046 ? might be 1.0220x slower varargs-construct 41.5338+-0.6977 41.4970+-0.9044 varargs-inline 12.3410+-0.2812 12.2428+-0.1333 varargs-strict-mode 13.5096+-0.1970 13.4462+-0.1057 varargs 13.3926+-0.0833 ? 13.5978+-0.4147 ? might be 1.0153x slower weird-inlining-const-prop 2.9438+-0.2240 2.8226+-0.2837 might be 1.0429x faster <geometric> 10.9240+-0.0367 ? 10.9664+-0.0386 ? might be 1.0039x slower Trunk SinkNewFunction AsmBench: bigfib.cpp 658.6932+-6.9943 657.2699+-1.9962 cray.c 580.5135+-3.0012 579.9958+-1.5288 dry.c 616.5087+-26.6806 ? 653.7879+-15.1693 ? might be 1.0605x slower FloatMM.c 1031.5182+-0.5962 1031.0532+-1.0475 gcc-loops.cpp 5234.4017+-40.0608 5213.4405+-9.3436 n-body.c 1229.7462+-0.9184 1229.2448+-0.9159 Quicksort.c 606.5915+-6.6561 ? 611.4886+-2.1544 ? stepanov_container.cpp 5449.0375+-75.9359 5447.8392+-49.8665 Towers.c 350.3289+-0.9622 350.1884+-0.3470 <geometric> 1068.2206+-6.2764 ? 1075.2191+-3.3968 ? might be 1.0066x slower Trunk SinkNewFunction CompressionBench: huffman 442.9074+-2.8072 ! 448.1654+-1.8558 ! definitely 1.0119x slower arithmetic-simple 510.3425+-3.5839 ? 510.5959+-6.6406 ? arithmetic-precise 402.8929+-14.6677 394.9258+-1.9138 might be 1.0202x faster arithmetic-complex-precise 393.4967+-1.2208 ? 394.4382+-3.8564 ? arithmetic-precise-order-0 526.7729+-4.8011 523.4777+-6.8427 arithmetic-precise-order-1 441.6063+-2.0145 ? 441.6759+-2.5982 ? arithmetic-precise-order-2 495.6534+-1.9804 ? 496.9294+-3.7131 ? arithmetic-simple-order-1 491.5868+-2.9979 ? 492.2852+-3.1231 ? arithmetic-simple-order-2 569.8405+-3.9782 ? 570.9934+-6.4206 ? lz-string 460.9897+-13.7496 ? 466.7519+-13.2443 ? might be 1.0125x slower <geometric> 470.6325+-2.2728 ? 470.9774+-1.1982 ? might be 1.0007x slower Trunk SinkNewFunction Geomean of preferred means: <scaled-result> 82.3947+-0.3655 ? 82.6624+-0.3859 ? might be 1.0032x slower
Basile Clement
Comment 2 2015-04-23 18:33:15 PDT
Created attachment 251524 [details] patch This should be correct, and I can't think of other relevant tests.
WebKit Commit Bot
Comment 3 2015-04-23 18:35:50 PDT
Attachment 251524 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:787: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 1 in 23 files If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 4 2015-04-23 18:37:29 PDT
Comment on attachment 251524 [details] patch Nice!
Basile Clement
Comment 5 2015-04-23 18:39:34 PDT
(In reply to comment #3) > Attachment 251524 [details] did not pass style-queue: > > > ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:787: > Place brace on its own line for function definitions. [whitespace/braces] > [4] > Total errors found: 1 in 23 files > > > If any of these errors are false positives, please file a bug against > check-webkit-style. I followed the style of other lambdas on that one ; should I fix it?
Filip Pizlo
Comment 6 2015-04-23 18:48:40 PDT
Comment on attachment 251524 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=251524&action=review > Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:566 > + Node* executable = m_insertionSet.insertConstant( > + nodeIndex + 1, node->origin, node->cellOperand()); You could add the cellOperand as a strong constant. This means doing: m_insertionSet.insertConstant(nodeIndex + 1, node->origin, m_graph.freezeStrong(node->cellOperand()));
Filip Pizlo
Comment 7 2015-04-23 18:49:04 PDT
Comment on attachment 251524 [details] patch Clearing cq because there is one small refinement that could be made.
Filip Pizlo
Comment 8 2015-04-23 18:52:26 PDT
(In reply to comment #5) > (In reply to comment #3) > > Attachment 251524 [details] did not pass style-queue: > > > > > > ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:787: > > Place brace on its own line for function definitions. [whitespace/braces] > > [4] > > Total errors found: 1 in 23 files > > > > > > If any of these errors are false positives, please file a bug against > > check-webkit-style. > > I followed the style of other lambdas on that one ; should I fix it? It's a bug in stylebot. It doesn't parse lambdas correctly, yet. We ignore these errors for lambdas.
Filip Pizlo
Comment 9 2015-04-23 18:56:29 PDT
(In reply to comment #6) > Comment on attachment 251524 [details] > patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=251524&action=review > > > Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:566 > > + Node* executable = m_insertionSet.insertConstant( > > + nodeIndex + 1, node->origin, node->cellOperand()); > > You could add the cellOperand as a strong constant. This means doing: > > m_insertionSet.insertConstant(nodeIndex + 1, node->origin, > m_graph.freezeStrong(node->cellOperand())); Actually, cellOperand() is a FrozenValue* and it's already strong. So the current code is correct and what I'm suggesting is wrong.
Filip Pizlo
Comment 10 2015-04-23 18:56:43 PDT
Comment on attachment 251524 [details] patch It's good to land!
WebKit Commit Bot
Comment 11 2015-04-23 19:24:46 PDT
Comment on attachment 251524 [details] patch Clearing flags on attachment: 251524 Committed r183235: <http://trac.webkit.org/changeset/183235>
WebKit Commit Bot
Comment 12 2015-04-23 19:24:49 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.