Created attachment 253531 [details] Patch This allows to perform GCSE on various derived properties, e.g. NewArray and NewArrayBuffer operations can now def() their length and elements. However benchmark times are showing a slight slowdown in most cases, possibly due to LazyNode having twice the size of a Node*, so I am not sure this is worth pursuing. VMs tested: "r184563" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc "LazyNode" at /Volumes/Data/secondary/OpenSource/WebKitBuild/LazyNode/Release/jsc Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. r184563 LazyNode SunSpider: 3d-cube 5.5958+-0.0865 ? 5.8460+-0.4815 ? might be 1.0447x slower 3d-morph 6.2566+-0.2356 6.2029+-0.0786 3d-raytrace 7.3565+-0.5512 ? 7.5049+-0.7255 ? might be 1.0202x slows-binary-trees 2.5433+-0.0671 2.5153+-0.0792 might be 1.0111x faster access-fannkuch 6.4220+-0.1774 ? 6.4694+-0.2324 ? access-nbody 3.2775+-0.1311 ? 3.2961+-0.1086 ? access-nsieve 3.7972+-0.0496 ? 3.8669+-0.1252 ? might be 1.0184x slower bitops-3bit-bits-in-byte 1.8843+-0.0307 1.8678+-0.0371 bitops-bits-in-byte 4.0953+-0.3240 3.9525+-0.0235 might be 1.0361x faster bitops-bitwise-and 2.3938+-0.0743 ? 2.4095+-0.1241 ? bitops-nsieve-bits 3.3548+-0.0307 ? 3.4363+-0.0969 ? might be 1.0243x slower controlflow-recursive 2.5837+-0.0482 ? 2.6094+-0.0921 ? crypto-aes 4.8667+-0.2032 ? 4.9058+-0.1634 ? crypto-md5 3.2022+-0.1813 3.0210+-0.0637 might be 1.0600x faster crypto-sha1 2.9074+-0.0750 ? 2.9875+-0.0803 ? might be 1.0275x slower date-format-tofte 9.7618+-0.1570 ! 10.1823+-0.2422 ! definitely 1.0431x slower date-format-xparb 6.0007+-0.2546 5.9954+-0.1352 math-cordic 3.4667+-0.0440 ? 3.4802+-0.0950 ? math-partial-sums 5.7629+-0.1971 5.7099+-0.0955 math-spectral-norm 2.2364+-0.0417 2.2328+-0.0342 regexp-dna 7.6018+-0.4129 ? 7.7063+-0.2153 ? might be 1.0138x slower string-base64 4.9342+-0.1932 ? 5.3086+-0.5814 ? might be 1.0759x slower string-fasta 7.1153+-0.4140 7.0105+-0.0973 might be 1.0150x faster string-tagcloud 9.6119+-0.2963 ? 9.6543+-0.2093 ? string-unpack-code 23.0662+-0.3903 22.8006+-0.7064 might be 1.0117x faster string-validate-input 5.1487+-0.1521 ? 5.2473+-0.1480 ? might be 1.0191x slower <arithmetic> 5.5863+-0.0374 ? 5.6238+-0.0468 ? might be 1.0067x slower r184563 LazyNode LongSpider: 3d-cube 913.7970+-3.3810 912.0046+-7.7612 3d-morph 1621.1681+-7.4300 1618.3591+-2.6318 3d-raytrace 761.9025+-4.0496 ? 770.3277+-5.0641 ? might be 1.0111x slower access-binary-trees 982.5473+-4.5580 980.5644+-5.1910 access-fannkuch 347.5348+-7.0749 ? 356.8676+-5.2365 ? might be 1.0269x slower access-nbody 657.4551+-4.4060 ? 658.2690+-6.1242 ? access-nsieve 456.2196+-1.8920 ? 458.2618+-4.7839 ? bitops-3bit-bits-in-byte 50.2865+-1.0622 49.3991+-0.4626 might be 1.0180x faster bitops-bits-in-byte 96.2498+-2.0276 95.4416+-1.9466 bitops-nsieve-bits 458.2042+-1.3964 ? 458.8349+-2.2730 ? controlflow-recursive 516.0721+-10.3228 507.4290+-9.1283 might be 1.0170x faster crypto-aes 705.8217+-3.7954 ? 710.3498+-7.3331 ? crypto-md5 556.6390+-3.0809 552.6717+-8.7751 crypto-sha1 650.5811+-3.1077 ? 650.6198+-5.1834 ? date-format-tofte 753.5545+-10.2933 ? 767.4705+-30.7566 ? might be 1.0185x slower date-format-xparb 801.0511+-15.4129 ? 821.0804+-53.1946 ? might be 1.0250x slower hash-map 178.6357+-2.6035 177.4950+-3.6629 math-cordic 625.6297+-2.3321 ? 626.9688+-2.6336 ? math-partial-sums 536.1773+-2.1122 ? 537.3185+-1.6334 ? math-spectral-norm 599.7354+-2.0827 597.9998+-0.8408 string-base64 387.0317+-6.3622 ? 387.5868+-1.7826 ? string-fasta 440.2025+-3.0652 ? 445.1368+-5.1657 ? might be 1.0112x slower string-tagcloud 211.3362+-2.1322 ? 211.5856+-2.2579 ? <geometric> 468.2684+-1.4996 ? 469.1828+-1.3670 ? might be 1.0020x slower r184563 LazyNode V8Spider: crypto 60.1779+-0.4219 ? 60.9095+-0.7864 ? might be 1.0122x slower deltablue 78.5908+-0.7993 ? 81.3490+-2.2980 ? might be 1.0351x slower earley-boyer 50.6913+-0.9270 ? 52.3994+-0.9749 ? might be 1.0337x slower raytrace 35.0801+-0.5549 ? 35.6145+-1.1122 ? might be 1.0152x slower regexp 83.4762+-0.6414 ! 85.9648+-0.8090 ! definitely 1.0298x slower richards 85.6635+-1.3492 ? 86.0355+-1.8324 ? splay 42.7482+-2.1486 40.5745+-2.1689 might be 1.0536x faster <geometric> 59.2646+-0.5336 ? 59.9100+-0.7483 ? might be 1.0109x slower r184563 LazyNode Octane: encrypt 0.23868+-0.00089 0.23848+-0.00076 decrypt 4.10974+-0.03742 4.09817+-0.01296 deltablue x2 0.20225+-0.00107 ? 0.20401+-0.00245 ? earley 0.40597+-0.00757 0.40357+-0.00526 boyer 5.34681+-0.04248 ? 5.36599+-0.06054 ? navier-stokes x2 5.48995+-0.00284 ? 5.50454+-0.03203 ? raytrace x2 1.27543+-0.03174 1.27363+-0.07198 richards x2 0.12174+-0.00077 ? 0.12240+-0.00164 ? splay x2 0.41571+-0.00330 0.41443+-0.00351 regexp x2 31.57241+-0.13366 ! 32.58668+-0.21558 ! definitely 1.0321x slower pdfjs x2 44.50533+-0.19535 44.38525+-0.20375 mandreel x2 56.44360+-0.61245 ? 56.45549+-0.47209 ? gbemu x2 45.43001+-0.54924 ? 46.05530+-0.23286 ? might be 1.0138x slower closure 0.63733+-0.00747 ? 0.64022+-0.00110 ? jquery 8.03837+-0.03164 ? 8.05255+-0.04257 ? box2d x2 13.90540+-0.08320 ? 14.07070+-0.12457 ? might be 1.0119x slower zlib x2 417.60479+-15.05195 ? 428.88154+-2.71078 ? might be 1.0270x slower typescript x2 879.91752+-9.56239 ? 886.98694+-11.00127 ? <geometric> 6.95968+-0.02457 ? 7.00677+-0.03133 ? might be 1.0068x slower r184563 LazyNode Kraken: ai-astar 328.873+-9.072 324.693+-8.547 might be 1.0129x faster audio-beat-detection 117.331+-0.635 ? 118.743+-3.178 ? might be 1.0120x slower audio-dft 118.772+-1.424 118.440+-0.605 audio-fft 85.740+-0.442 ? 88.176+-2.954 ? might be 1.0284x slower audio-oscillator 77.799+-1.136 ? 77.890+-0.951 ? imaging-darkroom 110.156+-0.334 ? 111.802+-2.453 ? might be 1.0149x slower imaging-desaturate 69.340+-1.943 68.271+-0.226 might be 1.0157x faster imaging-gaussian-blur 115.611+-0.808 ? 116.098+-0.645 ? json-parse-financial 48.291+-0.758 47.464+-0.731 might be 1.0174x faster json-stringify-tinderbox 30.112+-0.525 ? 30.895+-0.637 ? might be 1.0260x slower stanford-crypto-aes 62.264+-1.442 ? 63.035+-1.425 ? might be 1.0124x slower stanford-crypto-ccm 54.121+-1.409 ? 56.132+-1.928 ? might be 1.0371x slower stanford-crypto-pbkdf2 123.101+-0.886 ? 123.181+-0.746 ? stanford-crypto-sha256-iterative 47.185+-0.471 47.178+-0.569 <arithmetic> 99.193+-0.579 ? 99.428+-0.759 ? might be 1.0024x slower r184563 LazyNode JSRegress: abs-boolean 2.9448+-0.1133 2.9204+-0.0708 adapt-to-double-divide 17.7455+-0.3221 ? 17.8637+-0.3871 ? aliased-arguments-getbyval 1.4830+-0.0552 ? 1.5621+-0.0788 ? might be 1.0533x slower allocate-big-object 2.9347+-0.1707 2.8660+-0.1429 might be 1.0240x faster arguments-named-and-reflective 11.7869+-0.4247 ? 11.8432+-0.2650 ? arguments-out-of-bounds 15.5932+-0.3579 15.3845+-0.3204 might be 1.0136x faster arguments-strict-mode 10.9822+-0.2438 ? 11.0573+-0.4500 ? arguments 9.7804+-0.1164 ? 9.8039+-0.2232 ? arity-mismatch-inlining 1.0749+-0.0243 ? 1.1048+-0.0421 ? might be 1.0278x slower array-access-polymorphic-structure 6.8218+-0.3136 6.6059+-0.1839 might be 1.0327x faster array-nonarray-polymorhpic-access 33.4447+-0.8074 ? 34.1285+-0.8454 ? might be 1.0204x slower array-prototype-every 88.3684+-0.9195 87.8878+-0.6348 array-prototype-forEach 86.0128+-1.9091 85.7215+-0.5540 array-prototype-map 94.4423+-1.5329 ? 97.1439+-2.7135 ? might be 1.0286x slower array-prototype-some 89.2525+-2.0830 88.8333+-1.3243 array-splice-contiguous 46.9301+-0.5436 ^ 44.5112+-0.8715 ^ definitely 1.0543x faster array-with-double-add 4.4251+-0.1306 ? 4.4317+-0.1238 ? array-with-double-increment 3.5485+-0.0755 ? 3.6508+-0.0956 ? might be 1.0288x slower array-with-double-mul-add 5.3842+-0.1401 5.3270+-0.0385 might be 1.0107x faster array-with-double-sum 3.5695+-0.0798 ? 3.5841+-0.1253 ? array-with-int32-add-sub 7.2261+-0.1833 ? 7.3567+-0.2706 ? might be 1.0181x slower array-with-int32-or-double-sum 3.6238+-0.1018 ? 3.7216+-0.1043 ? might be 1.0270x slower ArrayBuffer-DataView-alloc-large-long-lived 32.7051+-0.6701 ? 33.2933+-1.1491 ? might be 1.0180x slower ArrayBuffer-DataView-alloc-long-lived 13.8057+-0.5105 13.7291+-0.8062 ArrayBuffer-Int32Array-byteOffset 4.2892+-0.4647 4.1637+-0.1067 might be 1.0301x faster ArrayBuffer-Int8Array-alloc-large-long-lived 33.8123+-0.6517 33.2284+-0.6405 might be 1.0176x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 22.5682+-0.4724 ? 22.6937+-0.8574 ? ArrayBuffer-Int8Array-alloc-long-lived 13.3350+-0.4488 ^ 12.5682+-0.2589 ^ definitely 1.0610x faster ArrayBuffer-Int8Array-alloc 10.8617+-0.3366 10.8299+-0.3658 asmjs_bool_bug 8.0946+-0.3371 7.9809+-0.1819 might be 1.0143x faster assign-custom-setter-polymorphic 3.5849+-0.0782 ^ 3.4071+-0.0815 ^ definitely 1.0522x faster assign-custom-setter 4.7427+-0.0876 ^ 4.4633+-0.1110 ^ definitely 1.0626x faster basic-set 9.6147+-0.1984 ? 9.8532+-0.1237 ? might be 1.0248x slower big-int-mul 4.3864+-0.0682 ? 4.4386+-0.0944 ? might be 1.0119x slower boolean-test 3.3689+-0.0545 ? 3.4175+-0.1003 ? might be 1.0144x slower branch-fold 4.2027+-0.1267 4.1424+-0.1083 might be 1.0146x faster branch-on-string-as-boolean 19.1180+-0.4156 18.9506+-0.3172 by-val-generic 8.3842+-0.3366 8.2486+-0.2397 might be 1.0164x faster call-spread-apply 31.9555+-0.6495 31.7853+-1.2550 call-spread-call 26.8160+-0.4524 ? 26.9495+-0.9921 ? captured-assignments 0.5684+-0.0173 ? 0.5750+-0.0852 ? might be 1.0117x slower cast-int-to-double 5.8539+-0.1164 5.8433+-0.1658 cell-argument 8.8365+-0.4118 8.6899+-0.2489 might be 1.0169x faster cfg-simplify 3.1240+-0.0933 3.0292+-0.0394 might be 1.0313x faster chain-getter-access 9.8833+-0.3651 ? 9.9398+-0.3499 ? cmpeq-obj-to-obj-other 10.5902+-0.0293 ! 11.2344+-0.2592 ! definitely 1.0608x slower constant-test 5.5092+-0.0841 ? 5.5446+-0.1489 ? create-lots-of-functions 11.6818+-0.2407 ? 12.0720+-0.2098 ? might be 1.0334x slower DataView-custom-properties 38.1008+-0.4833 37.6851+-0.4088 might be 1.0110x faster deconstructing-parameters-overridden-by-function 0.6576+-0.0389 ? 0.6965+-0.0699 ? might be 1.0592x slower delay-tear-off-arguments-strictmode 14.6068+-0.3364 ? 14.6665+-0.4411 ? deltablue-varargs 221.4560+-2.0287 ? 228.1925+-7.6578 ? might be 1.0304x slower destructuring-arguments 18.1044+-0.2746 ? 18.1785+-0.4288 ? destructuring-swap 5.6447+-0.0732 5.6069+-0.1097 direct-arguments-getbyval 1.5212+-0.1373 1.4899+-0.1003 might be 1.0210x faster div-boolean-double 5.6097+-0.0406 ? 5.6730+-0.0867 ? might be 1.0113x slower div-boolean 8.3556+-0.1183 ? 8.4106+-0.1127 ? double-get-by-val-out-of-bounds 4.7744+-0.0957 4.6941+-0.0830 might be 1.0171x faster double-pollution-getbyval 9.4692+-0.2054 ? 9.5517+-0.1641 ? double-pollution-putbyoffset 4.6523+-0.1151 ? 4.6830+-0.1230 ? double-to-int32-typed-array-no-inline 2.5735+-0.1058 ? 2.6545+-0.0509 ? might be 1.0315x slower double-to-int32-typed-array 2.3940+-0.2019 2.3183+-0.0655 might be 1.0326x faster double-to-uint32-typed-array-no-inline 2.6684+-0.0374 ? 2.7152+-0.0363 ? might be 1.0175x slower double-to-uint32-typed-array 2.3225+-0.0428 ? 2.3263+-0.0319 ? elidable-new-object-dag 43.6554+-0.9737 42.5930+-1.2543 might be 1.0249x faster elidable-new-object-roflcopter 43.8786+-0.5137 ? 44.1873+-1.2527 ? elidable-new-object-then-call 36.9308+-2.3893 35.9998+-1.9452 might be 1.0259x faster elidable-new-object-tree 44.8844+-0.9857 ? 45.4725+-2.0450 ? might be 1.0131x slower empty-string-plus-int 5.5727+-0.0739 ? 5.6248+-0.1349 ? emscripten-cube2hash 40.2340+-0.4935 ? 40.5459+-1.0289 ? exit-length-on-plain-object 14.1093+-0.4957 ? 14.4658+-0.7560 ? might be 1.0253x slower external-arguments-getbyval 1.5553+-0.0696 1.5017+-0.0561 might be 1.0357x faster external-arguments-putbyval 2.5879+-0.0521 2.5542+-0.0553 might be 1.0132x faster fixed-typed-array-storage-var-index 1.4799+-0.0469 ? 1.5148+-0.0774 ? might be 1.0235x slower fixed-typed-array-storage 1.1262+-0.0417 1.1125+-0.0182 might be 1.0123x faster Float32Array-matrix-mult 4.7526+-0.1016 4.7190+-0.0351 Float32Array-to-Float64Array-set 56.0048+-0.8556 55.7231+-1.3257 Float64Array-alloc-long-lived 69.9382+-1.1713 ? 70.4974+-1.5951 ? Float64Array-to-Int16Array-set 73.1580+-0.8572 ^ 71.4912+-0.6485 ^ definitely 1.0233x faster fold-double-to-int 14.8043+-0.1871 ? 15.0086+-0.1709 ? might be 1.0138x slower fold-get-by-id-to-multi-get-by-offset-rare-int 9.1685+-0.3363 9.0899+-0.2073 fold-get-by-id-to-multi-get-by-offset 7.7672+-0.1557 7.6825+-0.0732 might be 1.0110x faster fold-multi-get-by-offset-to-get-by-offset 7.6239+-0.5655 ? 7.6497+-0.5049 ? fold-multi-get-by-offset-to-poly-get-by-offset 7.2418+-0.4802 ? 7.8127+-0.2455 ? might be 1.0788x slower fold-multi-put-by-offset-to-poly-put-by-offset 6.9403+-0.3709 ? 6.9843+-0.3320 ? fold-multi-put-by-offset-to-put-by-offset 5.3389+-0.5603 5.3260+-0.5312 fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 10.9369+-0.8924 10.4559+-0.7265 might be 1.0460x faster fold-put-by-id-to-multi-put-by-offset 7.5475+-0.3878 ? 7.7815+-0.2871 ? might be 1.0310x slower fold-put-structure 4.6709+-0.0495 4.6240+-0.0604 might be 1.0101x faster for-of-iterate-array-entries 4.7843+-0.1067 4.7570+-0.1529 for-of-iterate-array-keys 3.8958+-0.0942 ? 3.9873+-0.1590 ? might be 1.0235x slower for-of-iterate-array-values 3.8415+-0.0749 ? 3.9017+-0.0487 ? might be 1.0157x slower fround 21.1878+-0.5334 ? 21.7553+-1.3380 ? might be 1.0268x slower ftl-library-inlining-dataview 70.3019+-0.8211 69.8300+-0.7415 ftl-library-inlining 77.5988+-19.6854 ? 85.0678+-23.1938 ? might be 1.0963x slower function-dot-apply 2.4148+-0.0495 ? 2.4810+-0.0691 ? might be 1.0274x slower function-test 3.1029+-0.0783 ? 3.1574+-0.0692 ? might be 1.0176x slower function-with-eval 103.3401+-1.5235 102.6449+-2.6357 gcse-poly-get-less-obvious 20.1307+-1.7468 ? 20.3417+-1.7684 ? might be 1.0105x slower gcse-poly-get 21.5837+-1.1584 ? 24.7697+-2.7013 ? might be 1.1476x slower gcse 4.7041+-0.1573 4.7011+-0.1272 get-by-id-bimorphic-check-structure-elimination-simple 2.9633+-0.0568 ? 3.0076+-0.0802 ? might be 1.0149x slower get-by-id-bimorphic-check-structure-elimination 6.8177+-0.1878 6.5337+-0.1454 might be 1.0435x faster get-by-id-chain-from-try-block 7.0081+-0.1768 6.9694+-0.1717 get-by-id-check-structure-elimination 5.6711+-0.1163 5.5732+-0.1767 might be 1.0176x faster get-by-id-proto-or-self 19.4390+-1.1330 ? 21.1914+-2.9691 ? might be 1.0901x slower get-by-id-quadmorphic-check-structure-elimination-simple 3.2557+-0.1244 3.2428+-0.0917 get-by-id-self-or-proto 19.2597+-0.7481 ? 20.8533+-3.1370 ? might be 1.0827x slower get-by-val-out-of-bounds 4.7043+-0.1229 4.6262+-0.0824 might be 1.0169x faster get_callee_monomorphic 2.9193+-0.0659 ? 3.0098+-0.1557 ? might be 1.0310x slower get_callee_polymorphic 3.7317+-0.1835 ? 3.8743+-0.2835 ? might be 1.0382x slower getter-no-activation 5.6031+-0.0379 5.5953+-0.0221 getter-richards 108.2904+-1.4587 ? 109.7300+-2.8638 ? might be 1.0133x slower getter 6.1247+-0.0906 ? 6.1262+-0.0539 ? global-var-const-infer-fire-from-opt 1.2523+-0.1528 1.2242+-0.1413 might be 1.0230x faster global-var-const-infer 0.9907+-0.0981 ? 1.0038+-0.1079 ? might be 1.0133x slower HashMap-put-get-iterate-keys 27.2616+-0.1343 ? 27.9943+-0.7439 ? might be 1.0269x slower HashMap-put-get-iterate 26.9834+-0.3556 ? 27.1722+-0.1060 ? HashMap-string-put-get-iterate 29.4722+-0.8961 ? 30.1141+-0.9752 ? might be 1.0218x slower hoist-make-rope 11.7945+-0.8998 ? 12.2884+-1.0085 ? might be 1.0419x slower hoist-poly-check-structure-effectful-loop 5.6108+-0.1027 ? 5.6955+-0.5088 ? might be 1.0151x slower hoist-poly-check-structure 4.0030+-0.1261 3.9570+-0.0845 might be 1.0116x faster imul-double-only 7.8079+-0.1907 ? 8.2066+-0.2734 ? might be 1.0511x slower imul-int-only 9.9446+-0.4942 9.6400+-0.3481 might be 1.0316x faster imul-mixed 8.2326+-0.5338 8.1720+-0.4412 in-four-cases 23.1034+-0.3956 ? 23.2138+-0.2842 ? in-one-case-false 12.1019+-0.4111 12.0651+-0.1904 in-one-case-true 11.9946+-0.2936 ? 12.0406+-0.1962 ? in-two-cases 12.7050+-0.4708 ? 12.7134+-0.2624 ? indexed-properties-in-objects 3.1568+-0.0582 ? 3.2507+-0.0873 ? might be 1.0298x slower infer-closure-const-then-mov-no-inline 4.5292+-0.1063 ? 4.6452+-0.0921 ? might be 1.0256x slower infer-closure-const-then-mov 21.2727+-0.3290 ? 21.8548+-0.8981 ? might be 1.0274x slower infer-closure-const-then-put-to-scope-no-inline 12.8341+-0.1103 ? 12.9614+-0.4795 ? infer-closure-const-then-put-to-scope 22.5762+-0.7959 ? 23.6531+-0.9010 ? might be 1.0477x slower infer-closure-const-then-reenter-no-inline 59.7540+-0.4505 ? 59.8718+-0.4469 ? infer-closure-const-then-reenter 22.9551+-0.8342 22.9273+-0.7696 infer-constant-global-property 3.8060+-0.0696 3.7577+-0.0523 might be 1.0129x faster infer-constant-property 2.9586+-0.1266 ? 3.1896+-0.4448 ? might be 1.0781x slower infer-one-time-closure-ten-vars 12.6798+-0.1406 12.6613+-0.1562 infer-one-time-closure-two-vars 12.6129+-0.7808 12.2511+-0.2401 might be 1.0295x faster infer-one-time-closure 12.1335+-0.1437 ? 12.1879+-0.1423 ? infer-one-time-deep-closure 21.6786+-0.5467 21.5230+-0.3822 inline-arguments-access 4.3393+-0.1938 4.3003+-0.1277 inline-arguments-aliased-access 4.3260+-0.0999 4.2578+-0.1087 might be 1.0160x faster inline-arguments-local-escape 4.5020+-0.2930 4.3824+-0.1228 might be 1.0273x faster inline-get-scoped-var 5.4495+-0.0545 5.4485+-0.0571 inlined-put-by-id-transition 11.7281+-0.2337 11.6143+-0.1747 int-or-other-abs-then-get-by-val 5.4440+-0.0803 ? 5.5092+-0.0981 ? might be 1.0120x slower int-or-other-abs-zero-then-get-by-val 18.6464+-0.2970 18.5734+-0.8064 int-or-other-add-then-get-by-val 4.7153+-0.0544 ? 4.8196+-0.1327 ? might be 1.0221x slower int-or-other-add 5.7422+-0.1544 ? 5.8425+-0.1376 ? might be 1.0175x slower int-or-other-div-then-get-by-val 4.6764+-0.0901 4.6379+-0.0956 int-or-other-max-then-get-by-val 4.7975+-0.1690 ? 4.8348+-0.1172 ? int-or-other-min-then-get-by-val 4.8901+-0.1517 4.8803+-0.1715 int-or-other-mod-then-get-by-val 4.4520+-0.1712 ? 4.5366+-0.1597 ? might be 1.0190x slower int-or-other-mul-then-get-by-val 4.2076+-0.0844 ? 4.2213+-0.1212 ? int-or-other-neg-then-get-by-val 5.2406+-0.0519 ? 5.2487+-0.1467 ? int-or-other-neg-zero-then-get-by-val 18.4791+-0.2448 ? 18.4967+-0.2847 ? int-or-other-sub-then-get-by-val 4.7939+-0.1516 4.7497+-0.0544 int-or-other-sub 3.9666+-0.0402 3.9524+-0.2695 int-overflow-local 4.9384+-0.1815 4.8389+-0.1088 might be 1.0205x faster Int16Array-alloc-long-lived 49.3133+-1.2327 ? 49.4244+-0.5724 ? Int16Array-bubble-sort-with-byteLength 20.7950+-0.4950 ? 21.0070+-0.9020 ? might be 1.0102x slower Int16Array-bubble-sort 20.6752+-0.2090 ^ 20.0352+-0.1533 ^ definitely 1.0319x faster Int16Array-load-int-mul 1.7755+-0.0361 1.7588+-0.0536 Int16Array-to-Int32Array-set 54.0530+-0.9502 53.3159+-0.2601 might be 1.0138x faster Int32Array-alloc-large 21.4474+-0.5404 21.4143+-0.5769 Int32Array-alloc-long-lived 55.1489+-0.6213 ? 55.4640+-1.5163 ? Int32Array-alloc 2.8781+-0.1410 ? 3.0127+-0.2432 ? might be 1.0467x slower Int32Array-Int8Array-view-alloc 6.4722+-0.0572 ? 6.7074+-0.3304 ? might be 1.0363x slower int52-spill 6.3579+-0.0648 ? 6.4058+-0.1510 ? Int8Array-alloc-long-lived 44.6940+-0.9962 44.3044+-1.3355 Int8Array-load-with-byteLength 3.7852+-0.3575 3.6750+-0.0307 might be 1.0300x faster Int8Array-load 3.6872+-0.0577 3.6849+-0.0864 integer-divide 12.1199+-0.3800 ? 12.2667+-0.3116 ? might be 1.0121x slower integer-modulo 2.5320+-0.1837 2.5075+-0.1674 is-boolean-fold-tricky 4.9117+-0.1245 4.7953+-0.0863 might be 1.0243x faster is-boolean-fold 3.0551+-0.0535 ? 3.1301+-0.0740 ? might be 1.0246x slower is-function-fold-tricky-internal-function 12.8330+-0.2972 12.7511+-0.2780 is-function-fold-tricky 5.2293+-0.6368 4.8785+-0.0386 might be 1.0719x faster is-function-fold 3.1090+-0.0664 ? 3.1155+-0.0552 ? is-number-fold-tricky 4.9141+-0.1435 4.8375+-0.0697 might be 1.0158x faster is-number-fold 3.1316+-0.0764 ? 3.1570+-0.0796 ? is-object-or-null-fold-functions 3.1534+-0.1006 ? 3.2102+-0.0862 ? might be 1.0180x slower is-object-or-null-fold-less-tricky 5.0657+-0.1046 ^ 4.8191+-0.0544 ^ definitely 1.0512x faster is-object-or-null-fold-tricky 7.1770+-0.2065 ? 7.1801+-0.1412 ? is-object-or-null-fold 3.1257+-0.0790 3.1130+-0.0846 is-object-or-null-trickier-function 5.1281+-0.1538 4.9630+-0.0817 might be 1.0333x faster is-object-or-null-trickier-internal-function 13.5082+-0.1603 13.3831+-0.1452 is-object-or-null-tricky-function 5.0752+-0.2140 ? 5.1529+-0.3611 ? might be 1.0153x slower is-object-or-null-tricky-internal-function 10.1974+-0.3080 ^ 9.7996+-0.0580 ^ definitely 1.0406x faster is-string-fold-tricky 4.8964+-0.0831 ? 4.9560+-0.2010 ? might be 1.0122x slower is-string-fold 3.0518+-0.0698 ? 3.1127+-0.1158 ? might be 1.0199x slower is-undefined-fold-tricky 3.9450+-0.0660 ? 4.0682+-0.1057 ? might be 1.0312x slower is-undefined-fold 3.1158+-0.0644 3.0872+-0.0670 large-int-captured 4.7336+-0.2319 ? 4.8638+-0.1926 ? might be 1.0275x slower large-int-neg 17.2000+-0.5194 17.1093+-0.3734 large-int 15.6413+-0.3055 ? 16.0004+-0.4375 ? might be 1.0230x slower load-varargs-elimination 25.9607+-0.3349 ? 26.5315+-0.8365 ? might be 1.0220x slower logical-not 5.0847+-0.0788 ? 5.1389+-0.1116 ? might be 1.0107x slower lots-of-fields 13.4226+-0.5618 ? 14.2407+-0.3583 ? might be 1.0610x slower make-indexed-storage 3.2358+-0.3031 ? 3.2464+-0.3862 ? make-rope-cse 4.0562+-0.1923 3.9864+-0.1428 might be 1.0175x faster marsaglia-larger-ints 42.4079+-0.7219 41.6765+-0.7135 might be 1.0176x faster marsaglia-osr-entry 23.7762+-0.5942 ? 23.8015+-1.0261 ? max-boolean 2.6930+-0.0446 ? 2.7087+-0.0735 ? method-on-number 18.9564+-0.3880 ^ 17.7610+-0.3114 ^ definitely 1.0673x faster min-boolean 2.7662+-0.0817 2.7167+-0.0743 might be 1.0182x faster minus-boolean-double 3.3923+-0.0215 ? 3.4561+-0.0655 ? might be 1.0188x slower minus-boolean 2.5516+-0.0311 ? 2.6183+-0.1253 ? might be 1.0262x slower misc-strict-eq 40.5641+-0.4491 ? 40.9549+-0.7357 ? mod-boolean-double 11.6232+-0.1537 ? 11.7470+-0.2982 ? might be 1.0107x slower mod-boolean 8.5114+-0.1821 ? 8.5485+-0.2753 ? mul-boolean-double 4.1385+-0.2486 4.0344+-0.1168 might be 1.0258x faster mul-boolean 3.1416+-0.1081 3.1358+-0.0280 neg-boolean 3.4116+-0.1012 ? 3.4210+-0.0538 ? negative-zero-divide 0.4670+-0.0244 0.4640+-0.0229 negative-zero-modulo 0.4505+-0.0256 ? 0.4829+-0.0945 ? might be 1.0719x slower negative-zero-negate 0.4352+-0.0143 0.4221+-0.0298 might be 1.0310x faster nested-function-parsing 38.9521+-0.5677 ? 40.6336+-2.9389 ? might be 1.0432x slower new-array-buffer-dead 104.2596+-0.7854 103.8648+-0.2802 new-array-buffer-push 6.7837+-0.5438 6.6443+-0.3746 might be 1.0210x faster new-array-dead 19.4286+-0.6951 ? 19.5995+-0.3695 ? new-array-push 3.9730+-0.1461 ? 4.1221+-0.1797 ? might be 1.0375x slower no-inline-constructor 39.7671+-0.6818 39.4660+-1.3021 number-test 3.3147+-0.0728 ? 3.3419+-0.0838 ? object-closure-call 6.0239+-0.2645 ? 6.1760+-0.2121 ? might be 1.0253x slower object-test 3.0926+-0.0803 ? 3.2063+-0.1516 ? might be 1.0368x slower obvious-sink-pathology-taken 126.7196+-2.1278 ? 127.0551+-1.4851 ? obvious-sink-pathology 119.8670+-1.0109 ? 119.9386+-0.6034 ? obviously-elidable-new-object 35.8866+-0.5515 35.1518+-0.6442 might be 1.0209x faster plus-boolean-arith 2.7503+-0.0981 ? 2.7868+-0.1249 ? might be 1.0133x slower plus-boolean-double 3.5451+-0.1921 3.4444+-0.0796 might be 1.0292x faster plus-boolean 2.5769+-0.0301 ? 2.6285+-0.0777 ? might be 1.0201x slower poly-chain-access-different-prototypes-simple 3.6388+-0.1220 3.5918+-0.0777 might be 1.0131x faster poly-chain-access-different-prototypes 2.8038+-0.0861 ? 2.9341+-0.1723 ? might be 1.0465x slower poly-chain-access-simpler 3.5669+-0.1514 3.5146+-0.0328 might be 1.0149x faster poly-chain-access 2.8373+-0.0387 ? 2.8981+-0.0758 ? might be 1.0214x slower poly-stricteq 60.8954+-0.7019 ? 62.4316+-2.1167 ? might be 1.0252x slower polymorphic-array-call 1.6663+-0.0443 ? 1.6682+-0.0855 ? polymorphic-get-by-id 3.4983+-0.4571 3.3947+-0.1169 might be 1.0305x faster polymorphic-put-by-id 32.5243+-1.3978 ? 35.2653+-1.3828 ? might be 1.0843x slower polymorphic-structure 15.8225+-0.3630 ? 15.8833+-0.2586 ? polyvariant-monomorphic-get-by-id 9.3790+-0.1685 9.3152+-0.1704 proto-getter-access 9.8065+-0.2285 9.7849+-0.2237 put-by-id-replace-and-transition 9.7684+-0.3647 9.4053+-0.1543 might be 1.0386x faster put-by-id-slightly-polymorphic 3.0419+-0.0405 ? 3.1223+-0.0928 ? might be 1.0264x slower put-by-id 13.3006+-0.4399 ? 13.3219+-0.5095 ? put-by-val-direct 0.4459+-0.0308 ? 0.4511+-0.0259 ? might be 1.0117x slower put-by-val-large-index-blank-indexing-type 5.7921+-0.2062 5.7319+-0.1030 might be 1.0105x faster put-by-val-machine-int 2.8475+-0.0846 2.7999+-0.1243 might be 1.0170x faster rare-osr-exit-on-local 15.8760+-0.1656 ? 15.9131+-0.2009 ? register-pressure-from-osr 22.8750+-0.3007 ? 23.1867+-0.4980 ? might be 1.0136x slower setter 6.2863+-0.0495 ! 6.4484+-0.1024 ! definitely 1.0258x slower simple-activation-demo 26.7964+-0.3014 ? 27.0772+-0.4553 ? might be 1.0105x slower simple-getter-access 12.5871+-0.3964 12.4681+-0.1912 simple-poly-call-nested 9.2483+-0.1166 9.2277+-0.0368 simple-poly-call 1.6133+-0.0237 1.5958+-0.0270 might be 1.0110x faster sin-boolean 20.4530+-1.0942 ? 22.1926+-3.1111 ? might be 1.0851x slower singleton-scope 65.9832+-1.0132 ? 66.1077+-0.6935 ? sink-function 11.9629+-0.8669 ? 12.5684+-0.4330 ? might be 1.0506x slower sink-huge-activation 19.8704+-0.9147 19.5890+-1.2236 might be 1.0144x faster sinkable-new-object-dag 70.6824+-1.7638 ? 71.4422+-1.9753 ? might be 1.0107x slower sinkable-new-object-taken 53.1531+-1.9906 ? 53.3200+-2.2725 ? sinkable-new-object 39.6399+-1.0269 38.6961+-0.6519 might be 1.0244x faster slow-array-profile-convergence 3.1747+-0.1572 ? 3.2240+-0.1682 ? might be 1.0155x slower slow-convergence 3.1019+-0.1669 ? 3.1609+-0.1814 ? might be 1.0190x slower slow-ternaries 19.7077+-0.2526 19.5313+-0.4564 sorting-benchmark 20.6677+-0.2503 ? 20.6979+-0.1902 ? sparse-conditional 1.4180+-0.0408 ? 1.4394+-0.0498 ? might be 1.0151x slower splice-to-remove 17.1901+-0.2324 ? 18.4045+-3.2279 ? might be 1.0706x slower string-char-code-at 16.7569+-0.1786 ? 16.7877+-0.5414 ? string-concat-object 2.3337+-0.0466 ? 2.3400+-0.0688 ? string-concat-pair-object 2.4023+-0.1699 2.3085+-0.0624 might be 1.0406x faster string-concat-pair-simple 12.5841+-0.5340 12.1740+-0.2867 might be 1.0337x faster string-concat-simple 12.6101+-0.2765 12.5390+-0.2772 string-cons-repeat 7.7805+-0.3077 ? 8.0732+-0.3411 ? might be 1.0376x slower string-cons-tower 7.9575+-0.2224 7.7713+-0.1092 might be 1.0240x faster string-equality 19.8631+-0.3107 ? 20.0490+-0.2696 ? string-get-by-val-big-char 7.6909+-0.3657 7.4323+-0.1183 might be 1.0348x faster string-get-by-val-out-of-bounds-insane 3.8356+-0.0885 ? 3.8972+-0.2041 ? might be 1.0161x slower string-get-by-val-out-of-bounds 5.9840+-0.4640 5.6484+-0.1626 might be 1.0594x faster string-get-by-val 3.6405+-0.1466 ? 3.7180+-0.1146 ? might be 1.0213x slower string-hash 2.3118+-0.0614 ? 2.3334+-0.0353 ? string-long-ident-equality 16.4626+-0.2904 ? 16.5360+-0.3868 ? string-out-of-bounds 15.6328+-0.3761 15.4018+-0.3491 might be 1.0150x faster string-repeat-arith 33.1757+-0.7956 ? 34.0533+-0.6198 ? might be 1.0265x slower string-sub 65.3438+-0.6901 ? 65.8079+-1.5648 ? string-test 3.1859+-0.0774 ? 3.2418+-0.0828 ? might be 1.0175x slower string-var-equality 34.6545+-0.8156 34.4651+-0.3960 structure-hoist-over-transitions 2.8162+-0.1323 ? 2.9274+-0.1836 ? might be 1.0395x slower substring-concat-weird 41.2317+-0.4039 41.1480+-0.8042 substring-concat 44.8405+-1.0342 ? 45.3848+-2.4343 ? might be 1.0121x slower substring 47.6974+-0.8224 ? 47.7990+-0.9109 ? switch-char-constant 3.0441+-0.1023 2.9958+-0.0630 might be 1.0161x faster switch-char 7.0216+-0.0626 ? 7.0327+-0.0729 ? switch-constant 9.1169+-0.5631 8.9387+-0.4020 might be 1.0199x faster switch-string-basic-big-var 19.7640+-0.3005 ? 20.0629+-0.5830 ? might be 1.0151x slower switch-string-basic-big 18.3227+-0.2168 18.2107+-0.4909 switch-string-basic-var 16.2028+-0.2460 ? 16.2767+-0.4939 ? switch-string-basic 14.9866+-0.1612 ? 15.1241+-0.3167 ? switch-string-big-length-tower-var 21.5937+-0.3433 21.3844+-0.4933 switch-string-length-tower-var 16.3407+-0.3172 ? 16.3463+-0.2422 ? switch-string-length-tower 13.5852+-0.2258 13.5474+-0.1919 switch-string-short 13.4849+-0.1006 ? 13.7425+-0.1903 ? might be 1.0191x slower switch 13.0993+-0.1857 ? 13.6191+-0.9115 ? might be 1.0397x slower tear-off-arguments-simple 3.6073+-0.1743 3.5605+-0.0808 might be 1.0131x faster tear-off-arguments 5.1315+-0.3473 4.8976+-0.1126 might be 1.0478x faster temporal-structure 13.4235+-0.3409 13.1538+-0.2967 might be 1.0205x faster to-int32-boolean 14.4664+-0.2685 ? 14.5079+-0.1679 ? try-catch-get-by-val-cloned-arguments 15.1547+-1.7034 14.5126+-0.7952 might be 1.0442x faster try-catch-get-by-val-direct-arguments 6.4940+-0.3047 ? 6.7853+-0.5353 ? might be 1.0449x slower try-catch-get-by-val-scoped-arguments 7.4242+-0.0904 ? 7.5139+-0.2845 ? might be 1.0121x slower typed-array-get-set-by-val-profiling 36.4769+-0.4708 ? 37.3499+-2.3278 ? might be 1.0239x slower undefined-property-access 361.3414+-8.8594 357.5765+-0.5500 might be 1.0105x faster undefined-test 3.2733+-0.0784 ? 3.4623+-0.1198 ? might be 1.0577x slower unprofiled-licm 23.2414+-0.2495 22.9490+-0.3642 might be 1.0127x faster varargs-call 16.0055+-0.1355 ? 16.0098+-0.3686 ? varargs-construct-inline 28.5296+-0.9216 27.8645+-0.8314 might be 1.0239x faster varargs-construct 24.0386+-0.3610 ? 24.1823+-0.4964 ? varargs-inline 9.7306+-0.2039 9.7095+-0.1837 varargs-strict-mode 10.7086+-0.1850 ? 10.9770+-0.4073 ? might be 1.0251x slower varargs 10.8767+-0.2900 ? 10.9339+-0.3295 ? weird-inlining-const-prop 2.5784+-0.1479 ? 2.5962+-0.1706 ? <geometric> 8.8942+-0.0125 ! 8.9268+-0.0154 ! definitely 1.0037x slower r184563 LazyNode AsmBench: bigfib.cpp 530.4476+-3.4576 ? 531.8476+-1.4115 ? cray.c 454.8730+-3.2171 ? 467.6731+-19.5239 ? might be 1.0281x slower dry.c 515.0510+-14.3997 511.9144+-18.9592 FloatMM.c 753.5271+-1.1324 ? 754.4245+-4.4353 ? gcc-loops.cpp 4396.5297+-11.4400 ! 4421.1068+-10.9712 ! definitely 1.0056x slower n-body.c 1033.6262+-1.6029 ? 1037.2446+-7.2954 ? Quicksort.c 445.2131+-8.6740 444.7903+-1.7022 stepanov_container.cpp 3972.4623+-5.5964 ? 3987.7805+-16.7840 ? Towers.c 270.2157+-2.9628 269.1699+-1.8659 <geometric> 837.7626+-3.2470 ? 840.8484+-7.4656 ? might be 1.0037x slower r184563 LazyNode CompressionBench: huffman 381.7283+-1.1493 ! 391.5232+-2.1948 ! definitely 1.0257x slower arithmetic-simple 382.1947+-0.6520 ? 382.8132+-1.1796 ? arithmetic-precise 306.7580+-3.1386 ? 307.4093+-3.7184 ? arithmetic-complex-precise 316.5529+-2.6948 315.8540+-2.3852 arithmetic-precise-order-0 402.3017+-5.4393 399.2545+-3.9375 arithmetic-precise-order-1 345.3787+-6.6243 343.1055+-1.9818 arithmetic-precise-order-2 394.0601+-12.7991 390.4156+-2.0276 arithmetic-simple-order-1 442.2996+-2.1746 ? 442.6624+-2.8598 ? arithmetic-simple-order-2 494.0874+-1.9415 ? 499.6559+-6.9788 ? might be 1.0113x slower lz-string 321.8915+-1.9238 ? 325.0507+-5.2580 ? <geometric> 374.6833+-1.4244 ? 375.6390+-0.7370 ? might be 1.0026x slower r184563 LazyNode Geomean of preferred means: <scaled-result> 64.4790+-0.1366 ! 64.7893+-0.1069 ! definitely 1.0048x slower
Created attachment 253532 [details] Patch
It looks like your slow downs are within noise. One of the reasons why I hadn't added this capability previously is that our current benchmarks don't seem to need it. But it's an obviously desirable optimization and we don't limit ourselves to just those optimizations that make sense for existing benchmarks.
Comment on attachment 253532 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=253532&action=review > Source/JavaScriptCore/dfg/DFGLazyNode.h:183 > + NodeType m_op:16; It feels like you could make this be a pointer-width or 64-bit data structure. You only need to know the op for constants, and then there are only 3 choices. You sort of need 1 bit to determine if it's a node or frozen value, except that if the bit says "Node" then the op is superfluous. So you really have only four options for these two fields: Node, Frozen Value JS, Frozen Value Double, and Frozen Value Int52. This means that you only need two bits. You can always hide two bits in the low bits of a pointer.
(In reply to comment #2) > It looks like your slow downs are within noise. One of the reasons why I > hadn't added this capability previously is that our current benchmarks don't > seem to need it. But it's an obviously desirable optimization and we don't > limit ourselves to just those optimizations that make sense for existing > benchmarks. Although the slowdown is relatively consistent throughout runs, I see your point. However, I was having doubts that this is really a desirable optimization. The really expensive operation here is the array allocation, not the access to the fields, so it may be a better place to handle this in object allocation sinking rather than CSE. Then we wouldn't have this in DFG mode, but then again, it is currently disabled in DFG for small blocks (see FIXME in DFGCSEPhase.cpp) already. (In reply to comment #3) > Comment on attachment 253532 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=253532&action=review > > > Source/JavaScriptCore/dfg/DFGLazyNode.h:183 > > + NodeType m_op:16; > > It feels like you could make this be a pointer-width or 64-bit data > structure. You only need to know the op for constants, and then there are > only 3 choices. You sort of need 1 bit to determine if it's a node or frozen > value, except that if the bit says "Node" then the op is superfluous. So you > really have only four options for these two fields: Node, Frozen Value JS, > Frozen Value Double, and Frozen Value Int52. This means that you only need > two bits. You can always hide two bits in the low bits of a pointer. Ah, I was not sure the "you can always hide two bits in the low bits of a pointer" thing was true for all the architectures we need to support, but this was my first idea as well. I will try changing that and see how it goes.
Created attachment 253562 [details] Patch
The benchmarks now look more reasonable to me. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Basiles-Mac-Pro (MacPro6,1). VMs tested: "r184563" at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc "LazyNode" at /Volumes/Data/secondary/OpenSource/WebKitBuild/LazyNode/Release/jsc Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds. r184563 LazyNode SunSpider: 3d-cube 6.8330+-0.0475 6.7893+-0.0757 3d-morph 7.5724+-0.0526 7.5501+-0.0345 3d-raytrace 8.4367+-0.0825 8.3979+-0.0792 access-binary-trees 2.9316+-0.0601 2.9127+-0.0458 access-fannkuch 7.7530+-0.1141 7.7306+-0.0592 access-nbody 3.9899+-0.3533 3.8789+-0.0217 might be 1.0286x faster access-nsieve 4.5555+-0.0956 4.5441+-0.0965 bitops-3bit-bits-in-byte 2.0670+-0.0231 ? 2.0887+-0.0301 ? might be 1.0105x slower bitops-bits-in-byte 4.6337+-0.0569 ? 4.6437+-0.0498 ? bitops-bitwise-and 2.9302+-0.3089 2.7927+-0.0409 might be 1.0492x faster bitops-nsieve-bits 4.0482+-0.0157 ? 4.0976+-0.1261 ? might be 1.0122x slower controlflow-recursive 2.8971+-0.0903 ? 2.9312+-0.0260 ? might be 1.0118x slower crypto-aes 5.9521+-0.0994 ? 6.0031+-0.1951 ? crypto-md5 3.6882+-0.2026 3.4843+-0.0635 might be 1.0585x faster crypto-sha1 3.3398+-0.1591 3.2673+-0.0356 might be 1.0222x faster date-format-tofte 11.9284+-0.1458 ! 12.3507+-0.1520 ! definitely 1.0354x slower date-format-xparb 7.4581+-0.0176 ? 7.5389+-0.1689 ? might be 1.0108x slower math-cordic 4.0256+-0.0378 ? 4.0315+-0.0362 ? math-partial-sums 7.1322+-0.1289 ? 7.2974+-0.6951 ? might be 1.0232x slower math-spectral-norm 2.5975+-0.0612 ? 2.6194+-0.0497 ? regexp-dna 9.3436+-0.1062 ? 9.3508+-0.2601 ? string-base64 6.0971+-0.0545 ? 6.2052+-0.0926 ? might be 1.0177x slower string-fasta 8.4609+-0.2305 ? 8.4733+-0.1045 ? string-tagcloud 11.9033+-0.1199 ? 12.1213+-0.2689 ? might be 1.0183x slower string-unpack-code 27.6075+-0.2129 ^ 26.8402+-0.2409 ^ definitely 1.0286x faster string-validate-input 6.2998+-0.0648 ? 6.5498+-0.4903 ? might be 1.0397x slower <arithmetic> 6.7109+-0.0356 ? 6.7112+-0.0442 ? might be 1.0000x slower r184563 LazyNode LongSpider: 3d-cube 1161.9515+-5.3153 ? 1162.6110+-6.7421 ? 3d-morph 2081.8644+-2.2101 ? 2083.4186+-2.5086 ? 3d-raytrace 964.9550+-2.9916 ? 966.9846+-2.1139 ? access-binary-trees 1202.8700+-8.3168 1197.4823+-4.8449 access-fannkuch 444.1959+-12.2446 442.2732+-6.5401 access-nbody 841.8930+-0.8430 841.6598+-0.7912 access-nsieve 554.6010+-3.1358 554.0694+-4.2611 bitops-3bit-bits-in-byte 62.2255+-0.5060 ? 62.5452+-0.7317 ? bitops-bits-in-byte 124.4947+-2.0777 122.8069+-2.2689 might be 1.0137x faster bitops-nsieve-bits 589.4498+-1.1096 ? 591.8050+-1.8722 ? controlflow-recursive 656.6624+-9.4780 648.2872+-9.5573 might be 1.0129x faster crypto-aes 895.3399+-4.6306 890.9220+-4.1307 crypto-md5 705.8483+-9.2472 ? 712.1329+-3.1710 ? crypto-sha1 829.9058+-4.3537 ? 833.7055+-5.6857 ? date-format-tofte 962.5408+-9.5784 ? 982.0764+-25.9311 ? might be 1.0203x slower date-format-xparb 1017.5420+-37.9460 ? 1018.2288+-34.2323 ? hash-map 217.5200+-2.3129 217.3473+-2.1448 math-cordic 802.0189+-0.2334 ? 802.4769+-0.5320 ? math-partial-sums 688.2911+-1.1601 ? 691.0188+-4.2164 ? math-spectral-norm 765.8102+-1.3822 ? 766.3490+-1.5090 ? string-base64 479.8174+-1.4370 ? 480.4628+-0.5954 ? string-fasta 554.6161+-2.8639 ? 557.9010+-1.7465 ? string-tagcloud 267.6748+-1.6707 ? 272.0585+-4.5248 ? might be 1.0164x slower <geometric> 592.3036+-1.3539 ? 593.1580+-1.7368 ? might be 1.0014x slower r184563 LazyNode V8Spider: crypto 67.8765+-0.7304 ? 68.8577+-0.8869 ? might be 1.0145x slower deltablue 87.3304+-1.2137 ? 90.1341+-1.9642 ? might be 1.0321x slower earley-boyer 58.1275+-0.6450 ? 58.4982+-0.8771 ? raytrace 39.8321+-0.7011 ? 40.1393+-1.0207 ? regexp 105.9992+-0.4087 105.9331+-0.3641 richards 96.4194+-1.8344 95.6577+-1.8872 splay 47.5691+-1.5622 ? 48.7973+-1.3452 ? might be 1.0258x slower <geometric> 67.9211+-0.6396 ? 68.6701+-0.6668 ? might be 1.0110x slower r184563 LazyNode Octane: encrypt 0.30665+-0.00084 0.30644+-0.00055 decrypt 5.27116+-0.07426 ? 5.27748+-0.03298 ? deltablue x2 0.25798+-0.00107 ? 0.25878+-0.00135 ? earley 0.48901+-0.00268 0.48662+-0.00319 boyer 6.80707+-0.00748 ? 6.81116+-0.01100 ? navier-stokes x2 7.07389+-0.00782 ? 7.07641+-0.00851 ? raytrace x2 1.59878+-0.04097 1.57785+-0.05824 might be 1.0133x faster richards x2 0.15653+-0.00117 ? 0.15700+-0.00070 ? splay x2 0.48774+-0.00735 0.48608+-0.00279 regexp x2 40.25384+-0.25656 40.19403+-0.16775 pdfjs x2 55.59378+-0.29521 55.33154+-0.79303 mandreel x2 70.09515+-0.11387 ? 70.13248+-0.12331 ? gbemu x2 58.79256+-0.83158 ? 59.55201+-0.29982 ? might be 1.0129x slower closure 0.80091+-0.00106 ? 0.80345+-0.00463 ? jquery 10.26737+-0.03920 ? 10.28985+-0.02669 ? box2d x2 17.66133+-0.03012 17.63529+-0.07021 zlib x2 522.48655+-1.13172 ? 524.45776+-1.31383 ? typescript x2 1067.58480+-10.78260 1066.17354+-19.13008 <geometric> 8.74833+-0.01868 8.74749+-0.02421 might be 1.0001x faster r184563 LazyNode Kraken: ai-astar 414.812+-9.575 ? 419.428+-8.245 ? might be 1.0111x slower audio-beat-detection 140.779+-0.497 ? 141.033+-0.475 ? audio-dft 150.777+-0.943 150.622+-0.920 audio-fft 106.523+-0.222 ? 106.716+-0.309 ? audio-oscillator 98.138+-0.346 98.075+-0.247 imaging-darkroom 140.572+-0.735 ? 141.701+-2.695 ? imaging-desaturate 87.098+-0.387 86.543+-0.765 imaging-gaussian-blur 147.334+-0.249 ! 147.951+-0.356 ! definitely 1.0042x slower json-parse-financial 61.215+-0.467 60.254+-1.002 might be 1.0159x faster json-stringify-tinderbox 38.096+-0.110 ! 38.592+-0.056 ! definitely 1.0130x slower stanford-crypto-aes 76.438+-0.882 ? 77.711+-1.001 ? might be 1.0166x slower stanford-crypto-ccm 67.328+-1.769 ? 68.584+-2.385 ? might be 1.0186x slower stanford-crypto-pbkdf2 156.226+-1.359 ? 156.816+-0.813 ? stanford-crypto-sha256-iterative 60.445+-1.163 ? 60.824+-1.035 ? <arithmetic> 124.699+-0.695 ? 125.346+-0.918 ? might be 1.0052x slower r184563 LazyNode JSRegress: abs-boolean 3.4178+-0.0279 ? 3.5374+-0.2717 ? might be 1.0350x slower adapt-to-double-divide 21.6469+-0.4053 ? 21.6964+-0.3932 ? aliased-arguments-getbyval 1.6172+-0.0669 ? 1.7248+-0.1007 ? might be 1.0665x slower allocate-big-object 3.2719+-0.0663 3.2494+-0.0864 arguments-named-and-reflective 14.6400+-0.2144 ? 14.7393+-0.2878 ? arguments-out-of-bounds 19.0353+-0.1864 ? 19.0456+-0.1572 ? arguments-strict-mode 13.6656+-0.2313 ? 13.7770+-0.1621 ? arguments 11.9782+-0.2766 ? 12.0895+-0.3368 ? arity-mismatch-inlining 1.2065+-0.0369 1.1986+-0.0163 array-access-polymorphic-structure 8.2675+-0.0966 ? 8.3089+-0.3119 ? array-nonarray-polymorhpic-access 43.4279+-0.5183 43.0363+-0.8880 array-prototype-every 110.6495+-0.5640 ! 112.1020+-0.8531 ! definitely 1.0131x slower array-prototype-forEach 108.1305+-0.8717 ? 108.3259+-0.4925 ? array-prototype-map 120.0226+-0.5378 ? 120.5019+-1.4066 ? array-prototype-some 110.5890+-0.5197 ! 111.7489+-0.4914 ! definitely 1.0105x slower array-splice-contiguous 59.4387+-0.6267 ^ 55.4790+-0.6437 ^ definitely 1.0714x faster array-with-double-add 5.2653+-0.0353 ? 5.3223+-0.0315 ? might be 1.0108x slower array-with-double-increment 4.2139+-0.0511 ? 4.2969+-0.0512 ? might be 1.0197x slower array-with-double-mul-add 6.5074+-0.0562 ? 6.5231+-0.0328 ? array-with-double-sum 4.3350+-0.1536 4.2725+-0.0295 might be 1.0146x faster array-with-int32-add-sub 8.5612+-0.0292 8.5173+-0.0425 array-with-int32-or-double-sum 4.5181+-0.3556 4.3278+-0.0428 might be 1.0440x faster ArrayBuffer-DataView-alloc-large-long-lived 39.1629+-0.2546 39.1202+-0.2436 ArrayBuffer-DataView-alloc-long-lived 17.6190+-1.0137 17.0061+-0.2081 might be 1.0360x faster ArrayBuffer-Int32Array-byteOffset 5.0165+-0.0408 ? 5.0182+-0.0463 ? ArrayBuffer-Int8Array-alloc-large-long-lived 40.5541+-0.7804 40.2592+-0.3610 ArrayBuffer-Int8Array-alloc-long-lived-buffer 29.0138+-0.9899 28.1208+-1.0348 might be 1.0318x faster ArrayBuffer-Int8Array-alloc-long-lived 16.5705+-0.6558 16.0205+-0.2552 might be 1.0343x faster ArrayBuffer-Int8Array-alloc 13.5181+-0.3285 13.4212+-0.1096 asmjs_bool_bug 9.6171+-0.2766 ? 9.6233+-0.1310 ? assign-custom-setter-polymorphic 4.2500+-0.0589 ^ 4.0730+-0.0610 ^ definitely 1.0435x faster assign-custom-setter 5.8684+-0.0515 ^ 5.4482+-0.0204 ^ definitely 1.0771x faster basic-set 10.9179+-0.3142 ? 11.0135+-0.1218 ? big-int-mul 5.1318+-0.0258 ? 5.1331+-0.0331 ? boolean-test 3.9740+-0.0437 ? 4.0060+-0.0609 ? branch-fold 4.9384+-0.2293 4.8723+-0.0739 might be 1.0136x faster branch-on-string-as-boolean 23.7963+-0.4765 23.6012+-0.1491 by-val-generic 10.1225+-0.2097 10.0118+-0.2062 might be 1.0111x faster call-spread-apply 37.5716+-0.3900 ? 37.7244+-0.8922 ? call-spread-call 31.9985+-0.2576 ? 32.4575+-1.0779 ? might be 1.0143x slower captured-assignments 0.5986+-0.0217 ? 0.6047+-0.0297 ? might be 1.0103x slower cast-int-to-double 6.6938+-0.0223 ? 6.7228+-0.0185 ? cell-argument 10.8730+-0.3684 10.7869+-0.2780 cfg-simplify 3.6572+-0.0939 ? 3.6809+-0.0799 ? chain-getter-access 11.6818+-0.1714 ? 11.7829+-0.0982 ? cmpeq-obj-to-obj-other 11.7673+-0.0503 ! 12.3144+-0.0685 ! definitely 1.0465x slower constant-test 6.3400+-0.0250 ? 6.3532+-0.0502 ? create-lots-of-functions 13.7738+-0.3406 ? 14.1885+-0.5074 ? might be 1.0301x slower DataView-custom-properties 45.6550+-0.2679 ? 46.3944+-0.8113 ? might be 1.0162x slower deconstructing-parameters-overridden-by-function 0.7536+-0.0403 0.7484+-0.0392 delay-tear-off-arguments-strictmode 17.4132+-0.0640 ! 17.9818+-0.2241 ! definitely 1.0326x slower deltablue-varargs 264.9302+-1.1502 ! 270.0520+-1.4848 ! definitely 1.0193x slower destructuring-arguments 21.9332+-0.3271 21.5148+-0.2426 might be 1.0194x faster destructuring-swap 6.5934+-0.2931 6.5222+-0.0837 might be 1.0109x faster direct-arguments-getbyval 1.6501+-0.0638 ? 1.7028+-0.0456 ? might be 1.0319x slower div-boolean-double 6.6481+-0.0117 ? 6.6491+-0.0207 ? div-boolean 9.9985+-0.0152 9.9870+-0.0189 double-get-by-val-out-of-bounds 5.6305+-0.1244 ^ 5.4458+-0.0412 ^ definitely 1.0339x faster double-pollution-getbyval 11.3972+-0.0211 ? 11.4085+-0.0468 ? double-pollution-putbyoffset 5.4288+-0.0413 5.4013+-0.0539 double-to-int32-typed-array-no-inline 2.8802+-0.0498 ? 2.8831+-0.0441 ? double-to-int32-typed-array 2.5276+-0.0247 ? 2.5642+-0.0462 ? might be 1.0145x slower double-to-uint32-typed-array-no-inline 2.9792+-0.0403 ? 2.9823+-0.0659 ? double-to-uint32-typed-array 2.6029+-0.0345 ? 2.6449+-0.0430 ? might be 1.0161x slower elidable-new-object-dag 51.7945+-0.4311 51.0295+-0.8366 might be 1.0150x faster elidable-new-object-roflcopter 53.3695+-0.7798 ? 53.4487+-0.3928 ? elidable-new-object-then-call 47.9443+-0.9412 47.3486+-0.2105 might be 1.0126x faster elidable-new-object-tree 53.8595+-0.6631 ? 54.2602+-0.7897 ? empty-string-plus-int 6.8983+-0.0860 6.7976+-0.0758 might be 1.0148x faster emscripten-cube2hash 48.6697+-0.3178 ? 48.7420+-0.4111 ? exit-length-on-plain-object 17.4682+-0.4347 17.3930+-0.2001 external-arguments-getbyval 1.6447+-0.0552 ? 1.6790+-0.1082 ? might be 1.0209x slower external-arguments-putbyval 3.0164+-0.0602 2.9827+-0.0718 might be 1.0113x faster fixed-typed-array-storage-var-index 1.7178+-0.1120 1.6611+-0.0184 might be 1.0341x faster fixed-typed-array-storage 1.2415+-0.0281 1.2140+-0.0573 might be 1.0226x faster Float32Array-matrix-mult 5.9869+-0.4005 5.8672+-0.1292 might be 1.0204x faster Float32Array-to-Float64Array-set 70.4899+-1.4393 ! 75.2247+-1.0956 ! definitely 1.0672x slower Float64Array-alloc-long-lived 82.9788+-1.0723 81.8792+-0.7423 might be 1.0134x faster Float64Array-to-Int16Array-set 91.2767+-1.0088 91.0976+-0.6499 fold-double-to-int 18.3979+-0.0628 ? 18.5338+-0.2156 ? fold-get-by-id-to-multi-get-by-offset-rare-int 10.0481+-0.2092 ? 10.2639+-0.3981 ? might be 1.0215x slower fold-get-by-id-to-multi-get-by-offset 8.9539+-0.5169 8.5924+-0.1266 might be 1.0421x faster fold-multi-get-by-offset-to-get-by-offset 8.4019+-0.9509 ? 8.7550+-0.1309 ? might be 1.0420x slower fold-multi-get-by-offset-to-poly-get-by-offset 7.9935+-0.5052 ? 8.4701+-0.5009 ? might be 1.0596x slower fold-multi-put-by-offset-to-poly-put-by-offset 7.8555+-0.0826 ? 7.9129+-0.1025 ? fold-multi-put-by-offset-to-put-by-offset 5.9308+-0.5261 5.7355+-0.6792 might be 1.0341x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 13.3002+-1.4170 12.7639+-1.1112 might be 1.0420x faster fold-put-by-id-to-multi-put-by-offset 8.4982+-0.4101 ? 8.5559+-0.4887 ? fold-put-structure 5.7272+-1.4124 5.1464+-0.0285 might be 1.1129x faster for-of-iterate-array-entries 5.7653+-0.0583 ? 5.8003+-0.0443 ? for-of-iterate-array-keys 4.7262+-0.1600 4.6809+-0.0607 for-of-iterate-array-values 4.6523+-0.0512 4.6431+-0.0562 fround 26.2901+-0.4636 26.0082+-0.2678 might be 1.0108x faster ftl-library-inlining-dataview 87.1365+-0.2125 ? 89.8865+-3.2682 ? might be 1.0316x slower ftl-library-inlining 97.0782+-23.4284 88.4270+-1.3689 might be 1.0978x faster function-dot-apply 2.8178+-0.0647 2.7952+-0.0374 function-test 3.6933+-0.0828 3.6639+-0.0328 function-with-eval 129.5402+-0.8796 129.5074+-1.4474 gcse-poly-get-less-obvious 25.8741+-3.3631 ? 26.5553+-4.0886 ? might be 1.0263x slower gcse-poly-get 28.2900+-6.5771 ? 35.7469+-5.3485 ? might be 1.2636x slower gcse 5.5909+-0.0234 ! 5.6370+-0.0222 ! definitely 1.0083x slower get-by-id-bimorphic-check-structure-elimination-simple 3.5170+-0.0666 ? 3.5438+-0.0453 ? get-by-id-bimorphic-check-structure-elimination 7.8767+-0.0637 ? 7.9238+-0.1796 ? get-by-id-chain-from-try-block 8.6834+-0.0768 8.6726+-0.0197 get-by-id-check-structure-elimination 6.7995+-0.2554 ? 6.9347+-0.4786 ? might be 1.0199x slower get-by-id-proto-or-self 24.5545+-2.4540 ? 26.3953+-3.1151 ? might be 1.0750x slower get-by-id-quadmorphic-check-structure-elimination-simple 3.7854+-0.0367 ? 3.8003+-0.0138 ? get-by-id-self-or-proto 24.8542+-2.2763 23.9414+-0.7254 might be 1.0381x faster get-by-val-out-of-bounds 5.5529+-0.1133 5.4740+-0.2117 might be 1.0144x faster get_callee_monomorphic 3.2838+-0.1014 3.2363+-0.0850 might be 1.0147x faster get_callee_polymorphic 4.5261+-0.0545 ? 4.5706+-0.0716 ? getter-no-activation 6.1568+-0.0387 6.1322+-0.0218 getter-richards 120.8604+-2.2347 120.0249+-0.3281 getter 7.1800+-0.5884 6.8560+-0.0321 might be 1.0473x faster global-var-const-infer-fire-from-opt 1.3258+-0.1359 1.3117+-0.1331 might be 1.0107x faster global-var-const-infer 1.1547+-0.1180 ? 1.2270+-0.2305 ? might be 1.0625x slower HashMap-put-get-iterate-keys 30.2739+-0.1594 ? 30.7863+-0.4618 ? might be 1.0169x slower HashMap-put-get-iterate 29.8547+-0.2376 ? 30.0815+-0.2056 ? HashMap-string-put-get-iterate 34.1463+-0.2058 34.0638+-0.6473 hoist-make-rope 15.1246+-1.1770 15.0092+-0.9513 hoist-poly-check-structure-effectful-loop 6.4216+-0.0330 6.4071+-0.0169 hoist-poly-check-structure 4.7111+-0.0594 ? 4.7195+-0.0432 ? imul-double-only 9.6722+-0.5216 ? 10.0003+-0.2220 ? might be 1.0339x slower imul-int-only 12.0585+-0.4237 ? 12.3975+-0.0971 ? might be 1.0281x slower imul-mixed 9.9933+-0.0642 9.8108+-0.4585 might be 1.0186x faster in-four-cases 28.2149+-0.1655 28.1479+-0.2717 in-one-case-false 14.1362+-0.1318 14.0555+-0.0266 in-one-case-true 14.0441+-0.0474 ? 14.1278+-0.1765 ? in-two-cases 15.0060+-0.3169 14.8589+-0.0297 indexed-properties-in-objects 3.6694+-0.0286 ! 3.7391+-0.0266 ! definitely 1.0190x slower infer-closure-const-then-mov-no-inline 5.0638+-0.0615 ? 5.1212+-0.0635 ? might be 1.0113x slower infer-closure-const-then-mov 25.7027+-0.3471 ^ 24.8832+-0.2222 ^ definitely 1.0329x faster infer-closure-const-then-put-to-scope-no-inline 15.8173+-0.0569 15.7753+-0.0493 infer-closure-const-then-put-to-scope 28.7289+-1.0830 ? 29.5537+-1.1649 ? might be 1.0287x slower infer-closure-const-then-reenter-no-inline 76.2496+-0.7295 76.0774+-0.1945 infer-closure-const-then-reenter 28.9155+-0.9337 ? 29.1068+-1.0114 ? infer-constant-global-property 4.5920+-0.0431 4.5469+-0.0237 infer-constant-property 3.5194+-0.0433 3.4964+-0.0312 infer-one-time-closure-ten-vars 15.7497+-0.1616 ? 15.8020+-0.1837 ? infer-one-time-closure-two-vars 15.1790+-0.1230 15.1663+-0.0882 infer-one-time-closure 15.1734+-0.1440 15.1131+-0.1264 infer-one-time-deep-closure 26.8579+-0.0954 ? 26.8690+-0.2206 ? inline-arguments-access 5.2370+-0.1311 ? 5.2684+-0.1310 ? inline-arguments-aliased-access 5.1921+-0.0856 ? 5.2430+-0.1705 ? inline-arguments-local-escape 5.2244+-0.0961 ? 5.4329+-0.2107 ? might be 1.0399x slower inline-get-scoped-var 6.0309+-0.0896 ? 6.0719+-0.0395 ? inlined-put-by-id-transition 13.9208+-0.4716 ? 14.0368+-0.7257 ? int-or-other-abs-then-get-by-val 6.2753+-0.0273 ? 6.2992+-0.0335 ? int-or-other-abs-zero-then-get-by-val 23.1145+-0.2727 ^ 22.7577+-0.0463 ^ definitely 1.0157x faster int-or-other-add-then-get-by-val 5.4733+-0.0547 ? 5.4962+-0.0420 ? int-or-other-add 6.7928+-0.0189 ? 7.0024+-0.2975 ? might be 1.0309x slower int-or-other-div-then-get-by-val 5.4895+-0.1899 5.4341+-0.0605 might be 1.0102x faster int-or-other-max-then-get-by-val 5.4958+-0.0647 5.4895+-0.0276 int-or-other-min-then-get-by-val 5.6053+-0.0377 ? 5.6692+-0.0448 ? might be 1.0114x slower int-or-other-mod-then-get-by-val 5.1174+-0.0382 ? 5.1525+-0.0462 ? int-or-other-mul-then-get-by-val 5.0467+-0.1059 5.0227+-0.1783 int-or-other-neg-then-get-by-val 6.0785+-0.0301 ? 6.0852+-0.0253 ? int-or-other-neg-zero-then-get-by-val 23.3896+-0.6033 22.6015+-0.1930 might be 1.0349x faster int-or-other-sub-then-get-by-val 5.5179+-0.0301 ? 5.5251+-0.0637 ? int-or-other-sub 4.5503+-0.0433 ? 4.5719+-0.0243 ? int-overflow-local 5.6782+-0.1892 5.6104+-0.0279 might be 1.0121x faster Int16Array-alloc-long-lived 59.0301+-1.0045 ? 59.4024+-0.8445 ? Int16Array-bubble-sort-with-byteLength 25.6048+-0.7099 25.2126+-0.1811 might be 1.0156x faster Int16Array-bubble-sort 25.5755+-0.1764 25.3767+-0.1771 Int16Array-load-int-mul 1.9828+-0.0154 ? 2.0617+-0.1315 ? might be 1.0398x slower Int16Array-to-Int32Array-set 68.7907+-0.1517 ! 75.7459+-1.2658 ! definitely 1.1011x slower Int32Array-alloc-large 23.5767+-0.4530 ? 24.1181+-0.8341 ? might be 1.0230x slower Int32Array-alloc-long-lived 64.8066+-0.6461 ? 64.9242+-0.6426 ? Int32Array-alloc 3.4151+-0.0537 ? 3.4602+-0.1573 ? might be 1.0132x slower Int32Array-Int8Array-view-alloc 8.3676+-0.1697 ? 8.4189+-0.2327 ? int52-spill 7.4385+-0.0853 7.4311+-0.1925 Int8Array-alloc-long-lived 53.4456+-0.8696 53.3463+-0.6025 Int8Array-load-with-byteLength 4.3680+-0.0827 4.3403+-0.0246 Int8Array-load 4.4198+-0.1686 4.3525+-0.0388 might be 1.0155x faster integer-divide 14.9135+-0.6684 14.6649+-0.0424 might be 1.0170x faster integer-modulo 2.8712+-0.1059 2.7336+-0.0562 might be 1.0503x faster is-boolean-fold-tricky 5.8630+-0.1173 5.8021+-0.0635 might be 1.0105x faster is-boolean-fold 3.6954+-0.0714 3.6677+-0.0551 is-function-fold-tricky-internal-function 15.5893+-0.3050 ? 15.7194+-0.3219 ? is-function-fold-tricky 5.9832+-0.0872 5.8883+-0.0406 might be 1.0161x faster is-function-fold 3.7282+-0.0266 ^ 3.6650+-0.0359 ^ definitely 1.0173x faster is-number-fold-tricky 5.8249+-0.1447 5.7584+-0.0539 might be 1.0115x faster is-number-fold 3.7428+-0.1638 3.6689+-0.1149 might be 1.0202x faster is-object-or-null-fold-functions 3.8141+-0.0429 3.7410+-0.0437 might be 1.0196x faster is-object-or-null-fold-less-tricky 5.9461+-0.0724 5.8573+-0.0380 might be 1.0152x faster is-object-or-null-fold-tricky 8.4096+-0.0225 ? 8.4177+-0.0248 ? is-object-or-null-fold 3.7435+-0.0288 ^ 3.6603+-0.0227 ^ definitely 1.0227x faster is-object-or-null-trickier-function 6.0979+-0.1338 6.0652+-0.1052 is-object-or-null-trickier-internal-function 16.6398+-0.6198 16.2546+-0.0873 might be 1.0237x faster is-object-or-null-tricky-function 6.0118+-0.0813 5.9920+-0.0880 is-object-or-null-tricky-internal-function 12.2428+-0.0748 ^ 11.9421+-0.2017 ^ definitely 1.0252x faster is-string-fold-tricky 5.8442+-0.2663 5.7467+-0.0280 might be 1.0170x faster is-string-fold 3.6916+-0.0318 ? 3.7028+-0.2215 ? is-undefined-fold-tricky 4.8013+-0.0510 ? 4.8030+-0.0398 ? is-undefined-fold 3.6965+-0.0397 3.6498+-0.0430 might be 1.0128x faster large-int-captured 5.5909+-0.0471 5.5649+-0.0707 large-int-neg 21.2419+-0.1875 ? 21.3685+-0.2174 ? large-int 19.8191+-0.2484 19.6876+-0.3349 load-varargs-elimination 31.9802+-0.3401 31.8584+-0.4870 logical-not 5.9165+-0.0641 ? 5.9223+-0.0802 ? lots-of-fields 15.8314+-0.1370 ! 16.1685+-0.1085 ! definitely 1.0213x slower make-indexed-storage 3.8553+-0.2698 ? 3.9745+-0.0554 ? might be 1.0309x slower make-rope-cse 5.0179+-0.1236 ? 5.0393+-0.0899 ? marsaglia-larger-ints 52.3082+-0.3089 52.2228+-0.1798 marsaglia-osr-entry 29.3654+-0.1835 ? 29.7000+-0.8300 ? might be 1.0114x slower max-boolean 3.1656+-0.0124 ? 3.2528+-0.0822 ? might be 1.0275x slower method-on-number 23.8441+-0.7261 ? 29.5600+-19.3139 ? might be 1.2397x slower min-boolean 3.1944+-0.0445 ? 3.2141+-0.0470 ? minus-boolean-double 4.0841+-0.0142 ? 4.1081+-0.0303 ? minus-boolean 3.0257+-0.0339 3.0178+-0.0291 misc-strict-eq 53.6580+-4.9015 51.4336+-0.9950 might be 1.0432x faster mod-boolean-double 14.4269+-0.5363 14.2465+-0.2487 might be 1.0127x faster mod-boolean 10.0630+-0.0553 10.0528+-0.0246 mul-boolean-double 4.7902+-0.0266 ? 4.7937+-0.0269 ? mul-boolean 3.7470+-0.0954 3.7119+-0.0168 neg-boolean 4.0959+-0.0279 ? 4.1199+-0.0395 ? negative-zero-divide 0.4989+-0.0231 ? 0.5018+-0.0188 ? negative-zero-modulo 0.4793+-0.0185 ? 0.5010+-0.0215 ? might be 1.0452x slower negative-zero-negate 0.4690+-0.0230 ? 0.4806+-0.0114 ? might be 1.0247x slower nested-function-parsing 48.5363+-0.8706 48.0498+-0.5974 might be 1.0101x faster new-array-buffer-dead 124.3710+-0.1684 ? 125.0990+-0.5950 ? new-array-buffer-push 8.1161+-0.1503 ? 8.1548+-0.2097 ? new-array-dead 22.8233+-0.4152 ? 22.9662+-0.6616 ? new-array-push 4.7162+-0.1538 4.6766+-0.1641 no-inline-constructor 48.6538+-0.3996 ? 48.8577+-0.8361 ? number-test 3.9536+-0.0534 3.9505+-0.0458 object-closure-call 7.1565+-0.0257 7.1205+-0.0533 object-test 3.5977+-0.0422 ! 3.7401+-0.0157 ! definitely 1.0396x slower obvious-sink-pathology-taken 151.9638+-1.0300 ? 154.8279+-4.3800 ? might be 1.0188x slower obvious-sink-pathology 142.6272+-0.5292 ? 144.0563+-1.5477 ? might be 1.0100x slower obviously-elidable-new-object 42.4400+-0.5864 41.8339+-0.5698 might be 1.0145x faster plus-boolean-arith 3.2177+-0.0265 ? 3.2719+-0.0381 ? might be 1.0168x slower plus-boolean-double 4.1126+-0.0272 ? 4.1251+-0.0261 ? plus-boolean 3.0875+-0.0165 ? 3.0990+-0.0382 ? poly-chain-access-different-prototypes-simple 4.2643+-0.0111 4.2527+-0.0170 poly-chain-access-different-prototypes 3.3171+-0.0342 ? 3.3288+-0.0271 ? poly-chain-access-simpler 4.2353+-0.0301 ? 4.2480+-0.0185 ? poly-chain-access 3.3326+-0.0186 ? 3.4162+-0.1794 ? might be 1.0251x slower poly-stricteq 76.9017+-0.0738 ! 78.3192+-0.6174 ! definitely 1.0184x slower polymorphic-array-call 1.8665+-0.1237 1.8300+-0.0965 might be 1.0200x faster polymorphic-get-by-id 3.9993+-0.0441 ? 4.0067+-0.0818 ? polymorphic-put-by-id 42.2686+-2.1068 ? 42.5972+-0.7743 ? polymorphic-structure 19.5071+-0.0344 ? 19.5299+-0.0413 ? polyvariant-monomorphic-get-by-id 10.9764+-0.0586 10.9484+-0.0590 proto-getter-access 11.5285+-0.1299 ? 11.6434+-0.0294 ? put-by-id-replace-and-transition 11.5658+-0.2340 11.3685+-0.1009 might be 1.0174x faster put-by-id-slightly-polymorphic 3.6507+-0.0368 ? 3.6757+-0.0469 ? put-by-id 15.0367+-0.2718 14.9181+-0.2791 put-by-val-direct 0.4897+-0.0287 ? 0.5253+-0.0233 ? might be 1.0729x slower put-by-val-large-index-blank-indexing-type 7.0842+-0.1612 ? 7.3259+-0.3096 ? might be 1.0341x slower put-by-val-machine-int 3.2456+-0.0671 ? 3.2548+-0.1065 ? rare-osr-exit-on-local 19.2250+-0.1799 ? 19.5282+-0.1316 ? might be 1.0158x slower register-pressure-from-osr 28.0703+-0.2190 ? 28.5490+-0.7942 ? might be 1.0171x slower setter 6.9284+-0.0479 ! 7.1263+-0.0574 ! definitely 1.0286x slower simple-activation-demo 33.2515+-0.3400 33.1623+-0.1814 simple-getter-access 15.1386+-0.0500 ? 15.2144+-0.1706 ? simple-poly-call-nested 10.2329+-0.0240 10.2185+-0.0500 simple-poly-call 1.7954+-0.0517 1.7457+-0.0313 might be 1.0285x faster sin-boolean 24.4171+-0.3621 ? 24.5527+-0.1897 ? singleton-scope 83.1360+-0.1327 ? 83.3712+-0.6863 ? sink-function 14.7224+-1.0895 14.4497+-0.2967 might be 1.0189x faster sink-huge-activation 23.5628+-0.5642 ? 23.9941+-1.2615 ? might be 1.0183x slower sinkable-new-object-dag 85.6666+-0.5387 ? 85.7819+-1.1813 ? sinkable-new-object-taken 65.4674+-3.3556 64.6522+-0.7701 might be 1.0126x faster sinkable-new-object 46.8706+-0.3939 46.5918+-0.5245 slow-array-profile-convergence 3.8215+-0.0632 3.7788+-0.0631 might be 1.0113x faster slow-convergence 3.6740+-0.0344 3.6560+-0.0898 slow-ternaries 24.0927+-0.6661 ? 24.9206+-2.7180 ? might be 1.0344x slower sorting-benchmark 25.5977+-0.1672 ? 25.9930+-0.7025 ? might be 1.0154x slower sparse-conditional 1.5655+-0.0174 ? 1.5793+-0.0466 ? splice-to-remove 21.2351+-0.2544 ? 21.5823+-0.4665 ? might be 1.0163x slower string-char-code-at 20.9056+-0.6758 20.6612+-0.1069 might be 1.0118x faster string-concat-object 2.8643+-0.0574 ? 2.9178+-0.0936 ? might be 1.0187x slower string-concat-pair-object 2.9680+-0.2600 2.8417+-0.0716 might be 1.0444x faster string-concat-pair-simple 14.8753+-1.5929 14.1702+-0.8769 might be 1.0498x faster string-concat-simple 15.1978+-0.6104 14.5433+-0.3324 might be 1.0450x faster string-cons-repeat 9.4634+-0.0607 9.4489+-0.1208 string-cons-tower 9.6431+-0.2438 9.6029+-0.1410 string-equality 24.8175+-0.1529 24.7917+-0.0961 string-get-by-val-big-char 8.9915+-0.0458 ? 9.0610+-0.0577 ? string-get-by-val-out-of-bounds-insane 4.6376+-0.0336 ? 4.6907+-0.1995 ? might be 1.0114x slower string-get-by-val-out-of-bounds 6.8300+-0.0506 6.7903+-0.0451 string-get-by-val 4.2278+-0.0359 ! 4.4092+-0.0259 ! definitely 1.0429x slower string-hash 2.6456+-0.0222 ? 2.6840+-0.0655 ? might be 1.0145x slower string-long-ident-equality 20.5313+-0.6145 20.1960+-0.0782 might be 1.0166x faster string-out-of-bounds 18.9816+-0.2019 ? 19.0207+-0.1226 ? string-repeat-arith 41.7592+-0.5986 41.6182+-1.3396 string-sub 83.8815+-0.4874 83.4780+-1.0426 string-test 3.7260+-0.0431 ? 3.8098+-0.0454 ? might be 1.0225x slower string-var-equality 43.7410+-1.1444 43.4773+-0.2341 structure-hoist-over-transitions 3.3305+-0.0805 3.3282+-0.0532 substring-concat-weird 51.4589+-0.9806 50.9591+-0.9928 substring-concat 55.2887+-0.8885 55.1915+-1.1150 substring 60.2952+-0.8172 59.4897+-0.7374 might be 1.0135x faster switch-char-constant 3.4941+-0.0307 3.4648+-0.0238 switch-char 7.8262+-0.0982 7.7703+-0.0378 switch-constant 10.4458+-0.5210 10.2229+-0.2969 might be 1.0218x faster switch-string-basic-big-var 24.3027+-0.7929 ? 24.7189+-0.3592 ? might be 1.0171x slower switch-string-basic-big 22.5632+-0.5683 ? 22.6308+-0.2703 ? switch-string-basic-var 19.8407+-0.0696 ? 20.0023+-0.2554 ? switch-string-basic 18.5839+-0.1781 18.5380+-0.1688 switch-string-big-length-tower-var 26.2974+-0.1940 ? 26.3628+-0.2166 ? switch-string-length-tower-var 19.9970+-0.0897 ? 20.0816+-0.1668 ? switch-string-length-tower 16.9006+-0.2831 16.8457+-0.1869 switch-string-short 16.8516+-0.2119 16.7914+-0.0555 switch 15.8186+-0.2731 15.7939+-0.3511 tear-off-arguments-simple 4.1812+-0.1039 4.1437+-0.0709 tear-off-arguments 5.6383+-0.0441 ? 5.6606+-0.1382 ? temporal-structure 15.9070+-0.0901 ? 16.1375+-0.6706 ? might be 1.0145x slower to-int32-boolean 18.1982+-0.6467 17.9156+-0.0249 might be 1.0158x faster try-catch-get-by-val-cloned-arguments 18.1180+-0.2620 ? 18.1214+-0.7159 ? try-catch-get-by-val-direct-arguments 8.1823+-0.2795 8.0313+-0.0540 might be 1.0188x faster try-catch-get-by-val-scoped-arguments 9.4299+-0.2001 9.4243+-0.2413 typed-array-get-set-by-val-profiling 43.7402+-0.6870 ? 43.8950+-0.2135 ? undefined-property-access 458.5068+-0.5300 458.3129+-0.4188 undefined-test 3.8577+-0.0371 ! 4.0616+-0.1455 ! definitely 1.0529x slower unprofiled-licm 28.9672+-0.1748 ? 29.3149+-0.9377 ? might be 1.0120x slower varargs-call 19.2457+-0.1442 ? 19.4087+-0.1699 ? varargs-construct-inline 34.0194+-0.2331 33.8854+-0.2765 varargs-construct 29.6324+-0.6259 29.2509+-0.1795 might be 1.0130x faster varargs-inline 11.9844+-0.0217 11.9505+-0.0418 varargs-strict-mode 13.1998+-0.0473 13.1701+-0.0610 varargs 13.1772+-0.0230 ? 13.2360+-0.0601 ? weird-inlining-const-prop 2.8369+-0.1176 ? 2.8580+-0.2380 ? <geometric> 10.6101+-0.0117 ? 10.6266+-0.0156 ? might be 1.0016x slower r184563 LazyNode AsmBench: bigfib.cpp 658.2194+-1.4846 ? 658.5655+-1.3844 ? cray.c 574.0680+-3.6023 ? 576.1148+-5.2839 ? dry.c 669.6808+-12.2099 ? 670.5153+-13.8433 ? FloatMM.c 971.5382+-2.9349 969.2887+-1.0430 gcc-loops.cpp 5673.2465+-24.8511 5670.9194+-15.3463 n-body.c 1328.1307+-1.3362 1327.5536+-1.0298 Quicksort.c 570.3781+-0.6510 ? 570.7939+-1.0796 ? stepanov_container.cpp 5053.1656+-18.1899 ? 5058.5546+-27.7210 ? Towers.c 344.6159+-0.3819 344.4612+-0.2160 <geometric> 1070.0763+-2.3627 ? 1070.4891+-3.0362 ? might be 1.0004x slower r184563 LazyNode CompressionBench: huffman 507.1145+-0.6969 ^ 502.7729+-0.4264 ^ definitely 1.0086x faster arithmetic-simple 486.0492+-0.5873 ? 486.4934+-0.4562 ? arithmetic-precise 387.1558+-2.1238 385.4702+-2.0351 arithmetic-complex-precise 400.2619+-1.8023 ? 400.4527+-2.7019 ? arithmetic-precise-order-0 509.0692+-3.8984 507.4544+-6.7713 arithmetic-precise-order-1 439.0490+-2.1414 436.5153+-1.9443 arithmetic-precise-order-2 499.4317+-6.5183 498.0814+-3.1901 arithmetic-simple-order-1 564.2897+-2.3613 ? 565.0197+-1.5785 ? arithmetic-simple-order-2 629.2296+-1.5402 ? 630.1444+-2.5457 ? lz-string 410.4956+-4.0380 408.2559+-1.7101 <geometric> 477.8970+-1.2422 476.6577+-0.3988 might be 1.0026x faster r184563 LazyNode Geomean of preferred means: <scaled-result> 79.5143+-0.1350 ? 79.6821+-0.1878 ? might be 1.0021x slower
Attachment 253562 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:236: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 2 in 14 files If any of these errors are false positives, please file a bug against check-webkit-style.
Looks like EWS is super unhappy: /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17: error: conversion from 'JSC::DFG::LazyNode' to 'bool' is ambiguous if (location.index() && !location.index().isNode()) ^~~~~~~~~~~~~~~~
(In reply to comment #8) > Looks like EWS is super unhappy: > > /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17: > error: conversion from 'JSC::DFG::LazyNode' to 'bool' is ambiguous > if (location.index() && !location.index().isNode()) > ^~~~~~~~~~~~~~~~ Hmm, this is weird. There are two conversion-to-pointer operators in LazyNode: explicit operator Node*() const and operator UnspecifiedBoolType*() const and EWS complains that it doesn't know which one to use: /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:140:14: note: candidate function explicit operator Node*() const { return asNode(); } ^ /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:150:5: note: candidate function operator UnspecifiedBoolType*() const ^ The conversion-to-Node* operator is explicit, and thus should be an error in C++03, and not a candidate for the implicit cast in C++11. Weird that it works on my machine, and that some builders didn't complain. I will remove the operator Node* in favor of the asNode() method, but I still find this strange.
(In reply to comment #9) > (In reply to comment #8) > > Looks like EWS is super unhappy: > > > > /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17: > > error: conversion from 'JSC::DFG::LazyNode' to 'bool' is ambiguous > > if (location.index() && !location.index().isNode()) > > ^~~~~~~~~~~~~~~~ > > Hmm, this is weird. There are two conversion-to-pointer operators in > LazyNode: > > explicit operator Node*() const > > and > > operator UnspecifiedBoolType*() const > > and EWS complains that it doesn't know which one to use: > > /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:140:14: > note: candidate function > explicit operator Node*() const { return asNode(); } > ^ > /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:150:5: > note: candidate function > operator UnspecifiedBoolType*() const > ^ > > The conversion-to-Node* operator is explicit, and thus should be an error in > C++03, and not a candidate for the implicit cast in C++11. Weird that it > works on my machine, and that some builders didn't complain. > I will remove the operator Node* in favor of the asNode() method, but I > still find this strange. Actually, I can just make the operator Node* implicit.
Created attachment 253589 [details] Patch
Attachment 253589 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:236: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 2 in 14 files If any of these errors are false positives, please file a bug against check-webkit-style.
(In reply to comment #10) > (In reply to comment #9) > > (In reply to comment #8) > > > Looks like EWS is super unhappy: > > > > > > /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:164:17: > > > error: conversion from 'JSC::DFG::LazyNode' to 'bool' is ambiguous > > > if (location.index() && !location.index().isNode()) > > > ^~~~~~~~~~~~~~~~ > > > > Hmm, this is weird. There are two conversion-to-pointer operators in > > LazyNode: > > > > explicit operator Node*() const > > > > and > > > > operator UnspecifiedBoolType*() const > > > > and EWS complains that it doesn't know which one to use: > > > > /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:140:14: > > note: candidate function > > explicit operator Node*() const { return asNode(); } > > ^ > > /Volumes/Data/EWS/WebKit/Source/JavaScriptCore/dfg/DFGLazyNode.h:150:5: > > note: candidate function > > operator UnspecifiedBoolType*() const > > ^ > > > > The conversion-to-Node* operator is explicit, and thus should be an error in > > C++03, and not a candidate for the implicit cast in C++11. Weird that it > > works on my machine, and that some builders didn't complain. > > I will remove the operator Node* in favor of the asNode() method, but I > > still find this strange. > > Actually, I can just make the operator Node* implicit. After thinking about it more, I didn't like the idea of an ASSERT()'ing implicit conversion operator.
Comment on attachment 253589 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=253589&action=review Can you add some microbenchmarks in LayoutTests/js/regress/script-tests that demonstrate when this is profitable? You could also make these tests exercise both forms of def() in NewArrayBuffer. For tests like these we like to make them exhibit absurdly good performance with the optimization enabled and absurdly bad with it disabled. For example you might be able to do something like: function foo() { var array = [1.5]; return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 /4.5))) % 3.5; // super expensive expression that folds away if we know that array[0] is a constant. } noInline(foo); all foo a lot of times; > Source/JavaScriptCore/dfg/DFGGraph.cpp:1214 > + if (UNLIKELY(value.isUInt32())) I wouldn't use UNLIKELY here. I think that constants are often non-negative integers.
(In reply to comment #14) > Comment on attachment 253589 [details] > Patch > > View in context: > https://bugs.webkit.org/attachment.cgi?id=253589&action=review > > Can you add some microbenchmarks in LayoutTests/js/regress/script-tests that > demonstrate when this is profitable? You could also make these tests > exercise both forms of def() in NewArrayBuffer. For tests like these we > like to make them exhibit absurdly good performance with the optimization > enabled and absurdly bad with it disabled. For example you might be able to > do something like: > > function foo() { > var array = [1.5]; > return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 /4.5))) % 3.5; > // super expensive expression that folds away if we know that array[0] is a > constant. > } > > noInline(foo); > > all foo a lot of times; I have added the following two benchmarks in js-regress: <<<<< cse-new-array-buffer.js function foo() { var array = [1.5]; return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5; } for (var i = 0; i < 100000; ++i) foo(); >>>>> <<<<< cse-new-array.js function foo(p) { var array = [1.5, p]; return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5; } for (var i = 0; i < 100000; ++i) foo(0); >>>>> r184563 LazyNode cse-new-array-buffer 12.0633+-0.5264 ^ 2.8377+-0.0725 ^ definitely 4.2511x faster cse-new-array 12.0446+-0.1058 ^ 2.9589+-0.1008 ^ definitely 4.0706x faster <geometric> 12.0514+-0.2410 ^ 2.8972+-0.0602 ^ definitely 4.1597x faster > > > Source/JavaScriptCore/dfg/DFGGraph.cpp:1214 > > + if (UNLIKELY(value.isUInt32())) > > I wouldn't use UNLIKELY here. I think that constants are often non-negative > integers. Removed.
(In reply to comment #15) > (In reply to comment #14) > > Comment on attachment 253589 [details] > > Patch > > > > View in context: > > https://bugs.webkit.org/attachment.cgi?id=253589&action=review > > > > Can you add some microbenchmarks in LayoutTests/js/regress/script-tests that > > demonstrate when this is profitable? You could also make these tests > > exercise both forms of def() in NewArrayBuffer. For tests like these we > > like to make them exhibit absurdly good performance with the optimization > > enabled and absurdly bad with it disabled. For example you might be able to > > do something like: > > > > function foo() { > > var array = [1.5]; > > return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 /4.5))) % 3.5; > > // super expensive expression that folds away if we know that array[0] is a > > constant. > > } > > > > noInline(foo); > > > > all foo a lot of times; > > > I have added the following two benchmarks in js-regress: > > <<<<< cse-new-array-buffer.js > function foo() { > var array = [1.5]; > return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5; > } > > for (var i = 0; i < 100000; ++i) > foo(); > >>>>> > > <<<<< cse-new-array.js > function foo(p) { > var array = [1.5, p]; > return Math.cos(Math.sqrt(Math.abs(Math.sin(array[0]) * 5 / 4.5))) % 3.5; > } > > for (var i = 0; i < 100000; ++i) > foo(0); > >>>>> > > r184563 LazyNode > > > cse-new-array-buffer 12.0633+-0.5264 ^ 2.8377+-0.0725 > ^ definitely 4.2511x faster > cse-new-array 12.0446+-0.1058 ^ 2.9589+-0.1008 > ^ definitely 4.0706x faster > > <geometric> 12.0514+-0.2410 ^ 2.8972+-0.0602 > ^ definitely 4.1597x faster Nice! > > > > > > Source/JavaScriptCore/dfg/DFGGraph.cpp:1214 > > > + if (UNLIKELY(value.isUInt32())) > > > > I wouldn't use UNLIKELY here. I think that constants are often non-negative > > integers. > > Removed.
Created attachment 253593 [details] Patch for landing
Attachment 253593 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:236: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 2 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 253593 [details] Patch for landing Clearing flags on attachment: 253593 Committed r184776: <http://trac.webkit.org/changeset/184776>
All reviewed patches have been landed. Closing bug.