Created attachment 251798 [details] WIP Currently we sink object allocation & function allocation. This will allow to sink activation allocation as well. Attached patch is a WIP and still needs more testing.
Created attachment 251910 [details] Seems to be working Still need to run the full benchmarks + write ChangeLog entry
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Basiles-Mac-Pro (MacPro6,1). VMs tested: "Baseline" at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc "SinkCreateActivation" at /Volumes/Data/primary/OpenSource/WebKitBuild/SinkCreateActivation/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. Baseline SinkCreateActivation SunSpider: 3d-cube 15.2308+-0.2606 ? 15.3732+-0.2779 ? 3d-morph 16.8042+-0.0985 ? 16.8384+-0.3182 ? 3d-raytrace 19.4455+-0.7497 19.0424+-0.1963 might be 1.0212x faster access-binary-trees 6.6882+-0.2881 6.6045+-0.2820 might be 1.0127x faster access-fannkuch 17.8009+-0.4887 17.3639+-0.1420 might be 1.0252x faster access-nbody 8.4720+-0.0432 8.4393+-0.0524 access-nsieve 10.1578+-0.1661 ? 10.1596+-0.2037 ? bitops-3bit-bits-in-byte 4.6283+-0.1024 ? 4.6600+-0.0800 ? bitops-bits-in-byte 9.6589+-0.0962 ? 9.6752+-0.0524 ? bitops-bitwise-and 6.3514+-0.0313 6.3483+-0.0450 bitops-nsieve-bits 9.6525+-0.0521 ? 9.6761+-0.1023 ? controlflow-recursive 6.6254+-0.2120 6.5560+-0.0603 might be 1.0106x faster crypto-aes 13.3934+-0.2093 ? 13.4657+-0.4751 ? crypto-md5 7.8489+-0.1196 7.7206+-0.1449 might be 1.0166x faster crypto-sha1 7.2194+-0.0991 ? 7.2682+-0.0436 ? date-format-tofte 27.5433+-0.2852 27.4781+-0.4237 date-format-xparb 16.5758+-0.2804 ? 17.0672+-0.9329 ? might be 1.0296x slower math-cordic 9.1323+-0.2523 9.0755+-0.0807 math-partial-sums 15.5910+-0.2883 ? 15.6965+-0.1812 ? math-spectral-norm 5.7548+-0.1556 5.5647+-0.0635 might be 1.0342x faster regexp-dna 21.6370+-0.4686 ? 21.6921+-0.2880 ? string-base64 13.5455+-0.1669 13.4997+-0.0765 string-fasta 19.2194+-0.1661 19.1816+-0.0597 string-tagcloud 27.8363+-0.2504 27.5601+-0.1739 might be 1.0100x faster string-unpack-code 57.0535+-0.4747 ! 58.0085+-0.4252 ! definitely 1.0167x slower string-validate-input 14.1135+-0.4711 13.9809+-0.1779 <arithmetic> 14.9223+-0.0618 ? 14.9229+-0.0366 ? might be 1.0000x slower Baseline SinkCreateActivation LongSpider: 3d-cube 2605.8180+-5.5153 ! 2619.3201+-6.3255 ! definitely 1.0052x slower 3d-morph 4684.6396+-3.9522 ? 4690.7627+-5.1025 ? 3d-raytrace 2256.9155+-17.0795 2235.4811+-10.1420 access-binary-trees 2677.4224+-7.1810 ! 2695.9914+-9.2173 ! definitely 1.0069x slower access-fannkuch 1001.2788+-19.2084 ? 1002.4358+-16.7375 ? access-nbody 1863.4218+-2.0027 ! 1869.9792+-1.9519 ! definitely 1.0035x slower access-nsieve 1943.4358+-9.0243 ? 1952.3350+-16.7100 ? bitops-3bit-bits-in-byte 139.7401+-0.8997 ? 140.2193+-1.2893 ? bitops-bits-in-byte 279.5860+-9.0475 278.6299+-3.9369 bitops-nsieve-bits 2005.1554+-10.5537 2000.0580+-5.8653 controlflow-recursive 1501.2905+-2.0802 ! 1526.7780+-2.5516 ! definitely 1.0170x slower crypto-aes 1987.7439+-15.6631 ? 2000.2041+-9.4531 ? crypto-md5 1568.7516+-14.5682 1556.8435+-5.6473 crypto-sha1 1888.8077+-9.5359 ^ 1865.0993+-5.2576 ^ definitely 1.0127x faster date-format-tofte 2173.8532+-17.4089 ? 2210.2321+-29.0635 ? might be 1.0167x slower date-format-xparb 2238.7920+-71.0694 ? 2295.0495+-73.4851 ? might be 1.0251x slower math-cordic 1807.6766+-2.4152 ? 1807.8344+-2.9796 ? math-partial-sums 1549.7797+-4.2439 ? 1550.3994+-3.9295 ? math-spectral-norm 1724.2199+-2.9488 1722.3521+-1.4815 string-base64 1035.4383+-3.8513 ? 1039.8466+-12.0856 ? string-fasta 1292.6444+-6.7018 1283.0874+-7.1106 string-tagcloud 658.8303+-5.7542 653.0769+-2.6994 <geometric> 1455.1527+-4.1435 ? 1457.9673+-2.4997 ? might be 1.0019x slower Baseline SinkCreateActivation V8Spider: crypto 151.8524+-0.3259 151.8375+-0.7479 deltablue 195.1786+-1.9764 ? 198.5157+-2.7638 ? might be 1.0171x slower earley-boyer 127.8052+-1.0097 ? 129.4010+-1.8085 ? might be 1.0125x slower raytrace 90.1626+-1.7616 89.7376+-1.1651 regexp 236.2794+-0.8874 ? 238.3618+-2.1157 ? richards 216.9584+-2.3612 ? 218.4007+-0.8912 ? splay 105.0519+-3.9272 104.0003+-3.2986 might be 1.0101x faster <geometric> 151.5705+-0.5961 ? 152.2237+-0.9720 ? might be 1.0043x slower Baseline SinkCreateActivation Octane: encrypt 0.67941+-0.00526 ? 0.68721+-0.00689 ? might be 1.0115x slower decrypt 11.90240+-0.06020 ? 11.90918+-0.05915 ? deltablue x2 0.61107+-0.00966 ? 0.61883+-0.01743 ? might be 1.0127x slower earley 1.38153+-0.01007 ^ 1.31915+-0.00942 ^ definitely 1.0473x faster boyer 19.80787+-0.06570 ? 19.85438+-0.03163 ? navier-stokes x2 15.90604+-0.02342 ? 15.91019+-0.02697 ? raytrace x2 3.78965+-0.16599 ? 3.91482+-0.22869 ? might be 1.0330x slower richards x2 0.35523+-0.00245 0.35363+-0.00322 splay x2 1.02838+-0.01377 1.02741+-0.02745 regexp x2 90.29128+-0.36288 90.18459+-0.15549 pdfjs x2 139.83003+-1.61314 138.84315+-0.21660 mandreel x2 202.51934+-1.07573 201.86519+-0.83204 gbemu x2 191.47769+-4.54699 191.00860+-4.75776 closure 1.77573+-0.01011 1.76225+-0.01348 jquery 23.33940+-0.27919 23.22411+-0.17876 box2d x2 51.24721+-0.20734 ? 51.29475+-0.11463 ? zlib x2 1127.39315+-4.65331 ? 1127.85461+-4.76934 ? typescript x2 2374.48250+-36.66609 2358.93408+-35.57490 <geometric> 21.33608+-0.07907 21.33288+-0.13985 might be 1.0002x faster Baseline SinkCreateActivation Kraken: ai-astar 1082.391+-17.304 1063.232+-16.671 might be 1.0180x faster audio-beat-detection 371.812+-3.696 370.834+-1.832 audio-dft 423.334+-7.608 419.590+-5.866 audio-fft 230.597+-1.381 ? 230.821+-1.156 ? audio-oscillator 625.774+-0.382 625.518+-0.361 imaging-darkroom 318.562+-5.888 318.119+-2.398 imaging-desaturate 195.524+-1.360 ? 196.746+-1.215 ? imaging-gaussian-blur 341.756+-15.437 336.412+-0.530 might be 1.0159x faster json-parse-financial 136.365+-1.411 135.615+-0.690 json-stringify-tinderbox 168.725+-0.275 ! 171.985+-0.164 ! definitely 1.0193x slower stanford-crypto-aes 187.195+-1.443 ? 187.397+-2.588 ? stanford-crypto-ccm 162.675+-1.748 ? 163.403+-1.725 ? stanford-crypto-pbkdf2 510.317+-2.943 509.687+-3.692 stanford-crypto-sha256-iterative 165.924+-1.778 ? 166.958+-1.323 ? <arithmetic> 351.496+-1.389 349.737+-1.240 might be 1.0050x faster Baseline SinkCreateActivation JSRegress: abs-boolean 7.6620+-0.0517 7.6601+-0.0768 adapt-to-double-divide 48.4624+-0.6026 ? 48.7999+-0.1906 ? aliased-arguments-getbyval 3.7690+-0.0598 ? 3.9327+-0.1345 ? might be 1.0434x slower allocate-big-object 7.1575+-0.1440 ? 7.4318+-0.3009 ? might be 1.0383x slower arguments-named-and-reflective 34.3776+-0.2985 ? 34.4915+-0.1452 ? arguments-out-of-bounds 42.4955+-0.1753 ? 42.5774+-0.2522 ? arguments-strict-mode 31.5420+-0.3011 ? 31.8964+-0.2322 ? might be 1.0112x slower arguments 27.8750+-0.5124 27.7136+-0.0620 arity-mismatch-inlining 2.6956+-0.0664 2.6816+-0.1170 array-access-polymorphic-structure 18.5507+-0.1944 18.3924+-0.1667 array-nonarray-polymorhpic-access 102.8219+-4.3148 102.5087+-3.7613 array-prototype-every 251.5081+-1.8193 ! 258.8390+-0.4801 ! definitely 1.0291x slower array-prototype-forEach 245.9705+-0.2645 ! 263.0199+-0.7505 ! definitely 1.0693x slower array-prototype-map 271.3571+-2.0051 ! 281.7268+-2.8361 ! definitely 1.0382x slower array-prototype-some 251.0243+-1.3578 ! 258.3754+-0.1397 ! definitely 1.0293x slower array-splice-contiguous 125.7358+-0.8322 ^ 123.8507+-0.8114 ^ definitely 1.0152x faster array-with-double-add 11.8885+-0.0631 11.8005+-0.0520 array-with-double-increment 9.4525+-0.0506 ^ 9.3014+-0.0965 ^ definitely 1.0162x faster array-with-double-mul-add 14.5861+-0.0508 ! 14.6913+-0.0503 ! definitely 1.0072x slower array-with-double-sum 9.5109+-0.0199 ? 9.5290+-0.1281 ? array-with-int32-add-sub 19.0627+-0.0939 ? 19.1482+-0.0933 ? array-with-int32-or-double-sum 9.7362+-0.2885 9.5729+-0.0561 might be 1.0171x faster ArrayBuffer-DataView-alloc-large-long-lived 89.5254+-5.8153 ! 104.9825+-0.4825 ! definitely 1.1727x slower ArrayBuffer-DataView-alloc-long-lived 44.4746+-6.0281 ! 54.4758+-3.8476 ! definitely 1.2249x slower ArrayBuffer-Int32Array-byteOffset 11.2135+-0.0799 ? 11.3538+-0.0926 ? might be 1.0125x slower ArrayBuffer-Int8Array-alloc-large-long-lived 90.8363+-1.1122 ? 94.8100+-5.2131 ? might be 1.0437x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 65.0555+-1.6419 ? 67.3167+-4.6640 ? might be 1.0348x slower ArrayBuffer-Int8Array-alloc-long-lived 37.2546+-0.9107 ? 39.0086+-4.2124 ? might be 1.0471x slower ArrayBuffer-Int8Array-alloc 31.0621+-0.2093 ? 33.8400+-4.1187 ? might be 1.0894x slower asmjs_bool_bug 22.3575+-0.4179 ? 22.3695+-0.1910 ? assign-custom-setter-polymorphic 9.0293+-0.1958 ? 9.6794+-0.5932 ? might be 1.0720x slower assign-custom-setter 12.2419+-0.0607 ! 13.1855+-0.0591 ! definitely 1.0771x slower basic-set 25.1545+-1.0421 24.5030+-0.1395 might be 1.0266x faster big-int-mul 11.9106+-0.8976 11.5823+-0.0520 might be 1.0283x faster boolean-test 8.8280+-0.0241 ? 8.9140+-0.0698 ? branch-fold 10.7896+-0.1599 10.7455+-0.1488 by-val-generic 22.5245+-0.1370 22.4190+-0.1320 call-spread-apply 83.4627+-2.6047 ? 83.5333+-0.9949 ? call-spread-call 69.4841+-0.4586 ? 70.2646+-0.4773 ? might be 1.0112x slower captured-assignments 1.4035+-0.0118 1.3854+-0.0298 might be 1.0131x faster cast-int-to-double 15.1476+-0.0678 15.1217+-0.0944 cell-argument 23.9282+-0.1676 ? 23.9354+-0.3385 ? cfg-simplify 8.5890+-0.3270 ? 8.6691+-0.3046 ? chain-getter-access 28.5352+-0.3303 ? 28.6180+-0.3082 ? cmpeq-obj-to-obj-other 28.8628+-0.3170 ^ 27.7098+-0.0853 ^ definitely 1.0416x faster constant-test 14.3040+-0.1065 14.2166+-0.0417 create-lots-of-functions 27.8652+-0.2748 ? 28.0523+-0.3293 ? DataView-custom-properties 104.2128+-5.8340 ! 121.1982+-1.4448 ! definitely 1.1630x slower deconstructing-parameters-overridden-by-function 1.4757+-0.0371 ? 1.4922+-0.0614 ? might be 1.0112x slower delay-tear-off-arguments-strictmode 39.3905+-0.1302 ? 40.1134+-0.8425 ? might be 1.0184x slower deltablue-varargs 580.3584+-3.3911 ^ 573.7974+-2.1380 ^ definitely 1.0114x faster destructuring-arguments 44.7935+-0.4037 ? 44.9631+-0.2772 ? destructuring-swap 14.6549+-0.0524 14.4786+-0.1370 might be 1.0122x faster direct-arguments-getbyval 3.8108+-0.1756 3.7918+-0.2137 div-boolean-double 15.0802+-0.3650 14.9481+-0.1036 div-boolean 22.4364+-0.0451 ? 22.4636+-0.0477 ? double-get-by-val-out-of-bounds 12.3687+-0.2761 12.2115+-0.0706 might be 1.0129x faster double-pollution-getbyval 26.1724+-1.2495 25.7424+-0.1574 might be 1.0167x faster double-pollution-putbyoffset 12.3289+-0.1430 ? 12.4875+-0.1387 ? might be 1.0129x slower double-to-int32-typed-array-no-inline 6.5521+-0.1455 6.5322+-0.0717 double-to-int32-typed-array 5.7159+-0.0776 ? 5.7320+-0.0413 ? double-to-uint32-typed-array-no-inline 6.6697+-0.1272 ? 6.7008+-0.0537 ? double-to-uint32-typed-array 5.9235+-0.1042 5.8881+-0.0763 elidable-new-object-dag 107.4023+-1.5049 106.2279+-1.5121 might be 1.0111x faster elidable-new-object-roflcopter 119.3927+-0.7580 118.9171+-1.2160 elidable-new-object-then-call 99.8843+-3.1136 ? 100.0874+-3.5336 ? elidable-new-object-tree 113.3365+-1.3235 ? 113.4227+-1.2815 ? empty-string-plus-int 15.3570+-0.1868 15.2655+-0.1105 emscripten-cube2hash 106.7234+-0.7513 ? 107.5250+-0.6766 ? exit-length-on-plain-object 38.9550+-0.6398 ? 39.6525+-1.1237 ? might be 1.0179x slower external-arguments-getbyval 3.6904+-0.1075 3.6735+-0.0869 external-arguments-putbyval 6.6482+-0.1063 6.5704+-0.1519 might be 1.0118x faster fixed-typed-array-storage-var-index 3.7124+-0.0344 ? 3.7171+-0.0801 ? fixed-typed-array-storage 2.9018+-0.0923 ? 2.9773+-0.0640 ? might be 1.0260x slower Float32Array-matrix-mult 13.2521+-0.0767 ? 13.2524+-0.0734 ? Float32Array-to-Float64Array-set 167.0979+-0.4091 ^ 156.0801+-0.4926 ^ definitely 1.0706x faster Float64Array-alloc-long-lived 184.3547+-0.7093 183.7322+-0.6190 Float64Array-to-Int16Array-set 210.6015+-0.4701 ^ 205.3070+-0.5772 ^ definitely 1.0258x faster fold-double-to-int 41.4299+-0.0446 41.3328+-0.1039 fold-get-by-id-to-multi-get-by-offset-rare-int 23.5845+-0.6024 ? 23.5899+-0.5094 ? fold-get-by-id-to-multi-get-by-offset 20.1393+-0.6586 20.0421+-0.3849 fold-multi-get-by-offset-to-get-by-offset 18.6449+-1.2593 ? 19.5591+-0.2194 ? might be 1.0490x slower fold-multi-get-by-offset-to-poly-get-by-offset 19.1177+-1.8788 19.0630+-1.4070 fold-multi-put-by-offset-to-poly-put-by-offset 17.8298+-0.2832 ? 17.8652+-0.2499 ? fold-multi-put-by-offset-to-put-by-offset 13.7298+-0.1744 13.5667+-0.9915 might be 1.0120x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 28.0477+-1.8488 27.9576+-1.0303 fold-put-by-id-to-multi-put-by-offset 19.4270+-0.3417 19.1707+-0.2431 might be 1.0134x faster fold-put-structure 12.1548+-1.3867 11.6137+-0.3997 might be 1.0466x faster for-of-iterate-array-entries 13.0157+-0.1600 ^ 12.7634+-0.0855 ^ definitely 1.0198x faster for-of-iterate-array-keys 10.3339+-0.1426 10.2268+-0.1386 might be 1.0105x faster for-of-iterate-array-values 10.1624+-0.2469 ? 10.6329+-0.4679 ? might be 1.0463x slower fround 56.2403+-0.5572 54.9210+-1.3099 might be 1.0240x faster ftl-library-inlining-dataview 202.9241+-1.9870 ^ 194.6668+-1.0657 ^ definitely 1.0424x faster ftl-library-inlining 211.8142+-39.0227 ? 243.0648+-69.4401 ? might be 1.1475x slower function-dot-apply 6.4801+-0.0934 ? 6.5144+-0.0958 ? function-test 9.7388+-0.0909 9.6450+-0.0352 function-with-eval 287.0354+-4.2671 282.3612+-1.8735 might be 1.0166x faster gcse-poly-get-less-obvious 53.6429+-1.5351 ! 60.4338+-5.0574 ! definitely 1.1266x slower gcse-poly-get 73.7610+-8.5911 70.2148+-8.3355 might be 1.0505x faster gcse 12.4730+-0.0469 ? 12.4916+-0.0359 ? get-by-id-bimorphic-check-structure-elimination-simple 7.9631+-0.0948 ? 8.0218+-0.1494 ? get-by-id-bimorphic-check-structure-elimination 17.9161+-0.1372 ? 17.9169+-0.4513 ? get-by-id-chain-from-try-block 19.6722+-0.1365 ! 20.0253+-0.0668 ! definitely 1.0180x slower get-by-id-check-structure-elimination 15.0345+-0.1165 15.0129+-0.0650 get-by-id-proto-or-self 50.0388+-2.2341 49.4788+-1.4120 might be 1.0113x faster get-by-id-quadmorphic-check-structure-elimination-simple 8.4809+-0.0630 ? 8.5191+-0.0359 ? get-by-id-self-or-proto 50.9825+-1.2637 49.2923+-0.8574 might be 1.0343x faster get-by-val-out-of-bounds 11.9576+-0.2027 11.9283+-0.1083 get_callee_monomorphic 7.0100+-0.1343 6.8885+-0.1011 might be 1.0176x faster get_callee_polymorphic 10.3989+-0.1554 10.3543+-0.1695 getter-no-activation 13.8000+-0.0739 ? 13.8722+-0.1722 ? getter-richards 267.9701+-2.7306 ? 273.0392+-3.1261 ? might be 1.0189x slower getter 15.1411+-0.0796 ? 15.1647+-0.0826 ? global-var-const-infer-fire-from-opt 3.0994+-0.3742 ? 3.1920+-0.2459 ? might be 1.0299x slower global-var-const-infer 2.3979+-0.0460 2.3970+-0.0668 HashMap-put-get-iterate-keys 76.5017+-0.9554 76.1044+-1.0110 HashMap-put-get-iterate 75.8674+-0.5097 75.4397+-0.8793 HashMap-string-put-get-iterate 71.4384+-0.7470 71.3312+-0.9392 hoist-make-rope 33.2646+-1.7834 32.4360+-3.3899 might be 1.0255x faster hoist-poly-check-structure-effectful-loop 14.4287+-0.1482 ? 14.4838+-0.2783 ? hoist-poly-check-structure 10.8219+-0.2709 10.6787+-0.0578 might be 1.0134x faster imul-double-only 23.9904+-2.4356 ^ 21.3295+-0.1705 ^ definitely 1.1247x faster imul-int-only 27.4099+-1.1416 27.2009+-0.5331 imul-mixed 21.8000+-0.2002 ? 22.1077+-0.9228 ? might be 1.0141x slower in-four-cases 60.2956+-0.1717 ? 60.4297+-0.1220 ? in-one-case-false 28.9259+-1.3318 28.4379+-0.3937 might be 1.0172x faster in-one-case-true 28.9437+-1.2913 28.2461+-0.1050 might be 1.0247x faster in-two-cases 29.4427+-0.0478 ^ 29.1007+-0.0755 ^ definitely 1.0118x faster indexed-properties-in-objects 8.3516+-0.0951 ? 8.3780+-0.0348 ? infer-closure-const-then-mov-no-inline 11.6923+-0.0565 ? 11.8330+-0.0932 ? might be 1.0120x slower infer-closure-const-then-mov 57.8680+-0.8780 57.2691+-0.2509 might be 1.0105x faster infer-closure-const-then-put-to-scope-no-inline 40.4451+-0.1807 40.3698+-0.1736 infer-closure-const-then-put-to-scope 66.5392+-1.5651 66.0340+-0.3896 infer-closure-const-then-reenter-no-inline 195.8131+-0.3759 ? 195.9125+-0.4343 ? infer-closure-const-then-reenter 67.1307+-1.2089 66.6642+-1.0258 infer-constant-global-property 90.0964+-0.1499 ? 90.5408+-1.3832 ? infer-constant-property 7.7470+-0.0667 ? 7.7537+-0.0142 ? infer-one-time-closure-ten-vars 35.1518+-0.2975 ? 35.2921+-0.0877 ? infer-one-time-closure-two-vars 34.2609+-0.0393 34.2204+-0.0929 infer-one-time-closure 33.9464+-0.2414 ? 34.0379+-0.2428 ? infer-one-time-deep-closure 60.4379+-0.3067 ? 61.0626+-1.2542 ? might be 1.0103x slower inline-arguments-access 11.6501+-0.1811 11.5446+-0.1533 inline-arguments-aliased-access 11.6898+-0.3650 11.6298+-0.2133 inline-arguments-local-escape 11.5908+-0.2394 ? 11.6827+-0.2759 ? inline-get-scoped-var 13.7388+-0.2763 13.5427+-0.1285 might be 1.0145x faster inlined-put-by-id-transition 28.7412+-1.3737 28.5433+-1.7657 int-or-other-abs-then-get-by-val 13.6032+-0.2948 13.5238+-0.0243 int-or-other-abs-zero-then-get-by-val 51.1622+-0.2671 ^ 50.4635+-0.3243 ^ definitely 1.0138x faster int-or-other-add-then-get-by-val 12.4114+-0.2828 ? 12.4683+-0.0692 ? int-or-other-add 15.2410+-0.1027 ? 15.3905+-0.3374 ? int-or-other-div-then-get-by-val 12.3795+-0.0346 12.3244+-0.0358 int-or-other-max-then-get-by-val 12.4672+-0.0809 ? 12.5608+-0.1893 ? int-or-other-min-then-get-by-val 12.8033+-0.0938 12.7994+-0.0370 int-or-other-mod-then-get-by-val 11.4681+-0.1165 ? 11.7581+-0.4203 ? might be 1.0253x slower int-or-other-mul-then-get-by-val 11.5080+-0.0802 ? 11.5335+-0.0582 ? int-or-other-neg-then-get-by-val 12.8645+-0.0511 12.8332+-0.0876 int-or-other-neg-zero-then-get-by-val 51.6731+-0.1948 ! 53.6154+-0.7744 ! definitely 1.0376x slower int-or-other-sub-then-get-by-val 13.0435+-0.1024 ? 13.1975+-0.1462 ? might be 1.0118x slower int-or-other-sub 10.2081+-0.0801 ? 10.2421+-0.0711 ? int-overflow-local 12.8851+-0.1616 12.8139+-0.2362 Int16Array-alloc-long-lived 135.9182+-0.3270 ? 136.3630+-0.9432 ? Int16Array-bubble-sort-with-byteLength 58.9623+-1.7533 ? 60.2675+-0.2316 ? might be 1.0221x slower Int16Array-bubble-sort 57.5298+-0.2604 ? 58.1921+-1.0643 ? might be 1.0115x slower Int16Array-load-int-mul 4.3961+-0.0267 ? 4.4248+-0.0522 ? Int16Array-to-Int32Array-set 152.4517+-0.2189 ! 164.9148+-0.1712 ! definitely 1.0818x slower Int32Array-alloc-large 47.2921+-0.5193 46.6580+-0.5149 might be 1.0136x faster Int32Array-alloc-long-lived 147.5621+-0.3060 ? 148.0221+-0.8888 ? Int32Array-alloc 8.0203+-0.1220 ? 8.1903+-0.3951 ? might be 1.0212x slower Int32Array-Int8Array-view-alloc 19.8201+-0.5111 ? 19.8759+-0.2788 ? int52-spill 18.2853+-0.4403 18.1938+-0.1116 Int8Array-alloc-long-lived 123.7491+-0.8435 ? 124.0025+-0.5760 ? Int8Array-load-with-byteLength 9.6685+-0.0616 ? 9.6951+-0.0367 ? Int8Array-load 9.8639+-0.3912 9.7605+-0.1023 might be 1.0106x faster integer-divide 33.0208+-0.1981 ? 33.0500+-0.4051 ? integer-modulo 6.1027+-0.1733 5.9552+-0.2416 might be 1.0248x faster large-int-captured 12.1128+-0.2747 11.8653+-0.1364 might be 1.0209x faster large-int-neg 48.7351+-0.1619 ? 49.1566+-1.3577 ? large-int 44.4617+-0.1576 ? 44.5871+-0.2475 ? logical-not 12.9229+-0.0361 ! 13.1654+-0.1450 ! definitely 1.0188x slower lots-of-fields 36.9848+-0.3840 ^ 36.3975+-0.1834 ^ definitely 1.0161x faster make-indexed-storage 8.9414+-0.2396 8.8816+-0.2263 make-rope-cse 10.8508+-0.3164 10.7957+-0.2175 marsaglia-larger-ints 116.3401+-0.9307 116.0645+-0.3253 marsaglia-osr-entry 66.2720+-0.8914 65.8291+-0.3552 max-boolean 7.3114+-0.0688 7.2548+-0.0317 method-on-number 49.9460+-0.1181 ! 51.4511+-0.3396 ! definitely 1.0301x slower min-boolean 7.2399+-0.0522 ? 7.3323+-0.0764 ? might be 1.0128x slower minus-boolean-double 9.1364+-0.0442 ? 9.2869+-0.3683 ? might be 1.0165x slower minus-boolean 6.7251+-0.0814 ? 6.7642+-0.0818 ? misc-strict-eq 115.6286+-8.1606 109.9266+-0.9909 might be 1.0519x faster mod-boolean-double 31.7781+-0.0524 ? 31.9400+-0.2997 ? mod-boolean 22.6789+-0.0964 22.6306+-0.0995 mul-boolean-double 10.9664+-0.4122 10.8712+-0.1407 mul-boolean 8.2827+-0.0484 ? 8.3007+-0.0395 ? neg-boolean 9.3094+-0.2533 9.1842+-0.0506 might be 1.0136x faster negative-zero-divide 1.1173+-0.0343 1.0994+-0.0397 might be 1.0162x faster negative-zero-modulo 1.0922+-0.0395 ? 1.1011+-0.0267 ? negative-zero-negate 1.0473+-0.0252 1.0264+-0.0646 might be 1.0203x faster nested-function-parsing 105.7433+-0.8008 ? 106.1260+-0.2793 ? new-array-buffer-dead 264.2049+-1.1614 ? 265.0650+-2.3259 ? new-array-buffer-push 17.0548+-0.1825 17.0049+-0.4835 new-array-dead 49.3835+-0.6031 48.7193+-0.5683 might be 1.0136x faster new-array-push 11.0400+-0.5696 10.6129+-0.3324 might be 1.0402x faster no-inline-constructor 294.4546+-0.6961 294.1088+-0.8979 number-test 8.7254+-0.0265 8.6595+-0.0554 object-closure-call 16.2690+-0.1582 16.1757+-0.0454 object-test 9.2719+-0.1455 9.1250+-0.0301 might be 1.0161x faster obvious-sink-pathology-taken 321.0143+-1.2035 ? 323.3907+-4.5582 ? obvious-sink-pathology 296.0666+-1.3152 295.9920+-3.0555 obviously-elidable-new-object 88.5094+-0.3127 ? 89.2810+-1.0037 ? plus-boolean-arith 7.2931+-0.0341 ^ 7.2242+-0.0315 ^ definitely 1.0095x faster plus-boolean-double 9.1996+-0.0400 ? 9.2386+-0.0506 ? plus-boolean 6.9266+-0.0457 6.8630+-0.0591 poly-chain-access-different-prototypes-simple 9.3943+-0.1587 ? 9.4539+-0.0816 ? poly-chain-access-different-prototypes 7.5176+-0.0424 ? 7.5404+-0.0504 ? poly-chain-access-simpler 9.4884+-0.0541 ? 9.4907+-0.1147 ? poly-chain-access 7.4156+-0.0791 ? 7.4586+-0.0593 ? poly-stricteq 179.6989+-0.1857 ! 182.3080+-0.2917 ! definitely 1.0145x slower polymorphic-array-call 3.8124+-0.1113 ? 3.8146+-0.0829 ? polymorphic-get-by-id 8.9845+-0.0540 ? 9.0819+-0.0830 ? might be 1.0108x slower polymorphic-put-by-id 84.2749+-1.4661 83.2251+-1.7442 might be 1.0126x faster polymorphic-structure 43.8951+-0.0758 43.8202+-0.0836 polyvariant-monomorphic-get-by-id 24.5911+-0.0823 24.5141+-0.1548 proto-getter-access 28.3467+-0.3269 ? 28.4851+-0.2582 ? put-by-id-replace-and-transition 23.1250+-0.2727 ? 23.5296+-1.3504 ? might be 1.0175x slower put-by-id-slightly-polymorphic 8.4618+-0.1427 8.4038+-0.1244 put-by-id 30.0135+-0.3198 29.9806+-0.4333 put-by-val-direct 1.4324+-0.0167 ? 1.4338+-0.0769 ? put-by-val-large-index-blank-indexing-type 15.7154+-0.2938 15.4337+-0.0926 might be 1.0182x faster put-by-val-machine-int 7.6047+-0.0977 ? 7.6169+-0.0393 ? rare-osr-exit-on-local 43.4412+-0.3447 ? 43.6281+-0.3752 ? register-pressure-from-osr 63.5993+-0.0608 ? 63.6130+-0.1285 ? setter 14.7920+-0.0802 ? 14.8224+-0.0819 ? simple-activation-demo 74.4618+-0.0970 ^ 73.4409+-0.1715 ^ definitely 1.0139x faster simple-getter-access 36.9210+-0.4142 ? 37.0903+-0.3159 ? simple-poly-call-nested 23.0267+-0.0722 ? 23.0742+-0.3014 ? simple-poly-call 3.9438+-0.0823 ? 3.9850+-0.0412 ? might be 1.0104x slower sin-boolean 55.2064+-0.5721 54.2591+-0.7384 might be 1.0175x faster singleton-scope 203.2908+-0.2872 ? 203.4205+-0.6000 ? sink-function 29.7449+-0.7619 ? 30.4408+-0.1972 ? might be 1.0234x slower sink-huge-activation 123.0638+-1.1308 ^ 54.2304+-0.9366 ^ definitely 2.2693x faster sinkable-new-object-dag 184.7625+-1.0179 184.4036+-1.0183 sinkable-new-object-taken 143.8718+-6.0718 ? 147.5629+-0.9146 ? might be 1.0257x slower sinkable-new-object 100.1865+-0.5050 99.7485+-1.1617 slow-array-profile-convergence 8.4369+-0.1111 ? 8.4779+-0.2329 ? slow-convergence 8.2096+-0.0654 ? 8.3198+-0.1674 ? might be 1.0134x slower sorting-benchmark 68.7975+-0.4356 ? 69.1812+-0.3512 ? sparse-conditional 3.5444+-0.0481 3.4974+-0.0654 might be 1.0134x faster splice-to-remove 48.5801+-1.6886 48.1400+-0.3261 string-char-code-at 50.0061+-0.6567 ? 50.9496+-1.9182 ? might be 1.0189x slower string-concat-object 6.3930+-0.0818 ? 6.4228+-0.0654 ? string-concat-pair-object 6.2679+-0.0899 6.2014+-0.1183 might be 1.0107x faster string-concat-pair-simple 28.8054+-0.3988 ? 28.8437+-0.2365 ? string-concat-simple 30.0162+-0.3486 29.9775+-0.2836 string-cons-repeat 19.4403+-0.1311 ? 19.4470+-0.2547 ? string-cons-tower 19.9930+-0.1673 ? 20.0734+-0.1724 ? string-equality 51.1470+-0.2283 51.0605+-0.2516 string-get-by-val-big-char 20.1984+-0.1497 20.0289+-0.1419 string-get-by-val-out-of-bounds-insane 10.5433+-0.0545 ? 10.5955+-0.1090 ? string-get-by-val-out-of-bounds 15.3539+-0.0566 15.3385+-0.0690 string-get-by-val 9.8325+-0.1003 9.7847+-0.0458 string-hash 6.0237+-0.0391 ? 6.1511+-0.2674 ? might be 1.0211x slower string-long-ident-equality 44.9926+-0.7027 44.7404+-0.5588 string-out-of-bounds 42.5635+-0.0825 ? 42.6453+-0.1747 ? string-repeat-arith 94.1613+-1.4568 ? 95.4966+-1.0622 ? might be 1.0142x slower string-sub 186.9157+-1.3190 ? 187.3490+-1.8970 ? string-test 8.5170+-0.0584 8.4194+-0.0736 might be 1.0116x faster string-var-equality 93.3132+-0.1071 ^ 90.4244+-0.1571 ^ definitely 1.0319x faster structure-hoist-over-transitions 7.0398+-0.2649 ? 7.1287+-0.1115 ? might be 1.0126x slower substring-concat-weird 110.9452+-2.3532 ? 111.4346+-0.7395 ? substring-concat 115.5950+-0.9632 ? 116.6056+-0.3403 ? substring 130.4111+-0.1561 ! 132.1442+-0.2143 ! definitely 1.0133x slower switch-char-constant 7.8115+-0.0527 ? 7.8312+-0.0451 ? switch-char 19.2902+-0.1192 ^ 17.9503+-0.1860 ^ definitely 1.0746x faster switch-constant 20.9967+-0.6714 20.9110+-0.6290 switch-string-basic-big-var 43.8611+-0.1310 ! 44.2351+-0.1264 ! definitely 1.0085x slower switch-string-basic-big 42.1224+-1.2674 41.6464+-0.3607 might be 1.0114x faster switch-string-basic-var 42.1107+-0.1228 ? 42.3090+-0.0850 ? switch-string-basic 39.5096+-0.5287 ? 40.1369+-1.2311 ? might be 1.0159x slower switch-string-big-length-tower-var 59.1930+-0.1165 ! 64.7406+-0.0607 ! definitely 1.0937x slower switch-string-length-tower-var 44.9130+-0.1733 ! 47.9149+-0.0601 ! definitely 1.0668x slower switch-string-length-tower 38.1860+-0.1352 38.1499+-0.1041 switch-string-short 37.7227+-0.3523 37.6655+-0.1381 switch 33.3985+-0.2190 ? 33.5409+-0.1760 ? tear-off-arguments-simple 9.1493+-0.1825 ? 9.2774+-0.2868 ? might be 1.0140x slower tear-off-arguments 12.4542+-0.1781 12.3560+-0.2337 temporal-structure 35.8898+-0.1797 35.8828+-0.1177 to-int32-boolean 40.1351+-0.0609 ? 40.1740+-0.0966 ? try-catch-get-by-val-cloned-arguments 40.9102+-1.9425 40.0435+-0.4453 might be 1.0216x faster try-catch-get-by-val-direct-arguments 17.5958+-0.1410 ? 17.6675+-0.1267 ? try-catch-get-by-val-scoped-arguments 20.7968+-0.1145 ? 20.9679+-0.4513 ? typed-array-get-set-by-val-profiling 99.5628+-1.5471 99.2157+-1.4219 undefined-property-access 1074.4853+-3.7086 1071.1611+-2.2087 undefined-test 8.9370+-0.0487 8.8221+-0.1301 might be 1.0130x faster unprofiled-licm 64.8498+-0.0960 ? 65.3367+-0.7200 ? varargs-call 44.0732+-0.3173 ? 44.8562+-1.9066 ? might be 1.0178x slower varargs-construct-inline 57.9690+-0.5250 ? 58.2108+-0.4130 ? varargs-construct 92.6334+-0.5716 92.4602+-0.4416 varargs-inline 29.0239+-0.1350 ? 29.0962+-0.1104 ? varargs-strict-mode 32.8340+-0.1008 ? 32.8591+-0.0862 ? varargs 32.8878+-0.0681 32.8826+-0.0509 weird-inlining-const-prop 6.3550+-0.3409 ? 6.4132+-0.2528 ? <geometric> 24.7422+-0.0717 ? 24.7579+-0.0357 ? might be 1.0006x slower Baseline SinkCreateActivation AsmBench: bigfib.cpp 1457.2151+-4.6330 ? 1460.1446+-4.1808 ? cray.c 1282.9488+-4.9647 1279.8468+-6.7348 dry.c 1513.8826+-2.3240 1496.0722+-39.7165 might be 1.0119x faster FloatMM.c 2176.4851+-3.2265 ? 2178.0837+-2.4934 ? gcc-loops.cpp 12749.4106+-61.9160 ? 12761.5954+-35.8184 ? n-body.c 2986.6520+-3.5163 ? 2988.5298+-3.1884 ? Quicksort.c 1275.7349+-15.8471 ? 1285.2440+-2.8445 ? stepanov_container.cpp 11398.1800+-59.5739 11386.5594+-25.4641 Towers.c 771.6058+-1.3150 ? 771.8465+-1.4953 ? <geometric> 2398.9638+-4.6744 2398.0603+-7.6695 might be 1.0004x faster Baseline SinkCreateActivation CompressionBench: huffman 1099.5950+-4.7945 1096.7447+-7.2399 arithmetic-simple 1196.9718+-5.3095 ^ 1180.8057+-0.6146 ^ definitely 1.0137x faster arithmetic-precise 892.5842+-4.2372 889.7998+-3.1880 arithmetic-complex-precise 886.0932+-4.1485 880.5936+-2.6883 arithmetic-precise-order-0 1262.0122+-11.2782 1258.8899+-12.2288 arithmetic-precise-order-1 975.6801+-6.4488 972.4573+-4.5266 arithmetic-precise-order-2 1106.2924+-7.7605 1105.5647+-6.3905 arithmetic-simple-order-1 1260.6795+-1.8141 1260.2292+-2.5709 arithmetic-simple-order-2 1426.7262+-2.8138 ? 1429.3348+-5.0903 ? lz-string 907.3435+-69.7552 888.7523+-5.3549 might be 1.0209x faster <geometric> 1087.3129+-9.6442 1081.9614+-1.4801 might be 1.0049x faster Baseline SinkCreateActivation Geomean of preferred means: <scaled-result> 188.4836+-0.2607 188.4000+-0.3730 might be 1.0004x faster
Smaller speed-up than what I would have expected. But, I'll take 4% on Octane/earley. :-)
(In reply to comment #3) > Smaller speed-up than what I would have expected. But, I'll take 4% on > Octane/earley. :-) I believe the original earley slow-down from removing bytecode activation sinking was on the order of 30%. It's probably worth investigating why this patch doesn't win bigger.
(In reply to comment #4) > (In reply to comment #3) > > Smaller speed-up than what I would have expected. But, I'll take 4% on > > Octane/earley. :-) > > I believe the original earley slow-down from removing bytecode activation > sinking was on the order of 30%. It's probably worth investigating why this > patch doesn't win bigger. The megapatch also made activations a *lot* cheaper to allocate. We should check where this patch puts us relative to where we were before the original earley slow-down.
> We should check where this patch puts us relative to where we were before > the original earley slow-down. Good idea. Should be doable with a spade build or a webkit nightly.
Created attachment 252123 [details] Remove spurious assertion
Created attachment 252344 [details] Patch
Attachment 252344 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:842: 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.
Comment on attachment 252344 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=252344&action=review > Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:-576 > - ASSERT(target->isPhantomObjectAllocation()); Maybe assert that it's isPhantomAllocation()?
Comment on attachment 252344 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=252344&action=review >> Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:-576 >> - ASSERT(target->isPhantomObjectAllocation()); > > Maybe assert that it's isPhantomAllocation()? That would make sense, I will add that before landing.
Committed r183812: <http://trac.webkit.org/changeset/183812>
This looks pretty assert-y on debug bots: https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK1%20(Tests)/r183813%20(4375)/results.html Example stack: Thread 19 Crashed:: FTL Worklist Worker Thread 0 com.apple.JavaScriptCore 0x000000010fefa957 WTFCrash + 39 1 com.apple.JavaScriptCore 0x000000010f6b6db5 JSC::DFG::Node::objectMaterializationData() + 69 2 com.apple.JavaScriptCore 0x000000010f6b33e3 JSC::DFG::ObjectAllocationSinkingPhase::populateMaterialize(JSC::DFG::BasicBlock*, JSC::DFG::Node*, JSC::DFG::Node*) + 1043 3 com.apple.JavaScriptCore 0x000000010f6b1b75 JSC::DFG::ObjectAllocationSinkingPhase::promoteSunkenFields() + 3413 4 com.apple.JavaScriptCore 0x000000010f6adc8c JSC::DFG::ObjectAllocationSinkingPhase::performSinking() + 428 5 com.apple.JavaScriptCore 0x000000010f6ada31 JSC::DFG::ObjectAllocationSinkingPhase::run() + 145 6 com.apple.JavaScriptCore 0x000000010f6ac365 bool JSC::DFG::runAndLog<JSC::DFG::ObjectAllocationSinkingPhase>(JSC::DFG::ObjectAllocationSinkingPhase&) + 21 7 com.apple.JavaScriptCore 0x000000010f6ac2ee bool JSC::DFG::runPhase<JSC::DFG::ObjectAllocationSinkingPhase>(JSC::DFG::Graph&) + 46 8 com.apple.JavaScriptCore 0x000000010f6ac2a8 JSC::DFG::performObjectAllocationSinking(JSC::DFG::Graph&) + 40 9 com.apple.JavaScriptCore 0x000000010f840c1a JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&) + 4602 10 com.apple.JavaScriptCore 0x000000010f83f6a1 JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&, JSC::DFG::ThreadData*) + 417 11 com.apple.JavaScriptCore 0x000000010f90b230 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*) + 720 12 com.apple.JavaScriptCore 0x000000010f909814 JSC::DFG::Worklist::threadFunction(void*) + 36 13 com.apple.JavaScriptCore 0x000000010ff512a9 WTF::createThread(void (*)(void*), void*, char const*)::$_0::operator()() const + 25 14 com.apple.JavaScriptCore 0x000000010ff5127c std::__1::__function::__func<WTF::createThread(void (*)(void*), void*, char const*)::$_0, std::__1::allocator<WTF::createThread(void (*)(void*), void*, char const*)::$_0>, void ()>::operator()() + 60 15 com.apple.JavaScriptCore 0x000000010fa2ab7a std::__1::function<void ()>::operator()() const + 26 16 com.apple.JavaScriptCore 0x000000010ff500ce WTF::threadEntryPoint(void*) + 158 17 com.apple.JavaScriptCore 0x000000010ff51891 WTF::wtfThreadEntryPoint(void*) + 289 18 libsystem_pthread.dylib 0x00007fff8fd40268 _pthread_body + 131 19 libsystem_pthread.dylib 0x00007fff8fd401e5 _pthread_start + 176 20 libsystem_pthread.dylib 0x00007fff8fd3e41d thread_start + 13
(In reply to comment #13) > This looks pretty assert-y on debug bots: > > https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK1%20(Tests)/ > r183813%20(4375)/results.html > > Example stack: > > Thread 19 Crashed:: FTL Worklist Worker Thread > 0 com.apple.JavaScriptCore 0x000000010fefa957 WTFCrash + 39 > 1 com.apple.JavaScriptCore 0x000000010f6b6db5 > JSC::DFG::Node::objectMaterializationData() + 69 > 2 com.apple.JavaScriptCore 0x000000010f6b33e3 > JSC::DFG::ObjectAllocationSinkingPhase::populateMaterialize(JSC::DFG:: > BasicBlock*, JSC::DFG::Node*, JSC::DFG::Node*) + 1043 > 3 com.apple.JavaScriptCore 0x000000010f6b1b75 > JSC::DFG::ObjectAllocationSinkingPhase::promoteSunkenFields() + 3413 > 4 com.apple.JavaScriptCore 0x000000010f6adc8c > JSC::DFG::ObjectAllocationSinkingPhase::performSinking() + 428 > 5 com.apple.JavaScriptCore 0x000000010f6ada31 > JSC::DFG::ObjectAllocationSinkingPhase::run() + 145 > 6 com.apple.JavaScriptCore 0x000000010f6ac365 bool > JSC::DFG::runAndLog<JSC::DFG::ObjectAllocationSinkingPhase>(JSC::DFG:: > ObjectAllocationSinkingPhase&) + 21 > 7 com.apple.JavaScriptCore 0x000000010f6ac2ee bool > JSC::DFG::runPhase<JSC::DFG::ObjectAllocationSinkingPhase>(JSC::DFG::Graph&) > + 46 > 8 com.apple.JavaScriptCore 0x000000010f6ac2a8 > JSC::DFG::performObjectAllocationSinking(JSC::DFG::Graph&) + 40 > 9 com.apple.JavaScriptCore 0x000000010f840c1a > JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&) + 4602 > 10 com.apple.JavaScriptCore 0x000000010f83f6a1 > JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&, > JSC::DFG::ThreadData*) + 417 > 11 com.apple.JavaScriptCore 0x000000010f90b230 > JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*) + 720 > 12 com.apple.JavaScriptCore 0x000000010f909814 > JSC::DFG::Worklist::threadFunction(void*) + 36 > 13 com.apple.JavaScriptCore 0x000000010ff512a9 WTF::createThread(void > (*)(void*), void*, char const*)::$_0::operator()() const + 25 > 14 com.apple.JavaScriptCore 0x000000010ff5127c > std::__1::__function::__func<WTF::createThread(void (*)(void*), void*, char > const*)::$_0, std::__1::allocator<WTF::createThread(void (*)(void*), void*, > char const*)::$_0>, void ()>::operator()() + 60 > 15 com.apple.JavaScriptCore 0x000000010fa2ab7a > std::__1::function<void ()>::operator()() const + 26 > 16 com.apple.JavaScriptCore 0x000000010ff500ce > WTF::threadEntryPoint(void*) + 158 > 17 com.apple.JavaScriptCore 0x000000010ff51891 > WTF::wtfThreadEntryPoint(void*) + 289 > 18 libsystem_pthread.dylib 0x00007fff8fd40268 _pthread_body + 131 > 19 libsystem_pthread.dylib 0x00007fff8fd401e5 _pthread_start + 176 > 20 libsystem_pthread.dylib 0x00007fff8fd3e41d thread_start + 13 Yeah, this seems to be due to MaterializeCreateActivation not being treated as having materialization data by DFG::Node::hasObjectMaterializationData(), thus triggering an assertion failure in DFG::Node::objectMaterializationData(). This works in releases builds because the materialization data is actually present. I remember fixing this due to assertions failures locally, but I apparently lost that change somewhere along the road.
(In reply to comment #14) > (In reply to comment #13) > > This looks pretty assert-y on debug bots: > > > > https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK1%20(Tests)/ > > r183813%20(4375)/results.html > > > > Example stack: > > > > Thread 19 Crashed:: FTL Worklist Worker Thread > > 0 com.apple.JavaScriptCore 0x000000010fefa957 WTFCrash + 39 > > 1 com.apple.JavaScriptCore 0x000000010f6b6db5 > > JSC::DFG::Node::objectMaterializationData() + 69 > > 2 com.apple.JavaScriptCore 0x000000010f6b33e3 > > JSC::DFG::ObjectAllocationSinkingPhase::populateMaterialize(JSC::DFG:: > > BasicBlock*, JSC::DFG::Node*, JSC::DFG::Node*) + 1043 > > 3 com.apple.JavaScriptCore 0x000000010f6b1b75 > > JSC::DFG::ObjectAllocationSinkingPhase::promoteSunkenFields() + 3413 > > 4 com.apple.JavaScriptCore 0x000000010f6adc8c > > JSC::DFG::ObjectAllocationSinkingPhase::performSinking() + 428 > > 5 com.apple.JavaScriptCore 0x000000010f6ada31 > > JSC::DFG::ObjectAllocationSinkingPhase::run() + 145 > > 6 com.apple.JavaScriptCore 0x000000010f6ac365 bool > > JSC::DFG::runAndLog<JSC::DFG::ObjectAllocationSinkingPhase>(JSC::DFG:: > > ObjectAllocationSinkingPhase&) + 21 > > 7 com.apple.JavaScriptCore 0x000000010f6ac2ee bool > > JSC::DFG::runPhase<JSC::DFG::ObjectAllocationSinkingPhase>(JSC::DFG::Graph&) > > + 46 > > 8 com.apple.JavaScriptCore 0x000000010f6ac2a8 > > JSC::DFG::performObjectAllocationSinking(JSC::DFG::Graph&) + 40 > > 9 com.apple.JavaScriptCore 0x000000010f840c1a > > JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&) + 4602 > > 10 com.apple.JavaScriptCore 0x000000010f83f6a1 > > JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&, > > JSC::DFG::ThreadData*) + 417 > > 11 com.apple.JavaScriptCore 0x000000010f90b230 > > JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*) + 720 > > 12 com.apple.JavaScriptCore 0x000000010f909814 > > JSC::DFG::Worklist::threadFunction(void*) + 36 > > 13 com.apple.JavaScriptCore 0x000000010ff512a9 WTF::createThread(void > > (*)(void*), void*, char const*)::$_0::operator()() const + 25 > > 14 com.apple.JavaScriptCore 0x000000010ff5127c > > std::__1::__function::__func<WTF::createThread(void (*)(void*), void*, char > > const*)::$_0, std::__1::allocator<WTF::createThread(void (*)(void*), void*, > > char const*)::$_0>, void ()>::operator()() + 60 > > 15 com.apple.JavaScriptCore 0x000000010fa2ab7a > > std::__1::function<void ()>::operator()() const + 26 > > 16 com.apple.JavaScriptCore 0x000000010ff500ce > > WTF::threadEntryPoint(void*) + 158 > > 17 com.apple.JavaScriptCore 0x000000010ff51891 > > WTF::wtfThreadEntryPoint(void*) + 289 > > 18 libsystem_pthread.dylib 0x00007fff8fd40268 _pthread_body + 131 > > 19 libsystem_pthread.dylib 0x00007fff8fd401e5 _pthread_start + 176 > > 20 libsystem_pthread.dylib 0x00007fff8fd3e41d thread_start + 13 > > Yeah, this seems to be due to MaterializeCreateActivation not being treated > as having materialization data by DFG::Node::hasObjectMaterializationData(), > thus triggering an assertion failure in > DFG::Node::objectMaterializationData(). This works in releases builds > because the materialization data is actually present. > I remember fixing this due to assertions failures locally, but I apparently > lost that change somewhere along the road. Fixed in r183819 <http://trac.webkit.org/changeset/183819>