Bug 144136 - Better optimize 'if' with ternaries conditional tests.
Summary: Better optimize 'if' with ternaries conditional tests.
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Filip Pizlo
URL:
Keywords: InRadar
Depends on: 145134 145137
Blocks:
  Show dependency treegraph
 
Reported: 2015-04-23 18:23 PDT by dougc
Modified: 2015-05-18 21:46 PDT (History)
2 users (show)

See Also:


Attachments
Example that runs slowly and uses a ternary conditional. (540 bytes, application/javascript)
2015-04-23 19:27 PDT, dougc
no flags Details
Example that is competitively fast, and uses the 'if () if()' pattern. (534 bytes, application/javascript)
2015-04-23 19:38 PDT, dougc
no flags Details
the patch (3.87 KB, patch)
2015-05-18 20:54 PDT, Filip Pizlo
benjamin: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description dougc 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
Comment 1 Filip Pizlo 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)"?
Comment 2 dougc 2015-04-23 19:27:31 PDT
Created attachment 251528 [details]
Example that runs slowly and uses a ternary conditional.
Comment 3 dougc 2015-04-23 19:38:00 PDT
Created attachment 251529 [details]
Example that is competitively fast, and uses the 'if () if()' pattern.
Comment 4 dougc 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
Comment 5 Filip Pizlo 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.
Comment 6 Radar WebKit Bug Importer 2015-04-23 19:49:31 PDT
<rdar://problem/20679710>
Comment 7 Filip Pizlo 2015-05-18 12:52:39 PDT
Turns out that this is mostly our fault: https://bugs.webkit.org/show_bug.cgi?id=145134
Comment 8 Filip Pizlo 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
Comment 9 Filip Pizlo 2015-05-18 20:54:06 PDT
Created attachment 253361 [details]
the patch
Comment 10 Filip Pizlo 2015-05-18 21:46:54 PDT
Landed in http://trac.webkit.org/changeset/184542