RESOLVED FIXED Bug 128073
[ftlopt] AI should be able track structure sets larger than 1
https://bugs.webkit.org/show_bug.cgi?id=128073
Summary [ftlopt] AI should be able track structure sets larger than 1
Filip Pizlo
Reported 2014-02-02 10:25:18 PST
...
Attachments
the wrong way (7.81 KB, patch)
2014-05-22 14:41 PDT, Filip Pizlo
no flags
starting to look sensible (35.18 KB, patch)
2014-05-22 20:23 PDT, Filip Pizlo
no flags
more! (67.84 KB, patch)
2014-05-23 14:01 PDT, Filip Pizlo
no flags
a bit more. (77.99 KB, patch)
2014-05-28 19:03 PDT, Filip Pizlo
no flags
crashes on launch (97.18 KB, patch)
2014-05-28 20:45 PDT, Filip Pizlo
no flags
starting to work (111.58 KB, patch)
2014-05-29 15:09 PDT, Filip Pizlo
no flags
now it only fails thousands of tests (124.10 KB, patch)
2014-05-29 16:39 PDT, Filip Pizlo
no flags
less then a hundred failures (129.70 KB, patch)
2014-05-29 23:06 PDT, Filip Pizlo
no flags
using a slightly more complicated approach (139.14 KB, patch)
2014-05-30 14:35 PDT, Filip Pizlo
no flags
almost done (172.27 KB, patch)
2014-06-01 10:50 PDT, Filip Pizlo
no flags
almoster doner (190.41 KB, patch)
2014-06-01 11:36 PDT, Filip Pizlo
no flags
basically works (214.36 KB, patch)
2014-06-02 20:19 PDT, Filip Pizlo
no flags
it's faster (218.28 KB, patch)
2014-06-03 13:20 PDT, Filip Pizlo
no flags
and now, it's actually totally sound! (249.94 KB, patch)
2014-06-03 16:29 PDT, Filip Pizlo
no flags
the patch (255.72 KB, patch)
2014-06-03 19:58 PDT, Filip Pizlo
oliver: review+
Filip Pizlo
Comment 1 2014-05-22 14:41:26 PDT
Created attachment 231915 [details] the wrong way I think that the right way to do this is to have the DFG watch any watchable structure and then to have clobbering assume that you don't need to clobber watchable structures. Easy as pie.
Filip Pizlo
Comment 2 2014-05-22 14:41:55 PDT
Oh and here are the perf numbers of watching all watchable structures: Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, and AsmBench on oldmac (MacPro4,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/ftlopt/OpenSource/WebKitBuild/Release/jsc (r169210) "MoreWatchpoints" at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/jsc (r169210) Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. TipOfTree MoreWatchpoints SunSpider: 3d-cube 7.7771+-0.0765 ? 7.8234+-0.0980 ? 3d-morph 9.3914+-0.0579 ? 9.3939+-0.0894 ? 3d-raytrace 10.0005+-0.1363 ? 10.0189+-0.0705 ? access-binary-trees 2.8274+-0.0324 2.7395+-0.0799 might be 1.0321x faster access-fannkuch 9.3280+-0.2334 9.2397+-0.1727 access-nbody 4.7224+-0.0739 4.6570+-0.0072 might be 1.0140x faster access-nsieve 5.5432+-0.0947 5.4903+-0.0789 bitops-3bit-bits-in-byte 1.8588+-0.0146 1.8572+-0.0087 bitops-bits-in-byte 6.5026+-0.0657 ? 6.5251+-0.1344 ? bitops-bitwise-and 3.2026+-0.0715 3.1766+-0.0577 bitops-nsieve-bits 5.8017+-0.0236 ^ 5.7067+-0.0347 ^ definitely 1.0166x faster controlflow-recursive 2.8598+-0.0998 ? 2.9045+-0.0490 ? might be 1.0156x slower crypto-aes 6.2783+-0.0891 6.2756+-0.0356 crypto-md5 3.5803+-0.1423 3.4563+-0.0754 might be 1.0359x faster crypto-sha1 3.7611+-0.1029 3.7411+-0.0622 date-format-tofte 13.2462+-0.1423 ? 13.2799+-0.2038 ? date-format-xparb 9.9740+-0.2692 ? 10.2703+-0.1868 ? might be 1.0297x slower math-cordic 4.8072+-0.0929 4.7590+-0.0705 might be 1.0101x faster math-partial-sums 10.6381+-0.2241 10.4179+-0.0312 might be 1.0211x faster math-spectral-norm 3.0695+-0.0476 3.0588+-0.0250 regexp-dna 12.0284+-0.1739 ? 12.0312+-0.1050 ? string-base64 6.3721+-0.0758 ? 6.4257+-0.0831 ? string-fasta 10.3696+-0.2276 ? 10.4851+-0.2843 ? might be 1.0111x slower string-tagcloud 15.6822+-0.2678 ? 15.6900+-0.2550 ? string-unpack-code 32.6667+-0.9394 ? 33.0823+-0.7772 ? might be 1.0127x slower string-validate-input 7.6398+-0.1135 ? 7.6860+-0.0958 ? <arithmetic> * 8.0742+-0.0463 ? 8.0843+-0.0396 ? might be 1.0013x slower <geometric> 6.5635+-0.0314 6.5467+-0.0135 might be 1.0026x faster <harmonic> 5.4333+-0.0336 5.4043+-0.0100 might be 1.0054x faster TipOfTree MoreWatchpoints LongSpider: 3d-cube 1392.5235+-13.7862 ? 1399.5999+-36.3436 ? 3d-morph 2286.8144+-3.6939 ? 2303.5964+-50.0452 ? 3d-raytrace 1465.7306+-17.6457 ? 1476.8281+-42.8307 ? access-binary-trees 1673.0638+-10.5233 ? 1673.7282+-24.4042 ? access-fannkuch 531.7426+-18.5349 527.1615+-7.0910 access-nbody 1245.1110+-3.4118 ! 1264.6690+-8.2210 ! definitely 1.0157x slower access-nsieve 1640.3402+-28.3113 ? 1646.5381+-17.5246 ? bitops-3bit-bits-in-byte 60.1423+-1.6833 59.5509+-0.3792 bitops-bits-in-byte 398.1725+-6.7979 397.7773+-2.5917 bitops-nsieve-bits 1184.2798+-9.0461 1179.9860+-4.7959 controlflow-recursive 880.0491+-3.2549 ^ 869.0289+-2.4819 ^ definitely 1.0127x faster crypto-aes 1142.6767+-5.1522 1141.9144+-2.3591 crypto-md5 1083.0818+-11.1079 1080.2807+-2.9691 crypto-sha1 1190.7148+-8.5779 ! 1213.8315+-4.9607 ! definitely 1.0194x slower date-format-tofte 1178.0194+-13.8008 ? 1191.1342+-24.8269 ? might be 1.0111x slower date-format-xparb 1669.2515+-46.4507 ? 1721.0008+-24.0433 ? might be 1.0310x slower math-cordic 841.6890+-1.6275 ? 842.9717+-4.5294 ? math-partial-sums 1332.5089+-29.8564 ? 1335.7389+-4.2825 ? math-spectral-norm 1297.8143+-2.1156 1296.9032+-1.0592 string-base64 600.1566+-4.4973 598.4666+-2.8850 string-fasta 921.1930+-11.6825 ? 931.5115+-20.7722 ? might be 1.0112x slower string-tagcloud 395.8900+-2.4269 ! 401.2414+-2.5614 ! definitely 1.0135x slower <arithmetic> 1109.5894+-2.6131 ! 1116.0663+-3.6050 ! definitely 1.0058x slower <geometric> * 928.4002+-1.8726 ? 932.0723+-2.3276 ? might be 1.0040x slower <harmonic> 565.0984+-5.9059 563.9037+-2.0471 might be 1.0021x faster TipOfTree MoreWatchpoints V8Spider: crypto 85.3139+-0.7514 85.2372+-0.8758 deltablue 102.8488+-1.9532 102.7127+-0.7693 earley-boyer 70.5732+-0.7658 ? 70.7522+-0.6031 ? raytrace 44.3500+-1.1640 44.0350+-0.4654 regexp 106.7197+-1.8913 ? 107.8785+-3.9170 ? might be 1.0109x slower richards 105.5955+-1.2877 105.5417+-2.2585 splay 50.1009+-1.4837 49.8695+-1.3021 <arithmetic> 80.7860+-0.7444 ? 80.8609+-0.5874 ? might be 1.0009x slower <geometric> * 76.6146+-0.7517 76.5999+-0.5698 might be 1.0002x faster <harmonic> 72.1769+-0.8650 72.0692+-0.6004 might be 1.0015x faster TipOfTree MoreWatchpoints Octane and V8v7: encrypt 0.44408+-0.00079 0.44308+-0.00057 decrypt 8.07308+-0.01892 ? 8.09506+-0.07076 ? deltablue x2 0.43958+-0.00341 ? 0.43972+-0.00456 ? earley 0.95255+-0.00454 ? 0.96057+-0.00994 ? boyer 10.73367+-0.06255 10.64704+-0.08970 navier-stokes x2 7.73307+-0.03891 ? 7.76652+-0.04507 ? raytrace x2 2.88814+-0.03646 2.88010+-0.10274 regexp x2 33.35482+-0.28566 ? 33.54462+-0.60686 ? richards x2 0.23160+-0.00738 0.23102+-0.00940 splay x2 0.64467+-0.00324 0.63414+-0.00934 might be 1.0166x faster pdfjs x2 94.15011+-0.40260 ? 94.92090+-0.69038 ? mandreel x2 99.79389+-2.42707 ? 102.66708+-0.57945 ? might be 1.0288x slower gbemu x2 87.14594+-0.49203 ? 87.25374+-2.53782 ? closure 0.89295+-0.00343 ? 0.89574+-0.00351 ? jquery 10.88682+-0.02694 ! 11.00441+-0.05043 ! definitely 1.0108x slower box2d x2 28.34540+-0.98337 ^ 26.77438+-0.16349 ^ definitely 1.0587x faster zlib x2 776.30600+-45.72154 ? 790.63684+-39.93611 ? might be 1.0185x slower typescript x2 1251.28735+-13.61991 ? 1264.43412+-17.06716 ? might be 1.0105x slower V8v7: <arithmetic> 6.92419+-0.03956 ? 6.94612+-0.07113 ? might be 1.0032x slower <geometric> * 2.03652+-0.00917 2.03349+-0.01206 might be 1.0015x faster <harmonic> 0.76841+-0.00949 0.76574+-0.01221 might be 1.0035x faster Octane including V8v7: <arithmetic> 159.88748+-3.12515 ? 161.88041+-2.94088 ? might be 1.0125x slower <geometric> * 12.24100+-0.10515 ? 12.24498+-0.06011 ? might be 1.0003x slower <harmonic> 1.35300+-0.01584 1.34864+-0.02021 might be 1.0032x faster TipOfTree MoreWatchpoints Kraken: ai-astar 530.225+-2.260 ? 535.066+-14.375 ? audio-beat-detection 199.759+-0.816 ! 206.302+-1.222 ! definitely 1.0328x slower audio-dft 262.440+-1.998 ? 262.815+-3.080 ? audio-fft 116.362+-3.111 ! 122.707+-2.185 ! definitely 1.0545x slower audio-oscillator 380.180+-3.725 379.794+-0.939 imaging-darkroom 295.266+-1.255 ? 296.137+-1.336 ? imaging-desaturate 122.150+-0.211 ! 124.321+-0.221 ! definitely 1.0178x slower imaging-gaussian-blur 181.874+-8.021 178.747+-0.916 might be 1.0175x faster json-parse-financial 82.596+-0.425 ? 83.425+-1.044 ? might be 1.0100x slower json-stringify-tinderbox 102.493+-0.767 ? 103.041+-1.382 ? stanford-crypto-aes 94.528+-1.589 93.374+-1.203 might be 1.0124x faster stanford-crypto-ccm 90.347+-11.727 ? 98.094+-11.975 ? might be 1.0857x slower stanford-crypto-pbkdf2 244.941+-2.952 ? 248.928+-5.200 ? might be 1.0163x slower stanford-crypto-sha256-iterative 111.250+-0.751 109.933+-0.819 might be 1.0120x faster <arithmetic> * 201.029+-0.693 ? 203.049+-1.524 ? might be 1.0100x slower <geometric> 169.214+-1.375 ? 171.506+-1.682 ? might be 1.0135x slower <harmonic> 146.265+-1.961 ? 148.701+-2.103 ? might be 1.0167x slower TipOfTree MoreWatchpoints JSRegress: adapt-to-double-divide 20.5333+-0.1256 20.3048+-0.2575 might be 1.0113x faster aliased-arguments-getbyval 1.1356+-0.0083 ? 1.1419+-0.0252 ? allocate-big-object 3.6930+-0.0552 ? 3.7361+-0.2221 ? might be 1.0117x slower arity-mismatch-inlining 1.0171+-0.0081 ? 1.0253+-0.0040 ? array-access-polymorphic-structure 10.8464+-0.2078 ? 10.9752+-0.1368 ? might be 1.0119x slower array-nonarray-polymorhpic-access 63.0035+-0.2609 ? 63.1164+-0.2395 ? array-prototype-every 124.2277+-0.7453 ? 125.2723+-4.0609 ? array-prototype-forEach 125.8820+-5.9883 122.4917+-1.2804 might be 1.0277x faster array-prototype-map 149.6750+-1.9558 ? 150.1027+-3.1018 ? array-prototype-some 127.4970+-5.2922 124.0220+-1.3912 might be 1.0280x faster array-with-double-add 6.8075+-0.0920 ? 6.8321+-0.0953 ? array-with-double-increment 4.6938+-0.0713 4.6933+-0.0622 array-with-double-mul-add 7.7180+-0.1691 ? 7.7552+-0.1286 ? array-with-double-sum 4.9797+-0.0220 ? 5.0618+-0.0639 ? might be 1.0165x slower array-with-int32-add-sub 12.0926+-0.2850 11.8693+-0.1416 might be 1.0188x faster array-with-int32-or-double-sum 5.1465+-0.0861 5.1106+-0.0722 ArrayBuffer-DataView-alloc-large-long-lived 115.3361+-1.0193 ? 116.9484+-1.3693 ? might be 1.0140x slower ArrayBuffer-DataView-alloc-long-lived 32.2650+-0.5117 ? 32.9274+-0.9663 ? might be 1.0205x slower ArrayBuffer-Int32Array-byteOffset 5.3347+-0.1216 5.2607+-0.0220 might be 1.0141x faster ArrayBuffer-Int8Array-alloc-large-long-lived 121.1551+-1.3311 ? 123.3958+-3.5301 ? might be 1.0185x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 53.6058+-3.2151 52.7168+-1.1229 might be 1.0169x faster ArrayBuffer-Int8Array-alloc-long-lived 31.7171+-0.9334 ? 32.0137+-0.8772 ? ArrayBuffer-Int8Array-alloc 27.5731+-0.3854 ? 27.9642+-0.3072 ? might be 1.0142x slower asmjs_bool_bug 9.8872+-0.1698 9.8593+-0.1764 assign-custom-setter-polymorphic 4.8088+-0.0856 4.7750+-0.0313 assign-custom-setter 6.7212+-0.1015 6.7050+-0.0352 basic-set 16.2764+-0.4493 16.1560+-0.4746 big-int-mul 6.2260+-0.0299 ! 6.3670+-0.1085 ! definitely 1.0226x slower boolean-test 4.7665+-0.0480 ? 4.8164+-0.0913 ? might be 1.0105x slower branch-fold 5.2085+-0.0485 5.2044+-0.0555 by-val-generic 14.1506+-0.1118 ? 14.3477+-0.3354 ? might be 1.0139x slower call-spread-apply 21.6709+-0.4956 21.0075+-0.6559 might be 1.0316x faster call-spread-call 9.0597+-0.1121 8.9308+-0.1150 might be 1.0144x faster captured-assignments 0.5697+-0.0071 ? 0.5698+-0.0089 ? cast-int-to-double 12.7871+-0.0640 12.7342+-0.1065 cell-argument 11.0463+-0.2782 ? 11.0630+-0.1227 ? cfg-simplify 4.1772+-0.0683 4.1655+-0.0167 chain-getter-access 13.2966+-0.2700 ? 13.3060+-0.2649 ? cmpeq-obj-to-obj-other 13.3462+-0.2013 ? 13.8802+-0.8623 ? might be 1.0400x slower constant-test 8.8769+-0.1412 8.8630+-0.1121 DataView-custom-properties 122.8341+-1.8119 ? 124.9811+-1.8414 ? might be 1.0175x slower delay-tear-off-arguments-strictmode 3.6833+-0.0231 ? 3.6979+-0.0265 ? delete-a-few-properties-then-get-by-id 9.5176+-0.1033 ? 9.5208+-0.0895 ? destructuring-arguments 8.9106+-0.0502 ! 9.1007+-0.0879 ! definitely 1.0213x slower destructuring-swap 8.9639+-0.1945 ? 8.9794+-0.0992 ? direct-arguments-getbyval 1.1162+-0.0072 ? 1.1298+-0.0142 ? might be 1.0122x slower double-get-by-val-out-of-bounds 6.7505+-0.0922 ! 7.0553+-0.0492 ! definitely 1.0451x slower double-pollution-getbyval 11.3744+-0.1535 ? 11.4148+-0.2345 ? double-pollution-putbyoffset 6.2481+-0.1355 ? 6.3192+-0.1552 ? might be 1.0114x slower double-to-int32-typed-array-no-inline 3.0890+-0.1032 ? 3.1257+-0.0813 ? might be 1.0119x slower double-to-int32-typed-array 2.4830+-0.0381 ? 2.4949+-0.0804 ? double-to-uint32-typed-array-no-inline 3.1748+-0.0890 3.1329+-0.0722 might be 1.0134x faster double-to-uint32-typed-array 2.6480+-0.0427 2.6260+-0.0190 empty-string-plus-int 10.3037+-0.0647 ? 10.4934+-0.1908 ? might be 1.0184x slower emscripten-cube2hash 54.5830+-0.6695 ? 55.7453+-3.4793 ? might be 1.0213x slower external-arguments-getbyval 2.0540+-0.0063 ? 2.0717+-0.0166 ? external-arguments-putbyval 3.0029+-0.0288 ? 3.0055+-0.0263 ? fixed-typed-array-storage-var-index 1.5470+-0.0795 1.5250+-0.0253 might be 1.0144x faster fixed-typed-array-storage 1.1222+-0.0122 ? 1.1455+-0.0492 ? might be 1.0208x slower Float32Array-matrix-mult 8.2343+-0.3501 8.1945+-0.3354 Float32Array-to-Float64Array-set 87.7768+-1.7079 ? 89.1653+-1.4118 ? might be 1.0158x slower Float64Array-alloc-long-lived 102.2710+-1.4948 101.8018+-0.6038 Float64Array-to-Int16Array-set 114.2320+-0.7681 ? 114.6808+-0.5430 ? fold-double-to-int 20.1745+-0.3199 20.0468+-0.1923 for-of-iterate-array-entries 9.7022+-0.1376 9.4815+-0.2203 might be 1.0233x faster for-of-iterate-array-keys 3.6357+-0.0798 ? 3.6581+-0.0952 ? for-of-iterate-array-values 3.3033+-0.2071 3.2525+-0.0951 might be 1.0156x faster fround 24.2799+-0.2525 ? 24.3980+-0.4653 ? function-dot-apply 1.7457+-0.0130 ? 1.7573+-0.0283 ? function-test 5.0794+-0.1735 5.0329+-0.0605 function-with-eval 43.6060+-1.6963 43.5748+-1.3587 get-by-id-chain-from-try-block 8.1850+-0.2263 8.1650+-0.2759 get-by-id-proto-or-self 25.3110+-1.8492 24.5718+-0.5706 might be 1.0301x faster get-by-id-self-or-proto 26.2433+-1.5514 24.8328+-0.6605 might be 1.0568x faster get-by-val-out-of-bounds 6.9151+-0.3206 ? 7.0406+-0.1470 ? might be 1.0182x slower get_callee_monomorphic 5.4445+-0.1011 ? 5.4617+-0.0928 ? get_callee_polymorphic 4.9743+-0.0560 4.9473+-0.1023 getter 7.5754+-0.1113 7.4965+-0.0766 might be 1.0105x faster global-var-const-infer-fire-from-opt 1.2644+-0.0767 1.2576+-0.0330 global-var-const-infer 1.0667+-0.0753 1.0448+-0.0170 might be 1.0209x faster HashMap-put-get-iterate-keys 40.5096+-0.8652 39.7905+-0.4765 might be 1.0181x faster HashMap-put-get-iterate 39.3597+-0.2793 39.3303+-0.5803 HashMap-string-put-get-iterate 45.1345+-0.6831 ? 45.6181+-0.4372 ? might be 1.0107x slower imul-double-only 10.5515+-0.2282 ? 10.9026+-0.7362 ? might be 1.0333x slower imul-int-only 13.6208+-0.3945 13.5826+-0.1528 imul-mixed 9.6903+-0.1031 ? 10.1667+-0.6872 ? might be 1.0492x slower in-four-cases 23.0684+-0.2235 22.6930+-0.2248 might be 1.0165x faster in-one-case-false 12.7287+-0.2103 12.7166+-0.0481 in-one-case-true 12.8008+-0.0638 12.7302+-0.1011 in-two-cases 13.2018+-0.1093 13.1600+-0.0956 indexed-properties-in-objects 4.5079+-0.0856 4.5022+-0.1153 infer-closure-const-then-mov-no-inline 5.0676+-0.0421 ? 5.0782+-0.0148 ? infer-closure-const-then-mov 29.1510+-0.0669 ? 29.4385+-0.6469 ? infer-closure-const-then-put-to-scope-no-inline 17.7560+-0.3437 17.5952+-0.0387 infer-closure-const-then-put-to-scope 33.4961+-0.4327 33.1643+-0.0678 might be 1.0100x faster infer-closure-const-then-reenter-no-inline 77.2409+-0.2342 77.1890+-0.1659 infer-closure-const-then-reenter 33.4610+-0.4011 ? 37.2127+-6.3382 ? might be 1.1121x slower infer-one-time-closure-ten-vars 16.3922+-0.1322 16.3694+-0.1358 infer-one-time-closure-two-vars 15.6941+-0.1222 ? 15.7840+-0.2018 ? infer-one-time-closure 15.5685+-0.2210 ? 15.5730+-0.0987 ? infer-one-time-deep-closure 28.2675+-0.1738 ? 28.4586+-0.3574 ? inline-arguments-access 1.6444+-0.0295 ? 1.7155+-0.1245 ? might be 1.0432x slower inline-arguments-aliased-access 1.8289+-0.0650 1.8031+-0.0171 might be 1.0143x faster inline-arguments-local-escape 19.7581+-0.5007 19.7360+-0.3671 inline-get-scoped-var 7.5521+-0.1077 ? 7.5922+-0.0845 ? inlined-put-by-id-transition 15.4963+-0.4271 ? 16.0201+-0.3002 ? might be 1.0338x slower int-or-other-abs-then-get-by-val 9.8164+-0.0803 9.7895+-0.0794 int-or-other-abs-zero-then-get-by-val 33.5404+-0.6161 33.4929+-0.2412 int-or-other-add-then-get-by-val 11.0877+-0.0695 ? 11.1717+-0.0920 ? int-or-other-add 11.0020+-0.0305 ? 11.1131+-0.1666 ? might be 1.0101x slower int-or-other-div-then-get-by-val 6.8377+-0.0551 ? 6.8541+-0.1058 ? int-or-other-max-then-get-by-val 7.9169+-0.1548 ? 8.1359+-0.5495 ? might be 1.0277x slower int-or-other-min-then-get-by-val 7.5809+-0.0860 ? 7.5817+-0.0407 ? int-or-other-mod-then-get-by-val 6.6038+-0.0116 ? 6.6370+-0.0834 ? int-or-other-mul-then-get-by-val 6.8761+-0.0464 ? 6.9412+-0.0706 ? int-or-other-neg-then-get-by-val 8.5790+-0.1083 ? 8.6311+-0.1939 ? int-or-other-neg-zero-then-get-by-val 33.9577+-0.2122 33.8481+-0.0609 int-or-other-sub-then-get-by-val 11.5461+-0.1396 ? 11.5468+-0.0539 ? int-or-other-sub 9.9382+-0.1516 9.9151+-0.0864 int-overflow-local 6.6544+-0.0664 6.6519+-0.0608 Int16Array-alloc-long-lived 74.1479+-0.7807 73.1340+-0.8934 might be 1.0139x faster Int16Array-bubble-sort-with-byteLength 48.4777+-1.0134 48.2369+-0.2939 Int16Array-bubble-sort 47.5313+-0.1708 47.4182+-0.1796 Int16Array-load-int-mul 2.0968+-0.0293 ? 2.1041+-0.0304 ? Int16Array-to-Int32Array-set 88.6609+-1.5779 ? 88.8154+-1.0664 ? Int32Array-alloc-large 44.3022+-1.4194 43.2633+-1.9113 might be 1.0240x faster Int32Array-alloc-long-lived 81.7672+-0.9437 81.7547+-0.5648 Int32Array-alloc 4.8077+-0.0701 4.7721+-0.1318 Int32Array-Int8Array-view-alloc 15.0806+-0.0489 ! 15.5206+-0.3298 ! definitely 1.0292x slower int52-spill 12.0135+-0.2067 ? 12.1259+-0.1624 ? Int8Array-alloc-long-lived 67.8793+-0.6060 67.7196+-1.0159 Int8Array-load-with-byteLength 5.5367+-0.0862 5.4846+-0.0470 Int8Array-load 5.5559+-0.0736 5.4939+-0.0581 might be 1.0113x faster integer-divide 16.8934+-0.1104 ? 16.9394+-0.1017 ? integer-modulo 3.2019+-0.5093 ? 3.3615+-0.6251 ? might be 1.0498x slower large-int-captured 10.5197+-0.2275 ? 10.7220+-0.2269 ? might be 1.0192x slower large-int-neg 24.6471+-0.3766 24.2861+-0.4379 might be 1.0149x faster large-int 21.5225+-0.2429 21.2903+-0.2123 might be 1.0109x faster logical-not 6.8776+-0.1452 ? 6.9920+-0.1286 ? might be 1.0166x slower lots-of-fields 14.0198+-0.1852 ? 14.1880+-0.1834 ? might be 1.0120x slower make-indexed-storage 4.5131+-0.1558 ? 4.5777+-0.0976 ? might be 1.0143x slower make-rope-cse 6.2966+-0.1481 ? 6.4371+-0.3165 ? might be 1.0223x slower marsaglia-larger-ints 59.2677+-0.2892 ? 59.7434+-0.3567 ? marsaglia-osr-entry 31.1832+-0.3329 ? 31.5530+-0.6854 ? might be 1.0119x slower method-on-number 31.1452+-0.5554 30.9604+-0.4510 misc-strict-eq 58.5205+-2.2806 55.9806+-0.6744 might be 1.0454x faster negative-zero-divide 0.4526+-0.0035 0.4522+-0.0065 negative-zero-modulo 0.4561+-0.0121 0.4539+-0.0061 negative-zero-negate 0.4170+-0.0010 ? 0.4362+-0.0206 ? might be 1.0461x slower nested-function-parsing 49.2274+-0.3776 ? 49.2649+-0.1735 ? new-array-buffer-dead 4.0252+-0.0747 ? 4.0310+-0.0759 ? new-array-buffer-push 10.9611+-0.2143 ? 11.0247+-0.3392 ? new-array-dead 14.2517+-0.3055 14.2213+-0.1777 new-array-push 7.6506+-0.1209 ? 7.7250+-0.0949 ? number-test 4.7053+-0.0630 ? 4.7058+-0.0573 ? object-closure-call 8.7762+-0.0980 ? 8.8179+-0.1714 ? object-test 5.0815+-0.2077 4.9014+-0.0618 might be 1.0367x faster poly-stricteq 82.4983+-0.1684 ? 83.0643+-0.7154 ? polymorphic-array-call 2.2952+-0.0232 ? 2.3699+-0.1491 ? might be 1.0326x slower polymorphic-get-by-id 4.7668+-0.0489 ? 4.7733+-0.0432 ? polymorphic-put-by-id 68.4646+-14.9501 ? 97.9801+-30.5952 ? might be 1.4311x slower polymorphic-structure 30.6978+-0.7016 30.5213+-0.2114 polyvariant-monomorphic-get-by-id 13.4130+-0.1494 13.3973+-0.1811 proto-getter-access 13.2632+-0.5297 ? 13.3724+-0.2673 ? put-by-id 20.9181+-0.4509 ? 21.0691+-0.4068 ? put-by-val-large-index-blank-indexing-type 10.8980+-0.1888 ? 10.9673+-0.1398 ? put-by-val-machine-int 4.5601+-0.2307 ? 4.8675+-0.1557 ? might be 1.0674x slower rare-osr-exit-on-local 21.7821+-0.1125 21.5041+-0.2282 might be 1.0129x faster register-pressure-from-osr 31.3279+-0.2581 ? 31.5902+-0.3111 ? setter 20.3919+-0.0463 20.3894+-0.1465 simple-activation-demo 35.2197+-0.3730 ? 35.4728+-0.3429 ? simple-getter-access 17.2648+-0.3263 17.0821+-0.3085 might be 1.0107x faster slow-array-profile-convergence 4.5045+-0.2835 4.3393+-0.1965 might be 1.0381x faster slow-convergence 4.7700+-0.0526 ? 4.7861+-0.0743 ? sparse-conditional 1.5181+-0.0080 ? 1.5276+-0.0049 ? splice-to-remove 78.6892+-0.3188 ? 78.9272+-0.2438 ? string-char-code-at 25.5967+-0.1174 25.5961+-0.0976 string-concat-object 3.2482+-0.0904 ? 3.2895+-0.0917 ? might be 1.0127x slower string-concat-pair-object 3.1148+-0.0480 3.1123+-0.0283 string-concat-pair-simple 18.8750+-0.2633 18.8033+-0.4201 string-concat-simple 19.0921+-0.3003 19.0136+-0.3792 string-cons-repeat 11.9711+-0.0861 ? 12.0818+-0.1712 ? string-cons-tower 11.1866+-0.6729 11.0185+-0.1242 might be 1.0153x faster string-equality 44.2296+-0.2996 44.2172+-0.3182 string-get-by-val-big-char 14.8597+-0.2010 ^ 14.1451+-0.0896 ^ definitely 1.0505x faster string-get-by-val-out-of-bounds-insane 6.4963+-0.6378 6.2823+-0.0632 might be 1.0341x faster string-get-by-val-out-of-bounds 7.1814+-0.1000 ? 7.1861+-0.1005 ? string-get-by-val 5.5677+-0.0091 5.5545+-0.0059 string-hash 3.1042+-0.0442 ? 3.1047+-0.0451 ? string-long-ident-equality 39.9892+-0.9544 39.3463+-0.1359 might be 1.0163x faster string-repeat-arith 47.4873+-0.3796 ? 48.0150+-0.5409 ? might be 1.0111x slower string-sub 96.3682+-1.5010 ? 96.6788+-1.4193 ? string-test 4.5493+-0.0528 ! 4.7128+-0.0901 ! definitely 1.0359x slower string-var-equality 71.6147+-0.3552 ? 73.0184+-1.7446 ? might be 1.0196x slower structure-hoist-over-transitions 3.9513+-0.1008 3.9327+-0.0269 switch-char-constant 3.6322+-0.0182 ? 3.6571+-0.0458 ? switch-char 9.2320+-0.0793 ? 9.3035+-0.1236 ? switch-constant 11.6372+-0.1401 ? 11.8248+-0.1716 ? might be 1.0161x slower switch-string-basic-big-var 25.0465+-1.5643 ? 25.5822+-0.8310 ? might be 1.0214x slower switch-string-basic-big 31.6306+-2.6749 29.3867+-4.6465 might be 1.0764x faster switch-string-basic-var 31.1637+-1.1877 30.9487+-0.5910 switch-string-basic 31.4090+-2.1147 ? 32.4176+-1.8524 ? might be 1.0321x slower switch-string-big-length-tower-var 30.1494+-0.2345 ? 30.1779+-0.2600 ? switch-string-length-tower-var 24.1811+-0.3998 24.0538+-0.1162 switch-string-length-tower 17.3984+-0.0766 ? 17.5229+-0.2191 ? switch-string-short 17.5410+-0.1792 17.4399+-0.1283 switch 16.1087+-0.3870 ? 16.2246+-0.1827 ? tear-off-arguments-simple 2.6045+-0.0537 ? 2.6092+-0.0613 ? tear-off-arguments 4.0468+-0.1011 3.9710+-0.0267 might be 1.0191x faster temporal-structure 19.3706+-0.1459 19.2605+-0.2632 to-int32-boolean 24.1540+-0.1033 ? 24.2052+-0.0750 ? undefined-test 4.8934+-0.0556 ? 4.9570+-0.1202 ? might be 1.0130x slower unprofiled-licm 30.7761+-0.4474 30.5203+-0.5652 weird-inlining-const-prop 2.7337+-0.1291 2.7109+-0.1413 <arithmetic> 22.6385+-0.0804 ? 22.7941+-0.1558 ? might be 1.0069x slower <geometric> * 11.6269+-0.0265 ? 11.6693+-0.0284 ? might be 1.0036x slower <harmonic> 5.4418+-0.0144 ? 5.4695+-0.0235 ? might be 1.0051x slower TipOfTree MoreWatchpoints AsmBench: bigfib.cpp 818.1274+-5.0017 ? 819.1523+-4.4294 ? cray.c 799.0123+-5.3850 797.0378+-1.6730 dry.c 841.9770+-42.5950 792.7522+-46.0816 might be 1.0621x faster FloatMM.c 1110.8728+-1.9055 ? 1111.5527+-2.2410 ? gcc-loops.cpp 7555.2723+-47.2615 ^ 7484.3604+-15.7308 ^ definitely 1.0095x faster n-body.c 2071.9841+-6.4904 2048.4736+-20.7510 might be 1.0115x faster Quicksort.c 687.8965+-7.6058 ? 690.5671+-0.6573 ? stepanov_container.cpp 5831.6206+-20.4313 ? 5851.4619+-81.5362 ? Towers.c 502.5197+-2.5154 ^ 496.1133+-1.6814 ^ definitely 1.0129x faster <arithmetic> 2246.5870+-5.2677 2232.3857+-12.4340 might be 1.0064x faster <geometric> * 1389.2427+-7.2557 1375.8130+-11.3310 might be 1.0098x faster <harmonic> 1023.4015+-6.9354 1011.7254+-9.3500 might be 1.0115x faster TipOfTree MoreWatchpoints All benchmarks: <arithmetic> 179.6936+-0.3655 ? 180.1186+-0.3457 ? might be 1.0024x slower <geometric> 20.1321+-0.0411 ? 20.1889+-0.0373 ? might be 1.0028x slower <harmonic> 4.8402+-0.0219 ? 4.8477+-0.0262 ? might be 1.0015x slower TipOfTree MoreWatchpoints Geomean of preferred means: <scaled-result> 80.9745+-0.2792 ? 81.0814+-0.1969 ? might be 1.0013x slower
Filip Pizlo
Comment 3 2014-05-22 20:23:33 PDT
Created attachment 231935 [details] starting to look sensible
Filip Pizlo
Comment 4 2014-05-23 14:01:30 PDT
Filip Pizlo
Comment 5 2014-05-28 19:03:31 PDT
Created attachment 232228 [details] a bit more.
Filip Pizlo
Comment 6 2014-05-28 20:45:04 PDT
Created attachment 232232 [details] crashes on launch But at least it compiles!
Filip Pizlo
Comment 7 2014-05-29 15:09:22 PDT
Created attachment 232264 [details] starting to work In the quadmorphic example, it eliminates all structure checks because it realizes that the variable can point to one of four objects and all of them have the field we want at the same offset. Cool!
Filip Pizlo
Comment 8 2014-05-29 16:39:52 PDT
Created attachment 232270 [details] now it only fails thousands of tests
Filip Pizlo
Comment 9 2014-05-29 23:06:19 PDT
Created attachment 232281 [details] less then a hundred failures
Filip Pizlo
Comment 10 2014-05-30 14:35:35 PDT
Created attachment 232304 [details] using a slightly more complicated approach I'm going to fix https://bugs.webkit.org/show_bug.cgi?id=133398 as part of this.
Filip Pizlo
Comment 11 2014-06-01 10:50:25 PDT
Created attachment 232349 [details] almost done It turns out that AI for MultiPutByOffset was totally busted. I'm fixing it.
Filip Pizlo
Comment 12 2014-06-01 11:36:46 PDT
Created attachment 232350 [details] almoster doner
Filip Pizlo
Comment 13 2014-06-02 16:57:24 PDT
Two things left to do, as far as I can tell: - Make the abstract interpreter track whether our current state is "clobbered" or "valid". We're valid by default and become clobbered at any instruction that affects structure transition watchpoints. We become valid again at an invalidation point. New constants introduced while we're clobbered should have their structure sets clobbered. - Make the FTL backend robust against the AI become more precise, for example because a constant transitioned to a new structure and that structure contradicts checks we've already emitted.
Filip Pizlo
Comment 14 2014-06-02 18:17:44 PDT
Also, we should convert uses of transitionWatchpointSetIsStillValid() into dfgShouldWatch(), which refuses to watch dictionaries.
Filip Pizlo
Comment 15 2014-06-02 20:19:22 PDT
Created attachment 232413 [details] basically works It doesn't appear to be a regression on anything we care about, which is basically all I was hoping for with this change. There do appear to be some opportunities to reduce the effects of this on SunSpider and JSRegress. I believe that we're just getting hit by compile times on those benchmarks. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, and AsmBench on oldmac (MacPro4,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/ftlopt/OpenSource/WebKitBuild/Release/jsc (r169515) "BigSets" at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r169515) Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. TipOfTree BigSets SunSpider: 3d-cube 7.7753+-0.1781 ? 7.8299+-0.2433 ? 3d-morph 9.4253+-0.0941 9.4149+-0.0919 3d-raytrace 9.8794+-0.1554 ? 10.0020+-0.2272 ? might be 1.0124x slower access-binary-trees 2.8346+-0.1051 2.7673+-0.0954 might be 1.0243x faster access-fannkuch 9.2872+-0.1890 ? 9.2996+-0.1395 ? access-nbody 4.7028+-0.0186 ? 4.7164+-0.0909 ? access-nsieve 5.5726+-0.1068 5.5328+-0.1197 bitops-3bit-bits-in-byte 1.8632+-0.0159 ? 1.8786+-0.0128 ? bitops-bits-in-byte 6.5753+-0.1886 ? 6.6090+-0.2209 ? bitops-bitwise-and 3.1583+-0.0892 ? 3.2153+-0.0593 ? might be 1.0181x slower bitops-nsieve-bits 5.7968+-0.0336 ? 5.8070+-0.0779 ? controlflow-recursive 2.9232+-0.0921 2.9199+-0.0979 crypto-aes 6.2570+-0.0817 ? 6.3948+-0.1602 ? might be 1.0220x slower crypto-md5 3.6345+-0.1306 3.4263+-0.0803 might be 1.0608x faster crypto-sha1 3.7146+-0.1349 ? 3.7371+-0.1313 ? date-format-tofte 13.2209+-0.1700 ? 13.3746+-0.2641 ? might be 1.0116x slower date-format-xparb 9.8283+-0.1877 ? 10.1872+-0.2977 ? might be 1.0365x slower math-cordic 4.7172+-0.0329 4.7015+-0.0168 math-partial-sums 10.5381+-0.0969 10.5341+-0.1619 math-spectral-norm 3.0562+-0.0387 ? 3.0576+-0.0287 ? regexp-dna 11.8872+-0.1811 ? 11.9934+-0.1161 ? string-base64 6.3839+-0.0716 ? 6.4011+-0.1083 ? string-fasta 10.2702+-0.2018 10.1937+-0.1540 string-tagcloud 15.7653+-0.2020 ? 16.0267+-0.1243 ? might be 1.0166x slower string-unpack-code 32.4095+-0.1854 ! 33.6371+-0.3951 ! definitely 1.0379x slower string-validate-input 7.7344+-0.2497 ? 7.7383+-0.0816 ? <arithmetic> * 8.0466+-0.0370 ! 8.1306+-0.0385 ! definitely 1.0104x slower <geometric> 6.5511+-0.0362 ? 6.5748+-0.0194 ? might be 1.0036x slower <harmonic> 5.4306+-0.0327 5.4290+-0.0127 might be 1.0003x faster TipOfTree BigSets LongSpider: 3d-cube 1382.6227+-13.1741 ? 1397.3690+-26.8914 ? might be 1.0107x slower 3d-morph 2286.1527+-2.9878 2277.8416+-11.6817 3d-raytrace 1457.0853+-13.9387 ? 1464.1174+-11.6962 ? access-binary-trees 1680.4635+-6.3164 ^ 1657.2703+-7.0905 ^ definitely 1.0140x faster access-fannkuch 519.7079+-19.7181 518.0140+-19.1024 access-nbody 1250.1082+-6.9376 ! 1264.4066+-6.0683 ! definitely 1.0114x slower access-nsieve 1627.3814+-6.1687 ? 1629.3693+-12.1729 ? bitops-3bit-bits-in-byte 59.4247+-0.3956 ? 59.6086+-0.6038 ? bitops-bits-in-byte 397.5146+-5.3163 ? 398.9239+-9.7011 ? bitops-nsieve-bits 1178.8156+-3.5084 1178.4617+-3.1543 controlflow-recursive 878.3545+-1.2668 ^ 867.1393+-0.7614 ^ definitely 1.0129x faster crypto-aes 1140.8805+-3.3996 ? 1141.9679+-3.9428 ? crypto-md5 1080.2677+-2.4448 ! 1088.8383+-4.4293 ! definitely 1.0079x slower crypto-sha1 1191.4772+-7.2704 ? 1200.9441+-9.3170 ? date-format-tofte 1181.5614+-17.9773 ? 1198.7513+-28.2021 ? might be 1.0145x slower date-format-xparb 1675.9474+-51.7237 1675.1822+-13.3581 math-cordic 843.4293+-6.2157 838.3862+-1.1058 math-partial-sums 1329.9974+-27.6891 ? 1332.1711+-5.1968 ? math-spectral-norm 1296.6384+-1.9348 ? 1301.0095+-13.3373 ? string-base64 601.0402+-2.9884 599.1828+-2.6395 string-fasta 922.5584+-15.7978 ? 927.2976+-17.9817 ? string-tagcloud 397.7267+-4.3388 ? 400.6536+-2.9687 ? <arithmetic> 1108.1434+-3.0141 ? 1109.8594+-2.0046 ? might be 1.0015x slower <geometric> * 926.4895+-2.5047 ? 928.1698+-2.2433 ? might be 1.0018x slower <harmonic> 561.6440+-1.2295 ? 562.9653+-2.8997 ? might be 1.0024x slower TipOfTree BigSets V8Spider: crypto 85.0902+-1.1393 ? 85.1495+-0.6560 ? deltablue 101.9537+-0.7946 ? 105.0560+-5.9800 ? might be 1.0304x slower earley-boyer 70.6561+-0.5646 ! 71.9822+-0.6480 ! definitely 1.0188x slower raytrace 44.1021+-0.5614 ! 46.6855+-0.2737 ! definitely 1.0586x slower regexp 106.0486+-0.7262 105.4491+-0.3676 richards 105.0144+-1.2623 ? 106.8607+-1.0600 ? might be 1.0176x slower splay 50.1980+-0.5172 ? 50.7738+-1.4567 ? might be 1.0115x slower <arithmetic> 80.4376+-0.3166 ! 81.7081+-0.8822 ! definitely 1.0158x slower <geometric> * 76.3389+-0.2942 ! 77.7501+-0.6690 ! definitely 1.0185x slower <harmonic> 71.9655+-0.2969 ! 73.5724+-0.5299 ! definitely 1.0223x slower TipOfTree BigSets Octane and V8v7: encrypt 0.44447+-0.00161 0.44259+-0.00366 decrypt 8.10327+-0.08918 8.05332+-0.07556 deltablue x2 0.44338+-0.00203 ? 0.44564+-0.00534 ? earley 0.95113+-0.00612 ? 0.95475+-0.00885 ? boyer 10.76136+-0.04234 10.63924+-0.12668 might be 1.0115x faster navier-stokes x2 7.74212+-0.03295 7.74188+-0.00286 raytrace x2 2.87277+-0.03016 ? 2.92832+-0.05166 ? might be 1.0193x slower regexp x2 33.13449+-0.18989 ? 33.23515+-0.32820 ? richards x2 0.23114+-0.01077 0.22722+-0.00280 might be 1.0172x faster splay x2 0.64505+-0.00629 0.63641+-0.00810 might be 1.0136x faster pdfjs x2 93.88723+-0.27887 ! 96.30375+-0.43364 ! definitely 1.0257x slower mandreel x2 99.33370+-1.36395 ! 102.60518+-0.69602 ! definitely 1.0329x slower gbemu x2 87.10547+-1.01810 ^ 84.07424+-0.46115 ^ definitely 1.0361x faster closure 0.88921+-0.00225 ! 0.89629+-0.00370 ! definitely 1.0080x slower jquery 10.89807+-0.03317 ! 11.02353+-0.04764 ! definitely 1.0115x slower box2d x2 28.74254+-0.91304 ^ 27.31876+-0.45933 ^ definitely 1.0521x faster zlib x2 803.03984+-2.65376 ! 857.73347+-1.71022 ! definitely 1.0681x slower typescript x2 1251.62419+-4.26602 ? 1265.14954+-9.28190 ? might be 1.0108x slower V8v7: <arithmetic> 6.89988+-0.02058 ? 6.90745+-0.04615 ? might be 1.0011x slower <geometric> * 2.03622+-0.01025 2.03322+-0.00958 might be 1.0015x faster <harmonic> 0.76901+-0.01396 0.76334+-0.00538 might be 1.0074x faster Octane including V8v7: <arithmetic> 161.65504+-0.42141 ! 166.29363+-0.58819 ! definitely 1.0287x slower <geometric> * 12.27262+-0.05906 ? 12.31063+-0.02855 ? might be 1.0031x slower <harmonic> 1.35374+-0.02309 1.34480+-0.00876 might be 1.0067x faster TipOfTree BigSets Kraken: ai-astar 528.543+-1.029 ? 529.102+-1.681 ? audio-beat-detection 200.451+-1.934 ? 204.646+-3.129 ? might be 1.0209x slower audio-dft 263.205+-2.007 261.964+-4.323 audio-fft 114.335+-0.197 ! 121.888+-1.158 ! definitely 1.0661x slower audio-oscillator 381.506+-7.248 ^ 373.069+-0.573 ^ definitely 1.0226x faster imaging-darkroom 295.425+-1.754 ? 298.930+-7.529 ? might be 1.0119x slower imaging-desaturate 122.175+-0.378 ! 124.179+-0.278 ! definitely 1.0164x slower imaging-gaussian-blur 181.351+-8.082 178.821+-0.279 might be 1.0142x faster json-parse-financial 82.163+-0.469 ! 83.913+-0.473 ! definitely 1.0213x slower json-stringify-tinderbox 102.741+-1.622 ? 103.798+-3.596 ? might be 1.0103x slower stanford-crypto-aes 94.010+-2.459 ? 94.151+-3.179 ? stanford-crypto-ccm 97.559+-12.788 ? 98.872+-12.009 ? might be 1.0135x slower stanford-crypto-pbkdf2 244.976+-5.852 ? 248.728+-6.559 ? might be 1.0153x slower stanford-crypto-sha256-iterative 111.311+-1.439 110.867+-2.503 <arithmetic> * 201.411+-1.075 ? 202.352+-1.192 ? might be 1.0047x slower <geometric> 169.881+-1.418 ? 171.476+-1.507 ? might be 1.0094x slower <harmonic> 147.150+-2.007 ? 149.040+-1.849 ? might be 1.0128x slower TipOfTree BigSets JSRegress: abs-boolean 24.2047+-0.2798 ? 24.6338+-0.6343 ? might be 1.0177x slower adapt-to-double-divide 19.8609+-0.2631 ? 20.2351+-0.3608 ? might be 1.0188x slower aliased-arguments-getbyval 1.1323+-0.0073 ? 1.1358+-0.0163 ? allocate-big-object 3.6776+-0.0905 ? 3.7087+-0.1944 ? arity-mismatch-inlining 1.0141+-0.0064 ? 1.0459+-0.0321 ? might be 1.0314x slower array-access-polymorphic-structure 10.8029+-0.1185 ? 10.8637+-0.0665 ? array-nonarray-polymorhpic-access 63.0277+-0.2696 ? 63.5662+-0.9630 ? array-prototype-every 123.8875+-0.5850 122.1482+-1.5397 might be 1.0142x faster array-prototype-forEach 121.9103+-0.2426 ? 122.0203+-2.9471 ? array-prototype-map 148.8099+-2.0023 146.5709+-0.9322 might be 1.0153x faster array-prototype-some 124.7983+-1.3295 ^ 120.8228+-1.6915 ^ definitely 1.0329x faster array-splice-contiguous 125.8057+-8.5855 ? 125.9599+-9.7902 ? array-with-double-add 6.8195+-0.0819 ? 6.8392+-0.0965 ? array-with-double-increment 4.7582+-0.0768 4.7530+-0.0864 array-with-double-mul-add 7.7841+-0.1143 7.7735+-0.0670 array-with-double-sum 5.0301+-0.0707 ? 5.0673+-0.0819 ? array-with-int32-add-sub 12.1351+-0.2754 11.8594+-0.1278 might be 1.0233x faster array-with-int32-or-double-sum 5.1566+-0.0720 5.1490+-0.0765 ArrayBuffer-DataView-alloc-large-long-lived 115.4014+-1.7875 ? 115.9180+-0.7010 ? ArrayBuffer-DataView-alloc-long-lived 32.4842+-1.0927 ? 33.1648+-0.3614 ? might be 1.0210x slower ArrayBuffer-Int32Array-byteOffset 5.2930+-0.0811 5.2780+-0.0176 ArrayBuffer-Int8Array-alloc-large-long-lived 120.0850+-1.4247 ? 122.0804+-1.1859 ? might be 1.0166x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 50.9678+-0.5532 ! 53.9848+-1.0396 ! definitely 1.0592x slower ArrayBuffer-Int8Array-alloc-long-lived 31.2546+-0.3130 ! 33.7594+-0.7155 ! definitely 1.0801x slower ArrayBuffer-Int8Array-alloc 27.3053+-0.1867 ! 29.9793+-0.8005 ! definitely 1.0979x slower asmjs_bool_bug 9.9059+-0.1278 ! 10.2899+-0.1359 ! definitely 1.0388x slower assign-custom-setter-polymorphic 4.7870+-0.0450 4.7758+-0.0609 assign-custom-setter 6.7126+-0.0599 ? 6.7207+-0.0651 ? basic-set 16.1139+-0.2932 15.8476+-0.1795 might be 1.0168x faster big-int-mul 6.3922+-0.0984 6.3849+-0.1242 boolean-test 4.7839+-0.0735 ? 4.8141+-0.0722 ? branch-fold 5.2828+-0.0909 5.2808+-0.0513 by-val-generic 14.2164+-0.2624 ? 14.2278+-0.4280 ? call-spread-apply 21.4137+-0.5961 20.7463+-0.1317 might be 1.0322x faster call-spread-call 9.1325+-0.1823 8.9773+-0.2167 might be 1.0173x faster captured-assignments 0.5686+-0.0069 0.5645+-0.0046 cast-int-to-double 12.8130+-0.1125 ? 12.9089+-0.2218 ? cell-argument 11.0360+-0.1910 10.9884+-0.1658 cfg-simplify 4.1608+-0.0355 ? 4.1998+-0.0569 ? chain-getter-access 13.2213+-0.2400 ? 13.2985+-0.3058 ? cmpeq-obj-to-obj-other 13.3061+-0.2166 ? 13.7000+-0.7900 ? might be 1.0296x slower constant-test 8.8868+-0.1093 8.8713+-0.1556 DataView-custom-properties 123.6600+-0.9483 ? 124.8651+-0.6209 ? delay-tear-off-arguments-strictmode 3.6818+-0.0191 ? 3.7555+-0.1148 ? might be 1.0200x slower destructuring-arguments 8.9878+-0.0976 ? 9.0378+-0.1605 ? destructuring-swap 8.9653+-0.0988 ? 8.9729+-0.0930 ? direct-arguments-getbyval 1.1149+-0.0139 ? 1.1734+-0.0885 ? might be 1.0525x slower div-boolean-double 22.8300+-1.2688 22.8261+-0.9473 div-boolean 23.9832+-1.2816 23.2281+-0.9023 might be 1.0325x faster double-get-by-val-out-of-bounds 6.7007+-0.1069 ? 6.8245+-0.3028 ? might be 1.0185x slower double-pollution-getbyval 11.4920+-0.1544 11.3292+-0.1212 might be 1.0144x faster double-pollution-putbyoffset 6.2142+-0.1233 6.1781+-0.0845 double-to-int32-typed-array-no-inline 3.1379+-0.1243 3.0723+-0.0436 might be 1.0214x faster double-to-int32-typed-array 2.5092+-0.0560 ? 2.5513+-0.0860 ? might be 1.0168x slower double-to-uint32-typed-array-no-inline 3.2657+-0.1063 3.1624+-0.0964 might be 1.0327x faster double-to-uint32-typed-array 2.6460+-0.0607 ? 2.7254+-0.0885 ? might be 1.0300x slower empty-string-plus-int 10.2695+-0.1125 ? 10.6130+-0.3169 ? might be 1.0334x slower emscripten-cube2hash 55.2334+-0.5508 ^ 54.1699+-0.4404 ^ definitely 1.0196x faster external-arguments-getbyval 2.0703+-0.0202 ? 2.0718+-0.0150 ? external-arguments-putbyval 3.0388+-0.0676 2.9932+-0.0198 might be 1.0152x faster fixed-typed-array-storage-var-index 1.5413+-0.0330 ? 1.5855+-0.0895 ? might be 1.0287x slower fixed-typed-array-storage 1.1119+-0.0057 ? 1.1286+-0.0175 ? might be 1.0151x slower Float32Array-matrix-mult 8.4384+-0.3189 8.1210+-0.3789 might be 1.0391x faster Float32Array-to-Float64Array-set 87.7498+-1.3153 87.0756+-0.1769 Float64Array-alloc-long-lived 102.4223+-0.7615 102.1812+-0.7907 Float64Array-to-Int16Array-set 114.8465+-0.7760 ! 118.3255+-2.2514 ! definitely 1.0303x slower fold-double-to-int 20.1337+-0.3308 ! 20.8423+-0.1907 ! definitely 1.0352x slower for-of-iterate-array-entries 9.6591+-0.1798 ! 10.8315+-0.4439 ! definitely 1.1214x slower for-of-iterate-array-keys 3.6333+-0.0697 ? 3.6580+-0.1487 ? for-of-iterate-array-values 3.3472+-0.0782 ^ 3.2220+-0.0285 ^ definitely 1.0388x faster fround 24.2314+-0.4272 24.2168+-0.3557 function-dot-apply 1.7493+-0.0111 ! 1.8031+-0.0108 ! definitely 1.0308x slower function-test 5.0334+-0.0559 5.0252+-0.0223 function-with-eval 43.1102+-1.1207 ? 43.9114+-1.2529 ? might be 1.0186x slower get-by-id-chain-from-try-block 8.2206+-0.2461 ? 8.3318+-0.1847 ? might be 1.0135x slower get-by-id-proto-or-self 24.9804+-1.3890 ? 25.9299+-2.9596 ? might be 1.0380x slower get-by-id-self-or-proto 25.0569+-0.9110 ? 26.2771+-2.0209 ? might be 1.0487x slower get-by-val-out-of-bounds 6.8553+-0.2060 ! 7.4429+-0.0868 ! definitely 1.0857x slower get_callee_monomorphic 5.4957+-0.1542 5.4268+-0.0801 might be 1.0127x faster get_callee_polymorphic 4.9063+-0.0957 ? 5.0475+-0.0487 ? might be 1.0288x slower getter 7.5241+-0.0206 7.5040+-0.0941 global-var-const-infer-fire-from-opt 1.2181+-0.0312 ? 1.2492+-0.0132 ? might be 1.0256x slower global-var-const-infer 1.0479+-0.0262 ? 1.0604+-0.0325 ? might be 1.0119x slower HashMap-put-get-iterate-keys 40.0907+-1.0253 39.9911+-1.1276 HashMap-put-get-iterate 39.5532+-0.3664 39.5203+-0.6712 HashMap-string-put-get-iterate 45.1247+-0.6477 ? 45.7402+-0.6858 ? might be 1.0136x slower imul-double-only 10.5492+-0.2696 ? 10.5591+-0.1627 ? imul-int-only 13.7525+-0.5166 ? 13.8094+-0.2636 ? imul-mixed 9.8007+-0.4922 9.7625+-0.4779 in-four-cases 22.6285+-0.2273 ? 22.6324+-0.0881 ? in-one-case-false 12.7960+-0.1070 12.7957+-0.0733 in-one-case-true 12.6993+-0.1577 ? 12.7461+-0.1417 ? in-two-cases 13.1036+-0.0935 ? 13.1713+-0.1736 ? indexed-properties-in-objects 4.4451+-0.0578 ? 4.4475+-0.0709 ? infer-closure-const-then-mov-no-inline 5.0586+-0.0275 ? 5.0935+-0.0438 ? infer-closure-const-then-mov 29.2172+-0.1192 ? 29.2395+-0.1043 ? infer-closure-const-then-put-to-scope-no-inline 17.5379+-0.0602 ? 17.5567+-0.1494 ? infer-closure-const-then-put-to-scope 33.5118+-0.7321 33.3665+-0.2598 infer-closure-const-then-reenter-no-inline 77.4146+-0.8241 77.1143+-0.1751 infer-closure-const-then-reenter 33.1597+-0.1118 ? 33.3822+-0.1726 ? infer-one-time-closure-ten-vars 16.3491+-0.2501 16.2799+-0.1566 infer-one-time-closure-two-vars 15.8546+-0.3679 ? 16.0114+-0.4462 ? infer-one-time-closure 15.6579+-0.0732 15.5750+-0.0803 infer-one-time-deep-closure 28.0892+-0.2340 ? 28.3201+-0.1152 ? inline-arguments-access 1.6376+-0.0064 ! 1.7130+-0.0396 ! definitely 1.0461x slower inline-arguments-aliased-access 1.8551+-0.1014 ? 1.9308+-0.1272 ? might be 1.0408x slower inline-arguments-local-escape 19.8119+-0.5506 19.7011+-0.4428 inline-get-scoped-var 7.5792+-0.0665 ? 7.6732+-0.1168 ? might be 1.0124x slower inlined-put-by-id-transition 15.8801+-0.2187 15.5673+-0.4229 might be 1.0201x faster int-or-other-abs-then-get-by-val 9.7722+-0.1789 ? 9.8103+-0.1210 ? int-or-other-abs-zero-then-get-by-val 33.3165+-0.3797 ? 33.6660+-0.8408 ? might be 1.0105x slower int-or-other-add-then-get-by-val 11.1344+-0.1027 ^ 10.8320+-0.1828 ^ definitely 1.0279x faster int-or-other-add 11.0941+-0.1102 ? 11.1685+-0.1024 ? int-or-other-div-then-get-by-val 6.8220+-0.0746 ? 6.8840+-0.1166 ? int-or-other-max-then-get-by-val 7.8767+-0.1061 7.8080+-0.1283 int-or-other-min-then-get-by-val 7.6070+-0.1074 ? 7.7016+-0.0776 ? might be 1.0124x slower int-or-other-mod-then-get-by-val 6.5827+-0.0364 ^ 6.4602+-0.0637 ^ definitely 1.0190x faster int-or-other-mul-then-get-by-val 6.8805+-0.0353 6.7856+-0.0891 might be 1.0140x faster int-or-other-neg-then-get-by-val 8.5424+-0.0688 ? 8.6942+-0.1489 ? might be 1.0178x slower int-or-other-neg-zero-then-get-by-val 33.7461+-0.1353 ? 34.1365+-0.7230 ? might be 1.0116x slower int-or-other-sub-then-get-by-val 11.5885+-0.1368 ^ 11.1006+-0.0594 ^ definitely 1.0439x faster int-or-other-sub 9.8581+-0.1036 9.8132+-0.0804 int-overflow-local 6.6994+-0.1110 6.6983+-0.1184 Int16Array-alloc-long-lived 73.6001+-0.3944 ? 74.5023+-1.0732 ? might be 1.0123x slower Int16Array-bubble-sort-with-byteLength 48.1125+-0.1481 ^ 42.5845+-0.1550 ^ definitely 1.1298x faster Int16Array-bubble-sort 47.4700+-0.4847 ^ 43.0763+-0.8362 ^ definitely 1.1020x faster Int16Array-load-int-mul 2.0966+-0.0271 ? 2.1476+-0.0901 ? might be 1.0243x slower Int16Array-to-Int32Array-set 88.1325+-0.7270 ? 89.7996+-1.9357 ? might be 1.0189x slower Int32Array-alloc-large 44.4193+-0.9656 44.2158+-0.9374 Int32Array-alloc-long-lived 81.6533+-0.7804 ? 82.6288+-1.4272 ? might be 1.0119x slower Int32Array-alloc 4.8962+-0.0408 4.8408+-0.2080 might be 1.0114x faster Int32Array-Int8Array-view-alloc 15.1326+-0.1121 ? 15.4193+-0.3303 ? might be 1.0189x slower int52-spill 11.9222+-0.1642 ! 12.2795+-0.1285 ! definitely 1.0300x slower Int8Array-alloc-long-lived 67.6232+-0.8457 67.0676+-0.5859 Int8Array-load-with-byteLength 5.5192+-0.0928 5.4659+-0.0125 Int8Array-load 5.5225+-0.0863 ? 5.5381+-0.0779 ? integer-divide 16.8510+-0.0711 ? 17.0325+-0.3428 ? might be 1.0108x slower integer-modulo 3.3217+-0.3143 3.2421+-0.2554 might be 1.0245x faster large-int-captured 10.6928+-0.2710 10.4348+-0.2660 might be 1.0247x faster large-int-neg 24.7210+-0.5926 24.2422+-0.1270 might be 1.0198x faster large-int 21.4163+-0.2440 21.3907+-0.3389 logical-not 6.8198+-0.1954 ? 6.8717+-0.1042 ? lots-of-fields 14.0646+-0.1394 13.9315+-0.1309 make-indexed-storage 4.4869+-0.2079 ? 4.7217+-0.1195 ? might be 1.0523x slower make-rope-cse 6.2628+-0.0644 ? 6.4443+-0.2078 ? might be 1.0290x slower marsaglia-larger-ints 59.6656+-0.9943 ? 59.8340+-0.2484 ? marsaglia-osr-entry 31.1192+-0.6032 ? 31.3838+-0.5770 ? max-boolean 32.5253+-0.1758 ? 32.7653+-0.4797 ? method-on-number 31.1770+-0.8347 30.7478+-0.3881 might be 1.0140x faster min-boolean 32.7979+-0.4853 ? 33.0782+-0.4831 ? minus-boolean-double 22.6000+-1.5768 21.7010+-0.0690 might be 1.0414x faster minus-boolean 23.1637+-0.7216 23.0166+-0.1687 misc-strict-eq 57.7670+-0.4896 ^ 56.0473+-1.0501 ^ definitely 1.0307x faster mod-boolean-double 31.8084+-0.8248 30.8370+-1.8928 might be 1.0315x faster mod-boolean 54.1657+-0.1177 54.1266+-0.7643 mul-boolean-double 22.9146+-0.5423 ? 23.2488+-1.1369 ? might be 1.0146x slower mul-boolean 24.6417+-2.6038 23.0713+-0.5526 might be 1.0681x faster neg-boolean 23.2775+-0.9192 ? 24.2878+-1.3947 ? might be 1.0434x slower negative-zero-divide 0.4502+-0.0042 ? 0.4526+-0.0017 ? negative-zero-modulo 0.4489+-0.0032 ? 0.4545+-0.0025 ? might be 1.0126x slower negative-zero-negate 0.4229+-0.0147 ? 0.4295+-0.0128 ? might be 1.0157x slower nested-function-parsing 49.3872+-0.3304 ? 49.7751+-0.5752 ? new-array-buffer-dead 4.0229+-0.0641 ? 4.0596+-0.0872 ? new-array-buffer-push 10.7667+-0.1644 ? 10.8218+-0.2124 ? new-array-dead 14.0717+-0.2367 ? 14.2829+-0.3984 ? might be 1.0150x slower new-array-push 7.6546+-0.0848 7.5574+-0.2280 might be 1.0129x faster number-test 4.6629+-0.0501 ? 4.6762+-0.0401 ? object-closure-call 8.8006+-0.1997 ? 8.8033+-0.0621 ? object-test 5.1234+-0.0820 ^ 4.9044+-0.0504 ^ definitely 1.0447x faster plus-boolean-arith 22.5326+-1.1877 ? 22.5487+-1.2176 ? plus-boolean-double 24.8311+-0.9513 24.5515+-0.0730 might be 1.0114x faster plus-boolean 23.9853+-0.1655 ? 24.5325+-0.7293 ? might be 1.0228x slower poly-stricteq 83.3709+-2.5517 82.5115+-0.2169 might be 1.0104x faster polymorphic-array-call 2.3148+-0.0433 ? 2.3155+-0.0310 ? polymorphic-get-by-id 4.7876+-0.0580 4.7581+-0.0144 polymorphic-put-by-id 116.8333+-39.5689 106.3998+-32.1270 might be 1.0981x faster polymorphic-structure 30.2976+-0.0999 ? 30.6440+-0.3608 ? might be 1.0114x slower polyvariant-monomorphic-get-by-id 13.4202+-0.2724 ? 13.4594+-0.0745 ? proto-getter-access 13.0552+-0.2453 ? 13.2380+-0.1806 ? might be 1.0140x slower put-by-id 20.8852+-0.3506 ? 21.4873+-0.4308 ? might be 1.0288x slower put-by-val-large-index-blank-indexing-type 11.0263+-0.2534 ? 11.1219+-0.2026 ? put-by-val-machine-int 4.6244+-0.1550 4.2542+-0.4941 might be 1.0870x faster rare-osr-exit-on-local 21.5168+-0.2209 ? 21.5715+-0.1473 ? register-pressure-from-osr 31.2133+-0.1564 ? 31.5947+-0.3144 ? might be 1.0122x slower setter 20.4290+-0.4698 20.3192+-0.0882 simple-activation-demo 35.5305+-0.7362 35.2472+-0.1813 simple-getter-access 17.1711+-0.2164 ? 17.3020+-0.4125 ? sin-boolean 50.3887+-0.1230 ? 50.5719+-0.4036 ? slow-array-profile-convergence 4.4336+-0.3584 4.2699+-0.1812 might be 1.0383x faster slow-convergence 4.7526+-0.0313 ? 4.7833+-0.0289 ? sparse-conditional 1.5340+-0.0521 ? 1.5516+-0.0511 ? might be 1.0115x slower splice-to-remove 79.4832+-1.6742 78.4371+-0.3038 might be 1.0133x faster string-char-code-at 25.7956+-0.5395 ^ 23.6325+-0.3430 ^ definitely 1.0915x faster string-concat-object 3.2092+-0.0483 ? 3.2810+-0.0570 ? might be 1.0224x slower string-concat-pair-object 3.1460+-0.0374 ? 3.1590+-0.0526 ? string-concat-pair-simple 18.6878+-0.2116 ? 18.8252+-0.7422 ? string-concat-simple 18.9159+-0.2865 18.7767+-0.3919 string-cons-repeat 11.9738+-0.0699 ? 12.0990+-0.1572 ? might be 1.0104x slower string-cons-tower 10.9454+-0.0544 ? 11.2152+-0.3405 ? might be 1.0246x slower string-equality 44.5058+-1.0922 44.4942+-0.8579 string-get-by-val-big-char 14.5364+-0.1024 14.1036+-0.4753 might be 1.0307x faster string-get-by-val-out-of-bounds-insane 6.2393+-0.0816 ? 6.2806+-0.1826 ? string-get-by-val-out-of-bounds 7.2270+-0.1152 7.1952+-0.1014 string-get-by-val 5.5655+-0.0211 ? 5.5816+-0.0966 ? string-hash 3.1361+-0.0851 2.9972+-0.0771 might be 1.0463x faster string-long-ident-equality 39.6287+-0.8203 ? 39.8847+-0.9093 ? string-repeat-arith 47.5137+-0.5408 46.8809+-0.3672 might be 1.0135x faster string-sub 96.0842+-3.2423 94.7444+-0.5077 might be 1.0141x faster string-test 4.5794+-0.0615 ? 4.6610+-0.0680 ? might be 1.0178x slower string-var-equality 73.0897+-2.6311 ! 87.5909+-7.6678 ! definitely 1.1984x slower structure-hoist-over-transitions 3.9061+-0.0239 ? 3.9205+-0.0487 ? switch-char-constant 3.6792+-0.0781 3.6774+-0.0477 switch-char 9.3374+-0.1571 9.2500+-0.0600 switch-constant 11.7020+-0.0996 ? 11.7618+-0.1509 ? switch-string-basic-big-var 25.5762+-1.3255 25.0600+-1.9296 might be 1.0206x faster switch-string-basic-big 32.0250+-1.7123 30.0862+-2.8852 might be 1.0644x faster switch-string-basic-var 31.3377+-0.5872 ? 31.6042+-0.8363 ? switch-string-basic 32.8816+-2.5105 31.9924+-1.7896 might be 1.0278x faster switch-string-big-length-tower-var 30.0205+-0.1882 ? 30.0732+-0.1373 ? switch-string-length-tower-var 24.0404+-0.2307 ? 24.1393+-0.4220 ? switch-string-length-tower 17.5397+-0.2737 ? 17.6081+-0.4190 ? switch-string-short 17.5352+-0.1609 17.4035+-0.1604 switch 15.9190+-0.1435 ? 16.0111+-0.1261 ? tear-off-arguments-simple 2.5888+-0.0153 ? 2.6151+-0.0687 ? might be 1.0102x slower tear-off-arguments 3.9543+-0.0296 ? 4.0032+-0.0511 ? might be 1.0124x slower temporal-structure 19.3560+-0.1260 19.2738+-0.1165 to-int32-boolean 24.1163+-0.1377 ? 24.3736+-0.4854 ? might be 1.0107x slower undefined-test 4.9325+-0.0744 4.8940+-0.0260 unprofiled-licm 30.9769+-1.0776 ? 31.3237+-0.6876 ? might be 1.0112x slower weird-inlining-const-prop 2.6660+-0.0626 ? 2.8326+-0.1928 ? might be 1.0625x slower <arithmetic> 23.7321+-0.1262 ? 23.7345+-0.1369 ? might be 1.0001x slower <geometric> * 12.5029+-0.0200 ? 12.5335+-0.0242 ? might be 1.0024x slower <harmonic> 5.7702+-0.0116 ! 5.8148+-0.0310 ! definitely 1.0077x slower TipOfTree BigSets AsmBench: bigfib.cpp 816.0463+-4.0488 ! 829.7315+-4.4921 ! definitely 1.0168x slower cray.c 795.0968+-1.6557 ! 798.6882+-0.9359 ! definitely 1.0045x slower dry.c 841.6009+-42.6571 815.9877+-33.3149 might be 1.0314x faster FloatMM.c 1118.8792+-11.0512 1110.8865+-0.4787 gcc-loops.cpp 7543.7642+-13.8800 ^ 7487.7253+-5.0253 ^ definitely 1.0075x faster n-body.c 2070.5363+-14.4424 2057.3853+-49.1261 Quicksort.c 686.1586+-8.0114 ? 689.8110+-3.7107 ? stepanov_container.cpp 5829.8348+-21.3044 ? 5843.2611+-24.8316 ? Towers.c 500.2574+-0.6316 ^ 494.2997+-1.8593 ^ definitely 1.0121x faster <arithmetic> 2244.6861+-4.8692 2236.4196+-9.0525 might be 1.0037x faster <geometric> * 1387.6539+-7.8114 1382.2790+-7.6176 might be 1.0039x faster <harmonic> 1021.4662+-6.8647 1017.1617+-5.8286 might be 1.0042x faster TipOfTree BigSets All benchmarks: <arithmetic> 173.0219+-0.2787 ? 173.3986+-0.3181 ? might be 1.0022x slower <geometric> 20.6097+-0.0296 ! 20.6716+-0.0308 ! definitely 1.0030x slower <harmonic> 5.0408+-0.0297 ? 5.0531+-0.0187 ? might be 1.0024x slower TipOfTree BigSets Geomean of preferred means: <scaled-result> 81.7522+-0.2056 ! 82.1833+-0.1663 ! definitely 1.0053x slower
Filip Pizlo
Comment 16 2014-06-03 13:20:04 PDT
Created attachment 232437 [details] it's faster I did some sampling region profiling, which confirmed that the biggest regressions were coming from compile times and that this was all due to the CFA phase. Initially I feared that the cost would be in clobberStructures() and friends, which are inherently O(n) operations. Fortunately, though, all of the cost was in merging. This is what you'd expect in any abstract interpreter. This was easy to fix. I just added a bunch of ALWAYS_INLINE common cases: merging usually encounters clear or top structures; copy/assignment usually deals with small structure sets; and equality usually doesn't have to deal with out-of-line stuff. There is still some more fixing to do, but this is almost done...
Filip Pizlo
Comment 17 2014-06-03 16:29:26 PDT
Created attachment 232449 [details] and now, it's actually totally sound! Our abstract interpreter is now sounder than ever!
Filip Pizlo
Comment 18 2014-06-03 19:58:27 PDT
Created attachment 232460 [details] the patch
Filip Pizlo
Comment 19 2014-06-04 11:05:06 PDT
Brent Fulgham
Comment 20 2014-07-23 08:58:54 PDT
Build fixes were needed: 1. Fix 32-bit: <http://trac.webkit.org/changeset/171381> 2. Windows fix attempt: <http://trac.webkit.org/changeset/171382> 3. Windows fix (sleep -> Sleep): <http://trac.webkit.org/changeset/171386> 4. Windows fix (return value needed): <http://trac.webkit.org/changeset/171387>
Radar WebKit Bug Importer
Comment 21 2014-07-23 16:36:31 PDT
Note You need to log in before you can comment on or make changes to this bug.