RESOLVED FIXED Bug 144348
FTL should fully support Switch (it currently lacks the SwitchString variant)
https://bugs.webkit.org/show_bug.cgi?id=144348
Summary FTL should fully support Switch (it currently lacks the SwitchString variant)
Filip Pizlo
Reported 2015-04-28 12:52:36 PDT
Patch forthcoming.
Attachments
work in progress (20.88 KB, patch)
2015-04-28 16:19 PDT, Filip Pizlo
no flags
more (22.60 KB, patch)
2015-04-28 18:21 PDT, Filip Pizlo
no flags
the patch (24.79 KB, patch)
2015-04-28 18:37 PDT, Filip Pizlo
benjamin: review+
Filip Pizlo
Comment 1 2015-04-28 16:19:08 PDT
Created attachment 251894 [details] work in progress I think that I wrote the important parts.
Filip Pizlo
Comment 2 2015-04-28 18:21:46 PDT
Filip Pizlo
Comment 3 2015-04-28 18:37:07 PDT
Created attachment 251912 [details] the patch
WebKit Commit Bot
Comment 4 2015-04-28 18:38:51 PDT
Attachment 251912 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6211: Multi line control clauses should use braces. [whitespace/braces] [4] Total errors found: 1 in 13 files If any of these errors are false positives, please file a bug against check-webkit-style.
Benjamin Poulain
Comment 5 2015-04-28 19:29:17 PDT
Comment on attachment 251912 [details] the patch View in context: https://bugs.webkit.org/attachment.cgi?id=251912&action=review > Source/JavaScriptCore/dfg/DFGCommon.cpp:49 > +bool stringLessThan(StringImpl* a, StringImpl* b) Should be StringImpl& > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6214 > + for ( > + unsigned j = numChecked; > + j < std::min(cases[begin].string->length(), cases[i].string->length()); > + ++j) { This is not particularly readable. It would probably look nicer if std::min(cases[begin].string->length(), cases[i].string->length()) was just stored in a temporary. > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6242 > + m_out.check( > + m_out.notEqual( > + m_out.load8(buffer, m_heaps.characters8[i]), > + m_out.constInt8(cases[begin].string->at(i))), > + unsure(fallThrough)); I wonder if LLVM can mutate this in whole-word load and compare. > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6268 > + switchStringRecurse( > + data, buffer, length, cases, commonChars, begin + 1, end, minLength + 1, false); Could be on one line. > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6300 > + switchCases.append(SwitchCase( > + m_out.constInt8(characterCases[i].character), characterBlocks[i], Weight())); Could be on one line.
Filip Pizlo
Comment 6 2015-04-28 19:46:58 PDT
(In reply to comment #5) > Comment on attachment 251912 [details] > the patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=251912&action=review > > > Source/JavaScriptCore/dfg/DFGCommon.cpp:49 > > +bool stringLessThan(StringImpl* a, StringImpl* b) > > Should be StringImpl& I did this, and the code just became more awkward. Passing around StringImpl* is an idiom throughout the DFG/FTL. Using StringImpl& here means that both callers have to convert. It's not clear that this is better. > > > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6214 > > + for ( > > + unsigned j = numChecked; > > + j < std::min(cases[begin].string->length(), cases[i].string->length()); > > + ++j) { > > This is not particularly readable. > It would probably look nicer if std::min(cases[begin].string->length(), > cases[i].string->length()) was just stored in a temporary. Good call. > > > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6242 > > + m_out.check( > > + m_out.notEqual( > > + m_out.load8(buffer, m_heaps.characters8[i]), > > + m_out.constInt8(cases[begin].string->at(i))), > > + unsure(fallThrough)); > > I wonder if LLVM can mutate this in whole-word load and compare. What do you mean? Like, converting multiple load-and-compare-byte's into a single load-and-compare-word? There are probably super weird rules governing this. Currently, LLVM emits something kind of gross: 0x5a96e7603c9d: movzbl 2(%rax), %ecx 0x5a96e7603ca1: cmpl $97, %ecx 0x5a96e7603ca4: jne 0x5a96e7603ce8 It's not clear why this isn't a cmpb. > > > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6268 > > + switchStringRecurse( > > + data, buffer, length, cases, commonChars, begin + 1, end, minLength + 1, false); > > Could be on one line. > > > Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:6300 > > + switchCases.append(SwitchCase( > > + m_out.constInt8(characterCases[i].character), characterBlocks[i], Weight())); > > Could be on one line.
Filip Pizlo
Comment 7 2015-04-28 20:34:40 PDT
This appears to be generally good. There are probably still opportunities for improving the FTL codegen, though. The main bug for that is https://bugs.webkit.org/show_bug.cgi?id=144369. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r183523) "Terminals" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r183523) 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 Terminals SunSpider: 3d-cube 5.3543+-0.3548 5.1802+-0.1009 might be 1.0336x faster 3d-morph 5.9595+-0.3917 5.7491+-0.0912 might be 1.0366x faster 3d-raytrace 6.6210+-0.1638 6.6015+-0.1482 access-binary-trees 2.3643+-0.1516 ? 2.4142+-0.2575 ? might be 1.0211x slower access-fannkuch 6.1366+-0.1046 5.9721+-0.2269 might be 1.0275x faster access-nbody 2.8062+-0.0508 ? 3.1547+-0.3853 ? might be 1.1242x slower access-nsieve 3.4931+-0.1653 3.3087+-0.0532 might be 1.0557x faster bitops-3bit-bits-in-byte 1.5824+-0.0587 ? 1.6420+-0.1949 ? might be 1.0377x slower bitops-bits-in-byte 3.3286+-0.0358 ? 3.3493+-0.0308 ? bitops-bitwise-and 2.4613+-0.3675 2.2797+-0.2896 might be 1.0797x faster bitops-nsieve-bits 3.3494+-0.1084 ? 3.5010+-0.0440 ? might be 1.0453x slower controlflow-recursive 2.2801+-0.0926 ? 2.6474+-0.9948 ? might be 1.1611x slower crypto-aes 4.4760+-0.1885 4.4671+-0.2250 crypto-md5 3.1236+-0.2565 ^ 2.6996+-0.0987 ^ definitely 1.1571x faster crypto-sha1 2.8200+-0.3372 2.8170+-0.3394 date-format-tofte 9.1293+-0.0785 ! 9.3199+-0.0705 ! definitely 1.0209x slower date-format-xparb 5.6182+-0.0931 ? 5.7032+-0.1303 ? might be 1.0151x slower math-cordic 3.1801+-0.0951 ^ 3.0370+-0.0205 ^ definitely 1.0471x faster math-partial-sums 5.6758+-0.5938 5.1611+-0.1023 might be 1.0997x faster math-spectral-norm 1.8988+-0.0367 ? 2.1923+-0.3723 ? might be 1.1545x slower regexp-dna 8.0303+-1.2339 7.5879+-0.3587 might be 1.0583x faster string-base64 5.0626+-0.8457 ? 5.1441+-0.9787 ? might be 1.0161x slower string-fasta 6.8106+-0.6028 6.6533+-0.1993 might be 1.0236x faster string-tagcloud 10.2061+-0.5869 9.6366+-0.2065 might be 1.0591x faster string-unpack-code 19.4661+-0.4855 19.2476+-0.1938 might be 1.0114x faster string-validate-input 4.9673+-0.1107 4.8568+-0.0529 might be 1.0227x faster <arithmetic> 5.2385+-0.0658 5.1663+-0.0207 might be 1.0140x faster TipOfTree Terminals LongSpider: 3d-cube 874.1553+-14.6006 873.9714+-9.4267 3d-morph 1527.2032+-1.4312 ? 1527.8996+-2.4811 ? 3d-raytrace 729.5059+-6.5604 ? 741.5318+-6.0231 ? might be 1.0165x slower access-binary-trees 1033.6076+-7.2170 ? 1036.3295+-4.9198 ? access-fannkuch 333.6738+-8.6508 328.2607+-8.2592 might be 1.0165x faster access-nbody 610.1186+-1.0428 ? 610.9359+-2.4936 ? access-nsieve 878.3144+-7.0189 ^ 857.3562+-8.5277 ^ definitely 1.0244x faster bitops-3bit-bits-in-byte 45.9904+-3.4009 44.5866+-0.6467 might be 1.0315x faster bitops-bits-in-byte 101.0753+-1.3525 100.9071+-1.4578 bitops-nsieve-bits 637.4696+-3.6806 636.5802+-4.4428 controlflow-recursive 479.9611+-1.8852 ? 484.0185+-2.5203 ? crypto-aes 704.7030+-7.5512 704.4341+-7.8390 crypto-md5 528.8409+-12.8919 516.0682+-5.6817 might be 1.0248x faster crypto-sha1 602.9231+-17.1810 599.3675+-3.2430 date-format-tofte 748.4829+-15.0739 ? 819.7740+-185.0228 ? might be 1.0952x slower date-format-xparb 782.6889+-18.5365 770.1645+-21.8697 might be 1.0163x faster math-cordic 591.3864+-2.8311 590.3917+-1.6318 math-partial-sums 506.8916+-2.2305 503.9038+-2.1031 math-spectral-norm 565.7580+-2.6590 564.2144+-2.3893 string-base64 378.3989+-7.2973 374.0896+-6.6529 might be 1.0115x faster string-fasta 437.4173+-2.7056 437.3315+-4.7366 string-tagcloud 224.3921+-2.8835 ^ 214.8813+-1.4074 ^ definitely 1.0443x faster <geometric> 497.2868+-2.0832 495.4879+-4.3402 might be 1.0036x faster TipOfTree Terminals V8Spider: crypto 55.1071+-1.9533 ? 55.9237+-2.1187 ? might be 1.0148x slower deltablue 103.6455+-20.8532 98.2136+-5.2241 might be 1.0553x faster earley-boyer 44.8873+-1.3239 ? 45.4948+-0.9255 ? might be 1.0135x slower raytrace 41.6949+-1.9005 40.3507+-2.1623 might be 1.0333x faster regexp 80.3903+-1.6702 ? 83.7220+-2.6260 ? might be 1.0414x slower richards 79.8234+-0.6533 79.6188+-2.7412 splay 39.2321+-0.9938 39.1759+-1.8225 <geometric> 59.5556+-1.8556 59.4438+-0.8604 might be 1.0019x faster TipOfTree Terminals Octane: encrypt 0.20376+-0.00182 ? 0.20473+-0.00218 ? decrypt 3.56558+-0.02625 ? 3.57213+-0.01568 ? deltablue x2 0.20806+-0.00323 0.20801+-0.00115 earley 0.53938+-0.00404 0.53903+-0.00754 boyer 6.69160+-0.03336 6.66578+-0.04062 navier-stokes x2 5.22408+-0.13524 5.19022+-0.03152 raytrace x2 1.26482+-0.04865 ? 1.28234+-0.04380 ? might be 1.0138x slower richards x2 0.12282+-0.00066 ? 0.12413+-0.00344 ? might be 1.0107x slower splay x2 0.39894+-0.00038 ? 0.39957+-0.00350 ? regexp x2 34.20295+-6.04788 31.57183+-0.10591 might be 1.0833x faster pdfjs x2 43.56107+-0.36633 ? 43.89870+-0.20334 ? mandreel x2 50.27427+-0.42446 ? 50.36641+-0.24247 ? gbemu x2 41.66389+-0.32640 ? 42.12281+-0.83950 ? might be 1.0110x slower closure 0.55669+-0.00279 0.55504+-0.00200 jquery 7.06367+-0.01208 ^ 7.01817+-0.02159 ^ definitely 1.0065x faster box2d x2 12.26414+-0.05100 ! 12.40304+-0.05474 ! definitely 1.0113x slower zlib x2 393.75937+-2.59497 393.65640+-3.11857 typescript x2 831.85677+-7.85343 827.71370+-13.46260 <geometric> 6.73876+-0.07661 6.72592+-0.01912 might be 1.0019x faster TipOfTree Terminals Kraken: ai-astar 271.553+-2.789 269.685+-1.419 audio-beat-detection 107.219+-0.416 106.822+-0.967 audio-dft 148.165+-3.214 ? 151.206+-4.127 ? might be 1.0205x slower audio-fft 80.992+-1.404 ? 83.386+-4.045 ? might be 1.0296x slower audio-oscillator 207.298+-2.139 ? 207.578+-1.864 ? imaging-darkroom 105.222+-1.783 104.926+-1.798 imaging-desaturate 63.251+-1.423 63.241+-1.574 imaging-gaussian-blur 113.191+-2.040 ? 113.397+-1.748 ? json-parse-financial 56.222+-1.904 ^ 45.671+-2.117 ^ definitely 1.2310x faster json-stringify-tinderbox 57.459+-2.007 ? 57.560+-2.162 ? stanford-crypto-aes 65.285+-0.840 64.933+-0.654 stanford-crypto-ccm 55.403+-0.535 54.941+-0.537 stanford-crypto-pbkdf2 168.524+-2.143 ? 171.076+-2.877 ? might be 1.0151x slower stanford-crypto-sha256-iterative 55.034+-1.474 ? 56.026+-1.651 ? might be 1.0180x slower <arithmetic> 111.058+-0.310 110.746+-0.482 might be 1.0028x faster TipOfTree Terminals JSRegress: abs-boolean 2.6748+-0.0547 ? 2.7028+-0.1269 ? might be 1.0105x slower adapt-to-double-divide 16.8320+-0.5143 ? 16.9319+-0.7521 ? aliased-arguments-getbyval 1.2622+-0.0646 1.2192+-0.0207 might be 1.0353x faster allocate-big-object 2.8846+-0.1676 ? 3.0803+-0.5389 ? might be 1.0678x slower arguments-named-and-reflective 12.6722+-0.3151 ? 13.5960+-1.2742 ? might be 1.0729x slower arguments-out-of-bounds 14.6987+-0.1280 ! 15.0413+-0.1904 ! definitely 1.0233x slower arguments-strict-mode 12.7061+-1.5184 11.9705+-1.0020 might be 1.0615x faster arguments 10.9130+-1.0913 ? 11.0470+-1.1746 ? might be 1.0123x slower arity-mismatch-inlining 0.8642+-0.0511 ? 0.9539+-0.2793 ? might be 1.1038x slower array-access-polymorphic-structure 6.9828+-0.3438 ? 7.0872+-0.4011 ? might be 1.0150x slower array-nonarray-polymorhpic-access 33.3645+-1.5401 ? 34.6131+-1.6635 ? might be 1.0374x slower array-prototype-every 90.5893+-1.0248 ^ 87.1557+-1.6225 ^ definitely 1.0394x faster array-prototype-forEach 87.1612+-2.0687 ? 87.3557+-2.2626 ? array-prototype-map 98.0798+-1.3631 93.7365+-3.2327 might be 1.0463x faster array-prototype-some 90.5638+-1.3956 90.2819+-2.1775 array-splice-contiguous 40.9797+-0.6826 ? 42.2029+-1.6058 ? might be 1.0298x slower array-with-double-add 4.3008+-0.1901 4.0951+-0.0742 might be 1.0502x faster array-with-double-increment 3.1980+-0.0271 ? 3.2689+-0.0642 ? might be 1.0222x slower array-with-double-mul-add 5.1099+-0.2681 5.0349+-0.0997 might be 1.0149x faster array-with-double-sum 3.2804+-0.0274 ? 3.4484+-0.4016 ? might be 1.0512x slower array-with-int32-add-sub 7.4794+-1.8582 6.8204+-0.1154 might be 1.0966x faster array-with-int32-or-double-sum 3.3136+-0.0300 3.3055+-0.0410 ArrayBuffer-DataView-alloc-large-long-lived 37.8524+-6.9794 ? 39.0662+-1.7577 ? might be 1.0321x slower ArrayBuffer-DataView-alloc-long-lived 14.6647+-1.7984 ! 17.6277+-0.9519 ! definitely 1.2021x slower ArrayBuffer-Int32Array-byteOffset 3.8673+-0.0999 ? 3.9336+-0.2830 ? might be 1.0171x slower ArrayBuffer-Int8Array-alloc-large-long-lived 34.2815+-2.8311 32.8380+-0.9591 might be 1.0440x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 24.5369+-2.0046 23.9162+-1.7467 might be 1.0260x faster ArrayBuffer-Int8Array-alloc-long-lived 13.7998+-1.7044 ? 14.0795+-1.6301 ? might be 1.0203x slower ArrayBuffer-Int8Array-alloc 11.5745+-1.2511 ? 12.3962+-1.9041 ? might be 1.0710x slower asmjs_bool_bug 7.9771+-0.2937 7.6560+-0.1023 might be 1.0419x faster assign-custom-setter-polymorphic 3.1385+-0.0570 ? 3.1853+-0.4096 ? might be 1.0149x slower assign-custom-setter 4.5199+-0.2481 4.1438+-0.1326 might be 1.0908x faster basic-set 8.6023+-0.2689 ? 8.7197+-0.5806 ? might be 1.0137x slower big-int-mul 4.0173+-0.0758 ? 4.1272+-0.4603 ? might be 1.0274x slower boolean-test 3.2784+-0.3903 3.0503+-0.0396 might be 1.0748x faster branch-fold 3.7240+-0.0570 ? 3.8177+-0.3189 ? might be 1.0252x slower branch-on-string-as-boolean 19.4287+-1.4203 ? 19.8091+-1.3357 ? might be 1.0196x slower by-val-generic 8.0669+-0.3758 8.0156+-0.4390 call-spread-apply 30.5898+-1.2614 30.4508+-1.3060 call-spread-call 24.7109+-0.6061 ? 24.7463+-0.3133 ? captured-assignments 0.4750+-0.0971 ? 0.4788+-0.0284 ? cast-int-to-double 5.3840+-0.2658 5.2672+-0.0298 might be 1.0222x faster cell-argument 8.5710+-0.2864 8.5387+-0.2229 cfg-simplify 3.1154+-0.1437 3.0387+-0.1092 might be 1.0252x faster chain-getter-access 11.2305+-3.0223 9.9807+-0.1025 might be 1.1252x faster cmpeq-obj-to-obj-other 11.0646+-1.1299 ? 11.7672+-1.3661 ? might be 1.0635x slower constant-test 4.9379+-0.0264 ? 4.9494+-0.0351 ? create-lots-of-functions 11.7059+-0.3221 ? 11.8120+-0.4339 ? DataView-custom-properties 39.7018+-1.9457 ! 44.3875+-0.7322 ! definitely 1.1180x slower deconstructing-parameters-overridden-by-function 0.5103+-0.0390 ? 0.5149+-0.0671 ? delay-tear-off-arguments-strictmode 14.5728+-1.1654 14.5353+-1.0030 deltablue-varargs 203.4777+-3.3522 203.0190+-1.9222 destructuring-arguments 17.8840+-0.7646 ? 18.2347+-1.1878 ? might be 1.0196x slower destructuring-swap 5.0677+-0.0315 ? 5.1081+-0.0994 ? direct-arguments-getbyval 1.2841+-0.1673 1.2815+-0.1616 div-boolean-double 5.2168+-0.0380 ? 5.2436+-0.0512 ? div-boolean 7.8272+-0.0646 ? 7.8385+-0.1263 ? double-get-by-val-out-of-bounds 4.5444+-0.0831 ? 4.6110+-0.0704 ? might be 1.0147x slower double-pollution-getbyval 8.8482+-0.0525 ? 8.9486+-0.2063 ? might be 1.0114x slower double-pollution-putbyoffset 4.4757+-0.4607 ? 4.5290+-0.2026 ? might be 1.0119x slower double-to-int32-typed-array-no-inline 2.2733+-0.0888 2.2666+-0.0540 double-to-int32-typed-array 1.9022+-0.0256 ? 1.9474+-0.0743 ? might be 1.0238x slower double-to-uint32-typed-array-no-inline 2.4384+-0.2560 2.3394+-0.2742 might be 1.0423x faster double-to-uint32-typed-array 2.0805+-0.1404 2.0356+-0.1096 might be 1.0221x faster elidable-new-object-dag 43.4681+-1.6821 ? 44.9207+-1.8449 ? might be 1.0334x slower elidable-new-object-roflcopter 47.7045+-2.6726 46.5331+-0.7936 might be 1.0252x faster elidable-new-object-then-call 38.7701+-1.0755 ? 39.5025+-1.9359 ? might be 1.0189x slower elidable-new-object-tree 47.5940+-3.2415 45.8630+-1.7272 might be 1.0377x faster empty-string-plus-int 5.5282+-0.1148 ? 5.5374+-0.2167 ? emscripten-cube2hash 40.3355+-1.9809 38.7348+-1.2565 might be 1.0413x faster exit-length-on-plain-object 15.7105+-2.3431 14.5216+-1.1599 might be 1.0819x faster external-arguments-getbyval 1.3368+-0.1155 1.2714+-0.0560 might be 1.0514x faster external-arguments-putbyval 2.3499+-0.1222 2.2948+-0.0577 might be 1.0240x faster fixed-typed-array-storage-var-index 1.3031+-0.1545 1.2826+-0.1530 might be 1.0160x faster fixed-typed-array-storage 0.9422+-0.0796 0.9270+-0.0525 might be 1.0163x faster Float32Array-matrix-mult 4.5040+-0.1303 ? 4.6139+-0.4878 ? might be 1.0244x slower Float32Array-to-Float64Array-set 55.6069+-1.6692 ? 57.6822+-1.9317 ? might be 1.0373x slower Float64Array-alloc-long-lived 74.5455+-2.3756 73.9613+-2.0857 Float64Array-to-Int16Array-set 69.9509+-0.2347 69.4741+-1.6717 fold-double-to-int 13.2622+-0.1791 ? 13.6732+-0.3782 ? might be 1.0310x slower fold-get-by-id-to-multi-get-by-offset-rare-int 11.5358+-1.3182 11.4169+-2.1288 might be 1.0104x faster fold-get-by-id-to-multi-get-by-offset 10.2603+-0.6220 10.2065+-1.0509 fold-multi-get-by-offset-to-get-by-offset 9.6280+-0.9382 ? 9.6835+-1.1025 ? fold-multi-get-by-offset-to-poly-get-by-offset 9.9385+-0.8200 9.2304+-1.3560 might be 1.0767x faster fold-multi-put-by-offset-to-poly-put-by-offset 9.2130+-0.8638 ? 9.5136+-1.0404 ? might be 1.0326x slower fold-multi-put-by-offset-to-put-by-offset 5.0787+-0.9761 ? 5.7345+-1.2134 ? might be 1.1291x slower fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 10.0735+-0.4310 ? 10.5248+-1.0726 ? might be 1.0448x slower fold-put-by-id-to-multi-put-by-offset 10.8592+-1.3351 10.1503+-1.1576 might be 1.0698x faster fold-put-structure 4.1205+-0.1486 ! 5.4808+-0.8417 ! definitely 1.3301x slower for-of-iterate-array-entries 4.7305+-0.1185 ? 4.7675+-0.3292 ? for-of-iterate-array-keys 3.7697+-0.1004 3.7624+-0.1343 for-of-iterate-array-values 3.8255+-0.3107 3.8249+-0.3718 fround 21.1401+-0.8072 ? 21.5707+-0.6276 ? might be 1.0204x slower ftl-library-inlining-dataview 66.4744+-2.7873 ? 68.6969+-3.4656 ? might be 1.0334x slower ftl-library-inlining 67.4517+-2.2149 ? 72.8828+-15.8915 ? might be 1.0805x slower function-dot-apply 2.1917+-0.0228 ? 2.2064+-0.1084 ? function-test 3.5903+-0.4370 3.3213+-0.0413 might be 1.0810x faster function-with-eval 103.7676+-2.3764 ? 106.5173+-3.1287 ? might be 1.0265x slower gcse-poly-get-less-obvious 18.3383+-0.7236 18.1753+-0.4995 gcse-poly-get 22.0983+-2.2052 21.2064+-1.6252 might be 1.0421x faster gcse 4.2967+-0.0744 ? 4.3157+-0.0562 ? get-by-id-bimorphic-check-structure-elimination-simple 2.7678+-0.0711 2.7125+-0.0468 might be 1.0204x faster get-by-id-bimorphic-check-structure-elimination 6.1802+-0.3784 6.0406+-0.1792 might be 1.0231x faster get-by-id-chain-from-try-block 6.5776+-0.1729 ? 7.3235+-1.2094 ? might be 1.1134x slower get-by-id-check-structure-elimination 5.1184+-0.0392 ? 5.1349+-0.1155 ? get-by-id-proto-or-self 17.0965+-1.0342 16.9502+-0.6220 get-by-id-quadmorphic-check-structure-elimination-simple 3.2653+-0.2320 3.2369+-0.2349 get-by-id-self-or-proto 17.2513+-0.7330 ? 17.5508+-0.4209 ? might be 1.0174x slower get-by-val-out-of-bounds 4.3920+-0.0865 ? 4.4508+-0.1316 ? might be 1.0134x slower get_callee_monomorphic 2.8787+-0.0879 2.8350+-0.0505 might be 1.0154x faster get_callee_polymorphic 3.9651+-0.4066 ? 4.1114+-0.4812 ? might be 1.0369x slower getter-no-activation 4.9266+-0.1621 ? 5.0208+-0.2617 ? might be 1.0191x slower getter-richards 124.4921+-7.0920 ? 126.4354+-9.0568 ? might be 1.0156x slower getter 6.1124+-0.7415 5.7592+-0.8499 might be 1.0613x faster global-var-const-infer-fire-from-opt 0.9967+-0.0556 0.9851+-0.0792 might be 1.0117x faster global-var-const-infer 0.7846+-0.0927 ? 0.8092+-0.1171 ? might be 1.0313x slower HashMap-put-get-iterate-keys 26.3253+-0.4601 ? 26.4456+-0.4670 ? HashMap-put-get-iterate 26.1915+-0.2845 ? 26.4290+-0.3790 ? HashMap-string-put-get-iterate 27.2035+-0.6849 ? 27.9698+-1.4364 ? might be 1.0282x slower hoist-make-rope 13.1993+-1.2698 12.1194+-0.7804 might be 1.0891x faster hoist-poly-check-structure-effectful-loop 5.2686+-0.2791 5.1731+-0.2625 might be 1.0184x faster hoist-poly-check-structure 3.8122+-0.2859 3.6575+-0.0365 might be 1.0423x faster imul-double-only 8.9667+-0.7078 ? 9.0523+-0.8701 ? imul-int-only 10.0442+-0.6035 9.8386+-0.2487 might be 1.0209x faster imul-mixed 8.4321+-0.2643 8.2791+-0.1785 might be 1.0185x faster in-four-cases 20.6042+-0.2633 20.5675+-0.2130 in-one-case-false 10.4448+-0.8932 ? 10.6485+-0.7448 ? might be 1.0195x slower in-one-case-true 10.3568+-0.6635 10.2627+-0.5078 in-two-cases 10.5717+-0.5969 10.3499+-0.2955 might be 1.0214x faster indexed-properties-in-objects 3.1556+-0.2508 3.0012+-0.1151 might be 1.0515x faster infer-closure-const-then-mov-no-inline 3.8637+-0.0308 ? 3.8758+-0.0434 ? infer-closure-const-then-mov 19.7024+-0.1977 19.6564+-0.2236 infer-closure-const-then-put-to-scope-no-inline 14.1866+-0.9840 ? 14.2634+-0.8101 ? infer-closure-const-then-put-to-scope 22.6101+-1.7351 ? 23.1429+-1.5286 ? might be 1.0236x slower infer-closure-const-then-reenter-no-inline 62.0937+-0.7669 ? 62.6497+-0.7914 ? infer-closure-const-then-reenter 23.4227+-0.9684 ? 23.5657+-2.0214 ? infer-constant-global-property 31.3488+-1.8036 31.2987+-1.5027 infer-constant-property 2.9745+-0.3990 2.7082+-0.0212 might be 1.0983x faster infer-one-time-closure-ten-vars 13.9141+-1.6768 12.3693+-0.2336 might be 1.1249x faster infer-one-time-closure-two-vars 13.6365+-1.7756 13.3428+-1.1640 might be 1.0220x faster infer-one-time-closure 12.9135+-1.1277 ? 12.9140+-0.8865 ? infer-one-time-deep-closure 21.3886+-1.7792 ? 22.0115+-1.7834 ? might be 1.0291x slower inline-arguments-access 4.6584+-0.2760 ? 4.7167+-0.2122 ? might be 1.0125x slower inline-arguments-aliased-access 4.7278+-0.2187 4.6014+-0.0453 might be 1.0275x faster inline-arguments-local-escape 4.7021+-0.1508 ? 4.9007+-0.1235 ? might be 1.0422x slower inline-get-scoped-var 5.0772+-0.3841 4.8327+-0.1583 might be 1.0506x faster inlined-put-by-id-transition 11.9243+-0.6408 11.9008+-0.6428 int-or-other-abs-then-get-by-val 4.8024+-0.2169 4.7111+-0.1257 might be 1.0194x faster int-or-other-abs-zero-then-get-by-val 17.2363+-0.3287 ? 18.0448+-1.5431 ? might be 1.0469x slower int-or-other-add-then-get-by-val 4.3003+-0.0531 ? 4.5269+-0.2877 ? might be 1.0527x slower int-or-other-add 5.2904+-0.0362 ? 5.3428+-0.1078 ? int-or-other-div-then-get-by-val 4.4141+-0.2559 4.3312+-0.1403 might be 1.0191x faster int-or-other-max-then-get-by-val 4.4001+-0.0501 4.3277+-0.0313 might be 1.0167x faster int-or-other-min-then-get-by-val 4.3872+-0.0422 ? 4.5638+-0.5393 ? might be 1.0403x slower int-or-other-mod-then-get-by-val 3.9639+-0.0376 ? 3.9950+-0.0913 ? int-or-other-mul-then-get-by-val 4.0305+-0.1750 3.9285+-0.0610 might be 1.0260x faster int-or-other-neg-then-get-by-val 4.4786+-0.0494 ? 4.5859+-0.2239 ? might be 1.0240x slower int-or-other-neg-zero-then-get-by-val 18.1554+-1.4256 17.5907+-1.1918 might be 1.0321x faster int-or-other-sub-then-get-by-val 4.6995+-0.2828 4.5116+-0.0586 might be 1.0416x faster int-or-other-sub 3.5482+-0.0387 ? 3.6148+-0.3583 ? might be 1.0188x slower int-overflow-local 4.5832+-0.3516 4.5497+-0.1984 Int16Array-alloc-long-lived 53.4273+-1.3685 53.0343+-1.9862 Int16Array-bubble-sort-with-byteLength 20.2749+-0.1740 ? 21.1253+-1.5050 ? might be 1.0419x slower Int16Array-bubble-sort 19.8651+-0.3189 ? 20.1002+-1.1495 ? might be 1.0118x slower Int16Array-load-int-mul 1.5019+-0.0582 ? 1.5894+-0.2384 ? might be 1.0582x slower Int16Array-to-Int32Array-set 52.4190+-2.1994 ! 56.3946+-0.4760 ! definitely 1.0758x slower Int32Array-alloc-large 24.6608+-1.0729 24.5356+-0.9581 Int32Array-alloc-long-lived 57.9063+-1.0319 57.7856+-1.3952 Int32Array-alloc 3.7441+-0.4869 3.5340+-0.1684 might be 1.0594x faster Int32Array-Int8Array-view-alloc 7.5746+-0.8337 7.2794+-0.8385 might be 1.0405x faster int52-spill 6.2711+-0.0850 ? 6.4707+-0.1310 ? might be 1.0318x slower Int8Array-alloc-long-lived 48.0685+-1.3242 47.8883+-1.3372 Int8Array-load-with-byteLength 3.6593+-0.4495 3.3636+-0.1234 might be 1.0879x faster Int8Array-load 3.3409+-0.0831 3.3260+-0.0625 integer-divide 11.2454+-0.2836 11.0526+-0.0902 might be 1.0174x faster integer-modulo 2.0011+-0.0875 ? 2.0627+-0.2802 ? might be 1.0308x slower large-int-captured 4.6508+-0.0562 4.5833+-0.0401 might be 1.0147x faster large-int-neg 16.3036+-0.3042 ? 16.5643+-0.7709 ? might be 1.0160x slower large-int 15.4900+-0.8742 ? 15.8624+-1.8426 ? might be 1.0240x slower logical-not 4.5222+-0.0785 4.5186+-0.0442 lots-of-fields 13.3108+-0.3085 ? 14.4874+-2.3588 ? might be 1.0884x slower make-indexed-storage 3.1751+-0.0491 ? 3.2263+-0.4732 ? might be 1.0161x slower make-rope-cse 4.6630+-0.0547 ? 5.1268+-0.5102 ? might be 1.0995x slower marsaglia-larger-ints 36.6963+-1.1585 35.8216+-0.3260 might be 1.0244x faster marsaglia-osr-entry 23.0338+-0.3296 ? 23.7320+-1.3635 ? might be 1.0303x slower max-boolean 2.4413+-0.0575 ? 2.5144+-0.0920 ? might be 1.0300x slower method-on-number 18.1484+-0.2958 17.8257+-0.1657 might be 1.0181x faster min-boolean 2.4942+-0.0680 ? 2.5542+-0.1086 ? might be 1.0240x slower minus-boolean-double 3.2667+-0.1601 3.2046+-0.0430 might be 1.0194x faster minus-boolean 2.3449+-0.0871 ? 2.4336+-0.3876 ? might be 1.0378x slower misc-strict-eq 38.2471+-2.1430 37.9819+-1.2772 mod-boolean-double 11.4400+-1.4171 11.0592+-0.1971 might be 1.0344x faster mod-boolean 7.8496+-0.0298 ? 7.8866+-0.0923 ? mul-boolean-double 3.8579+-0.3733 ? 3.9023+-0.3104 ? might be 1.0115x slower mul-boolean 2.8420+-0.0289 ? 3.0050+-0.3141 ? might be 1.0574x slower neg-boolean 3.2876+-0.3643 ? 3.3437+-0.3623 ? might be 1.0171x slower negative-zero-divide 0.3592+-0.0234 ? 0.3683+-0.0581 ? might be 1.0255x slower negative-zero-modulo 0.3671+-0.0435 0.3664+-0.0670 negative-zero-negate 0.3267+-0.0133 ? 0.3587+-0.0796 ? might be 1.0982x slower nested-function-parsing 39.3559+-1.8256 ? 43.6181+-7.7991 ? might be 1.1083x slower new-array-buffer-dead 112.1038+-2.5414 ? 112.9250+-2.2069 ? new-array-buffer-push 7.4660+-0.8606 ? 7.8741+-0.7084 ? might be 1.0547x slower new-array-dead 19.5510+-0.3984 19.5157+-0.7147 new-array-push 4.3523+-0.9975 4.1925+-0.3851 might be 1.0381x faster no-inline-constructor 124.9724+-2.5215 ? 126.5118+-1.4425 ? might be 1.0123x slower number-test 3.0006+-0.0408 ? 3.0303+-0.0897 ? object-closure-call 5.6276+-0.1009 5.5819+-0.0204 object-test 3.1141+-0.0459 ? 3.2059+-0.2828 ? might be 1.0295x slower obvious-sink-pathology-taken 140.4048+-2.2576 ? 140.6861+-1.7339 ? obvious-sink-pathology 132.7371+-1.9195 131.8789+-2.0809 obviously-elidable-new-object 36.3644+-1.5924 35.9536+-1.8046 might be 1.0114x faster plus-boolean-arith 2.4712+-0.0365 ? 2.4965+-0.0656 ? might be 1.0103x slower plus-boolean-double 3.2000+-0.0444 ? 3.2367+-0.1426 ? might be 1.0115x slower plus-boolean 2.4311+-0.1545 2.4182+-0.1152 poly-chain-access-different-prototypes-simple 3.2846+-0.0631 3.2826+-0.0432 poly-chain-access-different-prototypes 2.6753+-0.1538 2.5666+-0.0354 might be 1.0424x faster poly-chain-access-simpler 3.3130+-0.1034 3.3084+-0.0603 poly-chain-access 2.7238+-0.2898 2.6377+-0.1380 might be 1.0327x faster poly-stricteq 62.0871+-0.5762 ? 62.5262+-0.8359 ? polymorphic-array-call 1.2348+-0.0468 ? 1.2923+-0.1806 ? might be 1.0466x slower polymorphic-get-by-id 3.2546+-0.3721 ? 3.2621+-0.3877 ? polymorphic-put-by-id 29.3740+-2.4701 ? 29.8955+-2.4562 ? might be 1.0178x slower polymorphic-structure 15.3610+-1.0582 14.9816+-0.3282 might be 1.0253x faster polyvariant-monomorphic-get-by-id 8.6151+-0.4644 8.5454+-0.1436 proto-getter-access 9.8990+-0.1977 9.8352+-0.1345 put-by-id-replace-and-transition 9.0442+-0.0942 ? 9.1396+-0.2007 ? might be 1.0106x slower put-by-id-slightly-polymorphic 2.8595+-0.0702 2.8020+-0.0622 might be 1.0205x faster put-by-id 12.7913+-0.4452 12.7067+-0.3014 put-by-val-direct 0.4625+-0.0232 0.4597+-0.0137 put-by-val-large-index-blank-indexing-type 6.0574+-0.2273 5.7723+-0.0906 might be 1.0494x faster put-by-val-machine-int 2.8801+-0.2301 2.8159+-0.0781 might be 1.0228x faster rare-osr-exit-on-local 15.4924+-1.0425 15.4816+-1.3892 register-pressure-from-osr 21.4709+-0.2095 21.3330+-0.1640 setter 6.6345+-0.4659 5.7812+-0.7151 might be 1.1476x faster simple-activation-demo 24.8079+-0.2665 ? 25.5987+-1.2549 ? might be 1.0319x slower simple-getter-access 13.1394+-0.2919 ? 13.2441+-0.7480 ? simple-poly-call-nested 8.3512+-0.2603 ? 8.3936+-0.4565 ? simple-poly-call 1.2994+-0.0496 ? 1.3270+-0.0537 ? might be 1.0213x slower sin-boolean 23.3797+-0.8145 ? 24.2513+-2.6086 ? might be 1.0373x slower singleton-scope 67.0863+-0.6621 ? 67.8235+-1.9307 ? might be 1.0110x slower sink-function 12.4987+-0.3541 ? 12.6694+-0.4807 ? might be 1.0137x slower sinkable-new-object-dag 71.0027+-1.5743 ? 71.8188+-2.1119 ? might be 1.0115x slower sinkable-new-object-taken 51.3573+-2.9525 50.8887+-2.4628 sinkable-new-object 39.3928+-1.4149 ? 39.8171+-1.7263 ? might be 1.0108x slower slow-array-profile-convergence 2.8501+-0.1139 2.8428+-0.0767 slow-convergence 2.9356+-0.4372 2.6764+-0.0560 might be 1.0969x faster sorting-benchmark 27.3591+-6.1244 25.0432+-0.7522 might be 1.0925x faster sparse-conditional 1.1486+-0.0438 ? 1.2065+-0.1928 ? might be 1.0504x slower splice-to-remove 17.6734+-1.5925 17.0087+-1.8451 might be 1.0391x faster string-char-code-at 17.1917+-0.4752 ? 18.0083+-1.3155 ? might be 1.0475x slower string-concat-object 2.6065+-0.1559 ? 2.7340+-0.2380 ? might be 1.0489x slower string-concat-pair-object 2.5721+-0.2047 ? 2.7462+-0.3228 ? might be 1.0677x slower string-concat-pair-simple 12.2632+-0.9467 11.6532+-0.4317 might be 1.0523x faster string-concat-simple 13.5338+-1.3697 13.1717+-1.4560 might be 1.0275x faster string-cons-repeat 8.1469+-0.4886 ? 9.1047+-0.9790 ? might be 1.1176x slower string-cons-tower 8.7563+-1.0260 ? 9.2319+-1.2502 ? might be 1.0543x slower string-equality 17.2334+-0.1400 ? 17.4769+-0.2444 ? might be 1.0141x slower string-get-by-val-big-char 7.1500+-0.0368 ? 7.2313+-0.2321 ? might be 1.0114x slower string-get-by-val-out-of-bounds-insane 4.0721+-0.9264 ? 4.1210+-0.7653 ? might be 1.0120x slower string-get-by-val-out-of-bounds 5.2660+-0.0550 ? 5.2888+-0.0773 ? string-get-by-val 3.5238+-0.4640 3.3243+-0.0889 might be 1.0600x faster string-hash 2.0334+-0.0847 ? 2.2047+-0.2148 ? might be 1.0842x slower string-long-ident-equality 15.1318+-0.3900 14.7858+-0.1277 might be 1.0234x faster string-out-of-bounds 14.8850+-0.1285 ? 14.9237+-0.2610 ? string-repeat-arith 34.0893+-2.2596 32.7359+-2.4283 might be 1.0413x faster string-sub 69.5118+-4.2879 64.4708+-3.9805 might be 1.0782x faster string-test 2.9385+-0.0404 2.8852+-0.0524 might be 1.0185x faster string-var-equality 31.3082+-2.3463 31.0919+-1.9319 structure-hoist-over-transitions 2.6222+-0.0863 ? 2.6509+-0.1075 ? might be 1.0109x slower substring-concat-weird 39.7762+-1.0077 ? 40.2220+-1.1142 ? might be 1.0112x slower substring-concat 42.1387+-2.0149 41.4270+-1.1429 might be 1.0172x faster substring 46.8692+-2.0332 46.2790+-1.5925 might be 1.0128x faster switch-char-constant 2.7385+-0.1402 ? 2.7498+-0.0700 ? switch-char 6.9626+-1.0444 ? 7.0225+-0.6977 ? switch-constant 8.6090+-0.4927 8.4573+-0.2479 might be 1.0179x faster switch-string-basic-big-var 15.2704+-1.5360 ! 18.4760+-0.6953 ! definitely 1.2099x slower switch-string-basic-big 14.5329+-1.4245 14.3690+-0.1442 might be 1.0114x faster switch-string-basic-var 14.7098+-1.0208 14.6261+-0.2126 switch-string-basic 13.8297+-1.5640 13.5736+-0.2606 might be 1.0189x faster switch-string-big-length-tower-var 20.2002+-1.5841 ? 21.0655+-1.4009 ? might be 1.0428x slower switch-string-length-tower-var 15.7887+-1.9318 15.2662+-0.1705 might be 1.0342x faster switch-string-length-tower 14.3843+-1.8795 12.9677+-0.3641 might be 1.1092x faster switch-string-short 13.8087+-1.8365 12.7974+-0.2330 might be 1.0790x faster switch 12.6725+-0.2102 12.6556+-0.3083 tear-off-arguments-simple 3.6372+-0.3098 3.5484+-0.2026 might be 1.0250x faster tear-off-arguments 4.8075+-0.2478 4.6993+-0.1143 might be 1.0230x faster temporal-structure 12.5603+-0.4906 12.3249+-0.1692 might be 1.0191x faster to-int32-boolean 13.5349+-0.1511 ? 13.9533+-0.2718 ? might be 1.0309x slower try-catch-get-by-val-cloned-arguments 14.8156+-1.2887 ? 15.4980+-2.1070 ? might be 1.0461x slower try-catch-get-by-val-direct-arguments 7.0168+-0.9222 ? 7.0798+-0.7917 ? try-catch-get-by-val-scoped-arguments 8.2320+-1.1068 ? 8.5033+-1.4045 ? might be 1.0330x slower typed-array-get-set-by-val-profiling 32.6621+-1.1924 ? 33.1569+-2.3431 ? might be 1.0151x slower undefined-property-access 353.9491+-2.5183 ? 355.4368+-3.2411 ? undefined-test 3.1955+-0.3721 3.0844+-0.2040 might be 1.0360x faster unprofiled-licm 22.7355+-0.3311 ? 22.9991+-0.8605 ? might be 1.0116x slower varargs-call 16.3224+-1.3491 ? 16.6448+-1.1707 ? might be 1.0197x slower varargs-construct-inline 22.5042+-0.4270 ? 24.0538+-1.5010 ? might be 1.0689x slower varargs-construct 32.1652+-0.5990 ? 32.1919+-0.8634 ? varargs-inline 9.8497+-0.9108 9.5335+-0.4138 might be 1.0332x faster varargs-strict-mode 10.2370+-0.1358 ? 10.2853+-0.2641 ? varargs 10.4180+-0.3968 10.2558+-0.1368 might be 1.0158x faster weird-inlining-const-prop 2.3513+-0.1742 ? 2.3637+-0.1634 ? <geometric> 8.9734+-0.0224 ? 8.9962+-0.0364 ? might be 1.0025x slower TipOfTree Terminals AsmBench: bigfib.cpp 495.0863+-3.4191 ? 495.2115+-1.4958 ? cray.c 427.2837+-3.6813 425.4461+-1.5655 dry.c 486.6491+-13.0536 481.4631+-8.7362 might be 1.0108x faster FloatMM.c 726.2350+-5.0755 723.6348+-1.7695 gcc-loops.cpp 4265.7178+-8.6135 4259.5857+-8.2617 n-body.c 982.0747+-7.8687 981.1179+-3.1693 Quicksort.c 418.7010+-3.8462 ? 421.1767+-5.0543 ? stepanov_container.cpp 3597.5999+-6.4450 ? 3598.2443+-12.0231 ? Towers.c 259.5325+-0.4221 ? 262.0172+-3.7301 ? <geometric> 791.8489+-2.7091 791.4071+-3.4608 might be 1.0006x faster TipOfTree Terminals CompressionBench: huffman 365.6912+-2.4995 ? 367.0227+-3.0184 ? arithmetic-simple 395.1027+-3.1648 ? 397.7232+-3.7063 ? arithmetic-precise 303.2745+-5.3614 298.5373+-4.5625 might be 1.0159x faster arithmetic-complex-precise 299.4463+-2.9283 298.1935+-3.8454 arithmetic-precise-order-0 427.2052+-5.4192 422.9203+-5.0545 might be 1.0101x faster arithmetic-precise-order-1 328.2134+-4.3051 324.3773+-1.8315 might be 1.0118x faster arithmetic-precise-order-2 358.3283+-2.8711 358.0954+-4.1034 arithmetic-simple-order-1 426.0775+-6.6666 422.2477+-3.1185 arithmetic-simple-order-2 468.1896+-4.5746 ? 473.8795+-13.5784 ? might be 1.0122x slower lz-string 326.5867+-2.4388 325.8449+-3.6595 <geometric> 365.8279+-1.3168 364.6733+-1.2909 might be 1.0032x faster TipOfTree Terminals Geomean of preferred means: <scaled-result> 64.5574+-0.3217 64.3559+-0.1307 might be 1.0031x faster
Filip Pizlo
Comment 8 2015-04-28 20:36:22 PDT
Note You need to log in before you can comment on or make changes to this bug.