RESOLVED FIXED144136
Better optimize 'if' with ternaries conditional tests.
https://bugs.webkit.org/show_bug.cgi?id=144136
Summary Better optimize 'if' with ternaries conditional tests.
dougc
Reported 2015-04-23 18:23:31 PDT
For asm.js code it is very important to optimize an 'if' statement with a '?' ternaries conditional. Asm.js does not support && and || and Emscripten has for some time optimized these patterns to "a?b:0" for "a&&b" and "a?1:b" for "a||b". JSC FTL does not seem to optimize 'if (a?b:0)' well and produces much faster code for 'if(a && b)' or 'if (a) if(b)' - it almost doubles the run time for the zlib benchmark. This might not be noticed in old asm.js code which did not use these patterns, but the Emscripten 'simplifyIfs' optimization has been in use for some time now. There might be some other patterns that could be optimized too. The Odin support might be a good reference, see https://bugzilla.mozilla.org/show_bug.cgi?id=919052
Attachments
Example that runs slowly and uses a ternary conditional. (540 bytes, application/javascript)
2015-04-23 19:27 PDT, dougc
no flags
Example that is competitively fast, and uses the 'if () if()' pattern. (534 bytes, application/javascript)
2015-04-23 19:38 PDT, dougc
no flags
the patch (3.87 KB, patch)
2015-05-18 20:54 PDT, Filip Pizlo
benjamin: review+
Filip Pizlo
Comment 1 2015-04-23 18:34:58 PDT
This might be a hole in LLVM's CFG transforms. It might also just be a matter of running some LLVM phase that we currently fail to run. What about the generated machine code for "if (a?b:0)" is better than the code for "if (a && b)"?
dougc
Comment 2 2015-04-23 19:27:31 PDT
Created attachment 251528 [details] Example that runs slowly and uses a ternary conditional.
dougc
Comment 3 2015-04-23 19:38:00 PDT
Created attachment 251529 [details] Example that is competitively fast, and uses the 'if () if()' pattern.
dougc
Comment 4 2015-04-23 19:45:47 PDT
(In reply to comment #1) > This might be a hole in LLVM's CFG transforms. It might also just be a > matter of running some LLVM phase that we currently fail to run. > > What about the generated machine code for "if (a?b:0)" is better than the > code for "if (a && b)"? The main loops for the two attached examples: slow: 0x7f198a000330: movzbl %bl, %eax 0x7f198a000333: movzbl (%rax,%r15), %ecx 0x7f198a000338: cmpl $1, %ecx 0x7f198a00033b: jne 0x7f198a000370 0x7f198a00033d: movzbl 1(%rax,%r15), %ecx 0x7f198a000343: cmpl $2, %ecx 0x7f198a000346: jne 0x7f198a000370 0x7f198a000348: movzbl 2(%rax,%r15), %ecx 0x7f198a00034e: cmpl $3, %ecx 0x7f198a000351: jne 0x7f198a000370 0x7f198a000353: movzbl 3(%rax,%r15), %eax 0x7f198a000359: cmpl $4, %eax 0x7f198a00035c: sete %al 0x7f198a00035f: movzbl %al, %eax 0x7f198a000362: jmp 0x7f198a000390 0x7f198a000364: nopw %cs:(%rax,%rax) 0x7f198a000370: movl $2147483648, 36(%rbp) 0x7f198a000377: leaq 131779232(%r15), %rax 0x7f198a00037e: movq %rbp, %rdi 0x7f198a000381: movq %r14, %rsi 0x7f198a000384: callq *%rax 0x7f198a000386: cmpq $0, -2216120(%r15) 0x7f198a00038e: jne 0x7f198a0003b6 0x7f198a000390: testq %rax, %rax 0x7f198a000393: cmovnel %r13d, %r12d 0x7f198a000397: incl %ebx 0x7f198a000399: cmpl $1000000000, %ebx 0x7f198a00039f: jl 0x7f198a000330 fast: 0x7f81720002e0: movzbl %cl, %edi 0x7f81720002e3: movzbl (%rdi,%rax), %esi 0x7f81720002e7: cmpl $1, %esi 0x7f81720002ea: jne 0x7f8172000320 0x7f81720002ec: movzbl 1(%rdi,%rax), %esi 0x7f81720002f1: cmpl $2, %esi 0x7f81720002f4: jne 0x7f8172000320 0x7f81720002f6: movzbl 2(%rdi,%rax), %esi 0x7f81720002fb: cmpl $3, %esi 0x7f81720002fe: jne 0x7f8172000320 0x7f8172000300: movzbl 3(%rdi,%rax), %esi 0x7f8172000305: movl $1, %edi 0x7f817200030a: cmpl $4, %esi 0x7f817200030d: je 0x7f8172000311 0x7f817200030f: movl %edx, %edi 0x7f8172000311: movl %edi, %edx 0x7f8172000313: nopw %cs:(%rax,%rax) 0x7f8172000320: incl %ecx 0x7f8172000322: cmpl $1000000000, %ecx 0x7f8172000328: jl 0x7f81720002e0
Filip Pizlo
Comment 5 2015-04-23 19:48:45 PDT
(In reply to comment #4) > (In reply to comment #1) > > This might be a hole in LLVM's CFG transforms. It might also just be a > > matter of running some LLVM phase that we currently fail to run. > > > > What about the generated machine code for "if (a?b:0)" is better than the > > code for "if (a && b)"? > > The main loops for the two attached examples: > > slow: > 0x7f198a000330: movzbl %bl, %eax > 0x7f198a000333: movzbl (%rax,%r15), %ecx > 0x7f198a000338: cmpl $1, %ecx > 0x7f198a00033b: jne 0x7f198a000370 > 0x7f198a00033d: movzbl 1(%rax,%r15), %ecx > 0x7f198a000343: cmpl $2, %ecx > 0x7f198a000346: jne 0x7f198a000370 > 0x7f198a000348: movzbl 2(%rax,%r15), %ecx > 0x7f198a00034e: cmpl $3, %ecx > 0x7f198a000351: jne 0x7f198a000370 > 0x7f198a000353: movzbl 3(%rax,%r15), %eax > 0x7f198a000359: cmpl $4, %eax > 0x7f198a00035c: sete %al > 0x7f198a00035f: movzbl %al, %eax Oh wow, this sequence is really dumb. > 0x7f198a000362: jmp 0x7f198a000390 > 0x7f198a000364: nopw %cs:(%rax,%rax) > 0x7f198a000370: movl $2147483648, 36(%rbp) > 0x7f198a000377: leaq 131779232(%r15), %rax > 0x7f198a00037e: movq %rbp, %rdi > 0x7f198a000381: movq %r14, %rsi > 0x7f198a000384: callq *%rax > 0x7f198a000386: cmpq $0, -2216120(%r15) > 0x7f198a00038e: jne 0x7f198a0003b6 > 0x7f198a000390: testq %rax, %rax > 0x7f198a000393: cmovnel %r13d, %r12d Yuck! > 0x7f198a000397: incl %ebx > 0x7f198a000399: cmpl $1000000000, %ebx > 0x7f198a00039f: jl 0x7f198a000330 > > fast: > 0x7f81720002e0: movzbl %cl, %edi > 0x7f81720002e3: movzbl (%rdi,%rax), %esi > 0x7f81720002e7: cmpl $1, %esi > 0x7f81720002ea: jne 0x7f8172000320 > 0x7f81720002ec: movzbl 1(%rdi,%rax), %esi > 0x7f81720002f1: cmpl $2, %esi > 0x7f81720002f4: jne 0x7f8172000320 > 0x7f81720002f6: movzbl 2(%rdi,%rax), %esi > 0x7f81720002fb: cmpl $3, %esi > 0x7f81720002fe: jne 0x7f8172000320 > 0x7f8172000300: movzbl 3(%rdi,%rax), %esi > 0x7f8172000305: movl $1, %edi > 0x7f817200030a: cmpl $4, %esi > 0x7f817200030d: je 0x7f8172000311 > 0x7f817200030f: movl %edx, %edi > 0x7f8172000311: movl %edi, %edx > 0x7f8172000313: nopw %cs:(%rax,%rax) > 0x7f8172000320: incl %ecx > 0x7f8172000322: cmpl $1000000000, %ecx > 0x7f8172000328: jl 0x7f81720002e0 Yup, LLVM bug. Maybe we can work around it - but it seems that this should be fixed in LLVM.
Radar WebKit Bug Importer
Comment 6 2015-04-23 19:49:31 PDT
Filip Pizlo
Comment 7 2015-05-18 12:52:39 PDT
Turns out that this is mostly our fault: https://bugs.webkit.org/show_bug.cgi?id=145134
Filip Pizlo
Comment 8 2015-05-18 20:49:55 PDT
Performance of another fix for this: 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 (r184521) "BoolIntSpec" at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r184539) 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 BoolIntSpec SunSpider: 3d-cube 5.2389+-0.1837 ? 5.4714+-0.4408 ? might be 1.0444x slower 3d-morph 6.1089+-0.5975 5.8389+-0.1237 might be 1.0462x faster 3d-raytrace 6.4608+-0.1467 ? 6.4680+-0.0823 ? access-binary-trees 2.4204+-0.2364 2.3655+-0.0549 might be 1.0232x faster access-fannkuch 6.1261+-0.1572 6.0500+-0.1923 might be 1.0126x faster access-nbody 3.1052+-0.4212 ? 3.2356+-0.4077 ? might be 1.0420x slower access-nsieve 3.3555+-0.5282 3.2128+-0.1790 might be 1.0444x faster bitops-3bit-bits-in-byte 1.6433+-0.1032 1.6060+-0.0977 might be 1.0232x faster bitops-bits-in-byte 3.6718+-0.1296 3.6648+-0.0868 bitops-bitwise-and 2.1230+-0.0302 ? 2.1626+-0.0855 ? might be 1.0186x slower bitops-nsieve-bits 3.1461+-0.0335 ! 3.5529+-0.3195 ! definitely 1.1293x slower controlflow-recursive 2.4514+-0.1474 ? 2.4689+-0.3936 ? crypto-aes 4.5749+-0.2214 4.5010+-0.1212 might be 1.0164x faster crypto-md5 3.0698+-0.2000 ? 3.0929+-0.2151 ? crypto-sha1 2.7375+-0.1867 ? 2.8903+-0.1615 ? might be 1.0558x slower date-format-tofte 9.2392+-0.3479 ? 9.3110+-0.2581 ? date-format-xparb 6.0932+-0.5515 5.7590+-0.1953 might be 1.0580x faster math-cordic 3.2865+-0.1542 ? 3.3146+-0.2982 ? math-partial-sums 5.8240+-0.8579 5.3164+-0.1109 might be 1.0955x faster math-spectral-norm 2.0618+-0.0981 2.0352+-0.0804 might be 1.0131x faster regexp-dna 7.9430+-1.2237 ? 8.2325+-1.6386 ? might be 1.0365x slower string-base64 5.0492+-0.9149 ? 5.4366+-1.3402 ? might be 1.0767x slower string-fasta 6.7699+-0.2967 ? 6.8664+-0.6836 ? might be 1.0143x slower string-tagcloud 9.3368+-0.3944 ? 10.0180+-0.7678 ? might be 1.0730x slower string-unpack-code 20.7299+-0.2974 ? 21.1888+-1.6278 ? might be 1.0221x slower string-validate-input 5.0249+-0.1496 ? 5.0367+-0.1830 ? <arithmetic> 5.2920+-0.0449 ? 5.3499+-0.1234 ? might be 1.0109x slower TipOfTree BoolIntSpec LongSpider: 3d-cube 883.5947+-5.5033 ? 883.8420+-3.9376 ? 3d-morph 1529.9083+-6.9475 ? 1530.6180+-7.9550 ? 3d-raytrace 703.5435+-4.0062 ? 718.2096+-12.0467 ? might be 1.0208x slower access-binary-trees 980.1003+-4.4750 974.0511+-5.6473 access-fannkuch 328.4927+-7.3536 323.1925+-9.3148 might be 1.0164x faster access-nbody 618.7614+-3.3187 ? 621.5809+-4.8341 ? access-nsieve 477.5869+-8.8358 ? 479.1353+-6.8137 ? bitops-3bit-bits-in-byte 44.9959+-1.8042 ? 45.0767+-2.7708 ? bitops-bits-in-byte 102.1683+-4.0563 ? 102.5206+-1.8904 ? bitops-nsieve-bits 419.5336+-2.1987 ? 420.0387+-2.2051 ? controlflow-recursive 492.7110+-10.8540 ? 500.3354+-9.4843 ? might be 1.0155x slower crypto-aes 702.9667+-5.8767 702.8933+-7.7401 crypto-md5 527.0466+-5.0799 ^ 515.3535+-6.0449 ^ definitely 1.0227x faster crypto-sha1 595.4303+-2.9168 ? 600.1880+-16.8019 ? date-format-tofte 730.0927+-10.3938 ? 737.5282+-13.4925 ? might be 1.0102x slower date-format-xparb 787.0503+-29.0556 ? 809.3883+-105.7527 ? might be 1.0284x slower hash-map 172.5697+-2.4911 ? 173.1048+-3.1846 ? math-cordic 589.3529+-2.5945 588.9273+-5.5894 math-partial-sums 507.9875+-7.6601 ? 508.9173+-11.4319 ? math-spectral-norm 563.3840+-0.7474 ? 563.8230+-2.0377 ? string-base64 387.0271+-6.7387 385.3475+-3.1476 string-fasta 429.4744+-5.6273 ? 437.6680+-3.3692 ? might be 1.0191x slower string-tagcloud 197.0506+-3.4544 ? 203.5125+-5.2484 ? might be 1.0328x slower <geometric> 449.6215+-1.7404 ? 451.5344+-2.2480 ? might be 1.0043x slower TipOfTree BoolIntSpec V8Spider: crypto 56.4034+-2.6669 ? 58.7864+-1.2729 ? might be 1.0422x slower deltablue 99.3724+-3.9996 ? 99.7380+-4.6827 ? earley-boyer 48.5664+-2.8933 48.2881+-3.3690 raytrace 40.5133+-2.0820 39.1307+-3.8100 might be 1.0353x faster regexp 80.3853+-2.2554 ? 80.4203+-2.0039 ? richards 81.3835+-3.3516 79.4982+-3.6194 might be 1.0237x faster splay 40.2080+-1.5275 39.7500+-1.6245 might be 1.0115x faster <geometric> 60.2719+-1.3393 59.9869+-0.9283 might be 1.0048x faster TipOfTree BoolIntSpec Octane: encrypt 0.20345+-0.00135 0.20343+-0.00132 decrypt 3.64616+-0.07087 3.60238+-0.06143 might be 1.0122x faster deltablue x2 0.20320+-0.01375 0.19714+-0.00104 might be 1.0307x faster earley 0.39634+-0.00436 0.39426+-0.00368 boyer 5.11354+-0.02240 ? 5.13278+-0.05283 ? navier-stokes x2 5.18153+-0.01647 5.17050+-0.00387 raytrace x2 1.22613+-0.04303 ? 1.24317+-0.04491 ? might be 1.0139x slower richards x2 0.12251+-0.00123 ? 0.12261+-0.00140 ? splay x2 0.40027+-0.00524 0.39816+-0.00289 regexp x2 31.93295+-0.60568 31.45226+-0.29395 might be 1.0153x faster pdfjs x2 43.07510+-0.20723 ? 43.15980+-0.19576 ? mandreel x2 50.03154+-0.55008 ? 50.03724+-0.47480 ? gbemu x2 42.50785+-2.19792 41.76754+-0.34029 might be 1.0177x faster closure 0.56058+-0.00278 ? 0.56371+-0.00216 ? jquery 7.16894+-0.05739 ? 7.18442+-0.04332 ? box2d x2 12.55960+-0.12397 ? 12.57111+-0.03810 ? zlib x2 394.39602+-12.00826 394.09907+-13.08779 typescript x2 819.27913+-9.94474 ? 823.55827+-14.91660 ? <geometric> 6.57145+-0.03539 6.55006+-0.01623 might be 1.0033x faster TipOfTree BoolIntSpec Kraken: ai-astar 236.109+-1.924 ? 236.130+-2.325 ? audio-beat-detection 107.134+-0.799 107.005+-0.834 audio-dft 120.062+-3.229 119.067+-1.965 audio-fft 85.910+-4.693 ? 87.190+-5.488 ? might be 1.0149x slower audio-oscillator 79.804+-3.763 79.208+-1.676 imaging-darkroom 104.476+-1.941 ? 104.781+-1.828 ? imaging-desaturate 63.075+-0.403 ? 63.515+-1.879 ? imaging-gaussian-blur 110.677+-1.972 ? 111.444+-1.560 ? json-parse-financial 47.427+-2.490 46.176+-1.639 might be 1.0271x faster json-stringify-tinderbox 28.854+-1.825 28.562+-0.335 might be 1.0102x faster stanford-crypto-aes 58.549+-1.064 58.447+-0.785 stanford-crypto-ccm 52.039+-2.203 51.444+-1.232 might be 1.0116x faster stanford-crypto-pbkdf2 119.749+-1.663 118.374+-1.937 might be 1.0116x faster stanford-crypto-sha256-iterative 46.680+-1.613 46.364+-1.730 <arithmetic> 90.039+-1.055 89.836+-0.552 might be 1.0023x faster TipOfTree BoolIntSpec JSRegress: abs-boolean 2.7876+-0.1095 2.6582+-0.0569 might be 1.0487x faster adapt-to-double-divide 17.0508+-0.4777 17.0024+-0.6398 aliased-arguments-getbyval 1.2920+-0.0642 ? 1.3153+-0.1568 ? might be 1.0180x slower allocate-big-object 2.9588+-0.1256 2.8011+-0.0671 might be 1.0563x faster arguments-named-and-reflective 12.8151+-1.1229 ? 13.5955+-1.7606 ? might be 1.0609x slower arguments-out-of-bounds 14.7999+-0.3137 ? 15.0169+-0.7465 ? might be 1.0147x slower arguments-strict-mode 12.0669+-0.9256 ? 12.1999+-0.9937 ? might be 1.0110x slower arguments 11.4152+-1.0349 ^ 10.0626+-0.2482 ^ definitely 1.1344x faster arity-mismatch-inlining 0.8837+-0.0350 ? 0.8995+-0.0370 ? might be 1.0178x slower array-access-polymorphic-structure 6.7325+-0.1265 ? 6.8432+-0.0979 ? might be 1.0164x slower array-nonarray-polymorhpic-access 33.6294+-0.4739 33.1976+-1.0304 might be 1.0130x faster array-prototype-every 86.9688+-3.6473 85.1381+-3.5237 might be 1.0215x faster array-prototype-forEach 86.5005+-1.6587 85.5065+-1.9673 might be 1.0116x faster array-prototype-map 94.6635+-1.4463 92.8283+-1.0418 might be 1.0198x faster array-prototype-some 85.9272+-1.8799 ? 86.6708+-2.2367 ? array-splice-contiguous 42.2173+-2.0758 ? 42.5205+-2.1159 ? array-with-double-add 4.3494+-0.4613 4.1258+-0.0440 might be 1.0542x faster array-with-double-increment 3.3719+-0.2626 3.2966+-0.1435 might be 1.0228x faster array-with-double-mul-add 5.0247+-0.1638 ? 5.0722+-0.1838 ? array-with-double-sum 3.6372+-0.6372 3.3966+-0.2516 might be 1.0708x faster array-with-int32-add-sub 6.8291+-0.1203 6.8104+-0.1976 array-with-int32-or-double-sum 3.3716+-0.0384 ? 3.5343+-0.4177 ? might be 1.0483x slower ArrayBuffer-DataView-alloc-large-long-lived 33.3518+-2.1840 ? 33.7090+-1.6918 ? might be 1.0107x slower ArrayBuffer-DataView-alloc-long-lived 14.4155+-1.7674 14.1609+-1.4233 might be 1.0180x faster ArrayBuffer-Int32Array-byteOffset 4.0227+-0.4023 3.8875+-0.0904 might be 1.0348x faster ArrayBuffer-Int8Array-alloc-large-long-lived 32.7657+-1.3753 ? 32.7778+-2.0520 ? ArrayBuffer-Int8Array-alloc-long-lived-buffer 25.3801+-5.4121 22.6709+-1.5029 might be 1.1195x faster ArrayBuffer-Int8Array-alloc-long-lived 12.9069+-1.7797 ? 13.1502+-1.1916 ? might be 1.0188x slower ArrayBuffer-Int8Array-alloc 11.8150+-1.1535 10.8099+-1.6191 might be 1.0930x faster asmjs_bool_bug 7.4146+-0.0716 ? 7.6236+-0.2003 ? might be 1.0282x slower assign-custom-setter-polymorphic 3.2024+-0.0832 3.0990+-0.2226 might be 1.0334x faster assign-custom-setter 4.7976+-0.8710 ? 4.8410+-1.2685 ? basic-set 8.7978+-0.3603 8.7199+-0.3174 big-int-mul 4.0615+-0.0889 4.0608+-0.1740 boolean-test 3.1831+-0.1961 3.0720+-0.0444 might be 1.0362x faster branch-fold 3.9354+-0.3089 3.7299+-0.0312 might be 1.0551x faster branch-on-string-as-boolean 19.8607+-1.7960 ? 20.1292+-2.0308 ? might be 1.0135x slower by-val-generic 8.1512+-0.3091 ? 8.2402+-0.6740 ? might be 1.0109x slower call-spread-apply 29.8175+-1.5875 ? 30.2605+-1.4559 ? might be 1.0149x slower call-spread-call 25.4423+-0.8063 ? 26.2179+-2.1484 ? might be 1.0305x slower captured-assignments 0.4462+-0.0155 ? 0.4802+-0.0658 ? might be 1.0762x slower cast-int-to-double 5.3702+-0.1057 5.3575+-0.1363 cell-argument 8.5872+-0.3045 ? 8.7815+-0.4985 ? might be 1.0226x slower cfg-simplify 2.9542+-0.3540 2.8847+-0.1887 might be 1.0241x faster chain-getter-access 9.2509+-0.2778 9.0641+-0.1320 might be 1.0206x faster cmpeq-obj-to-obj-other 11.7700+-1.0341 11.6906+-1.2045 constant-test 6.4427+-3.5193 5.5383+-1.1352 might be 1.1633x faster create-lots-of-functions 11.7802+-0.3586 ? 11.9544+-0.6526 ? might be 1.0148x slower DataView-custom-properties 39.4586+-1.8419 38.2196+-2.4078 might be 1.0324x faster deconstructing-parameters-overridden-by-function 0.5643+-0.0521 ? 0.5675+-0.0845 ? delay-tear-off-arguments-strictmode 14.2187+-0.3344 14.1513+-0.1535 deltablue-varargs 207.8375+-3.7186 ? 208.6033+-2.5913 ? destructuring-arguments 18.3710+-0.7196 18.1116+-0.9785 might be 1.0143x faster destructuring-swap 5.0979+-0.0663 5.0820+-0.0296 direct-arguments-getbyval 1.3804+-0.1154 1.3057+-0.1677 might be 1.0572x faster div-boolean-double 5.2711+-0.0972 ? 5.3543+-0.3211 ? might be 1.0158x slower div-boolean 8.0501+-0.2700 8.0264+-0.2988 double-get-by-val-out-of-bounds 4.5644+-0.0553 4.5568+-0.0330 double-pollution-getbyval 8.9207+-0.1507 8.8775+-0.0849 double-pollution-putbyoffset 4.3520+-0.1769 4.3083+-0.0881 might be 1.0101x faster double-to-int32-typed-array-no-inline 2.3315+-0.2372 2.3237+-0.1102 double-to-int32-typed-array 2.0718+-0.1737 1.9883+-0.0590 might be 1.0420x faster double-to-uint32-typed-array-no-inline 2.3577+-0.1151 ? 2.3901+-0.1300 ? might be 1.0137x slower double-to-uint32-typed-array 2.1206+-0.0967 2.0389+-0.0304 might be 1.0401x faster elidable-new-object-dag 42.8444+-0.8864 ? 43.8203+-1.8462 ? might be 1.0228x slower elidable-new-object-roflcopter 44.3840+-1.3553 ? 44.9463+-1.5655 ? might be 1.0127x slower elidable-new-object-then-call 39.6901+-1.5846 ? 40.6565+-2.0080 ? might be 1.0243x slower elidable-new-object-tree 47.1600+-1.5905 46.0621+-1.5137 might be 1.0238x faster empty-string-plus-int 5.5578+-0.1328 5.5405+-0.1990 emscripten-cube2hash 39.6191+-2.0787 38.8406+-1.9143 might be 1.0200x faster exit-length-on-plain-object 14.9132+-1.7094 14.2535+-0.7104 might be 1.0463x faster external-arguments-getbyval 1.3233+-0.0797 ? 1.3324+-0.1533 ? external-arguments-putbyval 2.3551+-0.1244 2.3379+-0.1054 fixed-typed-array-storage-var-index 1.3549+-0.1911 1.2085+-0.0149 might be 1.1212x faster fixed-typed-array-storage 0.9291+-0.0479 0.9165+-0.0526 might be 1.0137x faster Float32Array-matrix-mult 4.4347+-0.1411 4.3993+-0.1208 Float32Array-to-Float64Array-set 56.4130+-0.9987 ? 57.1275+-3.3881 ? might be 1.0127x slower Float64Array-alloc-long-lived 68.9781+-1.9496 ? 70.1473+-1.7697 ? might be 1.0169x slower Float64Array-to-Int16Array-set 68.3184+-1.6165 ? 78.3512+-17.3110 ? might be 1.1469x slower fold-double-to-int 13.4108+-0.1365 ? 13.4238+-0.2378 ? fold-get-by-id-to-multi-get-by-offset-rare-int 10.1661+-1.3088 ? 10.4575+-0.9022 ? might be 1.0287x slower fold-get-by-id-to-multi-get-by-offset 10.4685+-0.8943 10.3062+-1.0336 might be 1.0157x faster fold-multi-get-by-offset-to-get-by-offset 8.3158+-1.9556 ? 9.8357+-0.4448 ? might be 1.1828x slower fold-multi-get-by-offset-to-poly-get-by-offset 9.0590+-0.8478 ? 9.4589+-0.7259 ? might be 1.0441x slower fold-multi-put-by-offset-to-poly-put-by-offset 8.6405+-1.4533 ? 10.3107+-1.2717 ? might be 1.1933x slower fold-multi-put-by-offset-to-put-by-offset 7.5813+-1.0112 ^ 5.4721+-0.9486 ^ definitely 1.3854x faster fold-multi-put-by-offset-to-replace-or-transition-put-by-offset 9.5784+-0.3870 ? 9.7420+-0.5651 ? might be 1.0171x slower fold-put-by-id-to-multi-put-by-offset 9.6446+-0.9406 ? 9.6468+-1.0236 ? fold-put-structure 6.7475+-2.0446 6.1100+-1.6521 might be 1.1043x faster for-of-iterate-array-entries 4.8383+-0.2317 4.8076+-0.2112 for-of-iterate-array-keys 3.7615+-0.0722 ? 4.1282+-0.5264 ? might be 1.0975x slower for-of-iterate-array-values 3.9668+-0.6324 3.7116+-0.0720 might be 1.0687x faster fround 21.5970+-0.8822 21.1696+-0.5277 might be 1.0202x faster ftl-library-inlining-dataview 66.5999+-2.9727 ? 67.4645+-2.3878 ? might be 1.0130x slower ftl-library-inlining 76.1938+-11.4468 73.6352+-1.1151 might be 1.0347x faster function-dot-apply 2.3622+-0.3353 2.3616+-0.3389 function-test 2.9547+-0.2895 2.8341+-0.0457 might be 1.0425x faster function-with-eval 105.1833+-0.9889 ? 107.2544+-3.3575 ? might be 1.0197x slower gcse-poly-get-less-obvious 22.5491+-6.0591 18.4538+-0.9111 might be 1.2219x faster gcse-poly-get 19.2860+-1.6018 ? 20.6937+-1.7782 ? might be 1.0730x slower gcse 4.4617+-0.1969 4.4070+-0.1313 might be 1.0124x faster get-by-id-bimorphic-check-structure-elimination-simple 2.7232+-0.0386 ? 2.7517+-0.1228 ? might be 1.0104x slower get-by-id-bimorphic-check-structure-elimination 6.1618+-0.2037 ? 6.1810+-0.2001 ? get-by-id-chain-from-try-block 7.1556+-1.3695 6.9358+-0.7624 might be 1.0317x faster get-by-id-check-structure-elimination 5.2763+-0.2456 5.1473+-0.0871 might be 1.0251x faster get-by-id-proto-or-self 19.7133+-2.2340 19.4064+-2.1896 might be 1.0158x faster get-by-id-quadmorphic-check-structure-elimination-simple 3.2419+-0.2464 ? 3.3253+-0.4265 ? might be 1.0257x slower get-by-id-self-or-proto 19.2970+-1.8530 ? 20.3520+-2.1409 ? might be 1.0547x slower get-by-val-out-of-bounds 4.4800+-0.0467 4.4589+-0.0707 get_callee_monomorphic 2.9921+-0.1878 ? 3.0672+-0.1739 ? might be 1.0251x slower get_callee_polymorphic 3.7630+-0.1790 3.7305+-0.0810 getter-no-activation 5.2118+-0.3658 ? 5.3197+-0.2840 ? might be 1.0207x slower getter-richards 126.9248+-5.3858 ? 128.9834+-6.2150 ? might be 1.0162x slower getter 6.5136+-0.8979 5.7159+-0.5685 might be 1.1396x faster global-var-const-infer-fire-from-opt 1.0461+-0.1054 1.0177+-0.1723 might be 1.0279x faster global-var-const-infer 0.8201+-0.0978 ? 0.8555+-0.0854 ? might be 1.0431x slower HashMap-put-get-iterate-keys 29.4547+-1.3738 ? 29.7352+-3.5141 ? HashMap-put-get-iterate 32.1803+-2.9866 31.6245+-1.9308 might be 1.0176x faster HashMap-string-put-get-iterate 29.6097+-0.3204 29.4003+-1.0689 hoist-make-rope 11.8430+-0.9314 ? 12.5135+-0.7011 ? might be 1.0566x slower hoist-poly-check-structure-effectful-loop 5.0785+-0.0590 ? 5.0822+-0.1455 ? hoist-poly-check-structure 3.6520+-0.0796 3.6073+-0.0280 might be 1.0124x faster imul-double-only 8.8980+-0.7000 8.4281+-0.8058 might be 1.0558x faster imul-int-only 10.2179+-0.7585 ? 10.4200+-0.7335 ? might be 1.0198x slower imul-mixed 8.6082+-0.4221 8.5607+-0.3138 in-four-cases 22.2710+-0.5014 22.2229+-0.2339 in-one-case-false 10.9570+-0.0511 ? 11.4015+-0.5308 ? might be 1.0406x slower in-one-case-true 11.1535+-0.3007 ? 11.2522+-0.5362 ? in-two-cases 11.6785+-0.3031 ? 11.8383+-0.2471 ? might be 1.0137x slower indexed-properties-in-objects 3.0552+-0.3069 ? 3.0815+-0.0278 ? infer-closure-const-then-mov-no-inline 4.2360+-0.3536 3.9681+-0.0862 might be 1.0675x faster infer-closure-const-then-mov 19.9919+-0.7330 ? 20.7971+-1.4066 ? might be 1.0403x slower infer-closure-const-then-put-to-scope-no-inline 12.3442+-0.1727 ? 13.0891+-1.4925 ? might be 1.0603x slower infer-closure-const-then-put-to-scope 22.6654+-2.3580 22.4598+-1.1745 infer-closure-const-then-reenter-no-inline 58.9261+-1.4902 57.5700+-1.9696 might be 1.0236x faster infer-closure-const-then-reenter 23.1859+-1.3484 23.1510+-1.8400 infer-constant-global-property 3.7780+-0.3507 3.6141+-0.1140 might be 1.0454x faster infer-constant-property 2.9899+-0.3915 2.8088+-0.1028 might be 1.0645x faster infer-one-time-closure-ten-vars 12.9147+-0.7582 12.5012+-0.2714 might be 1.0331x faster infer-one-time-closure-two-vars 13.5275+-1.8255 12.7792+-1.3311 might be 1.0586x faster infer-one-time-closure 12.2910+-0.6797 ? 12.5482+-0.9910 ? might be 1.0209x slower infer-one-time-deep-closure 21.9307+-1.0313 ? 21.9316+-1.3862 ? inline-arguments-access 4.6687+-0.2824 4.6257+-0.1308 inline-arguments-aliased-access 4.7666+-0.4336 4.5424+-0.0528 might be 1.0494x faster inline-arguments-local-escape 4.6078+-0.1855 ? 4.6125+-0.1093 ? inline-get-scoped-var 4.8765+-0.2785 ? 4.8868+-0.2380 ? inlined-put-by-id-transition 11.5470+-0.5261 ? 11.5848+-0.6092 ? int-or-other-abs-then-get-by-val 4.9615+-0.0531 ? 4.9712+-0.0538 ? int-or-other-abs-zero-then-get-by-val 17.8529+-1.0524 17.1907+-0.3233 might be 1.0385x faster int-or-other-add-then-get-by-val 4.3420+-0.1336 ? 4.3601+-0.0842 ? int-or-other-add 5.3255+-0.0315 ? 5.4937+-0.4536 ? might be 1.0316x slower int-or-other-div-then-get-by-val 4.3905+-0.1814 4.2480+-0.0821 might be 1.0335x faster int-or-other-max-then-get-by-val 4.3684+-0.1474 4.2997+-0.0482 might be 1.0160x faster int-or-other-min-then-get-by-val 4.4159+-0.0348 ? 4.4312+-0.0992 ? int-or-other-mod-then-get-by-val 4.0060+-0.0439 3.9718+-0.0265 int-or-other-mul-then-get-by-val 3.8515+-0.1598 ? 3.8742+-0.1519 ? int-or-other-neg-then-get-by-val 4.8349+-0.0711 4.7486+-0.0334 might be 1.0182x faster int-or-other-neg-zero-then-get-by-val 17.5333+-0.8856 ? 17.6997+-1.4065 ? int-or-other-sub-then-get-by-val 4.5221+-0.3799 4.4109+-0.0581 might be 1.0252x faster int-or-other-sub 3.5673+-0.0859 3.4803+-0.0355 might be 1.0250x faster int-overflow-local 4.3978+-0.1093 ? 4.5046+-0.0993 ? might be 1.0243x slower Int16Array-alloc-long-lived 49.8057+-1.3203 49.0448+-1.5725 might be 1.0155x faster Int16Array-bubble-sort-with-byteLength 19.0960+-0.1556 ? 19.4186+-0.5034 ? might be 1.0169x slower Int16Array-bubble-sort 21.4048+-4.4046 19.2582+-0.2018 might be 1.1115x faster Int16Array-load-int-mul 1.5057+-0.0292 ? 1.5835+-0.1835 ? might be 1.0517x slower Int16Array-to-Int32Array-set 57.1849+-2.0664 56.9428+-1.6661 Int32Array-alloc-large 23.5930+-0.9332 23.5802+-0.8702 Int32Array-alloc-long-lived 54.8090+-0.9453 54.5370+-1.4311 Int32Array-alloc 3.9292+-0.5265 ^ 3.2838+-0.0495 ^ definitely 1.1966x faster Int32Array-Int8Array-view-alloc 6.7542+-0.1615 ? 6.7841+-0.7158 ? int52-spill 5.8386+-0.0896 ? 5.9643+-0.2969 ? might be 1.0215x slower Int8Array-alloc-long-lived 44.9080+-1.8141 ? 45.0549+-1.5190 ? Int8Array-load-with-byteLength 3.4667+-0.2904 ? 3.6309+-0.4624 ? might be 1.0474x slower Int8Array-load 3.3967+-0.1584 3.3906+-0.1529 integer-divide 11.7502+-1.1153 11.1285+-0.1008 might be 1.0559x faster integer-modulo 2.0202+-0.0636 ? 2.0301+-0.0747 ? is-boolean-fold-tricky 4.6337+-0.5016 ? 4.7238+-0.4156 ? might be 1.0194x slower is-boolean-fold 2.9218+-0.1055 2.9025+-0.1466 is-function-fold-tricky-internal-function 11.9963+-0.1001 ? 12.0938+-0.0521 ? is-function-fold-tricky 4.8967+-0.5984 4.7004+-0.1790 might be 1.0418x faster is-function-fold 2.9232+-0.0733 ? 3.2025+-0.4091 ? might be 1.0955x slower is-number-fold-tricky 4.6647+-0.5304 4.5938+-0.1014 might be 1.0154x faster is-number-fold 2.8571+-0.0727 ? 2.8593+-0.0452 ? is-object-or-null-fold-functions 2.9311+-0.0414 ? 2.9412+-0.0314 ? is-object-or-null-fold-less-tricky 4.6556+-0.1482 4.5815+-0.1191 might be 1.0162x faster is-object-or-null-fold-tricky 6.6933+-0.1341 6.6145+-0.0278 might be 1.0119x faster is-object-or-null-fold 2.9135+-0.0453 2.8599+-0.0454 might be 1.0187x faster is-object-or-null-trickier-function 4.7960+-0.3688 ? 5.0766+-0.6625 ? might be 1.0585x slower is-object-or-null-trickier-internal-function 12.5820+-0.1179 12.5467+-0.0879 is-object-or-null-tricky-function 4.7471+-0.1637 ? 4.7977+-0.3441 ? might be 1.0107x slower is-object-or-null-tricky-internal-function 9.4057+-0.0869 9.2839+-0.1439 might be 1.0131x faster is-string-fold-tricky 4.5693+-0.1238 4.5100+-0.1053 might be 1.0132x faster is-string-fold 3.0158+-0.3348 2.8953+-0.0982 might be 1.0416x faster is-undefined-fold-tricky 3.8291+-0.1197 ? 3.8409+-0.1537 ? is-undefined-fold 2.8706+-0.1100 ? 3.1695+-0.4491 ? might be 1.1041x slower large-int-captured 4.8625+-0.1398 4.7650+-0.0433 might be 1.0205x faster large-int-neg 16.5145+-0.8608 ? 16.5338+-0.7745 ? large-int 15.6056+-1.4235 15.4023+-1.4030 might be 1.0132x faster load-varargs-elimination 23.3463+-0.4731 ? 23.4840+-1.2490 ? logical-not 4.6615+-0.0411 ? 4.6995+-0.1464 ? lots-of-fields 12.9591+-1.1744 12.7508+-0.4297 might be 1.0163x faster make-indexed-storage 3.1215+-0.0906 ? 3.1677+-0.0642 ? might be 1.0148x slower make-rope-cse 5.0326+-0.5103 ? 5.1532+-0.5076 ? might be 1.0240x slower marsaglia-larger-ints 35.9801+-0.3718 ? 37.0983+-1.1144 ? might be 1.0311x slower marsaglia-osr-entry 23.1549+-0.1910 ! 25.4305+-1.8859 ! definitely 1.0983x slower max-boolean 2.5227+-0.0519 ? 2.6249+-0.3019 ? might be 1.0405x slower method-on-number 19.2884+-0.1897 ^ 18.4680+-0.2528 ^ definitely 1.0444x faster min-boolean 2.7411+-0.3757 2.6244+-0.1746 might be 1.0445x faster minus-boolean-double 3.1707+-0.0766 ? 3.2215+-0.0848 ? might be 1.0160x slower minus-boolean 2.3607+-0.0576 ? 2.6119+-0.3761 ? might be 1.1064x slower misc-strict-eq 41.4100+-3.3380 39.0376+-1.1264 might be 1.0608x faster mod-boolean-double 11.2101+-0.5737 11.1420+-0.3309 mod-boolean 7.8695+-0.1056 ? 7.9270+-0.1083 ? mul-boolean-double 3.8487+-0.1868 3.7403+-0.0977 might be 1.0290x faster mul-boolean 2.9295+-0.0639 2.9149+-0.0720 neg-boolean 3.3199+-0.3758 3.2278+-0.1469 might be 1.0285x faster negative-zero-divide 0.4029+-0.0454 0.3993+-0.0565 negative-zero-modulo 0.3807+-0.0422 ? 0.4100+-0.0644 ? might be 1.0771x slower negative-zero-negate 0.3441+-0.0389 0.3420+-0.0071 nested-function-parsing 38.0290+-0.2629 ? 38.5387+-0.8917 ? might be 1.0134x slower new-array-buffer-dead 112.0516+-2.4791 ? 114.1524+-1.5948 ? might be 1.0187x slower new-array-buffer-push 7.5903+-0.9575 7.2343+-0.6949 might be 1.0492x faster new-array-dead 19.6376+-0.5973 ? 19.9492+-1.2312 ? might be 1.0159x slower new-array-push 3.9206+-0.1279 3.8662+-0.0982 might be 1.0141x faster no-inline-constructor 40.5932+-1.4216 ? 41.9371+-1.4483 ? might be 1.0331x slower number-test 3.2506+-0.2914 3.1207+-0.1452 might be 1.0416x faster object-closure-call 5.5908+-0.0322 ? 5.6006+-0.0326 ? object-test 2.8241+-0.0593 ? 2.9038+-0.0410 ? might be 1.0282x slower obvious-sink-pathology-taken 140.8939+-1.3734 ? 141.4497+-2.2341 ? obvious-sink-pathology 132.4401+-1.1983 131.4785+-1.2166 obviously-elidable-new-object 36.4556+-1.1604 35.5431+-0.5284 might be 1.0257x faster plus-boolean-arith 2.7516+-0.3336 2.5900+-0.1431 might be 1.0624x faster plus-boolean-double 3.2360+-0.0647 ? 3.3090+-0.2228 ? might be 1.0225x slower plus-boolean 2.4088+-0.0507 2.4058+-0.0320 poly-chain-access-different-prototypes-simple 3.2878+-0.0421 ? 3.3438+-0.1504 ? might be 1.0170x slower poly-chain-access-different-prototypes 2.5741+-0.0116 ? 2.6533+-0.2243 ? might be 1.0308x slower poly-chain-access-simpler 3.4762+-0.4406 3.3099+-0.0560 might be 1.0502x faster poly-chain-access 2.6337+-0.0714 ? 2.6528+-0.1048 ? poly-stricteq 59.0583+-0.8188 58.8917+-1.1588 polymorphic-array-call 1.3647+-0.0709 ? 1.4200+-0.1364 ? might be 1.0405x slower polymorphic-get-by-id 3.2699+-0.3851 3.1265+-0.0685 might be 1.0459x faster polymorphic-put-by-id 33.9565+-2.5871 32.6481+-2.8903 might be 1.0401x faster polymorphic-structure 14.8558+-0.2354 ? 14.9513+-0.2996 ? polyvariant-monomorphic-get-by-id 8.7703+-0.2664 8.6108+-0.1105 might be 1.0185x faster proto-getter-access 9.1464+-0.1391 8.9803+-0.0744 might be 1.0185x faster put-by-id-replace-and-transition 9.4722+-0.2475 9.2120+-0.0578 might be 1.0282x faster put-by-id-slightly-polymorphic 3.0584+-0.3106 2.8863+-0.1215 might be 1.0596x faster put-by-id 13.4920+-0.6078 12.7779+-0.1719 might be 1.0559x faster put-by-val-direct 0.3511+-0.0127 ? 0.3716+-0.0246 ? might be 1.0583x slower put-by-val-large-index-blank-indexing-type 6.2827+-0.6552 ? 6.6811+-0.7926 ? might be 1.0634x slower put-by-val-machine-int 2.6987+-0.0414 ? 2.7969+-0.1617 ? might be 1.0364x slower rare-osr-exit-on-local 15.3201+-0.8732 ? 15.4776+-0.7474 ? might be 1.0103x slower register-pressure-from-osr 21.7500+-0.8922 21.1917+-0.1391 might be 1.0263x faster setter 6.3315+-0.6583 6.2283+-0.9669 might be 1.0166x faster simple-activation-demo 25.3090+-0.4951 ? 26.4168+-2.0386 ? might be 1.0438x slower simple-getter-access 11.8829+-0.2360 ? 11.8853+-0.2398 ? simple-poly-call-nested 8.6085+-0.6958 8.0682+-0.3671 might be 1.0670x faster simple-poly-call 1.3660+-0.1643 1.3005+-0.0359 might be 1.0503x faster sin-boolean 23.1607+-1.1734 ? 23.5621+-1.6156 ? might be 1.0173x slower singleton-scope 62.8617+-1.5969 62.6801+-1.4811 sink-function 12.4758+-0.4987 12.2645+-0.2468 might be 1.0172x faster sink-huge-activation 20.1477+-1.2372 19.5266+-0.5383 might be 1.0318x faster sinkable-new-object-dag 71.1024+-2.8376 70.5653+-1.3873 sinkable-new-object-taken 53.9981+-3.2548 51.9679+-2.3984 might be 1.0391x faster sinkable-new-object 39.4790+-1.3053 39.3226+-1.6785 slow-array-profile-convergence 2.8420+-0.1385 ? 3.0634+-0.3533 ? might be 1.0779x slower slow-convergence 2.8562+-0.3060 2.7302+-0.0721 might be 1.0462x faster slow-ternaries 30.3178+-2.0924 ^ 22.1676+-2.0780 ^ definitely 1.3677x faster sorting-benchmark 19.7873+-0.2025 ? 19.8093+-0.7345 ? sparse-conditional 1.1529+-0.0173 ? 1.1819+-0.0775 ? might be 1.0252x slower splice-to-remove 16.3774+-0.3046 ? 17.0612+-2.2446 ? might be 1.0417x slower string-char-code-at 16.2199+-1.0031 15.7826+-0.2937 might be 1.0277x faster string-concat-object 2.6276+-0.1801 ? 2.8027+-0.3503 ? might be 1.0666x slower string-concat-pair-object 2.5916+-0.0731 2.5529+-0.1098 might be 1.0151x faster string-concat-pair-simple 13.1425+-2.2900 12.6032+-1.3271 might be 1.0428x faster string-concat-simple 12.6005+-1.2266 11.9412+-0.3155 might be 1.0552x faster string-cons-repeat 8.5621+-0.7527 8.3472+-0.5384 might be 1.0257x faster string-cons-tower 9.2365+-1.0501 8.5847+-0.8811 might be 1.0759x faster string-equality 19.1684+-0.8837 18.9944+-0.5745 string-get-by-val-big-char 7.4342+-0.3294 7.2940+-0.1639 might be 1.0192x faster string-get-by-val-out-of-bounds-insane 3.6704+-0.2974 ? 3.7952+-0.5329 ? might be 1.0340x slower string-get-by-val-out-of-bounds 5.5275+-0.5525 5.3207+-0.3660 might be 1.0389x faster string-get-by-val 3.3523+-0.2356 3.2826+-0.0865 might be 1.0212x faster string-hash 2.0700+-0.0801 2.0391+-0.0237 might be 1.0152x faster string-long-ident-equality 15.7182+-0.3176 15.5611+-0.2521 might be 1.0101x faster string-out-of-bounds 14.8100+-0.2329 ? 15.3347+-1.1013 ? might be 1.0354x slower string-repeat-arith 33.5410+-2.0538 33.2472+-2.1685 string-sub 65.7166+-3.1251 ? 67.8753+-2.1249 ? might be 1.0328x slower string-test 2.8993+-0.0745 ? 2.9834+-0.1037 ? might be 1.0290x slower string-var-equality 33.0846+-1.1051 ? 34.1538+-3.0902 ? might be 1.0323x slower structure-hoist-over-transitions 2.7764+-0.1215 ? 2.8218+-0.1481 ? might be 1.0164x slower substring-concat-weird 40.1305+-0.7817 ? 41.0621+-1.9227 ? might be 1.0232x slower substring-concat 44.1703+-1.8740 43.6440+-1.3957 might be 1.0121x faster substring 46.4255+-1.3795 ? 47.0370+-2.4405 ? might be 1.0132x slower switch-char-constant 2.7636+-0.0454 ? 2.7681+-0.0373 ? switch-char 7.7638+-1.4230 7.0290+-0.8818 might be 1.1045x faster switch-constant 8.8902+-0.6080 8.6934+-0.3028 might be 1.0226x faster switch-string-basic-big-var 19.2320+-0.9851 18.5036+-0.1999 might be 1.0394x faster switch-string-basic-big 14.8532+-0.2796 14.8392+-0.4469 switch-string-basic-var 15.3112+-0.2984 15.0876+-0.1583 might be 1.0148x faster switch-string-basic 13.3564+-0.2939 ? 13.3767+-0.1710 ? switch-string-big-length-tower-var 20.6409+-0.6812 20.1085+-0.2742 might be 1.0265x faster switch-string-length-tower-var 15.5468+-0.1961 ? 15.9150+-1.3430 ? might be 1.0237x slower switch-string-length-tower 12.8900+-0.2970 ? 13.3346+-1.0443 ? might be 1.0345x slower switch-string-short 13.2427+-0.7544 12.9244+-0.1071 might be 1.0246x faster switch 12.7831+-0.2152 12.7216+-0.1322 tear-off-arguments-simple 3.7890+-0.7528 3.5595+-0.0352 might be 1.0645x faster tear-off-arguments 4.8413+-0.1424 4.7991+-0.0465 temporal-structure 12.2369+-0.1091 ? 12.2453+-0.3428 ? to-int32-boolean 13.8418+-0.1759 ? 14.0828+-1.0741 ? might be 1.0174x slower try-catch-get-by-val-cloned-arguments 15.1797+-1.9949 ? 15.2635+-1.4365 ? try-catch-get-by-val-direct-arguments 6.5568+-0.0999 ? 6.6866+-0.2362 ? might be 1.0198x slower try-catch-get-by-val-scoped-arguments 7.7468+-0.3196 ? 7.9210+-0.3922 ? might be 1.0225x slower typed-array-get-set-by-val-profiling 32.6052+-0.7092 ? 32.6820+-0.8275 ? undefined-property-access 343.4782+-9.4816 ? 343.6361+-3.3868 ? undefined-test 3.1134+-0.2208 ? 3.2772+-0.2469 ? might be 1.0526x slower unprofiled-licm 23.1893+-1.1068 ? 23.4959+-1.2463 ? might be 1.0132x slower varargs-call 14.8244+-0.9459 14.7536+-0.3243 varargs-construct-inline 27.9832+-0.9914 27.7031+-0.6290 might be 1.0101x faster varargs-construct 23.1576+-0.5115 ? 23.1971+-0.9232 ? varargs-inline 9.8072+-0.9645 9.3164+-0.1153 might be 1.0527x faster varargs-strict-mode 10.3083+-0.3688 ? 10.7916+-1.2201 ? might be 1.0469x slower varargs 10.6984+-1.2572 10.1592+-0.0347 might be 1.0531x faster weird-inlining-const-prop 2.5841+-0.3873 2.3782+-0.2886 might be 1.0866x faster <geometric> 8.6544+-0.0245 8.6034+-0.0309 might be 1.0059x faster TipOfTree BoolIntSpec AsmBench: bigfib.cpp 496.7343+-3.1181 ? 496.9650+-3.0324 ? cray.c 427.1527+-2.1749 ? 473.6928+-117.4410 ? might be 1.1090x slower dry.c 482.8933+-8.8216 482.1009+-8.6071 FloatMM.c 726.4123+-3.2011 725.4895+-4.3223 gcc-loops.cpp 4263.6835+-12.9935 ? 4266.1854+-5.6214 ? n-body.c 976.0164+-2.6588 ? 977.4551+-4.2989 ? Quicksort.c 421.9954+-2.0057 418.1124+-4.0578 stepanov_container.cpp 3610.3476+-14.0560 ? 3638.6242+-76.9145 ? Towers.c 261.7372+-4.5492 261.0118+-1.7728 <geometric> 792.6210+-2.1695 ? 799.8875+-21.3401 ? might be 1.0092x slower TipOfTree BoolIntSpec CompressionBench: huffman 365.1720+-8.5211 355.2417+-3.5626 might be 1.0280x faster arithmetic-simple 364.1168+-2.4099 ? 364.5175+-2.1426 ? arithmetic-precise 292.9322+-3.8845 ? 293.0443+-2.5764 ? arithmetic-complex-precise 301.0099+-3.0825 ? 326.3698+-55.3951 ? might be 1.0842x slower arithmetic-precise-order-0 386.4899+-4.9382 379.8209+-2.6974 might be 1.0176x faster arithmetic-precise-order-1 327.3361+-3.2580 ? 328.7635+-2.7902 ? arithmetic-precise-order-2 362.9375+-5.3518 ? 365.0418+-9.0243 ? arithmetic-simple-order-1 421.2007+-2.3696 ? 424.0184+-2.9166 ? arithmetic-simple-order-2 465.5557+-6.4076 463.4430+-4.0945 lz-string 334.5470+-14.0652 334.3606+-6.0920 <geometric> 358.7152+-2.2659 ? 360.1956+-5.6710 ? might be 1.0041x slower TipOfTree BoolIntSpec Geomean of preferred means: <scaled-result> 61.6525+-0.1809 ? 61.7453+-0.5334 ? might be 1.0015x slower
Filip Pizlo
Comment 9 2015-05-18 20:54:06 PDT
Created attachment 253361 [details] the patch
Filip Pizlo
Comment 10 2015-05-18 21:46:54 PDT
Note You need to log in before you can comment on or make changes to this bug.