RESOLVED FIXED 149936
FTL should generate code to call slow paths lazily
https://bugs.webkit.org/show_bug.cgi?id=149936
Summary FTL should generate code to call slow paths lazily
Filip Pizlo
Reported 2015-10-08 14:56:25 PDT
Patch forthcomihg.
Attachments
what I'm thinking so far (21.70 KB, patch)
2015-10-08 14:59 PDT, Filip Pizlo
no flags
more (31.04 KB, patch)
2015-10-08 18:31 PDT, Filip Pizlo
no flags
more things (43.52 KB, patch)
2015-10-08 21:20 PDT, Filip Pizlo
no flags
it's doing things (57.65 KB, patch)
2015-10-09 12:26 PDT, Filip Pizlo
no flags
even more powerful but probably totally wrong (66.72 KB, patch)
2015-10-09 13:53 PDT, Filip Pizlo
no flags
passing more tests (67.99 KB, patch)
2015-10-10 14:31 PDT, Filip Pizlo
no flags
and now, with documentation (72.49 KB, patch)
2015-10-10 15:02 PDT, Filip Pizlo
no flags
almost done (98.19 KB, patch)
2015-10-10 17:54 PDT, Filip Pizlo
no flags
the patch (98.19 KB, patch)
2015-10-10 18:23 PDT, Filip Pizlo
no flags
the patch (100.24 KB, patch)
2015-10-10 20:05 PDT, Filip Pizlo
saam: review+
Filip Pizlo
Comment 1 2015-10-08 14:59:17 PDT
Created attachment 262717 [details] what I'm thinking so far
Filip Pizlo
Comment 2 2015-10-08 18:31:25 PDT
Filip Pizlo
Comment 3 2015-10-08 21:20:11 PDT
Created attachment 262741 [details] more things
Filip Pizlo
Comment 4 2015-10-09 12:26:45 PDT
Created attachment 262786 [details] it's doing things
Filip Pizlo
Comment 5 2015-10-09 13:53:40 PDT
Created attachment 262792 [details] even more powerful but probably totally wrong I've rewritten the store barrier slow path to do this thing.
Filip Pizlo
Comment 6 2015-10-10 14:31:21 PDT
Created attachment 262832 [details] passing more tests
Filip Pizlo
Comment 7 2015-10-10 15:02:01 PDT
Created attachment 262833 [details] and now, with documentation
Filip Pizlo
Comment 8 2015-10-10 16:57:35 PDT
This looks pretty good. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3). VMs tested: "TipOfTree" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190843) "LazySlowPath" at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r190843) Collected 7 samples per benchmark/VM, with 7 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 LazySlowPath SunSpider: 3d-cube 4.5599+-0.0771 4.5555+-0.0626 3d-morph 5.2700+-0.0706 ? 5.2854+-0.0451 ? 3d-raytrace 5.7394+-1.1955 5.2326+-0.1359 might be 1.0968x faster access-binary-trees 2.1200+-0.0480 ? 2.2402+-0.1966 ? might be 1.0567x slower access-fannkuch 5.5733+-0.1912 ? 5.5751+-0.0696 ? access-nbody 2.4866+-0.0503 2.4482+-0.0164 might be 1.0157x faster access-nsieve 3.0231+-0.0142 ? 3.1079+-0.1243 ? might be 1.0280x slower bitops-3bit-bits-in-byte 1.1541+-0.0260 ? 1.1630+-0.0224 ? bitops-bits-in-byte 3.1907+-0.0369 ? 3.2213+-0.0322 ? bitops-bitwise-and 1.9948+-0.0241 ? 2.0137+-0.0343 ? bitops-nsieve-bits 2.9931+-0.0522 ? 3.0136+-0.0376 ? controlflow-recursive 2.5876+-0.2948 2.3744+-0.0731 might be 1.0898x faster crypto-aes 3.9821+-0.1910 3.9443+-0.1203 crypto-md5 2.4848+-0.0685 2.4731+-0.0515 crypto-sha1 2.4888+-0.1605 2.4411+-0.1793 might be 1.0196x faster date-format-tofte 6.5467+-0.1576 ? 6.6171+-0.1328 ? might be 1.0108x slower date-format-xparb 4.6180+-0.0928 4.6145+-0.0882 math-cordic 2.8903+-0.1356 2.8130+-0.1001 might be 1.0275x faster math-partial-sums 4.7257+-0.0253 ? 4.7305+-0.0473 ? math-spectral-norm 1.9030+-0.0165 ? 2.0984+-0.3821 ? might be 1.1027x slower regexp-dna 6.4436+-0.2049 6.1443+-0.1255 might be 1.0487x faster string-base64 4.4787+-0.1289 4.3643+-0.1267 might be 1.0262x faster string-fasta 5.9572+-0.2529 ? 6.1298+-0.4133 ? might be 1.0290x slower string-tagcloud 7.7469+-0.0844 ? 7.7907+-0.2513 ? string-unpack-code 17.6701+-0.8544 ? 17.9801+-0.4594 ? might be 1.0175x slower string-validate-input 4.4187+-0.0757 ? 4.4946+-0.0675 ? might be 1.0172x slower <arithmetic> 4.5018+-0.0493 4.4949+-0.0266 might be 1.0015x faster TipOfTree LazySlowPath LongSpider: 3d-cube 798.8012+-3.4424 795.1954+-4.4358 3d-morph 1502.9157+-8.1223 1497.8638+-6.8818 3d-raytrace 596.9096+-3.8047 ? 599.0289+-8.0056 ? access-binary-trees 863.1955+-135.0456 798.0858+-10.4401 might be 1.0816x faster access-fannkuch 279.6933+-5.3808 278.5130+-5.7043 access-nbody 511.2093+-4.5734 ? 511.3471+-2.6288 ? access-nsieve 381.3660+-10.9335 380.7803+-12.9754 bitops-3bit-bits-in-byte 33.5653+-0.7966 33.5339+-0.2551 bitops-bits-in-byte 73.7946+-2.2019 72.9859+-0.6020 might be 1.0111x faster bitops-nsieve-bits 411.1452+-3.1554 ^ 402.9912+-3.5793 ^ definitely 1.0202x faster controlflow-recursive 441.4479+-10.1540 428.4468+-5.1807 might be 1.0303x faster crypto-aes 553.9446+-8.8132 ? 554.2924+-4.1930 ? crypto-md5 458.2006+-26.6925 446.0991+-25.0305 might be 1.0271x faster crypto-sha1 641.7301+-2.6411 641.5578+-10.3515 date-format-tofte 484.3629+-6.9659 ? 490.5514+-6.6598 ? might be 1.0128x slower date-format-xparb 664.0504+-19.7548 ? 682.3390+-73.9696 ? might be 1.0275x slower hash-map 149.8577+-1.0211 ? 151.1710+-2.1239 ? math-cordic 484.7740+-8.8615 481.1595+-4.6527 math-partial-sums 458.2731+-2.3858 ! 464.0924+-2.5658 ! definitely 1.0127x slower math-spectral-norm 551.1650+-2.6338 549.2035+-1.4386 string-base64 374.5077+-2.2769 ? 379.1349+-4.8093 ? might be 1.0124x slower string-fasta 362.0370+-5.0292 354.2418+-2.8520 might be 1.0220x faster string-tagcloud 175.5524+-2.4453 174.7506+-1.5624 <geometric> 387.6505+-2.5034 385.3944+-2.3300 might be 1.0059x faster TipOfTree LazySlowPath V8Spider: crypto 48.0238+-2.5508 47.5381+-2.2105 might be 1.0102x faster deltablue 77.6671+-3.4811 ? 82.0880+-18.3491 ? might be 1.0569x slower earley-boyer 41.4977+-0.3335 41.1567+-0.8958 raytrace 31.4837+-1.1066 30.4939+-2.5962 might be 1.0325x faster regexp 60.0533+-0.3582 ? 60.2124+-0.3817 ? richards 53.8917+-1.5554 ^ 51.2794+-0.8108 ^ definitely 1.0509x faster splay 36.7811+-1.0020 ? 37.1759+-0.3847 ? might be 1.0107x slower <geometric> 47.8945+-0.5149 47.5461+-1.0503 might be 1.0073x faster TipOfTree LazySlowPath Octane: encrypt 0.16614+-0.00312 0.16392+-0.00184 might be 1.0135x faster decrypt 2.97586+-0.01445 ^ 2.86703+-0.02287 ^ definitely 1.0380x faster deltablue x2 0.13682+-0.00127 0.13511+-0.00131 might be 1.0127x faster earley 0.28626+-0.00342 ^ 0.28153+-0.00085 ^ definitely 1.0168x faster boyer 4.36352+-0.09330 ? 4.36626+-0.07979 ? navier-stokes x2 4.85984+-0.03420 ? 4.88438+-0.08615 ? raytrace x2 0.85684+-0.00706 ? 0.85987+-0.01824 ? richards x2 0.08865+-0.00061 0.08762+-0.00164 might be 1.0117x faster splay x2 0.35061+-0.00248 0.34806+-0.00213 regexp x2 24.62851+-0.61705 24.39984+-0.28256 pdfjs x2 36.60733+-0.30227 ? 37.29369+-0.97461 ? might be 1.0187x slower mandreel x2 42.79910+-0.90648 42.46997+-0.52105 gbemu x2 31.12277+-0.41684 ? 32.24052+-3.35507 ? might be 1.0359x slower closure 0.57600+-0.00329 ? 0.58228+-0.01087 ? might be 1.0109x slower jquery 7.29801+-0.09752 7.26817+-0.03481 box2d x2 9.09918+-0.07431 9.08195+-0.07466 zlib x2 381.73403+-2.55516 379.98758+-12.38154 typescript x2 663.00387+-6.11934 658.09197+-3.65857 <geometric> 5.32650+-0.01557 5.31397+-0.03622 might be 1.0024x faster TipOfTree LazySlowPath Kraken: ai-astar 129.038+-2.272 125.891+-1.766 might be 1.0250x faster audio-beat-detection 48.399+-1.264 48.362+-0.999 audio-dft 96.603+-1.640 96.312+-2.166 audio-fft 34.730+-0.083 ? 34.818+-0.148 ? audio-oscillator 55.616+-0.950 ? 56.266+-1.079 ? might be 1.0117x slower imaging-darkroom 60.559+-1.449 60.457+-0.770 imaging-desaturate 48.814+-1.277 48.805+-1.774 imaging-gaussian-blur 86.091+-1.431 85.360+-0.694 json-parse-financial 37.234+-0.423 ? 38.371+-0.759 ? might be 1.0305x slower json-stringify-tinderbox 24.899+-7.129 22.317+-1.338 might be 1.1157x faster stanford-crypto-aes 39.410+-0.420 ? 39.836+-0.304 ? might be 1.0108x slower stanford-crypto-ccm 35.917+-1.514 34.538+-0.463 might be 1.0399x faster stanford-crypto-pbkdf2 96.329+-2.257 95.549+-1.238 stanford-crypto-sha256-iterative 36.092+-0.374 35.982+-0.468 <arithmetic> 59.266+-0.495 58.776+-0.238 might be 1.0083x faster TipOfTree LazySlowPath JSRegress: abc-forward-loop-equal 29.3670+-0.5741 ? 29.3919+-0.5990 ? abc-postfix-backward-loop 29.6050+-1.0697 ? 29.8193+-2.1810 ? abc-simple-backward-loop 29.1825+-0.8567 28.9661+-0.2753 abc-simple-forward-loop 28.7472+-0.3244 ? 29.2132+-0.4565 ? might be 1.0162x slower abc-skippy-loop 20.7800+-0.2370 ? 20.8259+-0.3335 ? abs-boolean 2.4646+-0.0506 2.4623+-0.0403 adapt-to-double-divide 16.0182+-0.0809 ? 16.0631+-0.1649 ? aliased-arguments-getbyval 1.2399+-0.0996 1.2150+-0.0751 might be 1.0205x faster allocate-big-object 2.5188+-0.0887 ? 2.5832+-0.0614 ? might be 1.0256x slower arguments-named-and-reflective 10.3802+-0.3735 10.2483+-0.1989 might be 1.0129x faster arguments-out-of-bounds 9.3019+-0.3738 ? 9.8142+-1.3865 ? might be 1.0551x slower arguments-strict-mode 9.3354+-0.2395 ? 9.5107+-0.3201 ? might be 1.0188x slower arguments 8.4136+-0.1791 8.3568+-0.1225 arity-mismatch-inlining 0.8662+-0.0283 0.8625+-0.0260 array-access-polymorphic-structure 7.0489+-0.1127 ? 7.1294+-0.2658 ? might be 1.0114x slower array-nonarray-polymorhpic-access 23.8043+-1.7085 23.1710+-1.0015 might be 1.0273x faster array-prototype-every 75.3183+-0.9236 74.7475+-0.8515 array-prototype-forEach 79.7410+-12.1698 74.7841+-1.6170 might be 1.0663x faster array-prototype-map 81.3262+-1.3079 80.3442+-0.6912 might be 1.0122x faster array-prototype-reduce 70.9712+-0.7570 ? 71.1421+-0.6082 ? array-prototype-reduceRight 71.3678+-0.8386 70.7635+-0.8550 array-prototype-some 75.9908+-2.1327 74.2661+-0.5914 might be 1.0232x faster array-splice-contiguous 20.6342+-0.2658 ? 20.7008+-0.4625 ? array-with-double-add 3.4131+-0.0215 ? 3.4743+-0.1210 ? might be 1.0179x slower array-with-double-increment 3.0489+-0.0328 ? 3.0496+-0.0172 ? array-with-double-mul-add 4.2573+-0.1057 4.1632+-0.0278 might be 1.0226x faster array-with-double-sum 3.1955+-0.0600 3.1904+-0.0331 array-with-int32-add-sub 5.6291+-0.0370 ? 5.6935+-0.1229 ? might be 1.0114x slower array-with-int32-or-double-sum 3.2351+-0.0503 ? 3.3057+-0.1019 ? might be 1.0218x slower ArrayBuffer-DataView-alloc-large-long-lived 25.6834+-0.2689 ? 25.8426+-0.9872 ? ArrayBuffer-DataView-alloc-long-lived 11.5906+-0.1148 ? 11.6357+-0.1895 ? ArrayBuffer-Int32Array-byteOffset 3.4913+-0.0521 ? 3.5344+-0.0974 ? might be 1.0123x slower ArrayBuffer-Int8Array-alloc-large-long-lived 26.1807+-0.3659 25.6745+-0.1703 might be 1.0197x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 19.3326+-0.1986 19.3112+-0.3302 ArrayBuffer-Int8Array-alloc-long-lived 11.0093+-0.0959 10.8326+-0.0977 might be 1.0163x faster ArrayBuffer-Int8Array-alloc 9.3114+-0.1343 ? 9.3619+-0.1644 ? arrowfunction-call 10.7462+-0.1039 ? 11.0066+-0.4434 ? might be 1.0242x slower asmjs_bool_bug 7.4315+-0.0387 ? 7.4363+-0.0377 ? assign-custom-setter-polymorphic 2.4586+-0.0231 ^ 2.4098+-0.0180 ^ definitely 1.0202x faster assign-custom-setter 3.3440+-0.1107 ? 3.4344+-0.2462 ? might be 1.0270x slower basic-set 7.4404+-0.2046 7.3163+-0.1845 might be 1.0170x faster big-int-mul 3.5709+-0.1967 3.4463+-0.0210 might be 1.0362x faster boolean-test 3.0446+-0.0370 3.0341+-0.0502 branch-fold 3.6897+-0.1543 3.5770+-0.0152 might be 1.0315x faster branch-on-string-as-boolean 16.8993+-0.6694 16.6792+-0.4084 might be 1.0132x faster by-val-generic 2.4941+-0.0444 ? 2.4972+-0.0546 ? call-spread-apply 26.4138+-0.8725 ? 26.7948+-0.6387 ? might be 1.0144x slower call-spread-call 20.7230+-0.9460 ? 20.9724+-1.8077 ? might be 1.0120x slower captured-assignments 0.4479+-0.0298 ? 0.4507+-0.0532 ? cast-int-to-double 5.1251+-0.1271 5.1192+-0.0714 cell-argument 5.9630+-0.2656 5.7973+-0.2402 might be 1.0286x faster cfg-simplify 2.9256+-0.0712 2.9249+-0.0676 chain-getter-access 8.3702+-0.0904 8.3199+-0.1364 cmpeq-obj-to-obj-other 12.2488+-1.3522 12.1508+-1.1670 constant-test 4.7646+-0.0782 ? 4.8276+-0.0738 ? might be 1.0132x slower create-lots-of-functions 9.7007+-0.7030 9.6286+-0.6474 cse-new-array-buffer 2.3788+-0.0700 ? 2.4535+-0.1602 ? might be 1.0314x slower cse-new-array 2.3887+-0.0494 ? 2.4084+-0.0478 ? custom-setter-getter-as-put-get-by-id 0.5628+-0.0808 0.5218+-0.0423 might be 1.0786x faster DataView-custom-properties 30.7096+-0.4890 30.4730+-0.2186 delay-tear-off-arguments-strictmode 11.7510+-0.0932 ? 11.9025+-0.4817 ? might be 1.0129x slower deltablue-varargs 163.9812+-3.2302 162.5600+-5.8814 destructuring-arguments 160.0967+-1.8746 ? 161.0539+-1.8152 ? destructuring-parameters-overridden-by-function 0.4518+-0.0128 ? 0.4534+-0.0124 ? destructuring-swap 4.8060+-0.1164 4.7576+-0.0588 might be 1.0102x faster direct-arguments-getbyval 1.2362+-0.0560 ? 1.2402+-0.0372 ? div-boolean-double 5.2439+-0.1148 ? 5.2968+-0.0849 ? might be 1.0101x slower div-boolean 8.1296+-0.0347 ? 8.1494+-0.1589 ? double-get-by-val-out-of-bounds 4.3836+-0.0802 4.3356+-0.0628 might be 1.0111x faster double-pollution-getbyval 8.6259+-0.0253 8.6191+-0.0229 double-pollution-putbyoffset 3.6270+-0.1120 3.6150+-0.0386 double-real-use 23.3433+-0.1511 ? 24.1882+-1.6044 ? might be 1.0362x slower double-to-int32-typed-array-no-inline 2.2192+-0.1019 2.1472+-0.0513 might be 1.0335x faster double-to-int32-typed-array 2.0547+-0.0659 2.0494+-0.0403 double-to-uint32-typed-array-no-inline 2.3489+-0.1286 2.2843+-0.0727 might be 1.0283x faster double-to-uint32-typed-array 2.1037+-0.0430 2.0980+-0.0310 elidable-new-object-dag 33.4324+-0.5871 ? 33.8960+-0.5547 ? might be 1.0139x slower elidable-new-object-roflcopter 34.2512+-4.2867 32.7433+-1.0972 might be 1.0460x faster elidable-new-object-then-call 32.0888+-1.2802 31.9394+-1.0022 elidable-new-object-tree 36.9382+-0.9992 36.5475+-0.2659 might be 1.0107x faster empty-string-plus-int 4.7880+-0.1269 4.7707+-0.0562 emscripten-cube2hash 26.0525+-1.4632 ? 26.3471+-1.5037 ? might be 1.0113x slower exit-length-on-plain-object 14.7318+-0.1039 ? 14.9639+-0.4612 ? might be 1.0158x slower external-arguments-getbyval 1.2526+-0.0766 ? 1.3114+-0.0826 ? might be 1.0469x slower external-arguments-putbyval 2.1706+-0.1352 ? 2.2178+-0.0867 ? might be 1.0218x slower fixed-typed-array-storage-var-index 1.2279+-0.0092 ? 1.2471+-0.0403 ? might be 1.0157x slower fixed-typed-array-storage 0.9509+-0.0391 0.9308+-0.0293 might be 1.0216x faster Float32Array-matrix-mult 3.9956+-0.0546 3.9757+-0.0259 Float32Array-to-Float64Array-set 49.5357+-2.0413 48.9205+-0.7007 might be 1.0126x faster Float64Array-alloc-long-lived 59.0958+-0.5459 ? 59.1653+-1.3932 ? Float64Array-to-Int16Array-set 61.0013+-0.6496 ^ 59.5512+-0.4463 ^ definitely 1.0244x faster fold-double-to-int 11.8719+-0.1180 ? 11.8783+-0.0956 ? fold-get-by-id-to-multi-get-by-offset-rare-int 11.0314+-0.9212 10.6917+-0.8768 might be 1.0318x faster fold-get-by-id-to-multi-get-by-offset 9.6885+-0.4845 ? 10.5125+-0.9120 ? might be 1.0850x slower fold-multi-get-by-offset-to-get-by-offset 8.6114+-1.4912 ? 8.9487+-1.5546 ? might be 1.0392x slower fold-multi-get-by-offset-to-poly-get-by-offset 8.9432+-0.6927 ? 9.1591+-0.8500 ? might be 1.0241x slower fold-multi-put-by-offset-to-poly-put-by-offset 8.7901+-1.2703 ? 9.4038+-0.3656 ? might be 1.0698x slower fold-multi-put-by-offset-to-put-by-offset 10.0044+-0.9269 9.5695+-0.2726 might be 1.0454x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.2658+-0.4312 ? 9.5878+-1.1038 ? might be 1.0347x slower fold-put-by-id-to-multi-put-by-offset 12.1638+-0.9794 11.9233+-1.2340 might be 1.0202x faster fold-put-by-val-with-string-to-multi-put-by-offset 10.9641+-0.7812 10.4998+-0.6671 might be 1.0442x faster fold-put-by-val-with-symbol-to-multi-put-by-offset 11.3741+-1.7746 11.1201+-1.3174 might be 1.0228x faster fold-put-structure 7.9530+-1.0751 ? 8.2544+-0.1892 ? might be 1.0379x slower for-of-iterate-array-entries 10.6078+-0.0317 10.5708+-0.0577 for-of-iterate-array-keys 3.4485+-0.0585 ? 3.4945+-0.1010 ? might be 1.0133x slower for-of-iterate-array-values 3.5161+-0.2036 3.3816+-0.1152 might be 1.0398x faster fround 17.7928+-1.5483 17.0738+-0.2502 might be 1.0421x faster ftl-library-inlining-dataview 58.1843+-0.4143 ? 58.6662+-1.1359 ? ftl-library-inlining 97.9745+-1.5624 97.1259+-0.6130 function-call 10.5469+-0.0914 ? 10.8947+-0.8088 ? might be 1.0330x slower function-dot-apply 2.0308+-0.0363 ? 2.0444+-0.0336 ? function-test 2.7032+-0.0321 ? 2.7580+-0.0491 ? might be 1.0203x slower function-with-eval 87.7772+-1.0292 87.1446+-1.9618 gcse-poly-get-less-obvious 21.1309+-0.3790 21.0281+-0.3158 gcse-poly-get 22.1318+-1.4697 ? 23.0770+-1.8956 ? might be 1.0427x slower gcse 3.3726+-0.0298 ? 3.3909+-0.0650 ? get-by-id-bimorphic-check-structure-elimination-simple 2.7072+-0.2078 2.6341+-0.0352 might be 1.0277x faster get-by-id-bimorphic-check-structure-elimination 4.8430+-0.2587 4.6281+-0.0161 might be 1.0464x faster get-by-id-chain-from-try-block 2.4062+-0.0650 ? 2.4200+-0.0325 ? get-by-id-check-structure-elimination 3.9060+-0.0684 3.8998+-0.0730 get-by-id-proto-or-self 15.1927+-0.5787 ? 15.2297+-0.7205 ? get-by-id-quadmorphic-check-structure-elimination-simple 2.8807+-0.0189 2.8706+-0.0263 get-by-id-self-or-proto 15.7816+-1.3242 15.0835+-0.6334 might be 1.0463x faster get-by-val-out-of-bounds 4.2115+-0.0583 ? 4.2328+-0.0503 ? get-by-val-with-string-bimorphic-check-structure-elimination-simple 2.7249+-0.0360 ? 2.9009+-0.3549 ? might be 1.0646x slower get-by-val-with-string-bimorphic-check-structure-elimination 6.0631+-0.0324 ? 6.0956+-0.2093 ? get-by-val-with-string-chain-from-try-block 2.4433+-0.0289 2.4305+-0.0316 get-by-val-with-string-check-structure-elimination 5.1728+-0.0672 5.1185+-0.0419 might be 1.0106x faster get-by-val-with-string-proto-or-self 15.4272+-0.6656 ? 15.5053+-0.5925 ? get-by-val-with-string-quadmorphic-check-structure-elimination-simple 3.0839+-0.0338 3.0449+-0.0154 might be 1.0128x faster get-by-val-with-string-self-or-proto 15.7072+-1.3561 15.5603+-0.5658 get-by-val-with-symbol-bimorphic-check-structure-elimination-simple 2.9580+-0.0648 2.9020+-0.0182 might be 1.0193x faster get-by-val-with-symbol-bimorphic-check-structure-elimination 12.2490+-0.0423 12.2154+-0.0337 get-by-val-with-symbol-chain-from-try-block 2.4783+-0.1652 2.4513+-0.0470 might be 1.0110x faster get-by-val-with-symbol-check-structure-elimination 10.9527+-0.0159 ? 11.0070+-0.1109 ? get-by-val-with-symbol-proto-or-self 15.4757+-0.6439 ? 15.6916+-0.9106 ? might be 1.0140x slower get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple 3.7681+-0.2017 3.7251+-0.0983 might be 1.0115x faster get-by-val-with-symbol-self-or-proto 15.5771+-0.6389 ? 15.8154+-0.7590 ? might be 1.0153x slower get_callee_monomorphic 2.5417+-0.4015 2.3551+-0.0558 might be 1.0792x faster get_callee_polymorphic 3.3781+-0.0600 ? 3.4392+-0.0779 ? might be 1.0181x slower getter-no-activation 4.7693+-0.1439 4.7371+-0.1320 getter-prototype 7.8220+-0.0576 7.8062+-0.1385 getter-richards-try-catch 970.3440+-9.9184 ? 983.6841+-12.5441 ? might be 1.0137x slower getter-richards 114.8048+-3.8737 113.5520+-5.2384 might be 1.0110x faster getter 5.4112+-0.5748 ? 5.9649+-0.6318 ? might be 1.1023x slower global-object-access-with-mutating-structure 5.6425+-0.0592 5.5385+-0.0746 might be 1.0188x faster global-var-const-infer-fire-from-opt 0.8841+-0.0809 0.7991+-0.0866 might be 1.1063x faster global-var-const-infer 0.7113+-0.1035 0.6344+-0.0141 might be 1.1212x faster hard-overflow-check-equal 27.3360+-0.1364 ? 27.5158+-0.4324 ? hard-overflow-check 27.2447+-0.6603 27.0408+-0.3915 HashMap-put-get-iterate-keys 25.0658+-1.4582 ? 26.4224+-1.7463 ? might be 1.0541x slower HashMap-put-get-iterate 26.8241+-1.6266 26.4235+-0.7542 might be 1.0152x faster HashMap-string-put-get-iterate 23.6803+-1.3015 22.9619+-0.7039 might be 1.0313x faster hoist-make-rope 8.6912+-1.3618 8.5734+-0.7849 might be 1.0137x faster hoist-poly-check-structure-effectful-loop 3.6753+-0.0555 3.6338+-0.0563 might be 1.0114x faster hoist-poly-check-structure 3.1169+-0.0813 3.0831+-0.0640 might be 1.0110x faster imul-double-only 7.7633+-0.3062 7.5973+-0.3402 might be 1.0219x faster imul-int-only 9.0631+-0.3428 8.3069+-0.8189 might be 1.0910x faster imul-mixed 7.0444+-0.2713 6.9615+-0.2947 might be 1.0119x faster in-four-cases 16.8323+-0.5395 16.8177+-0.1803 in-one-case-false 9.5669+-0.5757 9.2122+-0.0542 might be 1.0385x faster in-one-case-true 9.3559+-0.3109 ? 9.9058+-0.9195 ? might be 1.0588x slower in-two-cases 9.6513+-0.3107 ? 9.9525+-0.4761 ? might be 1.0312x slower indexed-properties-in-objects 2.8101+-0.0432 2.7944+-0.0356 infer-closure-const-then-mov-no-inline 3.5930+-0.0416 3.5678+-0.0212 infer-closure-const-then-mov 17.5088+-0.2338 ? 17.7745+-0.4306 ? might be 1.0152x slower infer-closure-const-then-put-to-scope-no-inline 11.0011+-0.4060 10.9068+-0.0823 infer-closure-const-then-put-to-scope 22.2613+-0.3749 ? 22.2956+-0.0581 ? infer-closure-const-then-reenter-no-inline 47.0961+-0.2424 ? 48.1132+-1.4880 ? might be 1.0216x slower infer-closure-const-then-reenter 22.6319+-0.7032 ? 22.6542+-0.2240 ? infer-constant-global-property 3.3957+-0.0207 ? 3.4019+-0.0268 ? infer-constant-property 2.7268+-0.1862 2.6201+-0.0314 might be 1.0407x faster infer-one-time-closure-ten-vars 7.6737+-0.1296 ? 7.7776+-0.0800 ? might be 1.0135x slower infer-one-time-closure-two-vars 7.4716+-0.0936 7.3761+-0.1693 might be 1.0129x faster infer-one-time-closure 7.2709+-0.1248 7.2101+-0.1843 infer-one-time-deep-closure 10.6083+-0.2278 ? 11.0022+-0.8576 ? might be 1.0371x slower inline-arguments-access 3.5781+-0.0440 ? 3.7284+-0.2123 ? might be 1.0420x slower inline-arguments-aliased-access 3.5744+-0.0433 3.5729+-0.0815 inline-arguments-local-escape 3.8764+-0.4724 3.5991+-0.0445 might be 1.0770x faster inline-get-scoped-var 4.4655+-0.0452 ? 4.4987+-0.0777 ? inlined-put-by-id-transition 9.2123+-0.4702 8.9753+-0.1940 might be 1.0264x faster inlined-put-by-val-with-string-transition 42.5698+-3.9338 40.6547+-1.7099 might be 1.0471x faster inlined-put-by-val-with-symbol-transition 40.9533+-2.4453 39.9971+-0.1956 might be 1.0239x faster int-or-other-abs-then-get-by-val 4.5300+-0.0739 ? 4.5684+-0.0256 ? int-or-other-abs-zero-then-get-by-val 14.9861+-0.0446 ? 15.0731+-0.1291 ? int-or-other-add-then-get-by-val 4.5470+-0.2638 ? 4.5692+-0.3563 ? int-or-other-add 4.9542+-0.0289 ? 4.9581+-0.0550 ? int-or-other-div-then-get-by-val 3.7686+-0.0619 ? 3.9353+-0.4616 ? might be 1.0442x slower int-or-other-max-then-get-by-val 3.9225+-0.0733 ? 3.9644+-0.1845 ? might be 1.0107x slower int-or-other-min-then-get-by-val 3.9409+-0.4178 3.7809+-0.0425 might be 1.0423x faster int-or-other-mod-then-get-by-val 3.5133+-0.0489 3.4632+-0.0413 might be 1.0145x faster int-or-other-mul-then-get-by-val 3.6174+-0.0625 ? 3.6375+-0.0682 ? int-or-other-neg-then-get-by-val 3.9990+-0.0335 ? 4.0193+-0.0747 ? int-or-other-neg-zero-then-get-by-val 15.1051+-0.1322 ? 15.1626+-0.2966 ? int-or-other-sub-then-get-by-val 4.3648+-0.0348 ? 4.4406+-0.1069 ? might be 1.0174x slower int-or-other-sub 3.4951+-0.0593 3.4678+-0.0433 int-overflow-local 4.0555+-0.0392 ? 4.0742+-0.0864 ? Int16Array-alloc-long-lived 43.6225+-1.2152 ? 44.1325+-0.9786 ? might be 1.0117x slower Int16Array-bubble-sort-with-byteLength 19.8344+-0.6968 19.4811+-0.2167 might be 1.0181x faster Int16Array-bubble-sort 16.6038+-0.1833 16.5129+-0.0307 Int16Array-load-int-mul 1.4422+-0.0300 1.4367+-0.0192 Int16Array-to-Int32Array-set 45.5738+-0.6376 45.4064+-0.4155 Int32Array-alloc-large 11.3999+-0.2273 11.3153+-0.3311 Int32Array-alloc-long-lived 48.4660+-1.1699 ? 48.4732+-0.7744 ? Int32Array-alloc 3.0319+-0.0782 3.0024+-0.1048 Int32Array-Int8Array-view-alloc 5.9991+-0.1804 5.9826+-0.1700 int52-spill 4.6050+-0.0670 ? 4.6251+-0.0839 ? Int8Array-alloc-long-lived 39.2949+-0.9155 ? 39.4332+-1.3031 ? Int8Array-load-with-byteLength 3.3848+-0.0797 ? 3.5974+-0.6406 ? might be 1.0628x slower Int8Array-load 3.4648+-0.2082 3.4030+-0.0966 might be 1.0182x faster integer-divide 10.7557+-1.2157 10.3531+-0.1264 might be 1.0389x faster integer-modulo 1.5881+-0.0140 ? 1.6021+-0.0286 ? is-boolean-fold-tricky 3.8161+-0.0813 3.7635+-0.0499 might be 1.0140x faster is-boolean-fold 2.6422+-0.0278 ? 2.7084+-0.1165 ? might be 1.0250x slower is-function-fold-tricky-internal-function 9.4532+-0.0679 9.2937+-0.1321 might be 1.0172x faster is-function-fold-tricky 4.0306+-0.0621 3.9876+-0.0738 might be 1.0108x faster is-function-fold 2.7257+-0.0895 2.6787+-0.0561 might be 1.0176x faster is-number-fold-tricky 4.0051+-0.1016 3.9528+-0.0518 might be 1.0132x faster is-number-fold 2.6702+-0.0466 ? 2.6901+-0.0863 ? is-object-or-null-fold-functions 2.7424+-0.1177 2.6950+-0.0660 might be 1.0176x faster is-object-or-null-fold-less-tricky 4.0413+-0.0806 4.0293+-0.1192 is-object-or-null-fold-tricky 4.7805+-0.0513 4.7314+-0.0546 might be 1.0104x faster is-object-or-null-fold 2.7175+-0.1070 2.6707+-0.0236 might be 1.0175x faster is-object-or-null-trickier-function 4.0261+-0.0608 ? 4.1040+-0.2096 ? might be 1.0194x slower is-object-or-null-trickier-internal-function 9.7173+-0.1015 ? 10.2145+-1.3602 ? might be 1.0512x slower is-object-or-null-tricky-function 4.0131+-0.0462 3.9943+-0.0229 is-object-or-null-tricky-internal-function 7.3750+-0.0373 ^ 7.1836+-0.0365 ^ definitely 1.0266x faster is-string-fold-tricky 3.9844+-0.0459 3.9273+-0.0255 might be 1.0146x faster is-string-fold 2.6819+-0.0377 2.6574+-0.0459 is-undefined-fold-tricky 3.3611+-0.0677 3.3330+-0.0497 is-undefined-fold 2.6429+-0.0223 ? 2.7238+-0.2269 ? might be 1.0306x slower JSONP-negative-0 0.2722+-0.0153 ? 0.2818+-0.0323 ? might be 1.0352x slower large-int-captured 4.1772+-0.2302 4.0790+-0.0452 might be 1.0241x faster large-int-neg 13.8124+-0.3379 ? 14.4538+-1.7786 ? might be 1.0464x slower large-int 12.8279+-0.2276 ? 13.0207+-0.3727 ? might be 1.0150x slower load-varargs-elimination 20.0648+-0.4255 ? 20.4291+-0.8273 ? might be 1.0182x slower logical-not-weird-types 3.0173+-0.0547 3.0161+-0.0266 logical-not 4.2819+-0.0361 ? 4.3296+-0.1052 ? might be 1.0111x slower lots-of-fields 8.9823+-0.1357 8.9640+-0.1204 make-indexed-storage 2.8665+-0.1685 ? 2.8703+-0.1501 ? make-rope-cse 3.6203+-0.1416 3.6035+-0.0349 marsaglia-larger-ints 31.8461+-1.1994 31.3162+-0.2266 might be 1.0169x faster marsaglia-osr-entry 20.8161+-0.1552 ? 20.8609+-0.4290 ? math-with-out-of-bounds-array-values 20.9289+-0.1425 ? 21.5000+-1.2057 ? might be 1.0273x slower max-boolean 2.7077+-0.0451 2.7016+-0.0376 method-on-number 15.3310+-0.1014 15.2623+-0.0858 min-boolean 2.6440+-0.0374 2.6334+-0.0399 minus-boolean-double 3.0637+-0.0271 ? 3.1176+-0.1202 ? might be 1.0176x slower minus-boolean 2.3354+-0.0386 ? 2.3423+-0.0268 ? misc-strict-eq 28.5207+-1.0769 28.0711+-1.1651 might be 1.0160x faster mod-boolean-double 11.1957+-0.3565 11.0237+-0.0833 might be 1.0156x faster mod-boolean 8.2718+-0.0847 ? 8.3071+-0.1119 ? mul-boolean-double 3.6338+-0.0435 ? 3.6920+-0.1960 ? might be 1.0160x slower mul-boolean 2.8065+-0.0482 ? 2.8093+-0.0198 ? neg-boolean 3.0913+-0.0313 3.0783+-0.0209 negative-zero-divide 0.3755+-0.0129 0.3576+-0.0106 might be 1.0502x faster negative-zero-modulo 0.3787+-0.0300 0.3563+-0.0088 might be 1.0627x faster negative-zero-negate 0.3459+-0.0334 ? 0.3469+-0.0244 ? nested-function-parsing 45.4895+-0.6117 45.4073+-1.0255 new-array-buffer-dead 86.3708+-0.5707 ? 86.7158+-0.5472 ? new-array-buffer-push 6.2376+-0.2692 6.1499+-0.2123 might be 1.0143x faster new-array-dead 14.8133+-0.5553 ? 15.2627+-0.3982 ? might be 1.0303x slower new-array-push 3.4535+-0.0302 ? 3.5293+-0.3030 ? might be 1.0219x slower no-inline-constructor 31.2910+-0.1132 ^ 30.3049+-0.1992 ^ definitely 1.0325x faster number-test 2.9847+-0.0131 ? 3.0214+-0.0402 ? might be 1.0123x slower object-closure-call 4.8717+-0.0517 ? 5.4961+-1.5145 ? might be 1.1282x slower object-get-own-property-symbols-on-large-array 4.3147+-0.2025 4.1968+-0.1669 might be 1.0281x faster object-test 2.7040+-0.0160 2.6983+-0.0405 obvious-sink-pathology-taken 97.1811+-1.0740 96.7818+-1.6108 obvious-sink-pathology 29.4484+-0.3327 29.3926+-0.4618 obviously-elidable-new-object 28.3073+-0.5155 28.2855+-0.3462 plus-boolean-arith 2.4135+-0.0653 ? 2.4637+-0.1210 ? might be 1.0208x slower plus-boolean-double 3.1204+-0.0168 ? 3.1387+-0.0612 ? plus-boolean 2.6348+-0.1238 2.5593+-0.0448 might be 1.0295x faster poly-chain-access-different-prototypes-simple 2.5753+-0.0309 ? 2.6100+-0.0387 ? might be 1.0135x slower poly-chain-access-different-prototypes 2.5501+-0.0344 2.5496+-0.0374 poly-chain-access-simpler 2.5845+-0.0342 ? 2.5927+-0.0235 ? poly-chain-access 2.5018+-0.0315 ? 2.5173+-0.0436 ? poly-stricteq 49.6485+-1.1436 ? 49.6996+-1.0932 ? polymorphic-array-call 1.2955+-0.0837 1.2527+-0.0604 might be 1.0342x faster polymorphic-get-by-id 2.8857+-0.0449 ? 2.9395+-0.0603 ? might be 1.0186x slower polymorphic-put-by-id 27.6441+-0.8913 27.3924+-0.5811 polymorphic-put-by-val-with-string 28.2394+-0.3981 28.1709+-0.9008 polymorphic-put-by-val-with-symbol 28.0359+-0.2508 ? 28.0816+-0.4713 ? polymorphic-structure 12.2614+-0.1766 ? 12.3373+-0.4535 ? polyvariant-monomorphic-get-by-id 7.0106+-0.9037 ? 7.0347+-1.1021 ? proto-getter-access 8.3163+-0.1358 ? 8.3745+-0.1324 ? prototype-access-with-mutating-prototype 5.4070+-0.1842 ? 5.4637+-0.1236 ? might be 1.0105x slower put-by-id-replace-and-transition 7.7956+-0.4007 ? 8.1045+-0.5233 ? might be 1.0396x slower put-by-id-slightly-polymorphic 2.7145+-0.1060 2.6980+-0.0720 put-by-id 9.8105+-0.3287 9.5541+-0.1634 might be 1.0268x faster put-by-val-direct 0.3922+-0.0753 0.3475+-0.0167 might be 1.1287x faster put-by-val-large-index-blank-indexing-type 5.5421+-0.4691 5.4023+-0.4025 might be 1.0259x faster put-by-val-machine-int 2.5581+-0.0788 2.5194+-0.0343 might be 1.0154x faster put-by-val-with-string-replace-and-transition 9.8821+-0.1185 ? 9.9301+-0.0483 ? put-by-val-with-string-slightly-polymorphic 2.9198+-0.0652 ? 2.9674+-0.0893 ? might be 1.0163x slower put-by-val-with-string 10.0017+-0.1074 ? 10.1884+-0.2010 ? might be 1.0187x slower put-by-val-with-symbol-replace-and-transition 11.3833+-0.0792 ? 11.5997+-0.2336 ? might be 1.0190x slower put-by-val-with-symbol-slightly-polymorphic 3.2117+-0.1340 3.1639+-0.1012 might be 1.0151x faster put-by-val-with-symbol 10.2664+-0.3575 10.2589+-0.5173 rare-osr-exit-on-local 13.2559+-0.0455 ? 13.3703+-0.1098 ? raytrace-with-empty-try-catch 5.0893+-0.0636 ? 5.1293+-0.0939 ? raytrace-with-try-catch 9.6173+-0.1417 9.5097+-0.1547 might be 1.0113x faster register-pressure-from-osr 16.1334+-0.1120 ? 16.1800+-0.3192 ? repeat-multi-get-by-offset 21.3506+-0.1126 21.2980+-0.3269 richards-empty-try-catch 80.4632+-18.9860 71.0152+-0.7751 might be 1.1330x faster richards-try-catch 238.6912+-1.8175 ? 238.9566+-1.4757 ? setter-prototype 7.8074+-0.3921 7.6654+-0.0827 might be 1.0185x faster setter 5.7029+-0.6937 ? 5.7385+-0.6430 ? simple-activation-demo 23.9718+-0.9036 23.5856+-0.2222 might be 1.0164x faster simple-getter-access 10.9903+-0.5059 10.6465+-0.1599 might be 1.0323x faster simple-poly-call-nested 8.5628+-0.6070 ? 8.6896+-0.4326 ? might be 1.0148x slower simple-poly-call 1.2911+-0.0378 1.2844+-0.0310 sin-boolean 19.5177+-1.6620 17.9852+-1.0659 might be 1.0852x faster singleton-scope 63.5813+-1.3067 ? 64.6547+-3.8967 ? might be 1.0169x slower sink-function 9.8293+-0.5220 9.6231+-0.6141 might be 1.0214x faster sink-huge-activation 16.0143+-0.4338 ? 16.1260+-0.4649 ? sinkable-new-object-dag 54.1672+-2.3018 52.1514+-1.6868 might be 1.0387x faster sinkable-new-object-taken 42.4604+-1.5278 40.9923+-2.5689 might be 1.0358x faster sinkable-new-object 29.1228+-0.2675 ? 29.3457+-0.4748 ? slow-array-profile-convergence 2.4745+-0.0254 ? 2.4964+-0.0276 ? slow-convergence 2.3700+-0.0199 ? 2.3817+-0.0627 ? slow-ternaries 17.0605+-0.2690 ? 19.9107+-6.3360 ? might be 1.1671x slower sorting-benchmark 16.3370+-0.0694 ? 16.4663+-0.1586 ? sparse-conditional 1.1896+-0.0759 1.1769+-0.0221 might be 1.0108x faster splice-to-remove 12.0234+-0.8161 ? 12.3917+-1.0474 ? might be 1.0306x slower string-char-code-at 12.9946+-0.2289 ? 13.2048+-0.5788 ? might be 1.0162x slower string-concat-object 2.2545+-0.1116 2.1928+-0.0580 might be 1.0281x faster string-concat-pair-object 2.2129+-0.0650 2.1858+-0.0792 might be 1.0124x faster string-concat-pair-simple 9.3263+-0.2014 9.2070+-0.2085 might be 1.0130x faster string-concat-simple 9.5241+-0.3078 9.3738+-0.2112 might be 1.0160x faster string-cons-repeat 6.2838+-0.0442 ? 6.3940+-0.1926 ? might be 1.0176x slower string-cons-tower 6.5670+-0.2077 6.4874+-0.0750 might be 1.0123x faster string-equality 15.6006+-0.1687 15.5030+-0.0922 string-get-by-val-big-char 6.4397+-0.0394 ? 6.4914+-0.0740 ? string-get-by-val-out-of-bounds-insane 3.0538+-0.1048 ? 3.0911+-0.1396 ? might be 1.0122x slower string-get-by-val-out-of-bounds 3.9234+-0.0341 ? 3.9397+-0.0562 ? string-get-by-val 2.8155+-0.0230 2.8100+-0.0335 string-hash 1.8628+-0.0454 1.8539+-0.0297 string-long-ident-equality 13.2432+-0.3444 13.1273+-0.0450 string-out-of-bounds 10.0443+-0.2305 9.9513+-0.1798 string-repeat-arith 27.1472+-2.1259 26.3323+-0.3561 might be 1.0309x faster string-sub 54.0976+-0.4130 53.7591+-1.5718 string-test 2.8844+-0.0830 2.8804+-0.0690 string-var-equality 24.7783+-0.2189 24.6470+-0.1508 structure-hoist-over-transitions 2.4748+-0.0722 2.3798+-0.0431 might be 1.0399x faster substring-concat-weird 36.4586+-1.2340 35.2508+-0.5461 might be 1.0343x faster substring-concat 40.3966+-0.8921 39.8949+-0.7860 might be 1.0126x faster substring 44.6601+-0.2564 ? 44.8883+-0.3494 ? switch-char-constant 2.6643+-0.0409 ? 2.6695+-0.0284 ? switch-char 5.2778+-0.1029 ? 6.2516+-0.9270 ? might be 1.1845x slower switch-constant 8.4666+-0.5676 ? 8.5496+-0.7148 ? switch-string-basic-big-var 14.4736+-0.1323 14.3723+-0.0423 switch-string-basic-big 14.2643+-0.0722 ? 14.3327+-0.1777 ? switch-string-basic-var 13.5512+-0.0376 ? 13.6162+-0.0990 ? switch-string-basic 12.3769+-0.3381 12.3547+-0.1294 switch-string-big-length-tower-var 17.5831+-0.1212 17.5307+-0.1848 switch-string-length-tower-var 12.8657+-0.1818 ? 13.4358+-0.6273 ? might be 1.0443x slower switch-string-length-tower 11.3019+-0.1657 11.2375+-0.0938 switch-string-short 11.4747+-0.3854 11.2465+-0.0733 might be 1.0203x faster switch 10.8461+-0.3178 10.7578+-0.1127 tear-off-arguments-simple 3.1223+-0.0999 3.0801+-0.0129 might be 1.0137x faster tear-off-arguments 4.0180+-0.1040 ? 4.0626+-0.0621 ? might be 1.0111x slower temporal-structure 11.5959+-0.0743 ? 11.6627+-0.2156 ? to-int32-boolean 12.2839+-0.0869 ? 12.3976+-0.2645 ? try-catch-get-by-val-cloned-arguments 9.1616+-0.1942 9.0406+-0.1877 might be 1.0134x faster try-catch-get-by-val-direct-arguments 2.1864+-0.0494 2.1226+-0.0284 might be 1.0301x faster try-catch-get-by-val-scoped-arguments 4.5760+-0.1012 ? 4.6873+-0.2590 ? might be 1.0243x slower typed-array-get-set-by-val-profiling 26.3908+-0.4453 26.3081+-0.3598 undefined-property-access 217.9684+-4.1094 215.7817+-2.9033 might be 1.0101x faster undefined-test 2.9860+-0.0302 ? 3.0081+-0.0537 ? unprofiled-licm 9.2561+-0.1549 9.2274+-0.0505 v8-raytrace-with-empty-try-catch 23.8810+-0.4021 ? 24.0401+-0.8322 ? v8-raytrace-with-try-catch 61.8796+-1.3865 60.3725+-1.0324 might be 1.0250x faster varargs-call 12.7985+-0.1414 ? 12.7994+-0.1171 ? varargs-construct-inline 21.6446+-0.3788 21.5068+-0.1504 varargs-construct 20.3234+-0.5365 20.1718+-0.1023 varargs-inline 8.7325+-0.1172 ? 8.7648+-0.1113 ? varargs-strict-mode 9.9231+-0.1440 9.8306+-0.0477 varargs 9.7795+-0.0645 ? 9.8391+-0.0973 ? weird-inlining-const-prop 2.0930+-0.0652 ? 2.1987+-0.0921 ? might be 1.0505x slower <geometric> 7.9203+-0.0138 7.9066+-0.0168 might be 1.0017x faster TipOfTree LazySlowPath AsmBench: bigfib.cpp 461.4143+-10.1411 ^ 441.8242+-4.3578 ^ definitely 1.0443x faster cray.c 392.9474+-2.5624 ? 393.1709+-2.0818 ? dry.c 427.1070+-7.2073 418.9111+-8.6867 might be 1.0196x faster FloatMM.c 687.1698+-3.6241 ? 687.9941+-6.3887 ? gcc-loops.cpp 3445.9452+-16.8151 ? 3461.1735+-14.9808 ? n-body.c 834.6586+-8.0509 829.1597+-4.1416 Quicksort.c 409.4754+-6.9808 ? 409.9520+-4.5216 ? stepanov_container.cpp 3512.9198+-29.3336 ? 3524.8396+-36.7002 ? Towers.c 238.5330+-2.2185 238.4304+-1.6170 <geometric> 720.7394+-2.4872 ^ 716.0400+-1.7129 ^ definitely 1.0066x faster TipOfTree LazySlowPath CompressionBench: huffman 61.5305+-1.4293 60.9656+-1.3717 arithmetic-simple 283.1003+-6.6927 276.9004+-3.4888 might be 1.0224x faster arithmetic-precise 245.3054+-1.7173 243.6239+-0.4322 arithmetic-complex-precise 249.2643+-4.3520 247.8599+-3.8654 arithmetic-precise-order-0 283.1423+-1.2491 ? 285.4641+-1.9978 ? arithmetic-precise-order-1 304.2594+-3.5441 303.0113+-2.8497 arithmetic-precise-order-2 347.1212+-3.5373 ? 350.9721+-3.6519 ? might be 1.0111x slower arithmetic-simple-order-1 322.7831+-4.1599 ? 323.8018+-7.1994 ? arithmetic-simple-order-2 377.6834+-4.8874 376.8096+-3.5374 lz-string 328.7832+-43.1137 309.3584+-2.1833 might be 1.0628x faster <geometric> 257.2001+-3.1908 255.1010+-0.8888 might be 1.0082x faster TipOfTree LazySlowPath Geomean of preferred means: <scaled-result> 49.9466+-0.1001 49.6862+-0.1911 might be 1.0052x faster
Filip Pizlo
Comment 9 2015-10-10 17:54:49 PDT
Created attachment 262841 [details] almost done
Filip Pizlo
Comment 10 2015-10-10 18:23:36 PDT
Created attachment 262843 [details] the patch
WebKit Commit Bot
Comment 11 2015-10-10 18:25:57 PDT
Attachment 262843 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.h:67: The parameter name "callSiteIndex" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:37: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:38: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:39: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:41: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:150: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:151: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7324: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8471: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/WTF/wtf/SharedTask.h:63: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/WTF/wtf/SharedTask.h:75: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPathCall.h:45: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:44: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:45: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:46: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:54: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:74: Declaration has space between type name and * in numberOfCallingConventionRegisters * wordSize [whitespace/declaration] [3] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:126: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 19 in 31 files If any of these errors are false positives, please file a bug against check-webkit-style.
Filip Pizlo
Comment 12 2015-10-10 20:05:07 PDT
Created attachment 262844 [details] the patch
WebKit Commit Bot
Comment 13 2015-10-10 20:06:46 PDT
Attachment 262844 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.h:67: The parameter name "callSiteIndex" adds no information, so it should be removed. [readability/parameter_name] [5] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:37: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:38: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:39: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:40: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:41: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:150: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:151: Wrong number of spaces before statement. (expected: 12) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7324: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8471: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/WTF/wtf/SharedTask.h:63: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/WTF/wtf/SharedTask.h:75: Extra space before ( in function call [whitespace/parens] [4] ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPathCall.h:45: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:44: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:45: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:46: Wrong number of spaces before statement. (expected: 8) [whitespace/indent] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:54: Multi line control clauses should use braces. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:74: Declaration has space between type name and * in numberOfCallingConventionRegisters * wordSize [whitespace/declaration] [3] ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:126: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 19 in 31 files If any of these errors are false positives, please file a bug against check-webkit-style.
Saam Barati
Comment 14 2015-10-12 10:09:55 PDT
Comment on attachment 262844 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=262844&action=review LGTM > Source/JavaScriptCore/ftl/FTLCompile.cpp:598 > + // FIXME: This should be pushing the lazy slow path index in some vector or whatever. Don't you do this below? > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7247 > + // This is a mechanism for creating a code generator that fills in a gap in the code using our This is a nice API > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7288 > + // LValue output = lazySlowPath( These lambdas shouldn't be capturing any stack variables by reference, right? Maybe it's worth just adding a sentence even though it's relatively obvious. > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7341 > + CallSiteIndex callSiteIndex = I wonder if the right thing to do here is to have LazySlowPathDescriptor take a CodeOrigin, and then when compiling the lazy slow path we get the actual call site index for the code origin. This way, if this lazy slow path is duplicated, each version will have its own call site index. I'm not sure this strictly matters, but its more in the spirit of the fixes I need to make for *ById > Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:81 > + m_stackBytesNeeded = (m_stackBytesNeeded + stackAlignmentBytes() - 1) & ~(stackAlignmentBytes() - 1); Is this just rounding up to stackAlignmentBytes()? If so, I think calling roundingUpToMultiple is clearer.
Filip Pizlo
Comment 15 2015-10-12 10:17:41 PDT
(In reply to comment #14) > Comment on attachment 262844 [details] > the patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=262844&action=review > > LGTM > > > Source/JavaScriptCore/ftl/FTLCompile.cpp:598 > > + // FIXME: This should be pushing the lazy slow path index in some vector or whatever. > > Don't you do this below? Yup, removed the FIXME. > > > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7247 > > + // This is a mechanism for creating a code generator that fills in a gap in the code using our > > This is a nice API > > > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7288 > > + // LValue output = lazySlowPath( > > These lambdas shouldn't be capturing any stack variables by reference, > right? Maybe it's worth just adding a sentence even though it's relatively > obvious. Yeah, I added a comment. > > > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7341 > > + CallSiteIndex callSiteIndex = > > I wonder if the right thing to do here is to have LazySlowPathDescriptor > take a CodeOrigin, and then when compiling the lazy slow path > we get the actual call site index for the code origin. This way, if this > lazy slow path is duplicated, each version will have its own call site > index. I'm not sure this strictly matters, but its more in the spirit of the > fixes I need to make for *ById Sure. I think that's the right approach. But, I'm not going to do it in this patch, since this patch reuses the InlineCacheDescriptor logic that already requires a CallSiteIndex to be produced by FTLLowerDFGToLLVM.cpp. There is no way for this patch to make LazySlowPathDescriptor take a CodeOrigin and do the "right thing" without either making it completely separate from the InlineCacheDescriptor logic or by fixing the InlineCacheDescriptor in this patch. > > > Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:81 > > + m_stackBytesNeeded = (m_stackBytesNeeded + stackAlignmentBytes() - 1) & ~(stackAlignmentBytes() - 1); > > Is this just rounding up to stackAlignmentBytes()? If so, I think calling > roundingUpToMultiple is clearer. Yeah, that's just a round-up. This code is not new to this patch. It was just moved. So, I'll keep it like this for now.
Filip Pizlo
Comment 16 2015-10-12 10:57:28 PDT
Filip Pizlo
Comment 18 2015-10-12 11:12:42 PDT
(In reply to comment #17) > This broke LLINT CLOOP build: > > https://build.webkit.org/builders/ > Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/ > compile-webkit/logs/stdio Fix landed in: http://trac.webkit.org/changeset/190865
Csaba Osztrogonác
Comment 19 2015-10-12 12:07:01 PDT
(In reply to comment #18) > (In reply to comment #17) > > This broke LLINT CLOOP build: > > > > https://build.webkit.org/builders/ > > Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/ > > compile-webkit/logs/stdio > > Fix landed in: http://trac.webkit.org/changeset/190865 The build is still broken.
Filip Pizlo
Comment 20 2015-10-12 12:16:12 PDT
(In reply to comment #19) > (In reply to comment #18) > > (In reply to comment #17) > > > This broke LLINT CLOOP build: > > > > > > https://build.webkit.org/builders/ > > > Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/ > > > compile-webkit/logs/stdio > > > > Fix landed in: http://trac.webkit.org/changeset/190865 > > The build is still broken. Another try: http://trac.webkit.org/changeset/190878
Brent Fulgham
Comment 21 2015-10-12 12:26:36 PDT
This is still broken, even with the most recent checkin. Should we roll it out?
Brent Fulgham
Comment 22 2015-10-12 12:31:16 PDT
Should those be "SharedTask" -> "SharedTaskFunctor"? The "SharedTask" class (at least on my source tree) doesn't accept any template arguments.
Filip Pizlo
Comment 23 2015-10-12 12:36:30 PDT
(In reply to comment #21) > This is still broken, even with the most recent checkin. Should we roll it > out? The Windows bots need a clean build.
Filip Pizlo
Comment 24 2015-10-12 12:36:53 PDT
(In reply to comment #22) > Should those be "SharedTask" -> "SharedTaskFunctor"? The "SharedTask" class > (at least on my source tree) doesn't accept any template arguments. Your checkout must be stale, this patch turns SharedTask into a template.
Note You need to log in before you can comment on or make changes to this bug.