In cases like: o.x + o.y Where the two operands are likely real doubles, we currently do NaN checks for both operands before doing the addition. Instead, we could do the NaN check after speculatively doing the addition.
Created attachment 254403 [details] work in progress
Created attachment 254404 [details] might be done Still benchmarking
Attachment 254404 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:297: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1449: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1538: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 3 in 4 files If any of these errors are false positives, please file a bug against check-webkit-style.
Maybe this isn't such a good idea. box2d, the benchmark that should have benefited from this, is actually suffering. I'll try to investigate why. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r185277) "DoubleRealUse" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r185277) 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 DoubleRealUse SunSpider: 3d-cube 5.1608+-0.0434 ? 5.4252+-0.3844 ? might be 1.0512x slower 3d-morph 6.2298+-0.5615 5.9676+-0.2967 might be 1.0439x faster 3d-raytrace 6.6622+-0.1147 6.5508+-0.1568 might be 1.0170x faster access-binary-trees 2.4546+-0.2021 2.4021+-0.0643 might be 1.0219x faster access-fannkuch 6.2485+-0.0529 6.2050+-0.0558 access-nbody 2.9231+-0.0504 ? 2.9850+-0.0735 ? might be 1.0212x slower access-nsieve 3.5333+-0.0652 3.5019+-0.1308 bitops-3bit-bits-in-byte 1.6429+-0.0616 ? 1.6495+-0.0705 ? bitops-bits-in-byte 3.9222+-0.3337 ? 3.9572+-0.2793 ? bitops-bitwise-and 2.2649+-0.2649 2.2419+-0.2797 might be 1.0103x faster bitops-nsieve-bits 3.4191+-0.2026 ? 3.4365+-0.2572 ? controlflow-recursive 3.2246+-0.2735 3.1154+-0.3846 might be 1.0351x faster crypto-aes 4.7313+-0.2135 ? 4.9056+-0.5659 ? might be 1.0368x slower crypto-md5 2.7327+-0.1181 ? 2.7391+-0.0419 ? crypto-sha1 3.9390+-0.3229 3.8605+-0.4292 might be 1.0203x faster date-format-tofte 9.2758+-0.1038 ? 9.4127+-0.3645 ? might be 1.0148x slower date-format-xparb 6.1372+-0.4733 5.8803+-0.2261 might be 1.0437x faster math-cordic 3.1557+-0.0985 ? 3.2679+-0.4099 ? might be 1.0356x slower math-partial-sums 5.6852+-0.4265 5.6765+-0.5863 math-spectral-norm 2.1281+-0.1922 ? 2.1494+-0.2350 ? might be 1.0100x slower regexp-dna 8.5785+-1.7263 7.4858+-0.1044 might be 1.1460x faster string-base64 5.0573+-0.1838 ? 5.0575+-0.1720 ? string-fasta 6.8582+-0.0820 6.7749+-0.0909 might be 1.0123x faster string-tagcloud 9.6671+-0.6289 ? 9.7732+-0.6238 ? might be 1.0110x slower string-unpack-code 20.8331+-1.2336 ? 21.4014+-1.9397 ? might be 1.0273x slower string-validate-input 6.0933+-0.1728 6.0275+-0.1514 might be 1.0109x faster <arithmetic> 5.4830+-0.0818 5.4558+-0.1193 might be 1.0050x faster TipOfTree DoubleRealUse LongSpider: 3d-cube 904.8590+-11.3189 ? 911.5098+-36.6801 ? 3d-morph 1527.2159+-3.3210 1526.0107+-2.7848 3d-raytrace 744.5743+-93.5410 705.4590+-7.0631 might be 1.0554x faster access-binary-trees 1007.6110+-11.4286 1002.2077+-10.3281 access-fannkuch 345.1088+-7.0188 ? 346.4229+-13.0193 ? access-nbody 589.0284+-0.8089 ^ 575.8524+-4.2512 ^ definitely 1.0229x faster access-nsieve 490.0885+-24.2256 ? 492.7859+-28.1751 ? bitops-3bit-bits-in-byte 44.8100+-0.6487 44.1103+-0.5069 might be 1.0159x faster bitops-bits-in-byte 99.3084+-0.7910 99.2161+-1.4317 bitops-nsieve-bits 419.9189+-2.5585 ? 421.4469+-2.8904 ? controlflow-recursive 506.8518+-18.1385 491.2904+-12.7051 might be 1.0317x faster crypto-aes 708.8814+-8.1663 ? 716.9584+-27.5910 ? might be 1.0114x slower crypto-md5 538.8437+-6.3228 ^ 526.6714+-2.8118 ^ definitely 1.0231x faster crypto-sha1 681.9068+-30.7470 ? 687.1373+-14.7245 ? date-format-tofte 731.4278+-14.4995 728.5741+-12.6458 date-format-xparb 820.7187+-17.2954 805.2424+-16.4964 might be 1.0192x faster hash-map 182.8060+-5.0375 ? 185.5539+-4.4685 ? might be 1.0150x slower math-cordic 605.6199+-69.2781 586.3061+-28.5357 might be 1.0329x faster math-partial-sums 506.1805+-3.4945 ? 513.8389+-21.8052 ? might be 1.0151x slower math-spectral-norm 564.9269+-0.8218 ? 565.7150+-2.3582 ? string-base64 410.1970+-7.1679 ? 415.0805+-11.4785 ? might be 1.0119x slower string-fasta 433.1283+-5.1775 430.8855+-15.3424 string-tagcloud 195.0800+-4.1782 ? 195.6558+-3.1224 ? <geometric> 458.8901+-3.2612 456.4614+-1.6626 might be 1.0053x faster TipOfTree DoubleRealUse V8Spider: crypto 58.3114+-1.4157 56.6046+-2.5831 might be 1.0302x faster deltablue 109.0718+-11.5390 104.5914+-2.1321 might be 1.0428x faster earley-boyer 49.5396+-2.3602 ? 50.2601+-0.7182 ? might be 1.0145x slower raytrace 43.4325+-5.0697 41.9586+-2.8903 might be 1.0351x faster regexp 84.9896+-5.1557 82.3738+-2.4833 might be 1.0318x faster richards 77.8365+-2.0710 ? 82.5630+-7.5645 ? might be 1.0607x slower splay 41.0068+-1.0436 40.3124+-1.6370 might be 1.0172x faster <geometric> 62.3777+-1.5371 61.6904+-0.5210 might be 1.0111x faster TipOfTree DoubleRealUse Octane: encrypt 0.20910+-0.01056 0.20364+-0.00132 might be 1.0268x faster decrypt 3.62930+-0.16952 3.59206+-0.08528 might be 1.0104x faster deltablue x2 0.19563+-0.00219 0.19477+-0.00156 earley 0.39365+-0.00344 0.39321+-0.00393 boyer 5.21272+-0.04803 ^ 5.13831+-0.02557 ^ definitely 1.0145x faster navier-stokes x2 5.17602+-0.00959 ? 5.25855+-0.20652 ? might be 1.0159x slower raytrace x2 1.32085+-0.04138 1.30504+-0.05753 might be 1.0121x faster richards x2 0.12672+-0.00080 ? 0.12746+-0.00162 ? splay x2 0.40215+-0.00325 ? 0.40575+-0.00217 ? regexp x2 31.62671+-0.55746 ? 32.16578+-0.97972 ? might be 1.0170x slower pdfjs x2 42.46533+-0.21581 ? 42.92166+-0.91888 ? might be 1.0107x slower mandreel x2 51.09701+-0.37534 ? 51.55372+-1.44598 ? gbemu x2 46.54798+-6.74593 46.17776+-4.91357 closure 0.56444+-0.00170 ^ 0.55986+-0.00246 ^ definitely 1.0082x faster jquery 7.37959+-0.02282 7.35187+-0.03633 box2d x2 11.86116+-0.06912 ! 13.19819+-0.18691 ! definitely 1.1127x slower zlib x2 394.70802+-31.98257 391.72782+-15.39353 typescript x2 823.31380+-13.21436 ? 826.30518+-15.25333 ? <geometric> 6.63243+-0.05634 ? 6.68481+-0.08657 ? might be 1.0079x slower TipOfTree DoubleRealUse Kraken: ai-astar 235.024+-1.372 ? 236.800+-3.052 ? audio-beat-detection 81.927+-0.325 81.861+-0.405 audio-dft 120.524+-3.549 119.075+-2.021 might be 1.0122x faster audio-fft 71.167+-2.056 69.738+-1.017 might be 1.0205x faster audio-oscillator 78.513+-3.242 77.620+-1.882 might be 1.0115x faster imaging-darkroom 105.376+-1.631 105.016+-1.789 imaging-desaturate 64.462+-2.333 63.288+-0.316 might be 1.0185x faster imaging-gaussian-blur 110.727+-1.978 ? 111.612+-4.275 ? json-parse-financial 48.536+-1.408 ? 49.151+-3.674 ? might be 1.0127x slower json-stringify-tinderbox 28.869+-1.475 ? 29.109+-1.460 ? stanford-crypto-aes 58.679+-1.241 ? 59.180+-1.180 ? stanford-crypto-ccm 48.056+-1.736 ? 48.484+-2.073 ? stanford-crypto-pbkdf2 110.311+-1.564 ? 112.305+-1.801 ? might be 1.0181x slower stanford-crypto-sha256-iterative 43.048+-0.640 43.017+-0.662 <arithmetic> 86.087+-0.462 ? 86.161+-0.638 ? might be 1.0009x slower TipOfTree DoubleRealUse JSRegress: abs-boolean 2.6982+-0.0282 ? 2.7275+-0.0512 ? might be 1.0109x slower adapt-to-double-divide 16.6434+-0.1326 ? 16.9337+-0.3696 ? might be 1.0174x slower aliased-arguments-getbyval 1.3326+-0.0951 ? 1.3451+-0.0942 ? allocate-big-object 3.0814+-0.2963 3.0813+-0.2644 arguments-named-and-reflective 12.6823+-0.4448 ? 13.0494+-1.5097 ? might be 1.0289x slower arguments-out-of-bounds 14.9174+-0.7423 14.7099+-0.2277 might be 1.0141x faster arguments-strict-mode 11.6017+-1.3461 11.1768+-0.9433 might be 1.0380x faster arguments 9.6723+-0.2546 9.6353+-0.3352 arity-mismatch-inlining 0.9183+-0.1005 0.8856+-0.0187 might be 1.0369x faster array-access-polymorphic-structure 7.4720+-1.0016 6.9528+-0.2283 might be 1.0747x faster array-nonarray-polymorhpic-access 33.7808+-1.1821 33.3112+-1.1283 might be 1.0141x faster array-prototype-every 87.0541+-2.1359 ? 87.5568+-6.9420 ? array-prototype-forEach 85.3459+-0.5231 84.1084+-3.4083 might be 1.0147x faster array-prototype-map 96.1195+-8.9814 91.2474+-1.7461 might be 1.0534x faster array-prototype-reduce 83.0638+-4.2161 80.8770+-2.4130 might be 1.0270x faster array-prototype-reduceRight 82.0041+-2.0958 81.8353+-1.4521 array-prototype-some 87.5992+-2.7840 84.4624+-2.5658 might be 1.0371x faster array-splice-contiguous 42.1250+-1.5861 ! 45.0010+-0.6043 ! definitely 1.0683x slower array-with-double-add 4.2764+-0.0973 ? 4.3199+-0.1314 ? might be 1.0102x slower array-with-double-increment 3.3328+-0.0393 3.2946+-0.0294 might be 1.0116x faster array-with-double-mul-add 5.3485+-0.2751 5.3474+-0.3345 array-with-double-sum 3.4500+-0.1160 3.3871+-0.0683 might be 1.0185x faster array-with-int32-add-sub 6.8465+-0.1894 ? 6.9323+-0.1414 ? might be 1.0125x slower array-with-int32-or-double-sum 3.5509+-0.3349 3.4984+-0.1587 might be 1.0150x faster ArrayBuffer-DataView-alloc-large-long-lived 37.7726+-2.0070 37.0742+-1.8484 might be 1.0188x faster ArrayBuffer-DataView-alloc-long-lived 16.5807+-1.5151 15.9539+-2.1059 might be 1.0393x faster ArrayBuffer-Int32Array-byteOffset 3.8612+-0.0631 ? 4.2719+-0.5612 ? might be 1.1063x slower ArrayBuffer-Int8Array-alloc-large-long-lived 39.1002+-1.3192 38.6167+-1.2834 might be 1.0125x faster ArrayBuffer-Int8Array-alloc-long-lived-buffer 23.1466+-1.6934 22.5643+-0.7932 might be 1.0258x faster ArrayBuffer-Int8Array-alloc-long-lived 14.4735+-1.4342 14.2890+-1.8740 might be 1.0129x faster ArrayBuffer-Int8Array-alloc 10.6046+-0.2619 ? 10.7165+-0.3170 ? might be 1.0106x slower asmjs_bool_bug 7.7869+-0.0611 ? 7.8068+-0.2259 ? assign-custom-setter-polymorphic 3.3576+-0.1672 3.2590+-0.0646 might be 1.0303x faster assign-custom-setter 5.0450+-0.6807 4.6423+-0.1584 might be 1.0867x faster basic-set 9.5396+-0.2073 ? 9.8708+-0.7738 ? might be 1.0347x slower big-int-mul 4.1005+-0.0333 ! 4.2583+-0.0249 ! definitely 1.0385x slower boolean-test 3.4491+-0.3571 3.3581+-0.3608 might be 1.0271x faster branch-fold 4.0415+-0.1477 4.0101+-0.1478 branch-on-string-as-boolean 21.1610+-1.8662 ? 21.6707+-1.6459 ? might be 1.0241x slower by-val-generic 8.3562+-0.4762 ? 8.4019+-0.5822 ? call-spread-apply 30.8014+-2.1592 ? 31.8298+-4.9953 ? might be 1.0334x slower call-spread-call 26.2705+-1.5552 25.7950+-1.2096 might be 1.0184x faster captured-assignments 0.5142+-0.0080 ? 0.5809+-0.1183 ? might be 1.1296x slower cast-int-to-double 5.4144+-0.1292 5.4090+-0.1624 cell-argument 8.6852+-0.1025 8.6543+-0.2996 cfg-simplify 2.9222+-0.1123 2.9116+-0.1969 chain-getter-access 9.3312+-0.1371 9.2634+-0.1763 cmpeq-obj-to-obj-other 12.6772+-1.3209 ? 12.8197+-0.9931 ? might be 1.0112x slower constant-test 5.1038+-0.2221 5.0224+-0.0228 might be 1.0162x faster create-lots-of-functions 11.7335+-0.3418 ? 12.0164+-0.4489 ? might be 1.0241x slower cse-new-array-buffer 2.6141+-0.0980 ? 2.6720+-0.2110 ? might be 1.0222x slower cse-new-array 2.6350+-0.0526 ? 2.6411+-0.0585 ? DataView-custom-properties 43.0418+-1.6142 ? 43.6421+-2.0264 ? might be 1.0139x slower deconstructing-parameters-overridden-by-function 0.6088+-0.0553 0.5695+-0.0347 might be 1.0690x faster delay-tear-off-arguments-strictmode 14.1698+-0.2457 ? 14.3218+-0.2491 ? might be 1.0107x slower deltablue-varargs 215.8993+-18.0660 213.1444+-9.7052 might be 1.0129x faster destructuring-arguments 17.8810+-0.5899 17.5660+-0.6234 might be 1.0179x faster destructuring-swap 5.2572+-0.1995 ? 5.2613+-0.2286 ? direct-arguments-getbyval 1.4176+-0.1709 1.3342+-0.1134 might be 1.0625x faster div-boolean-double 5.2732+-0.0283 ? 5.2933+-0.0746 ? div-boolean 7.8628+-0.0837 7.8240+-0.0260 double-get-by-val-out-of-bounds 4.7448+-0.1253 4.7166+-0.1754 double-pollution-getbyval 8.9127+-0.0760 ? 8.9259+-0.0386 ? double-pollution-putbyoffset 4.6154+-0.4252 4.5628+-0.2777 might be 1.0115x faster double-real-use 30.6083+-1.2423 ^ 26.8977+-0.4437 ^ definitely 1.1380x faster double-to-int32-typed-array-no-inline 2.5259+-0.1606 ? 2.5596+-0.1220 ? might be 1.0133x slower double-to-int32-typed-array 2.0383+-0.1188 ? 2.1089+-0.1882 ? might be 1.0346x slower double-to-uint32-typed-array-no-inline 2.6215+-0.1634 ? 2.6385+-0.0940 ? double-to-uint32-typed-array 2.2292+-0.2593 2.0933+-0.1041 might be 1.0649x faster elidable-new-object-dag 44.0384+-1.7788 43.9157+-1.5278 elidable-new-object-roflcopter 44.8941+-2.1323 ? 46.5966+-2.5937 ? might be 1.0379x slower elidable-new-object-then-call 40.1167+-0.6172 39.9511+-1.2781 elidable-new-object-tree 45.6534+-1.6854 ? 46.1323+-1.9782 ? might be 1.0105x slower empty-string-plus-int 5.7307+-0.3509 5.6814+-0.1894 emscripten-cube2hash 39.9495+-0.9205 38.3503+-1.8771 might be 1.0417x faster exit-length-on-plain-object 14.3197+-0.3227 ? 15.0712+-1.7169 ? might be 1.0525x slower external-arguments-getbyval 1.2864+-0.0923 ? 1.4826+-0.2587 ? might be 1.1526x slower external-arguments-putbyval 2.4093+-0.0490 2.3872+-0.0483 fixed-typed-array-storage-var-index 1.2677+-0.1096 ? 1.2754+-0.1516 ? fixed-typed-array-storage 0.9650+-0.1078 ? 0.9846+-0.1375 ? might be 1.0203x slower Float32Array-matrix-mult 4.7671+-0.2883 4.7120+-0.2500 might be 1.0117x faster Float32Array-to-Float64Array-set 52.6925+-2.1853 ! 57.6643+-2.0666 ! definitely 1.0944x slower Float64Array-alloc-long-lived 86.9568+-1.4834 ? 87.5475+-1.6276 ? Float64Array-to-Int16Array-set 69.7976+-1.6633 ? 71.8801+-1.4995 ? might be 1.0298x slower fold-double-to-int 14.0352+-0.6970 13.9459+-0.2591 fold-get-by-id-to-multi-get-by-offset-rare-int 10.1310+-1.0941 10.1054+-1.0360 fold-get-by-id-to-multi-get-by-offset 10.1697+-1.4928 ? 10.5650+-1.3110 ? might be 1.0389x slower fold-multi-get-by-offset-to-get-by-offset 9.9183+-0.9338 9.7284+-0.5880 might be 1.0195x faster fold-multi-get-by-offset-to-poly-get-by-offset 10.5318+-1.3051 9.4893+-0.6447 might be 1.1099x faster fold-multi-put-by-offset-to-poly-put-by-offset 9.3247+-0.6008 ? 10.2503+-0.6532 ? might be 1.0993x slower fold-multi-put-by-offset-to-put-by-offset 7.9151+-0.7231 ? 8.0010+-0.4450 ? might be 1.0109x slower fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.9781+-0.4065 ? 10.2982+-0.5149 ? might be 1.0321x slower fold-put-by-id-to-multi-put-by-offset 10.8041+-0.6670 10.5944+-1.1401 might be 1.0198x faster fold-put-structure 6.2873+-2.1644 6.1503+-1.5005 might be 1.0223x faster for-of-iterate-array-entries 4.8375+-0.4880 4.6163+-0.0923 might be 1.0479x faster for-of-iterate-array-keys 3.7589+-0.0911 ? 3.8621+-0.1574 ? might be 1.0275x slower for-of-iterate-array-values 3.7700+-0.1977 ? 3.7874+-0.2585 ? fround 21.0698+-0.8629 20.8125+-0.9192 might be 1.0124x faster ftl-library-inlining-dataview 65.8031+-2.4573 ? 66.3633+-2.2200 ? ftl-library-inlining 75.1298+-18.7421 72.3749+-6.0746 might be 1.0381x faster function-dot-apply 2.2896+-0.0721 ? 2.3614+-0.1111 ? might be 1.0314x slower function-test 3.0990+-0.3391 ? 3.2563+-0.5101 ? might be 1.0508x slower function-with-eval 103.6340+-0.9946 102.7782+-1.5243 gcse-poly-get-less-obvious 19.8511+-2.4780 ? 20.6216+-2.0589 ? might be 1.0388x slower gcse-poly-get 21.1770+-0.9898 ? 22.1546+-1.6671 ? might be 1.0462x slower gcse 4.3977+-0.0958 ? 4.4751+-0.1965 ? might be 1.0176x slower get-by-id-bimorphic-check-structure-elimination-simple 2.9716+-0.3352 2.8266+-0.1099 might be 1.0513x faster get-by-id-bimorphic-check-structure-elimination 6.0175+-0.0828 ? 6.0975+-0.2019 ? might be 1.0133x slower get-by-id-chain-from-try-block 6.8020+-0.2972 6.6825+-0.2327 might be 1.0179x faster get-by-id-check-structure-elimination 5.1951+-0.1351 ? 5.2680+-0.1738 ? might be 1.0140x slower get-by-id-proto-or-self 18.1330+-0.8475 ? 19.4744+-1.6955 ? might be 1.0740x slower get-by-id-quadmorphic-check-structure-elimination-simple 3.0097+-0.0729 2.9565+-0.0320 might be 1.0180x faster get-by-id-self-or-proto 18.9848+-0.9475 ? 19.5079+-2.5353 ? might be 1.0276x slower get-by-val-out-of-bounds 4.5629+-0.3466 ? 4.5951+-0.1839 ? get_callee_monomorphic 3.0146+-0.3781 ? 3.2587+-0.6580 ? might be 1.0810x slower get_callee_polymorphic 3.8818+-0.1500 3.8507+-0.1113 getter-no-activation 5.2981+-0.4853 5.2823+-0.3508 getter-prototype 15.6368+-0.9663 14.8065+-0.1801 might be 1.0561x faster getter-richards 126.4050+-5.1292 121.5462+-4.0312 might be 1.0400x faster getter 6.5248+-0.7941 5.4882+-0.3937 might be 1.1889x faster global-var-const-infer-fire-from-opt 0.9474+-0.1024 ? 1.0192+-0.1760 ? might be 1.0758x slower global-var-const-infer 1.1738+-0.3193 0.9084+-0.1277 might be 1.2921x faster HashMap-put-get-iterate-keys 30.3682+-1.6365 ? 30.4166+-0.8849 ? HashMap-put-get-iterate 31.6236+-1.2062 ? 34.2173+-3.1457 ? might be 1.0820x slower HashMap-string-put-get-iterate 32.7264+-3.3039 32.6712+-2.5577 hoist-make-rope 12.2855+-0.3808 ? 12.5344+-0.9353 ? might be 1.0203x slower hoist-poly-check-structure-effectful-loop 5.1246+-0.0257 ? 5.1697+-0.1534 ? hoist-poly-check-structure 3.7656+-0.0837 3.7135+-0.0396 might be 1.0140x faster imul-double-only 8.4989+-0.6693 ? 8.5585+-0.6137 ? imul-int-only 9.8321+-0.5380 ? 10.0580+-0.7448 ? might be 1.0230x slower imul-mixed 8.4202+-0.3542 ? 8.5046+-0.4951 ? might be 1.0100x slower in-four-cases 23.0688+-1.5864 22.2783+-0.1492 might be 1.0355x faster in-one-case-false 11.1418+-0.1078 ? 11.3597+-0.4287 ? might be 1.0196x slower in-one-case-true 11.5194+-0.5378 11.0592+-0.0473 might be 1.0416x faster in-two-cases 11.7089+-0.2859 11.6455+-0.0986 indexed-properties-in-objects 3.2495+-0.3585 3.0349+-0.0757 might be 1.0707x faster infer-closure-const-then-mov-no-inline 4.4194+-0.5021 4.1254+-0.2880 might be 1.0713x faster infer-closure-const-then-mov 19.6966+-0.1815 ? 19.7834+-0.2400 ? infer-closure-const-then-put-to-scope-no-inline 12.7997+-0.1509 ? 13.2074+-1.0920 ? might be 1.0319x slower infer-closure-const-then-put-to-scope 23.3578+-1.5821 ^ 21.4519+-0.1228 ^ definitely 1.0888x faster infer-closure-const-then-reenter-no-inline 54.4246+-0.3167 ? 54.9907+-2.3118 ? might be 1.0104x slower infer-closure-const-then-reenter 22.6489+-1.2307 22.0618+-1.2951 might be 1.0266x faster infer-constant-global-property 3.7493+-0.2359 3.5911+-0.0319 might be 1.0441x faster infer-constant-property 2.9080+-0.3266 2.8483+-0.1081 might be 1.0210x faster infer-one-time-closure-ten-vars 12.8227+-0.5611 12.5890+-0.1718 might be 1.0186x faster infer-one-time-closure-two-vars 12.6448+-1.6819 ? 13.1635+-1.3375 ? might be 1.0410x slower infer-one-time-closure 12.4769+-0.8362 11.9530+-0.2295 might be 1.0438x faster infer-one-time-deep-closure 21.8444+-1.8729 ? 22.1429+-1.4542 ? might be 1.0137x slower inline-arguments-access 4.7625+-0.3660 4.6176+-0.0627 might be 1.0314x faster inline-arguments-aliased-access 4.7806+-0.2456 ? 4.9225+-0.5292 ? might be 1.0297x slower inline-arguments-local-escape 4.8164+-0.1742 4.6877+-0.0727 might be 1.0274x faster inline-get-scoped-var 5.2936+-0.3069 ^ 4.7820+-0.0436 ^ definitely 1.1070x faster inlined-put-by-id-transition 12.0719+-0.2983 11.8033+-0.2769 might be 1.0228x faster int-or-other-abs-then-get-by-val 6.1125+-2.7071 5.0496+-0.1007 might be 1.2105x faster int-or-other-abs-zero-then-get-by-val 17.8687+-0.6968 ? 18.3604+-1.5933 ? might be 1.0275x slower int-or-other-add-then-get-by-val 4.4368+-0.1288 4.4269+-0.1465 int-or-other-add 5.5101+-0.1737 5.4358+-0.1235 might be 1.0137x faster int-or-other-div-then-get-by-val 4.3531+-0.1965 ? 4.5806+-0.6665 ? might be 1.0523x slower int-or-other-max-then-get-by-val 4.4974+-0.2439 4.3360+-0.0152 might be 1.0372x faster int-or-other-min-then-get-by-val 4.4044+-0.1305 4.3659+-0.0322 int-or-other-mod-then-get-by-val 4.0318+-0.1060 3.9685+-0.0351 might be 1.0159x faster int-or-other-mul-then-get-by-val 3.9688+-0.0557 ? 4.1901+-0.4492 ? might be 1.0558x slower int-or-other-neg-then-get-by-val 4.7808+-0.0161 ? 4.8302+-0.0392 ? might be 1.0103x slower int-or-other-neg-zero-then-get-by-val 17.7248+-0.1829 ? 18.0343+-1.1448 ? might be 1.0175x slower int-or-other-sub-then-get-by-val 4.4134+-0.0335 ? 4.4454+-0.0648 ? int-or-other-sub 3.6678+-0.0749 ? 3.7014+-0.0950 ? int-overflow-local 4.6615+-0.1357 ? 4.6945+-0.2805 ? Int16Array-alloc-long-lived 53.0475+-0.9939 ? 53.6426+-1.0074 ? might be 1.0112x slower Int16Array-bubble-sort-with-byteLength 20.5958+-0.9028 ? 20.6202+-0.9481 ? Int16Array-bubble-sort 20.4302+-0.2172 ? 20.7670+-1.2921 ? might be 1.0165x slower Int16Array-load-int-mul 1.6422+-0.1324 1.5353+-0.0101 might be 1.0696x faster Int16Array-to-Int32Array-set 54.3070+-1.6574 ! 58.4018+-1.6824 ! definitely 1.0754x slower Int32Array-alloc-large 24.1757+-0.5930 ? 24.6455+-1.7956 ? might be 1.0194x slower Int32Array-alloc-long-lived 64.2651+-1.9963 ? 64.4023+-1.7463 ? Int32Array-alloc 3.4187+-0.1375 3.3951+-0.1078 Int32Array-Int8Array-view-alloc 7.5479+-1.1740 7.2793+-0.8247 might be 1.0369x faster int52-spill 6.0745+-0.3527 5.8871+-0.1453 might be 1.0318x faster Int8Array-alloc-long-lived 48.3613+-1.3683 ? 49.5009+-1.5600 ? might be 1.0236x slower Int8Array-load-with-byteLength 3.4780+-0.1885 ? 3.6906+-0.4786 ? might be 1.0611x slower Int8Array-load 3.4201+-0.0537 ? 3.5684+-0.2387 ? might be 1.0434x slower integer-divide 11.0440+-0.1315 10.9361+-0.2039 integer-modulo 2.2037+-0.2527 2.0947+-0.0576 might be 1.0520x faster is-boolean-fold-tricky 4.7024+-0.2421 ? 4.8092+-0.5085 ? might be 1.0227x slower is-boolean-fold 3.0679+-0.2770 ? 3.1330+-0.2801 ? might be 1.0212x slower is-function-fold-tricky-internal-function 12.0548+-0.1890 ? 12.0653+-0.0606 ? is-function-fold-tricky 4.6057+-0.0802 4.5934+-0.0473 is-function-fold 3.1042+-0.2850 ? 3.1582+-0.3716 ? might be 1.0174x slower is-number-fold-tricky 4.4878+-0.0778 ? 4.6681+-0.2531 ? might be 1.0402x slower is-number-fold 2.9164+-0.0421 ? 3.1025+-0.2900 ? might be 1.0638x slower is-object-or-null-fold-functions 3.1436+-0.3688 3.0860+-0.2249 might be 1.0187x faster is-object-or-null-fold-less-tricky 4.6110+-0.1072 ? 4.6645+-0.2701 ? might be 1.0116x slower is-object-or-null-fold-tricky 6.8543+-0.3595 6.7362+-0.2318 might be 1.0175x faster is-object-or-null-fold 3.0680+-0.3855 2.9163+-0.0488 might be 1.0520x faster is-object-or-null-trickier-function 4.7601+-0.2659 ? 4.9225+-0.4278 ? might be 1.0341x slower is-object-or-null-trickier-internal-function 12.8347+-0.1650 ? 12.9543+-0.5704 ? is-object-or-null-tricky-function 4.7076+-0.2008 ? 4.7929+-0.4675 ? might be 1.0181x slower is-object-or-null-tricky-internal-function 9.3252+-0.0739 ? 9.3321+-0.1437 ? is-string-fold-tricky 4.5378+-0.1591 ? 4.7892+-0.3578 ? might be 1.0554x slower is-string-fold 3.1344+-0.3823 ? 3.1831+-0.4184 ? might be 1.0155x slower is-undefined-fold-tricky 3.9350+-0.3210 3.7817+-0.0453 might be 1.0405x faster is-undefined-fold 3.0053+-0.1655 2.9476+-0.0524 might be 1.0196x faster large-int-captured 5.0820+-0.5252 ? 5.1239+-0.3262 ? large-int-neg 16.5406+-0.8203 ? 17.1314+-1.4140 ? might be 1.0357x slower large-int 14.8286+-0.4062 ? 14.9555+-0.7241 ? load-varargs-elimination 22.7071+-0.1788 ? 31.3809+-18.9817 ? might be 1.3820x slower logical-not-weird-types 3.4186+-0.1837 3.3781+-0.0844 might be 1.0120x faster logical-not 4.6055+-0.0359 ? 4.6512+-0.0687 ? lots-of-fields 12.5911+-0.1494 12.4218+-0.5126 might be 1.0136x faster make-indexed-storage 3.0541+-0.2009 ? 3.1566+-0.1381 ? might be 1.0336x slower make-rope-cse 12.2771+-1.0951 ? 12.5935+-1.5015 ? might be 1.0258x slower marsaglia-larger-ints 36.7852+-1.7921 35.8618+-0.4922 might be 1.0257x faster marsaglia-osr-entry 23.2332+-0.4112 ? 23.9528+-1.4614 ? might be 1.0310x slower math-with-out-of-bounds-array-values 25.0724+-1.6139 ? 25.3854+-0.7838 ? might be 1.0125x slower max-boolean 2.5769+-0.0901 ? 2.5847+-0.0896 ? method-on-number 17.9796+-0.2174 ^ 17.4055+-0.2247 ^ definitely 1.0330x faster min-boolean 2.7835+-0.6302 2.5733+-0.0486 might be 1.0817x faster minus-boolean-double 3.2336+-0.0436 ? 3.2514+-0.0685 ? minus-boolean 2.5136+-0.1227 2.4189+-0.0758 might be 1.0392x faster misc-strict-eq 39.8228+-3.1985 39.0572+-1.3588 might be 1.0196x faster mod-boolean-double 10.9939+-0.1771 ? 11.2897+-0.7972 ? might be 1.0269x slower mod-boolean 7.8946+-0.0391 ? 7.9755+-0.2016 ? might be 1.0102x slower mul-boolean-double 3.7460+-0.0835 ? 3.7602+-0.1500 ? mul-boolean 3.0576+-0.2254 2.9900+-0.0479 might be 1.0226x faster neg-boolean 3.3205+-0.2587 ? 3.3700+-0.3940 ? might be 1.0149x slower negative-zero-divide 0.3902+-0.0202 ? 0.4112+-0.0284 ? might be 1.0537x slower negative-zero-modulo 0.4010+-0.0663 ? 0.4587+-0.1385 ? might be 1.1440x slower negative-zero-negate 0.3625+-0.0214 ! 0.4313+-0.0465 ! definitely 1.1898x slower nested-function-parsing 40.6377+-1.8004 39.4135+-1.0237 might be 1.0311x faster new-array-buffer-dead 112.5503+-2.4721 ? 113.6045+-1.7116 ? new-array-buffer-push 6.8811+-0.0906 ? 6.9136+-0.0978 ? new-array-dead 19.5350+-0.8165 19.0659+-0.4709 might be 1.0246x faster new-array-push 7.0680+-0.9504 6.6026+-0.3220 might be 1.0705x faster no-inline-constructor 42.4250+-1.0362 40.8241+-1.2013 might be 1.0392x faster number-test 3.1404+-0.0476 ? 3.3124+-0.3408 ? might be 1.0548x slower object-closure-call 5.7347+-0.0553 ? 5.8264+-0.2389 ? might be 1.0160x slower object-test 3.0046+-0.1647 2.9822+-0.1297 obvious-sink-pathology-taken 140.7885+-4.3980 ? 142.3224+-2.0632 ? might be 1.0109x slower obvious-sink-pathology 130.9134+-2.0269 ? 133.3243+-3.7729 ? might be 1.0184x slower obviously-elidable-new-object 36.3408+-1.2000 ? 36.4894+-1.4300 ? plus-boolean-arith 2.5558+-0.0254 ? 2.5613+-0.0298 ? plus-boolean-double 3.3514+-0.2755 3.3468+-0.2684 plus-boolean 2.4828+-0.0769 2.4768+-0.0692 poly-chain-access-different-prototypes-simple 3.6290+-0.3533 ? 3.6467+-0.5290 ? poly-chain-access-different-prototypes 2.6217+-0.0172 ? 2.7033+-0.2553 ? might be 1.0312x slower poly-chain-access-simpler 3.3475+-0.0521 ? 3.3568+-0.0749 ? poly-chain-access 2.6127+-0.0301 ? 2.6265+-0.0333 ? poly-stricteq 59.8716+-1.1565 ? 60.9186+-2.8077 ? might be 1.0175x slower polymorphic-array-call 1.4482+-0.0715 ? 1.4612+-0.1882 ? polymorphic-get-by-id 3.2102+-0.0309 3.1970+-0.0413 polymorphic-put-by-id 34.7648+-3.9706 31.8252+-1.9813 might be 1.0924x faster polymorphic-structure 15.1081+-0.2073 15.0425+-0.2371 polyvariant-monomorphic-get-by-id 8.7048+-0.1092 ? 8.7347+-0.1370 ? proto-getter-access 9.2751+-0.1240 ? 9.4513+-0.2681 ? might be 1.0190x slower put-by-id-replace-and-transition 9.6072+-0.0774 ? 9.8145+-0.2580 ? might be 1.0216x slower put-by-id-slightly-polymorphic 3.0077+-0.2029 ? 3.0448+-0.3405 ? might be 1.0123x slower put-by-id 13.0151+-0.2770 12.7943+-0.2696 might be 1.0173x faster put-by-val-direct 0.4355+-0.0616 0.3936+-0.0164 might be 1.1065x faster put-by-val-large-index-blank-indexing-type 12.3265+-1.1084 12.0483+-0.7156 might be 1.0231x faster put-by-val-machine-int 2.8480+-0.0737 ? 2.8780+-0.1022 ? might be 1.0105x slower rare-osr-exit-on-local 15.9913+-1.2760 15.1985+-0.4167 might be 1.0522x faster register-pressure-from-osr 21.5356+-0.1664 ? 21.9041+-0.6430 ? might be 1.0171x slower repeat-multi-get-by-offset 24.7608+-0.8519 ? 25.2542+-1.5211 ? might be 1.0199x slower setter-prototype 10.5325+-0.1346 ? 10.9357+-0.7670 ? might be 1.0383x slower setter 5.7752+-0.6039 ? 6.0874+-0.6888 ? might be 1.0541x slower simple-activation-demo 25.4524+-0.3944 25.1325+-0.4415 might be 1.0127x faster simple-getter-access 11.8270+-0.1804 ? 12.0248+-0.5223 ? might be 1.0167x slower simple-poly-call-nested 8.5067+-0.7851 8.1897+-0.2060 might be 1.0387x faster simple-poly-call 1.3674+-0.0636 ? 1.3726+-0.0654 ? sin-boolean 22.8291+-0.5877 ? 22.9124+-0.7654 ? singleton-scope 62.2797+-0.5899 ? 63.7203+-1.8672 ? might be 1.0231x slower sink-function 12.3405+-0.3983 12.2428+-0.3684 sink-huge-activation 18.8394+-0.3021 ? 19.4418+-0.7702 ? might be 1.0320x slower sinkable-new-object-dag 70.5228+-0.3849 69.8621+-2.3182 sinkable-new-object-taken 51.5270+-2.2933 ? 53.3783+-5.4343 ? might be 1.0359x slower sinkable-new-object 38.6052+-0.3399 ? 39.0633+-0.9565 ? might be 1.0119x slower slow-array-profile-convergence 3.2297+-0.3712 2.8952+-0.0503 might be 1.1155x faster slow-convergence 2.9270+-0.3294 2.7279+-0.0402 might be 1.0730x faster slow-ternaries 21.1071+-2.4826 20.3393+-3.2358 might be 1.0378x faster sorting-benchmark 19.2550+-0.6306 19.1977+-0.5469 sparse-conditional 1.2052+-0.0562 ? 1.2329+-0.1348 ? might be 1.0230x slower splice-to-remove 15.9714+-1.6478 15.8792+-1.3339 string-char-code-at 16.3978+-0.4410 ? 16.8615+-0.6800 ? might be 1.0283x slower string-concat-object 2.7797+-0.3064 ? 2.8610+-0.2595 ? might be 1.0293x slower string-concat-pair-object 2.8154+-0.1978 2.6340+-0.1887 might be 1.0689x faster string-concat-pair-simple 11.8418+-0.4567 ? 12.1330+-0.2749 ? might be 1.0246x slower string-concat-simple 12.2856+-0.5446 ? 13.2740+-1.6978 ? might be 1.0805x slower string-cons-repeat 9.0823+-0.9483 ^ 8.0001+-0.1259 ^ definitely 1.1353x faster string-cons-tower 8.2670+-0.2450 ? 8.3765+-0.2971 ? might be 1.0132x slower string-equality 17.9752+-0.7123 ? 18.0697+-1.0792 ? string-get-by-val-big-char 7.3743+-0.2275 7.2351+-0.0656 might be 1.0192x faster string-get-by-val-out-of-bounds-insane 3.7590+-0.2183 3.6410+-0.1457 might be 1.0324x faster string-get-by-val-out-of-bounds 5.6814+-0.2234 5.5584+-0.0529 might be 1.0221x faster string-get-by-val 3.4647+-0.0619 ? 3.4918+-0.2199 ? string-hash 2.1492+-0.1199 ? 2.2736+-0.2430 ? might be 1.0579x slower string-long-ident-equality 14.9464+-1.0301 14.8337+-0.7255 string-out-of-bounds 15.0102+-0.3120 ? 15.1136+-0.3411 ? string-repeat-arith 34.0263+-1.8728 33.8778+-2.2149 string-sub 67.9135+-1.6727 ? 68.2456+-3.0013 ? string-test 3.0227+-0.0153 ? 3.0474+-0.0305 ? string-var-equality 33.5386+-2.0310 32.2082+-0.3798 might be 1.0413x faster structure-hoist-over-transitions 2.8547+-0.4560 2.6792+-0.0303 might be 1.0655x faster substring-concat-weird 41.4771+-1.7399 41.3732+-1.6788 substring-concat 42.9596+-1.1900 42.8604+-0.5744 substring 46.0668+-1.2495 ? 47.0009+-3.8174 ? might be 1.0203x slower switch-char-constant 2.9289+-0.1363 ? 2.9784+-0.1503 ? might be 1.0169x slower switch-char 6.9198+-0.7443 6.8586+-1.1912 switch-constant 8.5658+-0.2117 ? 8.6888+-0.5171 ? might be 1.0144x slower switch-string-basic-big-var 18.5851+-0.3696 ? 18.9438+-0.4042 ? might be 1.0193x slower switch-string-basic-big 15.6048+-1.7822 15.2658+-0.7807 might be 1.0222x faster switch-string-basic-var 15.0824+-0.2207 ? 15.2163+-0.2479 ? switch-string-basic 13.5952+-0.2137 ? 13.6023+-0.1596 ? switch-string-big-length-tower-var 20.2915+-0.4313 20.2835+-0.1296 switch-string-length-tower-var 15.6263+-0.2468 ? 15.7563+-0.2066 ? switch-string-length-tower 13.7559+-1.2457 13.2903+-0.3945 might be 1.0350x faster switch-string-short 13.1050+-0.1585 ? 13.1509+-0.1871 ? switch 12.7249+-0.1926 ? 13.0591+-0.3772 ? might be 1.0263x slower tear-off-arguments-simple 3.7993+-0.1889 3.6196+-0.1922 might be 1.0496x faster tear-off-arguments 4.9165+-0.1672 ? 5.0852+-0.4231 ? might be 1.0343x slower temporal-structure 12.8182+-0.8732 12.2893+-0.3858 might be 1.0430x faster to-int32-boolean 14.1067+-0.2110 13.9358+-0.1953 might be 1.0123x faster try-catch-get-by-val-cloned-arguments 14.9554+-0.4873 ? 14.9939+-0.4124 ? try-catch-get-by-val-direct-arguments 6.8453+-0.2236 ? 6.8847+-0.8320 ? try-catch-get-by-val-scoped-arguments 8.0800+-0.7919 ? 8.4574+-1.4340 ? might be 1.0467x slower typed-array-get-set-by-val-profiling 33.5809+-1.7771 33.3000+-1.0689 undefined-property-access 342.3951+-3.3096 ? 343.3002+-4.3138 ? undefined-test 3.1656+-0.1076 ? 3.1666+-0.0653 ? unprofiled-licm 24.1632+-1.4573 23.5682+-1.4026 might be 1.0252x faster varargs-call 15.0940+-0.4109 15.0931+-0.3372 varargs-construct-inline 28.5719+-0.8833 27.9885+-0.6923 might be 1.0208x faster varargs-construct 22.8814+-0.6321 ? 22.9266+-0.8839 ? varargs-inline 9.7843+-0.8408 9.3125+-0.0553 might be 1.0507x faster varargs-strict-mode 10.0411+-0.1667 ? 10.6716+-1.1066 ? might be 1.0628x slower varargs 10.1121+-0.1288 ? 10.1956+-0.3238 ? weird-inlining-const-prop 3.5248+-0.3674 3.4598+-0.2392 might be 1.0188x faster <geometric> 8.9636+-0.0314 8.9578+-0.0215 might be 1.0007x faster TipOfTree DoubleRealUse AsmBench: bigfib.cpp 518.8040+-49.8107 498.0255+-2.6855 might be 1.0417x faster cray.c 431.3710+-12.6573 428.1437+-3.4040 dry.c 488.6579+-8.1970 ? 497.2350+-21.7451 ? might be 1.0176x slower FloatMM.c 722.0693+-1.6528 ? 722.1525+-2.0219 ? gcc-loops.cpp 4093.8066+-12.0332 ? 4196.5155+-255.2997 ? might be 1.0251x slower n-body.c 973.4665+-6.1992 ? 991.8999+-47.6840 ? might be 1.0189x slower Quicksort.c 424.1171+-2.0359 423.2583+-2.4650 stepanov_container.cpp 3608.2825+-45.7520 3598.2685+-17.9705 Towers.c 256.3579+-2.6343 256.2805+-1.2721 <geometric> 792.3100+-8.2953 ? 793.0379+-6.8061 ? might be 1.0009x slower TipOfTree DoubleRealUse CompressionBench: huffman 355.3179+-1.9686 ! 386.2188+-2.7035 ! definitely 1.0870x slower arithmetic-simple 372.7928+-13.6699 369.6384+-6.8861 arithmetic-precise 284.4393+-3.4096 ? 284.6909+-2.7542 ? arithmetic-complex-precise 282.0315+-1.6502 ? 282.8636+-2.9708 ? arithmetic-precise-order-0 382.1066+-18.8638 373.7717+-5.3831 might be 1.0223x faster arithmetic-precise-order-1 331.4238+-4.2569 ? 333.2034+-2.5252 ? arithmetic-precise-order-2 367.3392+-5.2870 367.0187+-5.1677 arithmetic-simple-order-1 427.1547+-3.1452 ? 427.6714+-5.0059 ? arithmetic-simple-order-2 471.0651+-3.6067 ? 473.0229+-5.3327 ? lz-string 311.6233+-4.3969 ? 314.5848+-2.0450 ? <geometric> 354.0521+-2.9362 ? 356.7875+-1.4017 ? might be 1.0077x slower TipOfTree DoubleRealUse Geomean of preferred means: <scaled-result> 62.2416+-0.2800 62.2058+-0.1711 might be 1.0006x faster
Ooops - of course! This does need to handle ordinary double conversion. You could have (Int32:1) + (Double:2).
Created attachment 254406 [details] better
This isn't a speed-up on box2d, the benchmark it was targeting. Not a slow-down, either. It is a speed-up on the microbenchmark. I think it's probably worth landing on the grounds that we have a microbenchmark speed-up and no slow downs. Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1). VMs tested: "TipOfTree" at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r185277) "DoubleRealUse" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r185277) 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 DoubleRealUse SunSpider: 3d-cube 5.2026+-0.1018 ? 5.2321+-0.1275 ? 3d-morph 5.8165+-0.0678 5.8164+-0.1013 3d-raytrace 6.5668+-0.0382 ? 6.5899+-0.0678 ? access-binary-trees 2.3927+-0.0840 ? 2.4734+-0.2429 ? might be 1.0337x slower access-fannkuch 6.3230+-0.0855 6.2534+-0.1414 might be 1.0111x faster access-nbody 2.9377+-0.0715 ? 3.1802+-0.3930 ? might be 1.0825x slower access-nsieve 3.5073+-0.1743 3.4458+-0.0727 might be 1.0178x faster bitops-3bit-bits-in-byte 1.6018+-0.0227 ? 1.7095+-0.1716 ? might be 1.0673x slower bitops-bits-in-byte 3.7928+-0.2100 ? 4.0126+-0.4482 ? might be 1.0579x slower bitops-bitwise-and 2.1962+-0.1567 ? 2.3123+-0.3010 ? might be 1.0529x slower bitops-nsieve-bits 3.2804+-0.0291 ? 3.3884+-0.2821 ? might be 1.0329x slower controlflow-recursive 3.3219+-0.8031 2.9244+-0.0896 might be 1.1359x faster crypto-aes 4.7254+-0.2488 4.6718+-0.0706 might be 1.0115x faster crypto-md5 2.9290+-0.2674 2.7732+-0.1089 might be 1.0562x faster crypto-sha1 3.9234+-0.3411 3.6300+-0.2891 might be 1.0808x faster date-format-tofte 9.1747+-0.0895 ? 9.5341+-0.4467 ? might be 1.0392x slower date-format-xparb 5.9039+-0.1356 ? 5.9816+-0.2447 ? might be 1.0132x slower math-cordic 3.2038+-0.0769 ? 3.4410+-0.4478 ? might be 1.0740x slower math-partial-sums 6.0313+-0.8628 5.8447+-0.7282 might be 1.0319x faster math-spectral-norm 2.1651+-0.1260 ? 2.4008+-0.6643 ? might be 1.1089x slower regexp-dna 7.5648+-0.1991 ? 8.2447+-1.5835 ? might be 1.0899x slower string-base64 5.3027+-0.7949 5.0621+-0.2743 might be 1.0475x faster string-fasta 7.0802+-0.5843 ? 7.5710+-1.5564 ? might be 1.0693x slower string-tagcloud 10.3597+-0.4720 ? 10.4562+-1.4354 ? string-unpack-code 20.2360+-0.4666 ? 20.9112+-1.0052 ? might be 1.0334x slower string-validate-input 6.0770+-0.1384 5.9775+-0.0906 might be 1.0166x faster <arithmetic> 5.4468+-0.0751 ? 5.5322+-0.1216 ? might be 1.0157x slower TipOfTree DoubleRealUse LongSpider: 3d-cube 901.3462+-3.1764 ? 906.6036+-9.7589 ? 3d-morph 1531.9673+-7.8483 ? 1535.1906+-14.7097 ? 3d-raytrace 732.7443+-67.9542 711.1558+-8.1386 might be 1.0304x faster access-binary-trees 1002.6327+-6.7249 ? 1010.8462+-11.2496 ? access-fannkuch 348.3668+-2.8039 ? 370.5251+-48.1705 ? might be 1.0636x slower access-nbody 591.0437+-2.8346 ! 606.8278+-1.7720 ! definitely 1.0267x slower access-nsieve 483.1322+-10.4077 481.3862+-7.6489 bitops-3bit-bits-in-byte 45.3797+-1.4785 44.1983+-0.8650 might be 1.0267x faster bitops-bits-in-byte 107.0593+-19.3226 101.1230+-3.3281 might be 1.0587x faster bitops-nsieve-bits 421.9225+-1.9395 ? 425.0806+-4.0026 ? controlflow-recursive 487.4026+-9.0812 ? 503.3051+-11.4977 ? might be 1.0326x slower crypto-aes 704.4706+-7.9363 ? 705.3912+-5.1696 ? crypto-md5 535.2856+-5.6195 ^ 526.0693+-2.9380 ^ definitely 1.0175x faster crypto-sha1 687.7664+-15.1019 683.0371+-9.4787 date-format-tofte 758.3883+-48.0466 722.0837+-11.5790 might be 1.0503x faster date-format-xparb 827.0798+-17.9376 ^ 795.4028+-10.3726 ^ definitely 1.0398x faster hash-map 183.7496+-6.4762 ? 185.3465+-4.9724 ? math-cordic 579.7266+-3.3025 576.3393+-2.9517 math-partial-sums 508.6323+-7.2567 ? 510.4797+-3.4359 ? math-spectral-norm 573.7021+-8.8469 573.0007+-14.9089 string-base64 412.0036+-7.0183 409.2138+-2.7316 string-fasta 436.7411+-5.2999 ^ 426.0829+-4.8414 ^ definitely 1.0250x faster string-tagcloud 196.4525+-5.3208 ? 198.1056+-2.7451 ? <geometric> 460.2311+-2.9455 458.3733+-2.0976 might be 1.0041x faster TipOfTree DoubleRealUse V8Spider: crypto 56.4698+-1.3224 ? 56.8267+-2.3474 ? deltablue 99.6978+-4.1181 ? 101.5317+-2.3149 ? might be 1.0184x slower earley-boyer 48.6385+-1.5300 ? 49.6343+-1.8269 ? might be 1.0205x slower raytrace 40.9377+-1.7334 ? 42.8641+-2.1497 ? might be 1.0471x slower regexp 82.4089+-2.6578 ? 84.1447+-2.5198 ? might be 1.0211x slower richards 80.0120+-0.8285 77.9913+-2.8881 might be 1.0259x faster splay 40.7305+-1.5525 40.5649+-1.9596 <geometric> 60.6031+-0.4654 ? 61.3094+-0.8494 ? might be 1.0117x slower TipOfTree DoubleRealUse Octane: encrypt 0.20957+-0.01040 0.20655+-0.00595 might be 1.0147x faster decrypt 3.61027+-0.04016 ? 3.61537+-0.04675 ? deltablue x2 0.19497+-0.00142 ? 0.19598+-0.00192 ? earley 0.39424+-0.00145 ? 0.39456+-0.00355 ? boyer 5.16339+-0.03958 ? 5.18243+-0.02854 ? navier-stokes x2 5.20905+-0.01719 ? 5.21560+-0.05911 ? raytrace x2 1.30908+-0.05103 1.29249+-0.03800 might be 1.0128x faster richards x2 0.12915+-0.00147 0.12795+-0.00107 splay x2 0.40275+-0.00362 ? 0.40608+-0.00327 ? regexp x2 31.83571+-0.43011 31.68957+-0.22374 pdfjs x2 42.85785+-0.51927 42.79992+-0.20894 mandreel x2 51.12459+-0.25382 ? 51.51715+-1.20686 ? gbemu x2 42.87791+-0.75220 ? 43.18229+-0.55683 ? closure 0.56751+-0.00422 0.56475+-0.00248 jquery 7.42726+-0.06766 7.41816+-0.04312 box2d x2 11.89483+-0.06173 ? 12.36935+-1.05722 ? might be 1.0399x slower zlib x2 393.68656+-15.36351 ? 398.11609+-2.68836 ? might be 1.0113x slower typescript x2 827.82385+-12.76021 819.13090+-11.73114 might be 1.0106x faster <geometric> 6.61643+-0.01791 ? 6.63077+-0.04745 ? might be 1.0022x slower TipOfTree DoubleRealUse Kraken: ai-astar 235.417+-1.696 ? 237.390+-3.275 ? audio-beat-detection 82.699+-0.585 82.205+-0.395 audio-dft 122.845+-3.596 ? 124.097+-4.846 ? might be 1.0102x slower audio-fft 72.093+-2.011 70.856+-1.825 might be 1.0175x faster audio-oscillator 78.603+-1.761 ? 79.445+-2.016 ? might be 1.0107x slower imaging-darkroom 107.122+-1.776 106.082+-3.619 imaging-desaturate 63.598+-0.746 ? 64.304+-1.936 ? might be 1.0111x slower imaging-gaussian-blur 114.473+-6.134 110.562+-1.749 might be 1.0354x faster json-parse-financial 47.145+-1.742 ? 48.637+-2.133 ? might be 1.0316x slower json-stringify-tinderbox 29.260+-2.305 ? 30.373+-1.992 ? might be 1.0381x slower stanford-crypto-aes 59.196+-1.693 58.655+-0.994 stanford-crypto-ccm 48.655+-1.480 48.544+-1.294 stanford-crypto-pbkdf2 109.971+-0.594 ? 110.977+-2.249 ? stanford-crypto-sha256-iterative 44.322+-2.093 43.471+-2.103 might be 1.0196x faster <arithmetic> 86.814+-0.683 ? 86.828+-0.350 ? might be 1.0002x slower TipOfTree DoubleRealUse JSRegress: abs-boolean 2.7649+-0.1183 2.6873+-0.0324 might be 1.0289x faster adapt-to-double-divide 16.7288+-0.3671 ? 16.8645+-0.4734 ? aliased-arguments-getbyval 1.4421+-0.2302 1.3382+-0.1006 might be 1.0777x faster allocate-big-object 2.9254+-0.1073 ? 3.0038+-0.2455 ? might be 1.0268x slower arguments-named-and-reflective 13.0861+-1.3456 12.9819+-1.0046 arguments-out-of-bounds 14.5733+-0.2316 ? 14.8540+-0.5192 ? might be 1.0193x slower arguments-strict-mode 10.9566+-0.3296 ? 11.8086+-1.3412 ? might be 1.0778x slower arguments 10.1036+-0.7402 ? 10.5160+-1.5001 ? might be 1.0408x slower arity-mismatch-inlining 0.9017+-0.0483 0.8956+-0.0354 array-access-polymorphic-structure 7.0216+-0.2172 ? 7.2062+-0.3152 ? might be 1.0263x slower array-nonarray-polymorhpic-access 32.8719+-1.8345 ? 32.8955+-0.6989 ? array-prototype-every 87.9524+-4.0077 86.7491+-2.5256 might be 1.0139x faster array-prototype-forEach 87.0063+-1.2138 83.5326+-2.5129 might be 1.0416x faster array-prototype-map 92.6319+-1.4502 ? 96.5256+-7.7157 ? might be 1.0420x slower array-prototype-reduce 81.8702+-0.9279 ? 82.1413+-2.8818 ? array-prototype-reduceRight 82.0904+-1.8855 79.6058+-1.8309 might be 1.0312x faster array-prototype-some 88.2260+-2.6270 86.4564+-3.8683 might be 1.0205x faster array-splice-contiguous 43.8490+-2.6188 ? 45.0930+-0.9397 ? might be 1.0284x slower array-with-double-add 4.3463+-0.1342 4.3461+-0.1812 array-with-double-increment 3.4650+-0.2279 3.2715+-0.0469 might be 1.0591x faster array-with-double-mul-add 5.2054+-0.0482 ? 5.7114+-1.2200 ? might be 1.0972x slower array-with-double-sum 3.7505+-0.3875 3.4980+-0.2291 might be 1.0722x faster array-with-int32-add-sub 6.8856+-0.1234 6.8135+-0.0396 might be 1.0106x faster array-with-int32-or-double-sum 3.4651+-0.0675 3.4024+-0.0487 might be 1.0184x faster ArrayBuffer-DataView-alloc-large-long-lived 37.7840+-2.3381 37.5572+-1.7134 ArrayBuffer-DataView-alloc-long-lived 14.2959+-0.3899 ! 16.5704+-1.6687 ! definitely 1.1591x slower ArrayBuffer-Int32Array-byteOffset 4.2788+-0.5260 4.0119+-0.3323 might be 1.0665x faster ArrayBuffer-Int8Array-alloc-large-long-lived 38.1942+-0.6386 ? 39.5656+-1.6971 ? might be 1.0359x slower ArrayBuffer-Int8Array-alloc-long-lived-buffer 22.2982+-0.5866 ? 22.7830+-1.5175 ? might be 1.0217x slower ArrayBuffer-Int8Array-alloc-long-lived 13.7660+-0.4629 ? 14.6244+-1.8022 ? might be 1.0624x slower ArrayBuffer-Int8Array-alloc 11.5650+-1.3796 10.6271+-0.4835 might be 1.0883x faster asmjs_bool_bug 7.7279+-0.0555 ? 7.8003+-0.1000 ? assign-custom-setter-polymorphic 3.4038+-0.1668 ? 3.4591+-0.3928 ? might be 1.0162x slower assign-custom-setter 4.5816+-0.0447 ? 4.6850+-0.1296 ? might be 1.0226x slower basic-set 10.4003+-1.9170 10.0424+-1.1441 might be 1.0356x faster big-int-mul 4.1228+-0.0472 ! 4.2523+-0.0258 ! definitely 1.0314x slower boolean-test 3.2338+-0.1223 ? 3.2371+-0.2382 ? branch-fold 4.4364+-0.5021 4.3280+-0.5857 might be 1.0250x faster branch-on-string-as-boolean 20.9379+-0.8049 20.7851+-1.1391 by-val-generic 8.4496+-0.6162 8.4256+-0.4680 call-spread-apply 30.0473+-1.2583 29.6607+-1.0834 might be 1.0130x faster call-spread-call 25.8841+-1.6990 ? 26.4585+-1.1217 ? might be 1.0222x slower captured-assignments 0.5249+-0.0237 ? 0.5555+-0.0702 ? might be 1.0582x slower cast-int-to-double 5.3745+-0.1502 5.3635+-0.1511 cell-argument 8.7243+-0.2841 ? 8.8645+-0.5968 ? might be 1.0161x slower cfg-simplify 2.9988+-0.2696 2.8474+-0.0431 might be 1.0532x faster chain-getter-access 9.1357+-0.0920 ? 9.6206+-0.8220 ? might be 1.0531x slower cmpeq-obj-to-obj-other 12.1787+-0.7837 ? 12.5842+-1.9518 ? might be 1.0333x slower constant-test 5.0123+-0.0253 ? 5.0671+-0.0893 ? might be 1.0109x slower create-lots-of-functions 11.6797+-0.4007 11.5581+-0.3368 might be 1.0105x faster cse-new-array-buffer 2.7593+-0.2821 2.6275+-0.1854 might be 1.0502x faster cse-new-array 2.6628+-0.1293 2.6271+-0.0380 might be 1.0136x faster DataView-custom-properties 43.5056+-1.6841 ? 43.8673+-2.0971 ? deconstructing-parameters-overridden-by-function 0.6581+-0.1004 0.6034+-0.0959 might be 1.0907x faster delay-tear-off-arguments-strictmode 15.0502+-1.0942 14.3447+-0.2251 might be 1.0492x faster deltablue-varargs 210.5859+-4.5215 ? 210.9005+-2.1066 ? destructuring-arguments 17.6674+-0.4716 17.5642+-0.2715 destructuring-swap 5.3977+-0.3946 5.1004+-0.0213 might be 1.0583x faster direct-arguments-getbyval 1.2996+-0.0454 ? 1.3575+-0.1948 ? might be 1.0446x slower div-boolean-double 5.3299+-0.1547 5.2974+-0.0672 div-boolean 7.8198+-0.0110 ! 7.9242+-0.0722 ! definitely 1.0134x slower double-get-by-val-out-of-bounds 4.6955+-0.1761 4.6042+-0.0702 might be 1.0198x faster double-pollution-getbyval 8.9615+-0.1542 8.9108+-0.0268 double-pollution-putbyoffset 4.6159+-0.3783 4.4319+-0.1912 might be 1.0415x faster double-real-use 30.7680+-1.4014 ^ 27.8455+-0.5449 ^ definitely 1.1050x faster double-to-int32-typed-array-no-inline 2.5655+-0.1732 ? 2.6180+-0.0494 ? might be 1.0205x slower double-to-int32-typed-array 2.1217+-0.2726 ? 2.2112+-0.3140 ? might be 1.0422x slower double-to-uint32-typed-array-no-inline 2.9482+-0.2888 2.6280+-0.1780 might be 1.1218x faster double-to-uint32-typed-array 2.0793+-0.0613 ? 2.3433+-0.2544 ? might be 1.1270x slower elidable-new-object-dag 43.6029+-1.9667 43.4862+-2.7154 elidable-new-object-roflcopter 44.9545+-1.1542 44.5726+-1.6791 elidable-new-object-then-call 40.2013+-1.1971 39.4508+-1.2949 might be 1.0190x faster elidable-new-object-tree 46.7319+-1.7593 46.4502+-1.6972 empty-string-plus-int 5.5827+-0.1175 ? 5.6143+-0.1224 ? emscripten-cube2hash 38.8370+-0.9669 ? 39.3053+-1.6712 ? might be 1.0121x slower exit-length-on-plain-object 13.9146+-0.1349 ? 14.5843+-1.4161 ? might be 1.0481x slower external-arguments-getbyval 1.2535+-0.0361 ? 1.3282+-0.0660 ? might be 1.0596x slower external-arguments-putbyval 2.3966+-0.0575 ? 2.4865+-0.1349 ? might be 1.0375x slower fixed-typed-array-storage-var-index 1.3495+-0.1680 1.2178+-0.0202 might be 1.1081x faster fixed-typed-array-storage 0.9326+-0.0452 ? 0.9500+-0.0834 ? might be 1.0187x slower Float32Array-matrix-mult 4.6297+-0.2221 4.6053+-0.1801 Float32Array-to-Float64Array-set 53.5590+-2.4331 ! 57.6923+-1.2496 ! definitely 1.0772x slower Float64Array-alloc-long-lived 87.8797+-2.9439 87.8154+-1.1353 Float64Array-to-Int16Array-set 68.9527+-1.6965 ? 69.8889+-1.4584 ? might be 1.0136x slower fold-double-to-int 13.6014+-0.1636 ? 13.8258+-0.2389 ? might be 1.0165x slower fold-get-by-id-to-multi-get-by-offset-rare-int 10.4222+-1.0423 ? 10.9725+-1.0662 ? might be 1.0528x slower fold-get-by-id-to-multi-get-by-offset 10.1340+-1.3274 ? 11.3405+-1.0545 ? might be 1.1191x slower fold-multi-get-by-offset-to-get-by-offset 9.7424+-1.1058 ? 10.3923+-1.3939 ? might be 1.0667x slower fold-multi-get-by-offset-to-poly-get-by-offset 9.2607+-1.1588 ? 9.6464+-0.6475 ? might be 1.0416x slower fold-multi-put-by-offset-to-poly-put-by-offset 10.0247+-0.8734 9.3558+-0.9142 might be 1.0715x faster fold-multi-put-by-offset-to-put-by-offset 8.2358+-0.6188 6.8994+-1.6665 might be 1.1937x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 10.0655+-0.4985 9.9585+-0.5643 might be 1.0108x faster fold-put-by-id-to-multi-put-by-offset 10.5042+-1.2973 ? 10.7074+-1.0722 ? might be 1.0193x slower fold-put-structure 7.6204+-0.6905 6.9910+-1.5184 might be 1.0900x faster for-of-iterate-array-entries 4.7410+-0.2829 4.6010+-0.1380 might be 1.0304x faster for-of-iterate-array-keys 3.9753+-0.5735 3.8818+-0.2540 might be 1.0241x faster for-of-iterate-array-values 3.7312+-0.2276 ? 3.7704+-0.3525 ? might be 1.0105x slower fround 21.1287+-0.3732 ? 21.3750+-0.7753 ? might be 1.0117x slower ftl-library-inlining-dataview 67.1286+-5.5787 66.2189+-1.6194 might be 1.0137x faster ftl-library-inlining 75.4043+-19.0764 74.2172+-18.5748 might be 1.0160x faster function-dot-apply 2.2896+-0.0569 2.2804+-0.0748 function-test 2.9845+-0.1116 2.9187+-0.0392 might be 1.0226x faster function-with-eval 103.9167+-3.0970 102.5265+-2.6564 might be 1.0136x faster gcse-poly-get-less-obvious 19.1483+-1.3385 18.5897+-0.6445 might be 1.0300x faster gcse-poly-get 20.5992+-1.7924 ? 20.8334+-1.6266 ? might be 1.0114x slower gcse 4.5824+-0.5026 4.5014+-0.1645 might be 1.0180x faster get-by-id-bimorphic-check-structure-elimination-simple 3.0034+-0.2997 2.8690+-0.1050 might be 1.0468x faster get-by-id-bimorphic-check-structure-elimination 6.0474+-0.1040 6.0246+-0.0465 get-by-id-chain-from-try-block 7.0615+-0.6295 ? 7.4285+-1.1409 ? might be 1.0520x slower get-by-id-check-structure-elimination 5.2528+-0.2095 ? 5.2793+-0.1862 ? get-by-id-proto-or-self 18.5943+-0.9645 ? 19.7433+-1.2489 ? might be 1.0618x slower get-by-id-quadmorphic-check-structure-elimination-simple 3.0156+-0.1075 2.9733+-0.0406 might be 1.0142x faster get-by-id-self-or-proto 18.7160+-0.8363 ? 19.4611+-2.3150 ? might be 1.0398x slower get-by-val-out-of-bounds 4.6423+-0.2730 ? 4.8080+-0.6054 ? might be 1.0357x slower get_callee_monomorphic 3.0088+-0.1199 ? 3.0387+-0.2374 ? get_callee_polymorphic 3.7929+-0.1884 ? 3.9277+-0.3821 ? might be 1.0355x slower getter-no-activation 5.1326+-0.2736 5.0011+-0.1349 might be 1.0263x faster getter-prototype 14.7728+-0.2277 ? 15.4115+-1.1204 ? might be 1.0432x slower getter-richards 127.0997+-3.0202 125.9145+-3.4852 getter 5.8917+-0.5951 ? 5.9327+-0.7877 ? global-var-const-infer-fire-from-opt 0.9563+-0.0361 ? 0.9591+-0.0341 ? global-var-const-infer 1.0167+-0.1334 0.9040+-0.0945 might be 1.1246x faster HashMap-put-get-iterate-keys 30.8184+-1.8675 ? 31.3241+-0.6596 ? might be 1.0164x slower HashMap-put-get-iterate 33.1590+-1.6777 32.3455+-0.9040 might be 1.0252x faster HashMap-string-put-get-iterate 32.4650+-2.0202 32.3478+-1.6796 hoist-make-rope 12.4580+-0.5100 ? 12.7791+-0.6886 ? might be 1.0258x slower hoist-poly-check-structure-effectful-loop 5.1674+-0.0994 5.0603+-0.0716 might be 1.0212x faster hoist-poly-check-structure 3.8571+-0.3347 ? 4.0552+-0.4108 ? might be 1.0514x slower imul-double-only 9.1540+-1.1312 9.0688+-0.0631 imul-int-only 9.9065+-0.1595 ? 10.6442+-0.6550 ? might be 1.0745x slower imul-mixed 8.4793+-0.4060 8.4738+-0.3026 in-four-cases 22.1650+-0.2572 ? 22.4874+-0.5091 ? might be 1.0145x slower in-one-case-false 11.1189+-0.1018 ? 11.2161+-0.1401 ? in-one-case-true 11.0849+-0.0919 ? 11.0880+-0.0925 ? in-two-cases 11.9036+-0.4053 11.8037+-0.3286 indexed-properties-in-objects 3.1969+-0.2791 3.0449+-0.1761 might be 1.0499x faster infer-closure-const-then-mov-no-inline 4.1823+-0.3042 4.0704+-0.2587 might be 1.0275x faster infer-closure-const-then-mov 19.7880+-0.4627 ? 19.9517+-0.1772 ? infer-closure-const-then-put-to-scope-no-inline 13.5107+-1.2799 ? 14.3783+-1.5306 ? might be 1.0642x slower infer-closure-const-then-put-to-scope 23.3468+-1.8319 ? 23.3590+-1.8271 ? infer-closure-const-then-reenter-no-inline 54.3228+-0.4435 ? 55.3523+-1.8673 ? might be 1.0190x slower infer-closure-const-then-reenter 23.1040+-0.8665 22.3345+-1.1557 might be 1.0345x faster infer-constant-global-property 3.6313+-0.0647 ? 3.7094+-0.1394 ? might be 1.0215x slower infer-constant-property 2.7998+-0.0744 ? 2.8898+-0.2817 ? might be 1.0321x slower infer-one-time-closure-ten-vars 12.5927+-0.1853 ? 12.6359+-0.3417 ? infer-one-time-closure-two-vars 12.5545+-0.5719 ? 13.2167+-1.7103 ? might be 1.0527x slower infer-one-time-closure 11.8448+-0.2582 ? 12.0566+-0.3985 ? might be 1.0179x slower infer-one-time-deep-closure 22.1726+-1.7452 21.7840+-1.0947 might be 1.0178x faster inline-arguments-access 5.0644+-0.6172 4.7699+-0.1427 might be 1.0617x faster inline-arguments-aliased-access 4.7702+-0.1138 ? 4.8065+-0.3694 ? inline-arguments-local-escape 4.9061+-0.5369 4.8212+-0.3084 might be 1.0176x faster inline-get-scoped-var 4.9820+-0.2706 4.9467+-0.1727 inlined-put-by-id-transition 11.6175+-0.2839 ? 11.8226+-0.5680 ? might be 1.0177x slower int-or-other-abs-then-get-by-val 5.0402+-0.1016 ? 5.1194+-0.2382 ? might be 1.0157x slower int-or-other-abs-zero-then-get-by-val 17.5608+-0.3821 ? 18.4869+-1.1515 ? might be 1.0527x slower int-or-other-add-then-get-by-val 4.3645+-0.0213 ? 4.4022+-0.0834 ? int-or-other-add 5.4037+-0.0213 ? 5.4917+-0.1858 ? might be 1.0163x slower int-or-other-div-then-get-by-val 4.3656+-0.1768 4.2928+-0.0461 might be 1.0170x faster int-or-other-max-then-get-by-val 4.3445+-0.0106 ? 4.4605+-0.1728 ? might be 1.0267x slower int-or-other-min-then-get-by-val 5.6239+-3.0714 4.3383+-0.0458 might be 1.2963x faster int-or-other-mod-then-get-by-val 4.0172+-0.1071 ? 4.0636+-0.2126 ? might be 1.0115x slower int-or-other-mul-then-get-by-val 4.9749+-2.3066 4.0291+-0.1592 might be 1.2347x faster int-or-other-neg-then-get-by-val 4.8075+-0.0211 ? 4.8460+-0.1269 ? int-or-other-neg-zero-then-get-by-val 18.0243+-0.2209 ^ 17.3781+-0.1907 ^ definitely 1.0372x faster int-or-other-sub-then-get-by-val 4.4643+-0.1497 4.4471+-0.0975 int-or-other-sub 3.7574+-0.2765 ? 3.7653+-0.1458 ? int-overflow-local 4.5862+-0.0427 ? 4.6908+-0.1811 ? might be 1.0228x slower Int16Array-alloc-long-lived 52.9876+-1.1439 ? 53.2183+-1.2539 ? Int16Array-bubble-sort-with-byteLength 20.2855+-0.1971 ? 20.4377+-0.3623 ? Int16Array-bubble-sort 20.5279+-1.2312 ? 21.3903+-1.2170 ? might be 1.0420x slower Int16Array-load-int-mul 1.6444+-0.1842 1.5708+-0.0672 might be 1.0469x faster Int16Array-to-Int32Array-set 53.7147+-1.8504 ! 58.9365+-0.5705 ! definitely 1.0972x slower Int32Array-alloc-large 24.4908+-0.9589 24.2937+-1.3980 Int32Array-alloc-long-lived 63.9952+-1.9592 63.8105+-0.8235 Int32Array-alloc 3.4477+-0.0970 ? 3.8851+-0.6322 ? might be 1.1268x slower Int32Array-Int8Array-view-alloc 7.1173+-0.8781 ? 7.5314+-0.8287 ? might be 1.0582x slower int52-spill 5.7375+-0.0336 ? 5.7817+-0.0431 ? Int8Array-alloc-long-lived 48.9581+-1.6839 48.3344+-1.1704 might be 1.0129x faster Int8Array-load-with-byteLength 3.6595+-0.2221 3.4198+-0.0466 might be 1.0701x faster Int8Array-load 3.7262+-0.3340 3.5915+-0.3959 might be 1.0375x faster integer-divide 11.2612+-0.7858 ? 11.7140+-1.6091 ? might be 1.0402x slower integer-modulo 2.1007+-0.0379 ? 2.1104+-0.0854 ? is-boolean-fold-tricky 4.5181+-0.0868 ? 4.6575+-0.2668 ? might be 1.0308x slower is-boolean-fold 2.9624+-0.0913 2.9288+-0.0479 might be 1.0115x faster is-function-fold-tricky-internal-function 12.0374+-0.3402 ? 12.0951+-0.0912 ? is-function-fold-tricky 4.6332+-0.1252 ? 4.7192+-0.1993 ? might be 1.0185x slower is-function-fold 2.9629+-0.0358 ? 2.9919+-0.1251 ? is-number-fold-tricky 4.8808+-0.5293 4.5818+-0.2205 might be 1.0653x faster is-number-fold 3.1746+-0.3553 3.0692+-0.3794 might be 1.0343x faster is-object-or-null-fold-functions 3.1336+-0.3002 ? 3.3345+-0.4106 ? might be 1.0641x slower is-object-or-null-fold-less-tricky 4.5705+-0.0820 ? 4.6808+-0.2595 ? might be 1.0241x slower is-object-or-null-fold-tricky 6.7696+-0.1363 6.7528+-0.1369 is-object-or-null-fold 2.9506+-0.0724 ? 2.9688+-0.0654 ? is-object-or-null-trickier-function 4.6650+-0.1133 ? 5.0236+-0.9377 ? might be 1.0769x slower is-object-or-null-trickier-internal-function 12.6900+-0.0736 12.5703+-0.0970 is-object-or-null-tricky-function 4.5767+-0.0654 ? 4.6719+-0.0815 ? might be 1.0208x slower is-object-or-null-tricky-internal-function 9.4711+-0.3842 ? 9.4871+-0.3143 ? is-string-fold-tricky 4.5151+-0.1069 ? 4.7314+-0.4505 ? might be 1.0479x slower is-string-fold 2.8972+-0.0228 ? 2.9131+-0.0363 ? is-undefined-fold-tricky 3.8040+-0.0391 ? 3.8277+-0.0945 ? is-undefined-fold 3.1521+-0.3533 3.1068+-0.3102 might be 1.0146x faster large-int-captured 4.9330+-0.2099 4.8893+-0.1173 large-int-neg 16.7028+-0.6964 16.4651+-0.7936 might be 1.0144x faster large-int 14.7038+-0.2219 ? 14.7371+-0.2079 ? load-varargs-elimination 23.3787+-1.2534 23.3649+-1.1365 logical-not-weird-types 3.3903+-0.1418 ? 3.3911+-0.1763 ? logical-not 4.6350+-0.0335 ? 4.7909+-0.2647 ? might be 1.0336x slower lots-of-fields 12.6230+-0.2570 ? 13.0515+-2.0007 ? might be 1.0339x slower make-indexed-storage 3.2594+-0.1462 3.1270+-0.2464 might be 1.0423x faster make-rope-cse 12.3969+-1.2564 12.0170+-1.2601 might be 1.0316x faster marsaglia-larger-ints 36.4939+-0.6195 ? 37.6276+-2.6405 ? might be 1.0311x slower marsaglia-osr-entry 23.1974+-0.9869 ? 23.8764+-1.2779 ? might be 1.0293x slower math-with-out-of-bounds-array-values 26.9576+-7.2486 26.6963+-2.3409 max-boolean 2.5752+-0.1192 ? 2.6243+-0.1996 ? might be 1.0191x slower method-on-number 17.8790+-0.5505 ? 19.6233+-4.3820 ? might be 1.0976x slower min-boolean 2.7017+-0.3128 2.5543+-0.0316 might be 1.0577x faster minus-boolean-double 3.2594+-0.1023 ? 3.2607+-0.0934 ? minus-boolean 2.3998+-0.0362 ? 2.5240+-0.3059 ? might be 1.0518x slower misc-strict-eq 39.3015+-0.8798 ? 39.3497+-1.0284 ? mod-boolean-double 11.2163+-0.3828 10.9923+-0.1102 might be 1.0204x faster mod-boolean 8.0257+-0.2461 7.8951+-0.0102 might be 1.0165x faster mul-boolean-double 3.8599+-0.2596 3.7915+-0.0595 might be 1.0180x faster mul-boolean 3.0587+-0.2975 ? 3.1560+-0.3996 ? might be 1.0318x slower neg-boolean 3.2579+-0.0531 ? 3.3897+-0.3999 ? might be 1.0405x slower negative-zero-divide 0.4338+-0.0720 0.4020+-0.0297 might be 1.0789x faster negative-zero-modulo 0.4190+-0.0364 0.4037+-0.0285 might be 1.0378x faster negative-zero-negate 0.4028+-0.0475 0.3781+-0.0223 might be 1.0653x faster nested-function-parsing 39.2493+-0.1189 39.0745+-0.2591 new-array-buffer-dead 113.4927+-2.5656 111.5985+-2.9043 might be 1.0170x faster new-array-buffer-push 7.4875+-0.8834 6.9375+-0.2021 might be 1.0793x faster new-array-dead 19.3591+-0.5450 ? 19.6083+-0.9396 ? might be 1.0129x slower new-array-push 6.4486+-0.0638 ? 6.5577+-0.0878 ? might be 1.0169x slower no-inline-constructor 42.6313+-1.8622 41.1036+-1.3199 might be 1.0372x faster number-test 3.1616+-0.1232 3.1098+-0.0293 might be 1.0167x faster object-closure-call 5.8179+-0.0817 ? 5.9015+-0.3376 ? might be 1.0144x slower object-test 2.9736+-0.2638 2.8835+-0.0224 might be 1.0313x faster obvious-sink-pathology-taken 146.9525+-11.4995 141.3045+-1.0046 might be 1.0400x faster obvious-sink-pathology 132.6357+-2.3136 132.0987+-1.4803 obviously-elidable-new-object 36.4392+-1.5764 34.8174+-0.9955 might be 1.0466x faster plus-boolean-arith 2.6580+-0.1305 ? 2.6775+-0.3251 ? plus-boolean-double 3.4882+-0.3784 3.2903+-0.0473 might be 1.0602x faster plus-boolean 2.4759+-0.0501 ? 2.4855+-0.1152 ? poly-chain-access-different-prototypes-simple 3.3580+-0.0781 ? 3.3894+-0.0998 ? poly-chain-access-different-prototypes 2.8794+-0.3666 2.7379+-0.3033 might be 1.0517x faster poly-chain-access-simpler 3.4207+-0.1002 3.3523+-0.0478 might be 1.0204x faster poly-chain-access 2.7554+-0.3364 2.6338+-0.0435 might be 1.0462x faster poly-stricteq 60.9377+-2.1203 59.7648+-0.6538 might be 1.0196x faster polymorphic-array-call 1.4191+-0.0612 1.4129+-0.0448 polymorphic-get-by-id 3.2754+-0.2111 3.2098+-0.0602 might be 1.0204x faster polymorphic-put-by-id 33.7656+-2.4640 32.7787+-1.6756 might be 1.0301x faster polymorphic-structure 16.9566+-5.2977 15.5527+-0.8742 might be 1.0903x faster polyvariant-monomorphic-get-by-id 8.7461+-0.2948 ? 8.7655+-0.2406 ? proto-getter-access 9.4189+-0.1625 ? 9.6491+-0.5598 ? might be 1.0244x slower put-by-id-replace-and-transition 9.5932+-0.0652 ? 9.7232+-0.2593 ? might be 1.0136x slower put-by-id-slightly-polymorphic 2.9339+-0.0970 2.8736+-0.0317 might be 1.0210x faster put-by-id 13.0500+-0.2385 12.6633+-0.2294 might be 1.0305x faster put-by-val-direct 0.4187+-0.0619 0.4093+-0.0145 might be 1.0232x faster put-by-val-large-index-blank-indexing-type 12.5348+-1.2371 12.5184+-1.1894 put-by-val-machine-int 2.8787+-0.1924 2.8392+-0.0354 might be 1.0139x faster rare-osr-exit-on-local 15.3765+-0.7056 15.3342+-0.7004 register-pressure-from-osr 22.1255+-1.1094 21.9197+-1.0250 repeat-multi-get-by-offset 25.2084+-1.4383 24.9320+-1.0521 might be 1.0111x faster setter-prototype 10.6165+-0.1528 ? 10.6251+-0.0770 ? setter 6.5298+-0.8744 6.3660+-0.7955 might be 1.0257x faster simple-activation-demo 25.3591+-0.2911 ? 26.1081+-1.5538 ? might be 1.0295x slower simple-getter-access 11.8133+-0.1867 ? 11.8572+-0.3743 ? simple-poly-call-nested 8.3894+-0.7791 ? 8.4436+-0.4108 ? simple-poly-call 1.3816+-0.1241 ? 1.4088+-0.2056 ? might be 1.0197x slower sin-boolean 22.4815+-0.8652 ? 22.6965+-0.9251 ? singleton-scope 62.8346+-1.6408 ? 63.6619+-1.9345 ? might be 1.0132x slower sink-function 12.3191+-0.3735 12.0288+-0.1749 might be 1.0241x faster sink-huge-activation 19.3323+-0.5815 ? 19.9036+-1.7381 ? might be 1.0296x slower sinkable-new-object-dag 70.9199+-1.2252 ? 71.8415+-3.2129 ? might be 1.0130x slower sinkable-new-object-taken 52.5699+-4.1713 51.9659+-2.8133 might be 1.0116x faster sinkable-new-object 39.8404+-1.0175 38.8383+-0.4756 might be 1.0258x faster slow-array-profile-convergence 2.9380+-0.1308 ? 3.0857+-0.3033 ? might be 1.0503x slower slow-convergence 2.9697+-0.2788 2.8308+-0.1608 might be 1.0491x faster slow-ternaries 22.0433+-1.6460 18.9023+-1.9406 might be 1.1662x faster sorting-benchmark 18.6527+-0.4101 ? 18.8980+-0.3997 ? might be 1.0132x slower sparse-conditional 1.2979+-0.2126 ? 1.4444+-0.4444 ? might be 1.1129x slower splice-to-remove 15.6659+-1.0644 15.3494+-0.3104 might be 1.0206x faster string-char-code-at 17.1439+-1.6194 16.4173+-0.6535 might be 1.0443x faster string-concat-object 2.8370+-0.5444 2.7131+-0.1080 might be 1.0457x faster string-concat-pair-object 2.7073+-0.2315 2.5837+-0.0878 might be 1.0478x faster string-concat-pair-simple 11.9191+-0.3498 ? 12.0178+-0.5709 ? string-concat-simple 13.0638+-1.5799 12.9613+-1.1567 string-cons-repeat 9.7438+-0.8794 8.7532+-1.1283 might be 1.1132x faster string-cons-tower 8.3061+-0.3443 ? 8.5110+-0.6264 ? might be 1.0247x slower string-equality 18.1641+-0.7797 ? 18.6406+-1.8311 ? might be 1.0262x slower string-get-by-val-big-char 7.2243+-0.0231 ? 7.2609+-0.1644 ? string-get-by-val-out-of-bounds-insane 3.6266+-0.1112 ? 3.9423+-0.5692 ? might be 1.0871x slower string-get-by-val-out-of-bounds 5.5268+-0.0329 ? 5.5415+-0.0392 ? string-get-by-val 3.6193+-0.4561 3.4318+-0.2136 might be 1.0546x faster string-hash 2.1193+-0.0412 ? 2.2196+-0.1362 ? might be 1.0473x slower string-long-ident-equality 14.6736+-0.1662 14.4659+-0.2071 might be 1.0144x faster string-out-of-bounds 14.9633+-0.1815 ? 15.1074+-0.2726 ? string-repeat-arith 33.6847+-1.9599 ? 35.1204+-1.5572 ? might be 1.0426x slower string-sub 67.0485+-2.6458 ? 71.5456+-3.1721 ? might be 1.0671x slower string-test 3.1298+-0.2736 3.0350+-0.0525 might be 1.0312x faster string-var-equality 33.0560+-1.3082 ? 33.8698+-1.9813 ? might be 1.0246x slower structure-hoist-over-transitions 2.7360+-0.0928 ? 2.7360+-0.0277 ? substring-concat-weird 41.2107+-1.7561 ? 41.2759+-1.0279 ? substring-concat 42.6440+-0.5127 ? 42.9985+-0.9828 ? substring 48.5335+-8.2216 45.9051+-1.6477 might be 1.0573x faster switch-char-constant 3.1143+-0.1967 2.9629+-0.2302 might be 1.0511x faster switch-char 6.4789+-0.3318 ? 7.0639+-0.8039 ? might be 1.0903x slower switch-constant 8.4672+-0.2130 ? 8.6052+-0.2598 ? might be 1.0163x slower switch-string-basic-big-var 18.5179+-0.5437 ? 18.8149+-0.8684 ? might be 1.0160x slower switch-string-basic-big 16.2025+-3.5888 15.1114+-0.3374 might be 1.0722x faster switch-string-basic-var 15.2065+-0.2800 15.0765+-0.2113 switch-string-basic 13.5850+-0.2303 ? 13.8495+-1.0559 ? might be 1.0195x slower switch-string-big-length-tower-var 20.1630+-0.2503 ? 20.5843+-1.3021 ? might be 1.0209x slower switch-string-length-tower-var 15.6684+-0.2093 15.5169+-0.2019 switch-string-length-tower 13.6844+-1.1508 ? 13.7624+-1.3460 ? switch-string-short 13.1625+-0.1877 ? 13.2904+-0.2037 ? switch 12.7336+-0.2084 ? 12.7768+-0.4726 ? tear-off-arguments-simple 3.5734+-0.0307 ? 3.6082+-0.1080 ? tear-off-arguments 4.9028+-0.1054 4.8628+-0.0880 temporal-structure 12.2666+-0.2842 12.1772+-0.1134 to-int32-boolean 13.9360+-0.1775 ? 14.1127+-0.3120 ? might be 1.0127x slower try-catch-get-by-val-cloned-arguments 14.9442+-0.9098 ? 15.8510+-1.2071 ? might be 1.0607x slower try-catch-get-by-val-direct-arguments 7.2616+-0.9892 6.5286+-0.1252 might be 1.1123x faster try-catch-get-by-val-scoped-arguments 7.7489+-0.2051 ? 8.2821+-0.9710 ? might be 1.0688x slower typed-array-get-set-by-val-profiling 33.8614+-1.6957 32.6138+-0.2489 might be 1.0383x faster undefined-property-access 343.6169+-3.5920 ? 344.1093+-1.4379 ? undefined-test 3.2235+-0.2332 3.1329+-0.0934 might be 1.0289x faster unprofiled-licm 23.4334+-1.5786 ? 23.5981+-1.6618 ? varargs-call 14.9989+-0.1980 ? 15.8424+-1.2820 ? might be 1.0562x slower varargs-construct-inline 28.4843+-0.3949 ? 29.0465+-0.9530 ? might be 1.0197x slower varargs-construct 22.8858+-1.0049 ? 23.0784+-0.4801 ? varargs-inline 9.4686+-0.1182 9.4569+-0.1305 varargs-strict-mode 10.1083+-0.1253 ? 10.4791+-0.9830 ? might be 1.0367x slower varargs 10.0447+-0.0735 10.0061+-0.0438 weird-inlining-const-prop 3.3890+-0.2617 ? 4.0432+-2.0991 ? might be 1.1930x slower <geometric> 8.9828+-0.0370 8.9747+-0.0232 might be 1.0009x faster TipOfTree DoubleRealUse AsmBench: bigfib.cpp 500.8590+-4.9801 ? 501.3822+-3.6239 ? cray.c 427.4548+-0.6829 ? 429.9062+-2.0056 ? dry.c 491.1985+-3.9376 ? 492.3243+-5.9774 ? FloatMM.c 723.4755+-2.5057 ? 725.8680+-3.4654 ? gcc-loops.cpp 4110.9378+-9.6674 4106.2331+-9.5015 n-body.c 975.3578+-3.6786 ! 988.6222+-6.7565 ! definitely 1.0136x slower Quicksort.c 423.9291+-1.5040 ? 427.3347+-3.9421 ? stepanov_container.cpp 3611.3676+-28.6169 ? 3739.1442+-360.8933 ? might be 1.0354x slower Towers.c 256.7973+-1.5518 256.3450+-1.0713 <geometric> 790.0516+-1.1096 ? 795.5933+-9.1078 ? might be 1.0070x slower TipOfTree DoubleRealUse CompressionBench: huffman 363.4777+-24.9324 ? 379.6798+-2.9143 ? might be 1.0446x slower arithmetic-simple 369.3888+-3.2803 368.1330+-4.5425 arithmetic-precise 286.7947+-8.5259 286.4227+-2.4576 arithmetic-complex-precise 283.2440+-2.7682 ? 285.2054+-5.4135 ? arithmetic-precise-order-0 378.0345+-3.9396 ? 381.1244+-10.3295 ? arithmetic-precise-order-1 336.5474+-8.7359 332.4686+-4.9355 might be 1.0123x faster arithmetic-precise-order-2 365.7171+-5.2101 ? 371.1844+-3.1533 ? might be 1.0149x slower arithmetic-simple-order-1 428.9500+-3.8664 ? 441.7043+-22.2044 ? might be 1.0297x slower arithmetic-simple-order-2 471.4394+-3.9041 ? 477.3422+-6.6362 ? might be 1.0125x slower lz-string 316.3170+-6.3424 ? 323.5696+-7.3347 ? might be 1.0229x slower <geometric> 355.6574+-2.6702 ? 360.0178+-2.9351 ? might be 1.0123x slower TipOfTree DoubleRealUse Geomean of preferred means: <scaled-result> 62.0666+-0.1679 ? 62.4051+-0.1801 ? might be 1.0055x slower
Attachment 254406 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:297: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1430: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1519: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 3 in 4 files If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 254406 [details] better View in context: https://bugs.webkit.org/attachment.cgi?id=254406&action=review r=me Let's hold off on landing this for a bit. Please check the EFL build. > Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:289 > + void tryToSinkRealNumberCheck() Perhaps it would be better to call this "tryToHoistRealNumberCheck" (and "arithmeticWithHoistedRealNumberCheck"), or "tryToCombineRealNumberChecks". In a way, we are sinking real number checks because we are moving them after the arithmetic. But in a way we are hoisting them, because we are doing them two-for-one through the arithmetic at the head of a chain of nodes. Since it is usually illegal to sink checks, but legal to hoist checks, it might be clearer to call this hoisting. > Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:320 > + // Then we might eliminate the IsNumber because the DoubleRep's type checks: because of > Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:329 > + // And then we might try to eliminat the DoubleRep's entirely: eliminate
(In reply to comment #9) > Comment on attachment 254406 [details] > better > > View in context: > https://bugs.webkit.org/attachment.cgi?id=254406&action=review > > r=me > > Let's hold off on landing this for a bit. > > Please check the EFL build. > > > Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:289 > > + void tryToSinkRealNumberCheck() > > Perhaps it would be better to call this "tryToHoistRealNumberCheck" (and > "arithmeticWithHoistedRealNumberCheck"), or "tryToCombineRealNumberChecks". > In a way, we are sinking real number checks because we are moving them after > the arithmetic. But in a way we are hoisting them, because we are doing them > two-for-one through the arithmetic at the head of a chain of nodes. Since it > is usually illegal to sink checks, but legal to hoist checks, it might be > clearer to call this hoisting. Agree. I think that method name is a holdover from when I was trying to do this using sinking rather than hoisting. I think I need to rename the bug as well. > > > Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:320 > > + // Then we might eliminate the IsNumber because the DoubleRep's type checks: > > because of > > > Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:329 > > + // And then we might try to eliminat the DoubleRep's entirely: > > eliminate
Created attachment 255861 [details] patch for landing
Attachment 255861 [details] did not pass style-queue: ERROR: Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:297: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1430: Place brace on its own line for function definitions. [whitespace/braces] [4] ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1519: Place brace on its own line for function definitions. [whitespace/braces] [4] Total errors found: 3 in 4 files If any of these errors are false positives, please file a bug against check-webkit-style.
Comment on attachment 254406 [details] better Cleared Geoffrey Garen's review+ from obsolete attachment 254406 [details] so that this bug does not appear in http://webkit.org/pending-commit.