RESOLVED FIXED 144500
FTL should use AI more
https://bugs.webkit.org/show_bug.cgi?id=144500
Summary FTL should use AI more
Filip Pizlo
Reported 2015-05-01 14:25:07 PDT
Currently if a DFG Node semantically requires a check, and we know that the check is redundant, then one of three things happen in the FTL backend: 1) If the check is part of the edge, then we will correctly remove it and not emit any LLVM IR for the check. 2) If the check is the only thing that the node does, and AI knows this, then ConstantFoldingPhase will remove the node before we get to the backend. 3) If the node does many things and also the check (or AI just doesn't know about the check), then we will emit LLVM IR for the check. In many (most?) cases, LLVM will not remove the check because it will involve things opaque to LLVM - like loading the type part of the object's header. An easy simplification is to have all of the isNumber/isCell/isBlah things in FTL::LowerDFGToLLVM have a mode where they return an LLVM constant if we have already proved that the incoming value either is, or isn't, the type in question. This will be slightly less effective than (1) or (2) since we will still emit control flow for the unreachable path, but in the end LLVM will prove this control flow unreachable and kill the code - so it's much better than falling over to (3).
Attachments
the patch (34.95 KB, patch)
2015-05-01 14:30 PDT, Filip Pizlo
oliver: review+
Filip Pizlo
Comment 1 2015-05-01 14:30:03 PDT
Created attachment 252170 [details] the patch Still testing.
Filip Pizlo
Comment 2 2015-05-01 14:34:58 PDT
Comment on attachment 252170 [details] the patch Tests look good.
Oliver Hunt
Comment 3 2015-05-01 14:57:10 PDT
r=me
Filip Pizlo
Comment 4 2015-05-01 18:59:04 PDT
Perf results: Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r183690) "MoreFTLAI" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r183690) 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 MoreFTLAI SunSpider: 3d-cube 5.2133+-0.0795 5.1772+-0.2274 3d-morph 5.9275+-0.4923 5.6884+-0.0466 might be 1.0420x faster 3d-raytrace 6.6423+-0.2193 ? 6.7980+-0.3876 ? might be 1.0234x slower access-binary-trees 2.3872+-0.2838 ? 2.4725+-0.2796 ? might be 1.0357x slower access-fannkuch 5.9384+-0.0584 ? 6.0561+-0.0600 ? might be 1.0198x slower access-nbody 2.9783+-0.1081 ? 3.0376+-0.3555 ? might be 1.0199x slower access-nsieve 3.7810+-0.5797 3.5013+-0.1663 might be 1.0799x faster bitops-3bit-bits-in-byte 1.5973+-0.0929 1.5848+-0.0317 bitops-bits-in-byte 3.4451+-0.1167 3.4295+-0.2379 bitops-bitwise-and 2.3495+-0.2814 ? 2.4855+-0.4972 ? might be 1.0579x slower bitops-nsieve-bits 3.3498+-0.0578 3.1578+-0.1384 might be 1.0608x faster controlflow-recursive 2.3274+-0.0884 ? 2.3531+-0.1674 ? might be 1.0110x slower crypto-aes 4.5859+-0.3922 4.4660+-0.2107 might be 1.0268x faster crypto-md5 2.7709+-0.1175 2.7414+-0.0646 might be 1.0108x faster crypto-sha1 2.7829+-0.4133 ? 2.8441+-0.1949 ? might be 1.0220x slower date-format-tofte 9.3397+-0.0997 9.3347+-0.1660 date-format-xparb 6.0081+-0.3723 5.8291+-0.1357 might be 1.0307x faster math-cordic 3.0940+-0.0600 ? 3.2202+-0.1216 ? might be 1.0408x slower math-partial-sums 5.3037+-0.2894 5.1355+-0.0823 might be 1.0328x faster math-spectral-norm 1.9854+-0.1007 1.9729+-0.0455 regexp-dna 7.4698+-0.6942 ? 7.6868+-1.2284 ? might be 1.0290x slower string-base64 4.6440+-0.0848 ? 4.8016+-0.2038 ? might be 1.0339x slower string-fasta 7.1996+-0.7634 6.6023+-0.0712 might be 1.0905x faster string-tagcloud 10.1591+-0.8704 9.8838+-0.4434 might be 1.0279x faster string-unpack-code 19.6481+-0.5739 ? 19.8948+-0.4623 ? might be 1.0126x slower string-validate-input 5.1004+-0.3996 4.9414+-0.1250 might be 1.0322x faster <arithmetic> 5.2319+-0.0505 5.1960+-0.1120 might be 1.0069x faster TipOfTree MoreFTLAI LongSpider: 3d-cube 880.3380+-3.7383 879.7421+-7.3005 3d-morph 1537.0615+-11.5951 1527.0977+-3.3197 3d-raytrace 736.6251+-5.5384 ? 738.2175+-7.9744 ? access-binary-trees 1031.0794+-6.4369 1030.2230+-9.3079 access-fannkuch 333.2329+-7.7392 331.3734+-8.7112 access-nbody 614.2570+-8.4289 611.4084+-3.8249 access-nsieve 889.4714+-52.2526 867.1235+-15.0022 might be 1.0258x faster bitops-3bit-bits-in-byte 45.0355+-1.0570 44.0007+-0.5216 might be 1.0235x faster bitops-bits-in-byte 102.8556+-1.7012 101.5980+-1.7503 might be 1.0124x faster bitops-nsieve-bits 619.1204+-7.2095 ? 620.4943+-8.5617 ? controlflow-recursive 485.2850+-4.8206 ^ 477.7298+-0.5814 ^ definitely 1.0158x faster crypto-aes 740.9060+-89.0383 705.5165+-11.0669 might be 1.0502x faster crypto-md5 522.5791+-13.4974 521.9200+-3.3580 crypto-sha1 604.1404+-4.8704 ^ 596.2706+-2.5012 ^ definitely 1.0132x faster date-format-tofte 751.5618+-15.0732 ? 763.1029+-17.7852 ? might be 1.0154x slower date-format-xparb 776.3487+-26.4682 ? 788.3760+-15.0947 ? might be 1.0155x slower math-cordic 595.5014+-6.3360 590.3419+-0.8924 math-partial-sums 506.9176+-3.7763 ? 508.3313+-7.9377 ? math-spectral-norm 563.1100+-0.6215 ? 563.7069+-0.8838 ? string-base64 380.5107+-3.2877 380.0783+-4.9997 string-fasta 445.1062+-8.9908 436.7726+-6.8359 might be 1.0191x faster string-tagcloud 198.3724+-1.7980 ? 199.5186+-2.0562 ? <geometric> 496.1875+-3.8930 493.1226+-1.4937 might be 1.0062x faster TipOfTree MoreFTLAI V8Spider: crypto 56.7966+-2.7121 ? 57.5188+-1.3782 ? might be 1.0127x slower deltablue 96.8408+-5.9147 95.7688+-3.5300 might be 1.0112x faster earley-boyer 45.6005+-1.1738 44.7037+-1.8691 might be 1.0201x faster raytrace 41.6544+-1.4062 40.6227+-2.1933 might be 1.0254x faster regexp 80.5423+-2.8199 ? 83.6920+-1.7095 ? might be 1.0391x slower richards 79.7606+-1.8978 ? 80.7830+-1.2605 ? might be 1.0128x slower splay 39.7906+-2.1261 ? 40.3687+-2.4673 ? might be 1.0145x slower <geometric> 59.5646+-1.0245 ? 59.7517+-0.3412 ? might be 1.0031x slower TipOfTree MoreFTLAI Octane: encrypt 0.20240+-0.00085 ? 0.20334+-0.00162 ? decrypt 3.61096+-0.05194 3.59739+-0.05911 deltablue x2 0.20848+-0.00173 0.20837+-0.00154 earley 0.53948+-0.00416 0.53818+-0.00454 boyer 6.75936+-0.04303 ? 6.77409+-0.10176 ? navier-stokes x2 5.22688+-0.07516 5.18956+-0.04771 raytrace x2 1.27678+-0.04240 1.26585+-0.03956 richards x2 0.12307+-0.00153 ? 0.12385+-0.00302 ? splay x2 0.40720+-0.00566 0.40436+-0.00269 regexp x2 31.57328+-0.27195 ? 31.72521+-0.39563 ? pdfjs x2 43.68045+-0.38045 43.63777+-0.57114 mandreel x2 50.48890+-0.25868 ? 50.67894+-1.11515 ? gbemu x2 42.47940+-2.77590 41.96119+-0.46707 might be 1.0123x faster closure 0.56569+-0.00392 ? 0.56840+-0.00698 ? jquery 7.22325+-0.08612 7.16136+-0.04874 box2d x2 12.33748+-0.18167 12.29050+-0.16227 zlib x2 382.59528+-18.67880 ? 391.42424+-15.02485 ? might be 1.0231x slower typescript x2 844.90592+-7.18286 837.30575+-8.59770 <geometric> 6.74248+-0.04577 6.73716+-0.03208 might be 1.0008x faster TipOfTree MoreFTLAI Kraken: ai-astar 271.647+-3.214 271.308+-2.494 audio-beat-detection 107.367+-0.844 107.258+-0.547 audio-dft 151.540+-5.090 151.117+-3.870 audio-fft 85.544+-4.676 80.863+-1.802 might be 1.0579x faster audio-oscillator 208.194+-3.894 ? 210.586+-3.945 ? might be 1.0115x slower imaging-darkroom 104.178+-1.281 ! 107.158+-0.736 ! definitely 1.0286x slower imaging-desaturate 63.246+-1.675 ? 65.293+-1.886 ? might be 1.0324x slower imaging-gaussian-blur 125.636+-33.479 111.453+-1.102 might be 1.1273x faster json-parse-financial 48.377+-2.673 46.781+-2.067 might be 1.0341x faster json-stringify-tinderbox 56.944+-1.800 56.677+-1.399 stanford-crypto-aes 58.800+-0.756 ? 59.095+-0.514 ? stanford-crypto-ccm 60.199+-1.862 ? 60.907+-1.855 ? might be 1.0118x slower stanford-crypto-pbkdf2 138.244+-2.469 ? 138.421+-1.550 ? stanford-crypto-sha256-iterative 52.972+-1.834 52.677+-1.552 <arithmetic> 109.492+-2.594 108.543+-0.380 might be 1.0087x faster TipOfTree MoreFTLAI JSRegress: abs-boolean 2.6532+-0.0689 ? 2.6987+-0.1037 ? might be 1.0172x slower adapt-to-double-divide 16.7131+-0.3753 ? 17.1041+-0.6751 ? might be 1.0234x slower aliased-arguments-getbyval 1.2282+-0.0873 ? 1.3534+-0.2456 ? might be 1.1019x slower allocate-big-object 3.0398+-0.2851 3.0078+-0.3075 might be 1.0106x faster arguments-named-and-reflective 13.2784+-1.6006 13.1526+-1.5246 arguments-out-of-bounds 15.6865+-2.7653 14.8362+-0.1749 might be 1.0573x faster arguments-strict-mode 12.0017+-0.8217 ? 12.2829+-0.8253 ? might be 1.0234x slower arguments 10.4624+-0.2240 ? 11.3345+-1.1943 ? might be 1.0834x slower arity-mismatch-inlining 0.8472+-0.1060 0.8250+-0.0344 might be 1.0269x faster array-access-polymorphic-structure 7.2938+-0.8956 6.9022+-0.2619 might be 1.0567x faster array-nonarray-polymorhpic-access 33.8220+-1.6674 ? 34.3955+-1.5508 ? might be 1.0170x slower array-prototype-every 87.8969+-1.7488 ? 88.7825+-1.2540 ? might be 1.0101x slower array-prototype-forEach 85.3063+-4.0894 ? 85.9800+-2.1328 ? array-prototype-map 93.3947+-1.8865 ? 95.1311+-2.1259 ? might be 1.0186x slower array-prototype-some 86.7135+-2.2354 ? 88.4930+-2.1371 ? might be 1.0205x slower array-splice-contiguous 41.3620+-1.1539 ? 41.9445+-2.3152 ? might be 1.0141x slower array-with-double-add 4.2001+-0.1673 ? 4.3679+-0.3390 ? might be 1.0400x slower array-with-double-increment 3.2287+-0.1231 3.2050+-0.0483 array-with-double-mul-add 5.0745+-0.0813 ? 5.1350+-0.2111 ? might be 1.0119x slower array-with-double-sum 3.2942+-0.1417 3.2325+-0.0370 might be 1.0191x faster array-with-int32-add-sub 6.7590+-0.0817 ? 6.7876+-0.0630 ? array-with-int32-or-double-sum 3.3090+-0.0122 ? 3.3595+-0.1085 ? might be 1.0153x slower ArrayBuffer-DataView-alloc-large-long-lived 34.2374+-1.8286 33.2493+-1.4343 might be 1.0297x faster ArrayBuffer-DataView-alloc-long-lived 14.7597+-1.5999 ? 15.0086+-1.8157 ? might be 1.0169x slower ArrayBuffer-Int32Array-byteOffset 3.7353+-0.0767 ? 4.0595+-0.4023 ? might be 1.0868x slower ArrayBuffer-Int8Array-alloc-large-long-lived 32.3698+-1.5176 32.0557+-0.5443 ArrayBuffer-Int8Array-alloc-long-lived-buffer 22.7548+-1.5900 ? 23.6108+-1.6542 ? might be 1.0376x slower ArrayBuffer-Int8Array-alloc-long-lived 13.6327+-1.5348 12.5210+-0.2956 might be 1.0888x faster ArrayBuffer-Int8Array-alloc 11.0868+-1.4606 10.5878+-0.1412 might be 1.0471x faster asmjs_bool_bug 7.9972+-0.5881 7.7287+-0.1327 might be 1.0347x faster assign-custom-setter-polymorphic 3.7447+-0.6260 ? 3.7835+-0.4957 ? might be 1.0104x slower assign-custom-setter 4.9148+-1.0126 ? 5.1218+-0.7031 ? might be 1.0421x slower basic-set 9.9056+-2.1102 8.6635+-0.4080 might be 1.1434x faster big-int-mul 3.9925+-0.0992 3.9812+-0.1007 boolean-test 3.1130+-0.1915 3.0451+-0.0415 might be 1.0223x faster branch-fold 3.8822+-0.3455 3.8608+-0.2830 branch-on-string-as-boolean 19.7961+-1.3151 19.7430+-0.8583 by-val-generic 8.1956+-0.2858 ? 8.6039+-0.6392 ? might be 1.0498x slower call-spread-apply 29.8975+-1.1445 ? 31.3193+-2.0170 ? might be 1.0476x slower call-spread-call 26.8125+-2.1837 26.0535+-1.3785 might be 1.0291x faster captured-assignments 0.4429+-0.0301 0.4277+-0.0187 might be 1.0354x faster cast-int-to-double 5.3067+-0.0655 5.2985+-0.1494 cell-argument 8.5354+-0.1094 ? 8.6650+-0.2478 ? might be 1.0152x slower cfg-simplify 3.3682+-0.6105 3.0831+-0.1051 might be 1.0925x faster chain-getter-access 9.9694+-0.1751 ? 10.0901+-0.3222 ? might be 1.0121x slower cmpeq-obj-to-obj-other 12.2104+-1.5596 11.6854+-0.9851 might be 1.0449x faster constant-test 4.9333+-0.0399 ? 4.9635+-0.0616 ? create-lots-of-functions 12.0253+-0.4241 11.9133+-0.3042 DataView-custom-properties 36.8258+-1.2684 ? 38.1585+-1.5732 ? might be 1.0362x slower deconstructing-parameters-overridden-by-function 0.4775+-0.0257 ? 0.5287+-0.0718 ? might be 1.1072x slower delay-tear-off-arguments-strictmode 14.0673+-0.2366 ? 14.0848+-0.1102 ? deltablue-varargs 203.1466+-2.1432 ? 206.6475+-4.0448 ? might be 1.0172x slower destructuring-arguments 17.9766+-0.6230 ? 18.1674+-0.4335 ? might be 1.0106x slower destructuring-swap 5.0802+-0.0580 ? 5.2391+-0.3874 ? might be 1.0313x slower direct-arguments-getbyval 1.2691+-0.1583 ? 1.3191+-0.1050 ? might be 1.0394x slower div-boolean-double 5.3076+-0.2356 5.2609+-0.2113 div-boolean 7.9670+-0.3144 7.8293+-0.0800 might be 1.0176x faster double-get-by-val-out-of-bounds 4.5647+-0.1805 4.5240+-0.0752 double-pollution-getbyval 8.9323+-0.2052 ? 8.9875+-0.1841 ? double-pollution-putbyoffset 4.3159+-0.1327 4.2780+-0.0673 double-to-int32-typed-array-no-inline 2.2410+-0.0405 ? 2.2885+-0.0844 ? might be 1.0212x slower double-to-int32-typed-array 1.9651+-0.0329 1.9489+-0.0387 double-to-uint32-typed-array-no-inline 2.3393+-0.0659 ? 2.3468+-0.1319 ? double-to-uint32-typed-array 2.0889+-0.1280 2.0181+-0.0152 might be 1.0351x faster elidable-new-object-dag 45.5297+-1.2567 43.6402+-1.6210 might be 1.0433x faster elidable-new-object-roflcopter 46.8773+-2.1695 ? 48.5299+-1.4850 ? might be 1.0353x slower elidable-new-object-then-call 39.1847+-1.1683 ? 39.6617+-2.0794 ? might be 1.0122x slower elidable-new-object-tree 45.3700+-1.7544 ? 46.3948+-2.5814 ? might be 1.0226x slower empty-string-plus-int 5.5806+-0.4786 5.5476+-0.4084 emscripten-cube2hash 39.5888+-1.4544 ? 40.0063+-0.9569 ? might be 1.0105x slower exit-length-on-plain-object 14.6018+-1.2862 ? 14.8219+-1.5466 ? might be 1.0151x slower external-arguments-getbyval 1.2605+-0.0522 1.2399+-0.0845 might be 1.0166x faster external-arguments-putbyval 2.3460+-0.0804 ? 2.3919+-0.2728 ? might be 1.0196x slower fixed-typed-array-storage-var-index 1.2083+-0.0355 ? 1.2411+-0.0332 ? might be 1.0271x slower fixed-typed-array-storage 0.8890+-0.0510 ? 0.9294+-0.1305 ? might be 1.0455x slower Float32Array-matrix-mult 4.7928+-0.4407 ? 5.0573+-1.0362 ? might be 1.0552x slower Float32Array-to-Float64Array-set 52.7313+-1.7864 ! 56.9566+-1.8235 ! definitely 1.0801x slower Float64Array-alloc-long-lived 73.8189+-1.8595 ? 73.9422+-1.1068 ? Float64Array-to-Int16Array-set 71.9711+-1.9466 68.6934+-1.9773 might be 1.0477x faster fold-double-to-int 13.5618+-0.2239 13.4395+-0.2347 fold-get-by-id-to-multi-get-by-offset-rare-int 11.2015+-1.7005 10.6383+-1.4990 might be 1.0529x faster fold-get-by-id-to-multi-get-by-offset 11.0042+-0.8447 10.2380+-1.0180 might be 1.0748x faster fold-multi-get-by-offset-to-get-by-offset 9.7298+-0.9990 9.1572+-0.9675 might be 1.0625x faster fold-multi-get-by-offset-to-poly-get-by-offset 9.0404+-1.0069 8.7969+-0.6120 might be 1.0277x faster fold-multi-put-by-offset-to-poly-put-by-offset 9.3693+-1.3091 9.2808+-0.9562 fold-multi-put-by-offset-to-put-by-offset 5.9202+-0.7987 5.2061+-0.5908 might be 1.1372x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.8733+-0.1383 9.6226+-0.4190 might be 1.0261x faster fold-put-by-id-to-multi-put-by-offset 9.7646+-1.3738 ? 10.4747+-1.6072 ? might be 1.0727x slower fold-put-structure 5.0758+-0.1885 4.4408+-0.7235 might be 1.1430x faster for-of-iterate-array-entries 4.8081+-0.4275 4.6853+-0.1211 might be 1.0262x faster for-of-iterate-array-keys 3.7945+-0.1781 ? 3.9170+-0.2184 ? might be 1.0323x slower for-of-iterate-array-values 3.8639+-0.3262 3.8258+-0.1452 fround 21.6990+-0.7096 20.7475+-0.4076 might be 1.0459x faster ftl-library-inlining-dataview 63.9498+-0.6669 ? 64.7902+-0.4674 ? might be 1.0131x slower ftl-library-inlining 74.6216+-19.0414 73.5344+-18.7880 might be 1.0148x faster function-dot-apply 2.2258+-0.0259 ? 2.2297+-0.0197 ? function-test 3.4830+-0.1900 3.3632+-0.0942 might be 1.0356x faster function-with-eval 108.8488+-4.1650 104.5817+-5.4995 might be 1.0408x faster gcse-poly-get-less-obvious 18.8887+-0.8727 18.5819+-0.4669 might be 1.0165x faster gcse-poly-get 19.8960+-0.9794 ? 21.9863+-1.9819 ? might be 1.1051x slower gcse 4.3861+-0.1766 ? 4.3932+-0.1142 ? get-by-id-bimorphic-check-structure-elimination-simple 2.8168+-0.3469 ? 2.8516+-0.3516 ? might be 1.0124x slower get-by-id-bimorphic-check-structure-elimination 6.2942+-0.4022 6.0121+-0.0404 might be 1.0469x faster get-by-id-chain-from-try-block 7.9955+-1.5593 7.9932+-1.2972 get-by-id-check-structure-elimination 5.1030+-0.0724 ? 5.2260+-0.1808 ? might be 1.0241x slower get-by-id-proto-or-self 17.2528+-1.1109 16.8545+-0.4613 might be 1.0236x faster get-by-id-quadmorphic-check-structure-elimination-simple 3.1087+-0.0269 ? 3.1535+-0.0365 ? might be 1.0144x slower get-by-id-self-or-proto 17.6817+-0.7039 ? 17.7655+-0.6270 ? get-by-val-out-of-bounds 4.4183+-0.0707 4.3658+-0.0565 might be 1.0120x faster get_callee_monomorphic 2.9043+-0.1635 2.8545+-0.0690 might be 1.0174x faster get_callee_polymorphic 3.7586+-0.0358 ? 3.7621+-0.0394 ? getter-no-activation 5.0117+-0.2721 ? 5.1100+-0.2918 ? might be 1.0196x slower getter-richards 123.0515+-5.3821 ? 128.3137+-4.5004 ? might be 1.0428x slower getter 5.6591+-0.5833 ? 5.7242+-0.6452 ? might be 1.0115x slower global-var-const-infer-fire-from-opt 1.0064+-0.0989 0.9644+-0.0854 might be 1.0435x faster global-var-const-infer 0.8326+-0.1029 0.7823+-0.1284 might be 1.0643x faster HashMap-put-get-iterate-keys 26.3791+-0.9242 25.6685+-0.6340 might be 1.0277x faster HashMap-put-get-iterate 25.7738+-0.4047 ? 25.9108+-0.6623 ? HashMap-string-put-get-iterate 28.0664+-0.9138 27.1344+-1.0075 might be 1.0343x faster hoist-make-rope 12.5505+-1.0195 ? 13.2768+-2.1419 ? might be 1.0579x slower hoist-poly-check-structure-effectful-loop 5.0693+-0.1459 ? 5.0995+-0.1770 ? hoist-poly-check-structure 3.6497+-0.0414 ? 3.9323+-0.3503 ? might be 1.0775x slower imul-double-only 8.5460+-0.1508 ? 8.6101+-0.4420 ? imul-int-only 9.6672+-0.1689 ? 9.7228+-0.1018 ? imul-mixed 8.5146+-0.1935 ? 8.6381+-0.6846 ? might be 1.0145x slower in-four-cases 20.7144+-0.3607 ? 20.8560+-0.4567 ? in-one-case-false 10.8997+-0.8775 10.1967+-0.6982 might be 1.0689x faster in-one-case-true 10.6481+-0.7278 10.3528+-0.6383 might be 1.0285x faster in-two-cases 10.2253+-0.3437 ? 10.3432+-0.3304 ? might be 1.0115x slower indexed-properties-in-objects 3.0571+-0.3568 ? 3.1997+-0.2148 ? might be 1.0467x slower infer-closure-const-then-mov-no-inline 3.8791+-0.0212 ? 3.9184+-0.0937 ? might be 1.0101x slower infer-closure-const-then-mov 20.5756+-0.9122 20.0238+-0.5647 might be 1.0276x faster infer-closure-const-then-put-to-scope-no-inline 15.0308+-1.8524 14.7926+-1.3776 might be 1.0161x faster infer-closure-const-then-put-to-scope 22.4899+-1.1749 22.0817+-0.7238 might be 1.0185x faster infer-closure-const-then-reenter-no-inline 63.9440+-2.6479 ? 64.0485+-2.1722 ? infer-closure-const-then-reenter 22.2135+-0.6729 ? 23.1979+-1.4044 ? might be 1.0443x slower infer-constant-global-property 30.1193+-0.3231 ? 30.4753+-1.2435 ? might be 1.0118x slower infer-constant-property 2.6998+-0.0438 2.6494+-0.0301 might be 1.0190x faster infer-one-time-closure-ten-vars 13.0231+-1.4696 12.9566+-0.9042 infer-one-time-closure-two-vars 12.2441+-0.7158 12.1388+-0.4649 infer-one-time-closure 12.5299+-0.9306 11.9799+-0.2503 might be 1.0459x faster infer-one-time-deep-closure 21.4848+-1.4773 20.9032+-1.0427 might be 1.0278x faster inline-arguments-access 4.8128+-0.3659 ? 5.0516+-1.0346 ? might be 1.0496x slower inline-arguments-aliased-access 4.6728+-0.0427 ? 4.7805+-0.2184 ? might be 1.0230x slower inline-arguments-local-escape 4.8607+-0.1825 4.8079+-0.2388 might be 1.0110x faster inline-get-scoped-var 4.9087+-0.3042 ? 4.9430+-0.1919 ? inlined-put-by-id-transition 11.4708+-0.6025 ? 11.7785+-0.7535 ? might be 1.0268x slower int-or-other-abs-then-get-by-val 4.7580+-0.0778 ? 4.7756+-0.0762 ? int-or-other-abs-zero-then-get-by-val 17.4107+-0.7245 ? 18.0984+-1.1577 ? might be 1.0395x slower int-or-other-add-then-get-by-val 4.5314+-0.3218 4.4050+-0.1169 might be 1.0287x faster int-or-other-add 5.3726+-0.0954 5.3612+-0.0820 int-or-other-div-then-get-by-val 4.3531+-0.1979 ? 4.3549+-0.2391 ? int-or-other-max-then-get-by-val 4.3713+-0.0471 ? 4.4401+-0.1970 ? might be 1.0157x slower int-or-other-min-then-get-by-val 4.3976+-0.1284 ? 4.4150+-0.1690 ? int-or-other-mod-then-get-by-val 3.9075+-0.0394 ? 4.0185+-0.0987 ? might be 1.0284x slower int-or-other-mul-then-get-by-val 3.9755+-0.0567 3.9365+-0.0383 int-or-other-neg-then-get-by-val 4.5016+-0.1303 ? 4.6301+-0.2647 ? might be 1.0285x slower int-or-other-neg-zero-then-get-by-val 17.3936+-0.3343 ? 17.8546+-1.0647 ? might be 1.0265x slower int-or-other-sub-then-get-by-val 4.6438+-0.2263 4.6024+-0.1237 int-or-other-sub 3.7318+-0.3889 3.6234+-0.0988 might be 1.0299x faster int-overflow-local 4.5332+-0.1491 4.5194+-0.0409 Int16Array-alloc-long-lived 54.7818+-1.4699 52.5938+-0.9616 might be 1.0416x faster Int16Array-bubble-sort-with-byteLength 21.4480+-1.1291 ? 21.9213+-1.9838 ? might be 1.0221x slower Int16Array-bubble-sort 20.0559+-0.9520 19.2876+-0.2197 might be 1.0398x faster Int16Array-load-int-mul 1.6394+-0.2704 1.5202+-0.0689 might be 1.0784x faster Int16Array-to-Int32Array-set 57.3896+-1.8526 55.1628+-1.5924 might be 1.0404x faster Int32Array-alloc-large 24.0940+-0.9619 ? 24.7134+-1.3034 ? might be 1.0257x slower Int32Array-alloc-long-lived 58.5367+-1.5746 58.2525+-1.9303 Int32Array-alloc 3.7729+-0.1396 3.6318+-0.1048 might be 1.0388x faster Int32Array-Int8Array-view-alloc 7.2783+-1.1939 7.0385+-0.9800 might be 1.0341x faster int52-spill 6.5998+-0.3915 6.2939+-0.0856 might be 1.0486x faster Int8Array-alloc-long-lived 48.4574+-1.5498 ? 49.2828+-2.6406 ? might be 1.0170x slower Int8Array-load-with-byteLength 3.4739+-0.1698 3.3359+-0.0535 might be 1.0414x faster Int8Array-load 3.5028+-0.4296 3.4302+-0.2363 might be 1.0212x faster integer-divide 11.3412+-0.2934 ? 11.4711+-0.5799 ? might be 1.0114x slower integer-modulo 2.0741+-0.0916 ? 2.1171+-0.2116 ? might be 1.0208x slower is-boolean-fold-tricky 4.6763+-0.4990 4.4462+-0.0844 might be 1.0517x faster is-boolean-fold 3.0250+-0.3520 2.9628+-0.4057 might be 1.0210x faster is-function-fold-tricky-internal-function 10.3375+-0.2123 ? 10.4428+-0.1795 ? might be 1.0102x slower is-function-fold-tricky 4.5476+-0.0704 4.5240+-0.0584 is-function-fold 2.8639+-0.0254 ? 2.9715+-0.3554 ? might be 1.0376x slower is-number-fold-tricky 4.4870+-0.1417 ? 4.5806+-0.2285 ? might be 1.0209x slower is-number-fold 2.8710+-0.0754 2.8105+-0.0742 might be 1.0215x faster is-object-or-null-fold-functions 2.9032+-0.0563 ? 2.9169+-0.1284 ? is-object-or-null-fold-less-tricky 4.6347+-0.1763 4.4851+-0.0447 might be 1.0333x faster is-object-or-null-fold-tricky 10.0465+-0.0917 ? 10.2386+-0.2817 ? might be 1.0191x slower is-object-or-null-fold 2.8868+-0.0381 ? 2.9392+-0.1446 ? might be 1.0181x slower is-object-or-null-trickier-function 4.7151+-0.1497 4.6677+-0.1315 might be 1.0102x faster is-object-or-null-trickier-internal-function 12.1893+-0.2236 ? 12.3783+-0.4312 ? might be 1.0155x slower is-object-or-null-tricky-function 4.6231+-0.1558 ? 4.8875+-0.5706 ? might be 1.0572x slower is-object-or-null-tricky-internal-function 10.5841+-0.0678 ? 10.6619+-0.1091 ? is-string-fold-tricky 4.5503+-0.1466 4.4290+-0.1156 might be 1.0274x faster is-string-fold 2.8739+-0.0413 2.8394+-0.0800 might be 1.0121x faster is-undefined-fold-tricky 3.7606+-0.1450 3.6868+-0.0326 might be 1.0200x faster is-undefined-fold 3.0095+-0.3205 2.9071+-0.1027 might be 1.0352x faster large-int-captured 4.6477+-0.0326 ? 4.6630+-0.1054 ? large-int-neg 16.3885+-0.4055 ? 16.6847+-0.3877 ? might be 1.0181x slower large-int 15.6728+-1.6671 14.9854+-0.3039 might be 1.0459x faster logical-not 4.5672+-0.0788 4.5386+-0.0258 lots-of-fields 13.5217+-0.4700 12.9992+-0.4633 might be 1.0402x faster make-indexed-storage 3.3004+-0.2210 3.0701+-0.1115 might be 1.0750x faster make-rope-cse 5.2137+-0.5499 5.0517+-0.3967 might be 1.0321x faster marsaglia-larger-ints 36.7232+-0.9648 36.5121+-0.9906 marsaglia-osr-entry 24.0974+-1.4971 23.2525+-0.5637 might be 1.0363x faster max-boolean 2.5937+-0.1261 ^ 2.4340+-0.0235 ^ definitely 1.0656x faster method-on-number 16.9862+-0.3125 ? 17.1289+-0.2726 ? min-boolean 2.4858+-0.0291 2.4730+-0.0925 minus-boolean-double 3.1744+-0.0312 ? 3.2139+-0.0582 ? might be 1.0124x slower minus-boolean 2.4151+-0.1524 2.3032+-0.0790 might be 1.0486x faster misc-strict-eq 39.3632+-3.4624 38.1958+-1.7958 might be 1.0306x faster mod-boolean-double 11.2436+-0.9545 10.8977+-0.0821 might be 1.0317x faster mod-boolean 7.9123+-0.2730 7.8789+-0.0909 mul-boolean-double 3.7050+-0.0570 ? 3.8338+-0.3269 ? might be 1.0347x slower mul-boolean 2.9972+-0.3376 ? 3.0199+-0.3587 ? neg-boolean 3.3076+-0.2391 3.1879+-0.0674 might be 1.0375x faster negative-zero-divide 0.3642+-0.0380 0.3478+-0.0111 might be 1.0470x faster negative-zero-modulo 0.3477+-0.0183 ? 0.3810+-0.0865 ? might be 1.0957x slower negative-zero-negate 0.3247+-0.0140 ? 0.3439+-0.0495 ? might be 1.0592x slower nested-function-parsing 39.7375+-1.7278 39.1279+-1.4293 might be 1.0156x faster new-array-buffer-dead 114.1371+-1.6658 113.6510+-2.1253 new-array-buffer-push 7.3466+-0.7987 7.1635+-0.6263 might be 1.0256x faster new-array-dead 19.3146+-1.1445 18.9581+-0.3176 might be 1.0188x faster new-array-push 4.0214+-0.2084 ? 4.0673+-0.4275 ? might be 1.0114x slower no-inline-constructor 131.9454+-2.3379 ^ 121.8396+-3.0501 ^ definitely 1.0829x faster number-test 3.0496+-0.0563 ? 3.1987+-0.2147 ? might be 1.0489x slower object-closure-call 5.7141+-0.1402 5.6647+-0.1224 object-test 3.2777+-0.4040 3.1638+-0.1147 might be 1.0360x faster obvious-sink-pathology-taken 138.3976+-1.0471 ? 139.6801+-2.5914 ? obvious-sink-pathology 131.3220+-1.0577 128.4644+-1.9336 might be 1.0222x faster obviously-elidable-new-object 35.5605+-2.5942 ? 35.8939+-1.7457 ? plus-boolean-arith 2.5621+-0.1092 ? 2.5743+-0.2389 ? plus-boolean-double 3.2921+-0.1598 3.2590+-0.1354 might be 1.0102x faster plus-boolean 2.5674+-0.3062 2.4098+-0.1072 might be 1.0654x faster poly-chain-access-different-prototypes-simple 3.3734+-0.1258 3.3151+-0.0889 might be 1.0176x faster poly-chain-access-different-prototypes 2.6056+-0.0937 ? 2.6414+-0.2040 ? might be 1.0138x slower poly-chain-access-simpler 3.2743+-0.0532 ? 3.3210+-0.1226 ? might be 1.0143x slower poly-chain-access 2.5720+-0.0550 2.5223+-0.0212 might be 1.0197x faster poly-stricteq 62.8061+-1.7632 ? 63.6077+-1.6829 ? might be 1.0128x slower polymorphic-array-call 1.2761+-0.0476 ? 1.2841+-0.0693 ? polymorphic-get-by-id 3.2346+-0.2985 3.1626+-0.0852 might be 1.0228x faster polymorphic-put-by-id 28.9013+-1.3473 ? 31.1026+-1.9661 ? might be 1.0762x slower polymorphic-structure 14.8958+-0.2911 ? 14.9788+-0.3974 ? polyvariant-monomorphic-get-by-id 8.5712+-0.1896 ? 8.7802+-0.7835 ? might be 1.0244x slower proto-getter-access 10.1825+-0.1758 10.0915+-0.2608 put-by-id-replace-and-transition 9.2014+-0.2343 9.1986+-0.2949 put-by-id-slightly-polymorphic 2.8834+-0.3480 2.8191+-0.0442 might be 1.0228x faster put-by-id 12.7938+-0.4963 ? 13.1392+-0.6028 ? might be 1.0270x slower put-by-val-direct 0.4184+-0.0251 ? 0.4220+-0.0249 ? put-by-val-large-index-blank-indexing-type 5.8663+-0.1294 ? 6.1504+-0.7624 ? might be 1.0484x slower put-by-val-machine-int 2.7823+-0.0660 ? 2.8717+-0.2269 ? might be 1.0321x slower rare-osr-exit-on-local 14.8725+-0.1546 ? 15.5987+-0.7651 ? might be 1.0488x slower register-pressure-from-osr 21.7651+-0.3849 21.4785+-0.2368 might be 1.0133x faster setter 6.4977+-0.7657 5.3954+-0.4041 might be 1.2043x faster simple-activation-demo 25.4752+-1.1068 25.2053+-0.8241 might be 1.0107x faster simple-getter-access 12.8335+-0.2326 ? 12.9610+-0.2640 ? simple-poly-call-nested 8.3874+-0.2459 ? 8.4271+-0.2374 ? simple-poly-call 1.2552+-0.0209 ? 1.2650+-0.0210 ? sin-boolean 24.0574+-0.9205 22.2940+-1.7308 might be 1.0791x faster singleton-scope 67.5834+-0.7341 ? 70.7494+-3.3326 ? might be 1.0468x slower sink-function 12.2899+-0.3006 ? 12.5646+-0.5588 ? might be 1.0224x slower sinkable-new-object-dag 70.8078+-1.6545 70.4924+-2.6450 sinkable-new-object-taken 54.0090+-2.8518 51.2965+-3.0333 might be 1.0529x faster sinkable-new-object 39.0991+-1.2801 38.2803+-0.5756 might be 1.0214x faster slow-array-profile-convergence 3.0665+-0.6344 2.9869+-0.3578 might be 1.0267x faster slow-convergence 2.8670+-0.3427 2.7189+-0.0899 might be 1.0545x faster sorting-benchmark 20.8479+-0.2511 ? 21.3106+-1.5328 ? might be 1.0222x slower sparse-conditional 1.1615+-0.0643 1.1093+-0.0166 might be 1.0470x faster splice-to-remove 17.5863+-1.6863 17.0345+-1.2749 might be 1.0324x faster string-char-code-at 17.7648+-1.2207 17.3382+-1.1202 might be 1.0246x faster string-concat-object 2.7061+-0.3217 2.6805+-0.2298 string-concat-pair-object 2.5116+-0.0520 ? 2.7131+-0.5518 ? might be 1.0802x slower string-concat-pair-simple 11.9251+-0.3112 11.5071+-0.2640 might be 1.0363x faster string-concat-simple 12.1980+-0.5210 ? 13.2129+-3.3587 ? might be 1.0832x slower string-cons-repeat 8.3515+-0.6238 ? 8.9486+-1.2248 ? might be 1.0715x slower string-cons-tower 8.4317+-0.6996 ? 8.8396+-1.1004 ? might be 1.0484x slower string-equality 17.5135+-0.2340 ? 17.6004+-0.4901 ? string-get-by-val-big-char 7.2497+-0.3055 7.1458+-0.1341 might be 1.0145x faster string-get-by-val-out-of-bounds-insane 3.8451+-0.6238 ? 3.9861+-0.4729 ? might be 1.0367x slower string-get-by-val-out-of-bounds 5.2817+-0.1669 5.2092+-0.0594 might be 1.0139x faster string-get-by-val 3.3776+-0.1265 ? 3.3960+-0.0493 ? string-hash 2.1488+-0.1568 2.0707+-0.0455 might be 1.0377x faster string-long-ident-equality 15.2775+-0.2600 15.1820+-0.2556 string-out-of-bounds 15.1056+-0.3304 14.8628+-0.2556 might be 1.0163x faster string-repeat-arith 35.9455+-2.6814 35.0235+-1.9042 might be 1.0263x faster string-sub 68.9455+-2.7560 68.7264+-3.2435 string-test 3.0938+-0.1675 ? 3.1095+-0.3403 ? string-var-equality 33.7300+-1.9468 33.0508+-1.8982 might be 1.0206x faster structure-hoist-over-transitions 2.6552+-0.0709 ? 2.7123+-0.2471 ? might be 1.0215x slower substring-concat-weird 40.9310+-1.6034 40.8719+-1.6044 substring-concat 40.2504+-0.4433 ? 40.9985+-0.8247 ? might be 1.0186x slower substring 47.3151+-2.9234 46.1821+-2.0919 might be 1.0245x faster switch-char-constant 2.7330+-0.0578 ? 2.7953+-0.2474 ? might be 1.0228x slower switch-char 6.7926+-1.1034 6.5631+-1.0482 might be 1.0350x faster switch-constant 8.5080+-0.2131 ? 8.6403+-0.4041 ? might be 1.0156x slower switch-string-basic-big-var 18.0417+-0.3967 ? 18.4135+-0.7091 ? might be 1.0206x slower switch-string-basic-big 14.6105+-0.2971 ? 15.3445+-0.8014 ? might be 1.0502x slower switch-string-basic-var 15.0816+-0.9919 ? 16.8730+-4.4301 ? might be 1.1188x slower switch-string-basic 13.7635+-0.3713 13.5308+-0.2617 might be 1.0172x faster switch-string-big-length-tower-var 20.5540+-1.2572 ? 21.2533+-1.2571 ? might be 1.0340x slower switch-string-length-tower-var 15.3052+-0.3233 ? 15.3903+-0.1766 ? switch-string-length-tower 13.1029+-0.4819 12.7760+-0.1992 might be 1.0256x faster switch-string-short 12.8110+-0.2831 ? 12.8703+-0.2804 ? switch 12.8761+-0.2912 12.5076+-0.0974 might be 1.0295x faster tear-off-arguments-simple 3.5764+-0.2011 3.4305+-0.0747 might be 1.0425x faster tear-off-arguments 4.7480+-0.1670 4.6964+-0.0532 might be 1.0110x faster temporal-structure 12.3202+-0.2157 12.3029+-0.1860 to-int32-boolean 13.9870+-0.7985 13.7907+-0.4550 might be 1.0142x faster try-catch-get-by-val-cloned-arguments 15.0350+-1.4005 14.4935+-0.4362 might be 1.0374x faster try-catch-get-by-val-direct-arguments 6.4294+-0.0372 ? 6.8773+-0.5640 ? might be 1.0697x slower try-catch-get-by-val-scoped-arguments 7.9189+-0.3035 ? 8.2972+-0.9171 ? might be 1.0478x slower typed-array-get-set-by-val-profiling 33.3748+-1.9791 33.1197+-1.5811 undefined-property-access 358.4873+-3.9328 ? 359.8091+-4.7467 ? undefined-test 3.1068+-0.1519 ? 3.1842+-0.3403 ? might be 1.0249x slower unprofiled-licm 25.0980+-3.2555 23.7136+-1.4741 might be 1.0584x faster varargs-call 16.1762+-0.5304 ? 16.6330+-1.3758 ? might be 1.0282x slower varargs-construct-inline 23.8445+-1.2933 23.5767+-1.0594 might be 1.0114x faster varargs-construct 32.4129+-0.9348 ? 33.1416+-1.4897 ? might be 1.0225x slower varargs-inline 9.4080+-0.0803 ? 9.4551+-0.1779 ? varargs-strict-mode 10.4024+-0.3032 ? 10.6425+-0.2857 ? might be 1.0231x slower varargs 10.2199+-0.0963 ? 10.3233+-0.1939 ? might be 1.0101x slower weird-inlining-const-prop 2.3933+-0.1542 ? 2.4170+-0.2581 ? <geometric> 8.6240+-0.0259 8.6038+-0.0118 might be 1.0023x faster TipOfTree MoreFTLAI AsmBench: bigfib.cpp 495.0035+-1.7222 ? 498.0674+-5.0501 ? cray.c 425.5793+-6.5097 ? 427.4196+-5.4509 ? dry.c 481.9525+-8.6790 ? 482.9209+-8.2841 ? FloatMM.c 730.4862+-9.4699 727.9580+-7.0671 gcc-loops.cpp 4304.6523+-38.5713 4287.7308+-14.7932 n-body.c 982.9005+-6.8341 981.7188+-6.4864 Quicksort.c 419.8948+-5.1199 ? 422.5041+-5.4117 ? stepanov_container.cpp 3602.2148+-10.6756 ? 3618.3750+-19.5309 ? Towers.c 259.5187+-0.7723 ? 261.1121+-3.2883 ? <geometric> 792.3764+-3.0038 ? 794.1959+-2.2211 ? might be 1.0023x slower TipOfTree MoreFTLAI CompressionBench: huffman 367.3377+-5.7203 366.4925+-2.4149 arithmetic-simple 401.2019+-7.9292 ? 401.4430+-10.5321 ? arithmetic-precise 302.9927+-6.3914 301.3920+-11.0029 arithmetic-complex-precise 298.6305+-2.9615 296.4503+-3.3609 arithmetic-precise-order-0 425.9280+-8.4396 ? 434.9696+-15.0576 ? might be 1.0212x slower arithmetic-precise-order-1 329.6323+-3.7135 ? 329.8437+-6.4023 ? arithmetic-precise-order-2 361.3228+-7.5016 360.6905+-4.4830 arithmetic-simple-order-1 421.5302+-1.0212 ? 427.8086+-5.7225 ? might be 1.0149x slower arithmetic-simple-order-2 472.8546+-6.3149 469.1770+-5.0197 lz-string 319.0969+-1.9267 ? 325.3835+-7.2643 ? might be 1.0197x slower <geometric> 365.8797+-1.5893 ? 367.0270+-2.6640 ? might be 1.0031x slower TipOfTree MoreFTLAI Geomean of preferred means: <scaled-result> 64.1081+-0.1868 63.9787+-0.2021 might be 1.0020x faster
Filip Pizlo
Comment 5 2015-05-01 19:02:33 PDT
Note You need to log in before you can comment on or make changes to this bug.