<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>132650</bug_id>
          
          <creation_ts>2014-05-07 05:19:55 -0700</creation_ts>
          <short_desc>[X86] Emit BT instruction for single-bit tests.</short_desc>
          <delta_ts>2014-05-07 21:12:47 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>132670</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>kling</cc>
    
    <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1007303</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 05:19:55 -0700</bug_when>
    <thetext>[X86] Emit BT instruction for single-bit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007305</commentid>
    <comment_count>1</comment_count>
      <attachid>230993</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 05:20:29 -0700</bug_when>
    <thetext>Created attachment 230993
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007342</commentid>
    <comment_count>2</comment_count>
      <attachid>230993</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-05-07 09:32:01 -0700</bug_when>
    <thetext>Comment on attachment 230993
Patch

r=me.

The logic looks fine.  Is there documentation from Intel that says use bt over test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007465</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 16:10:03 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 230993 [details])
&gt; r=me.
&gt; 
&gt; The logic looks fine.  Is there documentation from Intel that says use bt over test?

From Intel Technology Journal, Vol. 11, Issue 4:

&quot;The bit test instruction bt was introduced in the i386TM processor. In some implementations, including the Intel NetBurst® micro-architecture, the instruction has a high latency. The Intel Core micro-architecture executes bt in a single cycle, when the bit base operand is a register. Therefore, the Intel C++/Fortran compiler uses the bt instruction to implement a common bit test idiom when optimizing for the Intel Core micro-architecture. The optimized code runs about 20% faster than the generic version on an Intel Core 2 Duo processor.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007466</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 16:11:41 -0700</bug_when>
    <thetext>Note that BT only clobbers the CF flag, while TEST clobbers CF, OF, SF, ZF and PF. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007467</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-05-07 16:14:51 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 230993 [details] [details])
&gt; &gt; r=me.
&gt; &gt; 
&gt; &gt; The logic looks fine.  Is there documentation from Intel that says use bt over test?
&gt; 
&gt; From Intel Technology Journal, Vol. 11, Issue 4:
&gt; 
&gt; &quot;The bit test instruction bt was introduced in the i386TM processor. In some implementations, including the Intel NetBurst® micro-architecture, the instruction has a high latency. The Intel Core micro-architecture executes bt in a single cycle, when the bit base operand is a register. Therefore, the Intel C++/Fortran compiler uses the bt instruction to implement a common bit test idiom when optimizing for the Intel Core micro-architecture. The optimized code runs about 20% faster than the generic version on an Intel Core 2 Duo processor.&quot;

Thanks for the reference.  I looked in the optimization guide and couldn&apos;t find anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007469</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 16:24:46 -0700</bug_when>
    <thetext>Committed r168451: &lt;http://trac.webkit.org/changeset/168451&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007496</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-07 19:36:20 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 230993 [details] [details] [details])
&gt; &gt; &gt; r=me.
&gt; &gt; &gt; 
&gt; &gt; &gt; The logic looks fine.  Is there documentation from Intel that says use bt over test?
&gt; &gt; 
&gt; &gt; From Intel Technology Journal, Vol. 11, Issue 4:
&gt; &gt; 
&gt; &gt; &quot;The bit test instruction bt was introduced in the i386TM processor. In some implementations, including the Intel NetBurst® micro-architecture, the instruction has a high latency. The Intel Core micro-architecture executes bt in a single cycle, when the bit base operand is a register. Therefore, the Intel C++/Fortran compiler uses the bt instruction to implement a common bit test idiom when optimizing for the Intel Core micro-architecture. The optimized code runs about 20% faster than the generic version on an Intel Core 2 Duo processor.&quot;
&gt; 
&gt; Thanks for the reference.  I looked in the optimization guide and couldn&apos;t find anything.

Did you run any benchmarks?  I don&apos;t trust anything that any Intel documentation says.  It has been wrong in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007498</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-07 19:49:51 -0700</bug_when>
    <thetext>So, neither of the big-time compilers pattern match the BT instruction even if you tell them to target Core.  GCC appears to use and directly and relies on it leaving some bits behind while LLVM uses test.  I decided to look at what LLVM does and it appears that it only resorts to BT if the immediate is not encodable with TEST.

So, it would appear that either we&apos;ve discovered something that professional compiler writers have overlooked (or, in the case of LLVM, which knows about BT and can use it, we have discovered something that professional compiler writers have misunderstood), or there is something that the Intel manual isn&apos;t revealing.  Note that those compilers are engineered to know about *every single instruction* that every possible processor might have.  They have been tuned very carefully for a long time and sometimes they do it based on cost models of those instructions.  Often, if you want to figure out which instructions to select, it&apos;s usually a good bet to just look at what they do.

In this case, it appears that BT is basically a bad idea.

In general, I don&apos;t think that &quot;the Intel manual said so&quot; should ever be used for a justification for a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007500</commentid>
    <comment_count>9</comment_count>
      <attachid>230993</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-07 19:52:02 -0700</bug_when>
    <thetext>Comment on attachment 230993
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=230993&amp;action=review

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:1202
&gt; +    int singleBitIndex(unsigned mask)
&gt; +    {
&gt; +        switch (mask) {
&gt; +        case 0x00000001: return 0;
&gt; +        case 0x00000002: return 1;
&gt; +        case 0x00000004: return 2;
&gt; +        case 0x00000008: return 3;
&gt; +        case 0x00000010: return 4;
&gt; +        case 0x00000020: return 5;
&gt; +        case 0x00000040: return 6;
&gt; +        case 0x00000080: return 7;
&gt; +        case 0x00000100: return 8;
&gt; +        case 0x00000200: return 9;
&gt; +        case 0x00000400: return 10;
&gt; +        case 0x00000800: return 11;
&gt; +        case 0x00001000: return 12;
&gt; +        case 0x00002000: return 13;
&gt; +        case 0x00004000: return 14;
&gt; +        case 0x00008000: return 15;
&gt; +        case 0x00010000: return 16;
&gt; +        case 0x00020000: return 17;
&gt; +        case 0x00040000: return 18;
&gt; +        case 0x00080000: return 19;
&gt; +        case 0x00100000: return 20;
&gt; +        case 0x00200000: return 21;
&gt; +        case 0x00400000: return 22;
&gt; +        case 0x00800000: return 23;
&gt; +        case 0x01000000: return 24;
&gt; +        case 0x02000000: return 25;
&gt; +        case 0x04000000: return 26;
&gt; +        case 0x08000000: return 27;
&gt; +        case 0x10000000: return 28;
&gt; +        case 0x20000000: return 29;
&gt; +        case 0x40000000: return 30;
&gt; +        case 0x80000000: return 31;
&gt; +        default: return -1;
&gt; +        }

We have a function to count the number of set bits in an int and to compute the log2 of an int.  Why not use those instead?

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:1212
&gt; +        int bitIndex = singleBitIndex(mask.m_value);
&gt; +        if ((cond == Zero || cond == NonZero) &amp;&amp; bitIndex != -1) {
&gt; +            m_assembler.bt_i8r(bitIndex, reg);
&gt; +            return Jump(m_assembler.jCC(cond == Zero ? X86Assembler::ConditionNC : X86Assembler::ConditionC));
&gt; +        }
&gt; +

The LLVM tuning appears to disagree with you - it will pick BT only if the immediate is both a power of two and not representable in the immediate of a TEST.  I think this will only happen if you want to quickly test one of the high 32 bits of a 64 bit integer.  Obviously, this won&apos;t happen here.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:1224
&gt; +        int bitIndex = singleBitIndex(mask.m_value);
&gt; +        if ((cond == Zero || cond == NonZero) &amp;&amp; bitIndex != -1) {
&gt; +            m_assembler.bt_i8m(bitIndex, address.offset, address.base);
&gt; +            return Jump(m_assembler.jCC(cond == Zero ? X86Assembler::ConditionNC : X86Assembler::ConditionC));
&gt; +        }
&gt; +

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007503</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-07 20:09:58 -0700</bug_when>
    <thetext>Another thing: it appears that BT is a bigger instruction than TEST - it requires one extra prefix byte in the opcode.

Seriously, if you have a choice between a one-opcode instruction and a two-opcode instruction and there is no evidence that the two-opcode one is better then you should use the one-opcode one.

The Intel manual does not constitute evidence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007505</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 20:22:13 -0700</bug_when>
    <thetext>Hi Phil. I&apos;m running jsc-benchmarks on a slower machine in the background. In the meantime..

BT will always end up 2 bytes shorter than the TEST it replaced since it uses an 8-bit immediate instead of a 32-bit one.

In addition to LLVM, I was looking at GCC and ICC code generation on gcc.godbolt.org, but I did make one fatal mistake. I was testing with this snippet:

void foo (void);

int test (int x, int n)
{
  if (x &amp; (1 &lt;&lt; n))
    foo ();

  return 0;
}

Which generates code using BT for -O2 -march=core2 on all three compilers. I got the snippet from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36473 (where GCC added BT to their codegen.)

Unfortunately I forgot to test with an immediate instead of a variable argument, and I see now that for compile-time constant 1-bit masks in the 0-31 range, all three compilers generate TEST instead. Boo me.

I&apos;m gonna let the benchmarks finish and paste the results here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007506</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-07 20:24:52 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Hi Phil. I&apos;m running jsc-benchmarks on a slower machine in the background. In the meantime..
&gt; 
&gt; BT will always end up 2 bytes shorter than the TEST it replaced since it uses an 8-bit immediate instead of a 32-bit one.

There is a 8-bit immediate form of TEST.

&gt; 
&gt; In addition to LLVM, I was looking at GCC and ICC code generation on gcc.godbolt.org, but I did make one fatal mistake. I was testing with this snippet:
&gt; 
&gt; void foo (void);
&gt; 
&gt; int test (int x, int n)
&gt; {
&gt;   if (x &amp; (1 &lt;&lt; n))
&gt;     foo ();
&gt; 
&gt;   return 0;
&gt; }
&gt; 
&gt; Which generates code using BT for -O2 -march=core2 on all three compilers. I got the snippet from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36473 (where GCC added BT to their codegen.)
&gt; 
&gt; Unfortunately I forgot to test with an immediate instead of a variable argument, and I see now that for compile-time constant 1-bit masks in the 0-31 range, all three compilers generate TEST instead. Boo me.
&gt; 
&gt; I&apos;m gonna let the benchmarks finish and paste the results here.

OK.  I would expect no performance difference.  If there is no performance difference then we should just defer to what the big compilers do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007507</commentid>
    <comment_count>13</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 20:27:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Hi Phil. I&apos;m running jsc-benchmarks on a slower machine in the background. In the meantime..
&gt; &gt; 
&gt; &gt; BT will always end up 2 bytes shorter than the TEST it replaced since it uses an 8-bit immediate instead of a 32-bit one.
&gt; 
&gt; There is a 8-bit immediate form of TEST.

Hah. You&apos;re right. And JSC tries real hard to generate it too.

&gt; &gt; In addition to LLVM, I was looking at GCC and ICC code generation on gcc.godbolt.org, but I did make one fatal mistake. I was testing with this snippet:
&gt; &gt; 
&gt; &gt; void foo (void);
&gt; &gt; 
&gt; &gt; int test (int x, int n)
&gt; &gt; {
&gt; &gt;   if (x &amp; (1 &lt;&lt; n))
&gt; &gt;     foo ();
&gt; &gt; 
&gt; &gt;   return 0;
&gt; &gt; }
&gt; &gt; 
&gt; &gt; Which generates code using BT for -O2 -march=core2 on all three compilers. I got the snippet from http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36473 (where GCC added BT to their codegen.)
&gt; &gt; 
&gt; &gt; Unfortunately I forgot to test with an immediate instead of a variable argument, and I see now that for compile-time constant 1-bit masks in the 0-31 range, all three compilers generate TEST instead. Boo me.
&gt; &gt; 
&gt; &gt; I&apos;m gonna let the benchmarks finish and paste the results here.
&gt; 
&gt; OK.  I would expect no performance difference.  If there is no performance difference then we should just defer to what the big compilers do.

Definitely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007511</commentid>
    <comment_count>14</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-05-07 21:06:02 -0700</bug_when>
    <thetext>Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, and AsmBench on locals-iMac (iMac14,2).

VMs tested:
&quot;WithoutBT&quot; at /Volumes/Data/Source/Safari/Ref-OpenSource/WebKitBuild/Release/jsc
&quot;WithBT&quot; at /Volumes/Data/Source/Safari/OpenSource/WebKitBuild/Release/jsc

Collected 4 samples per benchmark/VM, with 4 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.

                                                        WithoutBT                   WithBT                                      
SunSpider:
   3d-cube                                            3.8618+-0.3228     ?      3.8717+-0.4712        ?
   3d-morph                                           4.7336+-0.1498            4.6899+-0.1356        
   3d-raytrace                                        4.8748+-0.3113     ?      4.9585+-0.2855        ? might be 1.0172x slower
   access-binary-trees                                1.4155+-0.2128            1.3615+-0.0389          might be 1.0397x faster
   access-fannkuch                                    4.4414+-0.0878     ?      4.5675+-0.2150        ? might be 1.0284x slower
   access-nbody                                       2.2466+-0.0433     ?      2.2950+-0.1750        ? might be 1.0215x slower
   access-nsieve                                      3.0829+-0.0559     ?      3.1282+-0.1827        ? might be 1.0147x slower
   bitops-3bit-bits-in-byte                           1.2347+-0.0768     ?      1.2832+-0.2258        ? might be 1.0393x slower
   bitops-bits-in-byte                                2.2117+-0.1158            2.2071+-0.1079        
   bitops-bitwise-and                                 1.9141+-0.0362     ?      1.9182+-0.0586        ?
   bitops-nsieve-bits                                 3.0856+-0.0882     ?      3.0890+-0.1131        ?
   controlflow-recursive                              1.4973+-0.0714            1.4958+-0.0937        
   crypto-aes                                         3.1792+-0.0513     ?      3.1852+-0.0432        ?
   crypto-md5                                         1.7664+-0.1233            1.7493+-0.1290        
   crypto-sha1                                        1.9402+-0.0816            1.8497+-0.0111          might be 1.0490x faster
   date-format-tofte                                  5.8865+-0.1886     ?      7.2452+-3.8198        ? might be 1.2308x slower
   date-format-xparb                                  5.0603+-0.1396            4.8799+-0.1556          might be 1.0370x faster
   math-cordic                                        2.4778+-0.0507            2.4227+-0.0787          might be 1.0228x faster
   math-partial-sums                                  4.3050+-0.0610     ?      4.4823+-0.1742        ? might be 1.0412x slower
   math-spectral-norm                                 1.4714+-0.0216            1.4637+-0.0517        
   regexp-dna                                         6.2526+-0.1737            6.1306+-0.1809          might be 1.0199x faster
   string-base64                                      3.5334+-0.2921            3.4504+-0.1135          might be 1.0240x faster
   string-fasta                                       5.6995+-0.1165     ?      5.7885+-0.0988        ? might be 1.0156x slower
   string-tagcloud                                    8.3417+-0.1268            8.2930+-0.1537        
   string-unpack-code                                18.4899+-0.7973     ?     18.6165+-0.9547        ?
   string-validate-input                              4.0388+-0.1404            4.0292+-0.1176        

   &lt;arithmetic&gt; *                                     4.1170+-0.0473     ?      4.1712+-0.1430        ? might be 1.0132x slower
   &lt;geometric&gt;                                        3.3258+-0.0302     ?      3.3432+-0.0482        ? might be 1.0052x slower
   &lt;harmonic&gt;                                         2.8016+-0.0476            2.8001+-0.0427          might be 1.0005x faster

                                                        WithoutBT                   WithBT                                      
LongSpider:
   3d-cube                                         1233.4095+-11.3659    ?   1253.3698+-40.1243       ? might be 1.0162x slower
   3d-morph                                         741.4250+-27.4430         727.5229+-2.3772          might be 1.0191x faster
   3d-raytrace                                      765.6695+-6.0680          759.1818+-6.9697        
   access-binary-trees                              916.7892+-12.5503         906.1600+-5.9240          might be 1.0117x faster
   access-fannkuch                                  340.1515+-14.4538    ?    347.3749+-11.1170       ? might be 1.0212x slower
   access-nbody                                     738.1696+-17.3423    ?    760.7197+-47.0308       ? might be 1.0305x slower
   access-nsieve                                    931.6458+-12.5809    ?   1016.2460+-258.9499      ? might be 1.0908x slower
   bitops-3bit-bits-in-byte                          85.7283+-4.8629     ?     85.7570+-4.4779        ?
   bitops-bits-in-byte                              135.4017+-2.2564     ?    136.0309+-12.2223       ?
   bitops-nsieve-bits                               611.3268+-15.0354         608.5967+-10.1367       
   controlflow-recursive                            384.7675+-8.6854     ?    388.6284+-13.3114       ? might be 1.0100x slower
   crypto-aes                                       886.7181+-7.7085     ?    886.8901+-5.0394        ?
   crypto-md5                                       669.3856+-26.4656         664.0869+-6.8129        
   crypto-sha1                                      852.5552+-13.2281    ?    864.0634+-25.9422       ? might be 1.0135x slower
   date-format-tofte                                575.9711+-7.3666     ?    585.4905+-19.7535       ? might be 1.0165x slower
   date-format-xparb                                869.0757+-14.4675         859.2290+-11.2992         might be 1.0115x faster
   math-cordic                                      904.5382+-8.9082          903.4843+-13.9417       
   math-partial-sums                                545.4088+-9.0132     ?    546.7880+-1.3511        ?
   math-spectral-norm                               870.8215+-9.0842          858.9225+-8.2623          might be 1.0139x faster
   string-base64                                    334.2463+-0.8221     ?    334.5509+-2.8044        ?
   string-fasta                                     576.7892+-12.4559         557.0745+-10.5421         might be 1.0354x faster
   string-tagcloud                                  214.0127+-2.0530     ?    216.3233+-10.8192       ? might be 1.0108x slower

   &lt;arithmetic&gt;                                     644.7276+-1.7497     ?    648.4769+-12.9180       ? might be 1.0058x slower
   &lt;geometric&gt; *                                    548.6369+-2.1365     ?    550.8949+-4.9976        ? might be 1.0041x slower
   &lt;harmonic&gt;                                       412.0620+-5.1406     ?    413.3966+-3.7046        ? might be 1.0032x slower

                                                        WithoutBT                   WithBT                                      
V8Spider:
   crypto                                            40.2859+-0.7060     ?     40.6218+-1.1536        ?
   deltablue                                         53.4686+-2.1510     ?     55.6558+-6.8348        ? might be 1.0409x slower
   earley-boyer                                      35.8690+-0.2621     ?     36.2894+-1.3433        ? might be 1.0117x slower
   raytrace                                          21.0439+-1.0350     ?     22.0540+-2.7833        ? might be 1.0480x slower
   regexp                                            51.2761+-0.4551           50.9445+-0.5523        
   richards                                          58.1104+-0.7669     ?     59.4163+-2.3087        ? might be 1.0225x slower
   splay                                             28.8427+-1.1775           28.8246+-1.4657        

   &lt;arithmetic&gt;                                      41.2709+-0.4303     ?     41.9723+-1.0863        ? might be 1.0170x slower
   &lt;geometric&gt; *                                     39.0966+-0.5156     ?     39.7623+-1.0809        ? might be 1.0170x slower
   &lt;harmonic&gt;                                        36.7740+-0.6788     ?     37.4516+-1.2412        ? might be 1.0184x slower

                                                        WithoutBT                   WithBT                                      
Octane:
   encrypt                                           0.23290+-0.00210    !     0.23882+-0.00202       ! definitely 1.0254x slower
   decrypt                                           4.47660+-0.11228    ?     4.48817+-0.13490       ?
   deltablue                                x2       0.28874+-0.00434    ?     0.29091+-0.00125       ?
   earley                                            0.46939+-0.00614    ?     0.47122+-0.00557       ?
   boyer                                             5.84523+-0.16830    ?     5.98271+-0.14127       ? might be 1.0235x slower
   navier-stokes                            x2       6.50766+-0.22653          6.33958+-0.01118         might be 1.0265x faster
   raytrace                                 x2       1.88956+-0.03615    ?     1.93935+-0.13718       ? might be 1.0264x slower
   richards                                 x2       0.15715+-0.00077    !     0.16161+-0.00215       ! definitely 1.0284x slower
   splay                                    x2       0.40737+-0.00817          0.39903+-0.01484         might be 1.0209x faster
   regexp                                   x2      39.24923+-0.55669    ?    39.49937+-0.79358       ?
   pdfjs                                    x2      49.89777+-0.62815    ?    57.38340+-23.58802      ? might be 1.1500x slower
   mandreel                                 x2      76.35007+-1.36543    ?    77.09823+-0.78193       ?
   gbemu                                    x2      36.48157+-1.44080    ?    36.73093+-0.65766       ?
   closure                                           0.48830+-0.00459    ?     0.48972+-0.00176       ?
   jquery                                            5.82282+-0.07320    ?     5.90402+-0.16880       ? might be 1.0139x slower
   box2d                                    x2      12.35646+-0.34995         12.33273+-0.21968       
   zlib                                     x2     512.80497+-15.97694   ?   516.73765+-18.50990      ?
   typescript                               x2     574.16754+-9.84969    ?   579.11633+-24.49226      ?

   &lt;arithmetic&gt;                                     87.94838+-1.29661    ?    89.12110+-2.48256       ? might be 1.0133x slower
   &lt;geometric&gt; *                                     7.48049+-0.04648    ?     7.58400+-0.18156       ? might be 1.0138x slower
   &lt;harmonic&gt;                                        0.84961+-0.00400    !     0.86056+-0.00286       ! definitely 1.0129x slower

                                                        WithoutBT                   WithBT                                      
Kraken:
   ai-astar                                          247.752+-7.939      ?     248.547+-2.499         ?
   audio-beat-detection                              112.494+-0.187      ?     112.762+-1.634         ?
   audio-dft                                         144.443+-11.872           143.542+-1.914         
   audio-fft                                          67.710+-0.130             67.406+-0.221         
   audio-oscillator                                  141.561+-7.109            140.845+-1.927         
   imaging-darkroom                                  146.387+-0.528      ?     148.050+-1.902         ? might be 1.0114x slower
   imaging-desaturate                                 80.594+-1.448      ?      80.683+-1.630         ?
   imaging-gaussian-blur                             163.158+-4.679      ?     163.566+-11.871        ?
   json-parse-financial                               38.503+-1.343             37.966+-0.089           might be 1.0142x faster
   json-stringify-tinderbox                           53.159+-1.567      ?      54.250+-2.986         ? might be 1.0205x slower
   stanford-crypto-aes                                45.046+-1.236      ?      46.167+-5.939         ? might be 1.0249x slower
   stanford-crypto-ccm                                44.463+-6.681      ?      47.611+-7.063         ? might be 1.0708x slower
   stanford-crypto-pbkdf2                            129.166+-3.487      ?     130.468+-3.760         ? might be 1.0101x slower
   stanford-crypto-sha256-iterative                   47.244+-0.394      ?      48.188+-2.022         ? might be 1.0200x slower

   &lt;arithmetic&gt; *                                    104.406+-0.568      ?     105.004+-1.334         ? might be 1.0057x slower
   &lt;geometric&gt;                                        88.640+-0.561      ?      89.480+-1.698         ? might be 1.0095x slower
   &lt;harmonic&gt;                                         75.429+-0.917      ?      76.435+-2.080         ? might be 1.0133x slower

                                                        WithoutBT                   WithBT                                      
JSRegress:
   adapt-to-double-divide                            16.8749+-0.3478     ?     17.0203+-0.7817        ?
   aliased-arguments-getbyval                         0.6537+-0.0267            0.6158+-0.0504          might be 1.0617x faster
   allocate-big-object                                1.8135+-0.0744     ?      1.8187+-0.0972        ?
   arity-mismatch-inlining                            0.6396+-0.0393            0.6182+-0.0588          might be 1.0346x faster
   array-access-polymorphic-structure                 5.7628+-0.3277     ?      5.7760+-0.0780        ?
   array-nonarray-polymorhpic-access                 23.9935+-0.7104           23.7007+-0.4905          might be 1.0124x faster
   array-prototype-every                             60.9655+-1.0479     ?     62.1391+-1.7703        ? might be 1.0192x slower
   array-prototype-forEach                           60.9336+-0.2432     ?     62.1194+-2.2588        ? might be 1.0195x slower
   array-prototype-map                               75.3367+-1.8058           75.1887+-0.2945        
   array-prototype-some                              60.2330+-0.1637     ?     61.2446+-0.9690        ? might be 1.0168x slower
   array-with-double-add                              3.0668+-0.0147     ?      3.0843+-0.1094        ?
   array-with-double-increment                        2.3682+-0.1052     ?      2.4139+-0.2878        ? might be 1.0193x slower
   array-with-double-mul-add                          3.5223+-0.2210            3.4009+-0.0387          might be 1.0357x faster
   array-with-double-sum                              2.9102+-0.0923     ?      2.9844+-0.2202        ? might be 1.0255x slower
   array-with-int32-add-sub                           5.4126+-0.1816            5.3853+-0.0529        
   array-with-int32-or-double-sum                     2.9734+-0.0501            2.9376+-0.0703          might be 1.0122x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     59.5416+-1.3383           59.4380+-1.0794        
   ArrayBuffer-DataView-alloc-long-lived             17.5625+-0.3735           17.5107+-0.5725        
   ArrayBuffer-Int32Array-byteOffset                  3.2175+-0.4383            3.1110+-0.1813          might be 1.0342x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     58.9164+-1.9242     ?     59.5763+-1.1377        ? might be 1.0112x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     27.4478+-0.3950     ?     27.7172+-0.4536        ?
   ArrayBuffer-Int8Array-alloc-long-lived            16.5187+-0.3092     ?     16.8021+-0.3588        ? might be 1.0172x slower
   ArrayBuffer-Int8Array-alloc                       15.1373+-0.7507     ?     15.2064+-0.6375        ?
   asmjs_bool_bug                                     5.0901+-0.1368            5.0353+-0.1861          might be 1.0109x faster
   assign-custom-setter-polymorphic                   2.3589+-0.0777     ?      2.3894+-0.0526        ? might be 1.0129x slower
   assign-custom-setter                               3.1022+-0.1024     ?      3.1182+-0.1303        ?
   basic-set                                          9.1317+-1.2772            8.7687+-0.2894          might be 1.0414x faster
   big-int-mul                                        2.9904+-0.1940            2.9700+-0.1380        
   boolean-test                                       2.6247+-0.2063            2.5182+-0.1577          might be 1.0423x faster
   branch-fold                                        3.2577+-0.0550     ?      3.3245+-0.0925        ? might be 1.0205x slower
   by-val-generic                                     7.3796+-0.1543     ?      7.4485+-0.0709        ?
   call-spread-apply                                 12.1317+-0.3349     ?     12.1882+-0.1723        ?
   call-spread-call                                   4.8375+-0.0777            4.8325+-0.0795        
   captured-assignments                               0.3293+-0.0250            0.3065+-0.0194          might be 1.0745x faster
   cast-int-to-double                                 8.2139+-0.1624     ?      8.2618+-0.2152        ?
   cell-argument                                     10.3142+-0.2305           10.2570+-0.0835        
   cfg-simplify                                       2.5598+-0.2526            2.4996+-0.2191          might be 1.0241x faster
   chain-getter-access                               19.5402+-0.7694     ?     21.0107+-4.2560        ? might be 1.0753x slower
   cmpeq-obj-to-obj-other                             7.3638+-0.3202            7.3226+-0.1575        
   constant-test                                      4.1171+-0.0626     ?      4.1469+-0.1105        ?
   DataView-custom-properties                        63.4835+-1.2854           63.2479+-1.3707        
   delay-tear-off-arguments-strictmode                2.1216+-0.0992            2.0983+-0.0798          might be 1.0111x faster
   destructuring-arguments                            5.0398+-2.2027            4.5248+-0.5397          might be 1.1138x faster
   destructuring-swap                                 4.1785+-0.1576     ?      4.2252+-0.1212        ? might be 1.0112x slower
   direct-arguments-getbyval                          0.5582+-0.0244     ?      0.5785+-0.0355        ? might be 1.0364x slower
   double-get-by-val-out-of-bounds                    3.3326+-0.0797     ?      3.3958+-0.2144        ? might be 1.0190x slower
   double-pollution-getbyval                          7.9317+-0.1571     ?      8.0587+-0.6736        ? might be 1.0160x slower
   double-pollution-putbyoffset                       3.3505+-0.0502            3.3494+-0.1109        
   double-to-int32-typed-array-no-inline              1.6681+-0.0728     ?      1.7090+-0.0957        ? might be 1.0245x slower
   double-to-int32-typed-array                        1.3768+-0.0319     ?      1.3882+-0.0640        ?
   double-to-uint32-typed-array-no-inline             1.7084+-0.0609     ?      1.7646+-0.0533        ? might be 1.0329x slower
   double-to-uint32-typed-array                       1.4252+-0.0356     ?      1.4645+-0.0627        ? might be 1.0276x slower
   empty-string-plus-int                              5.8543+-0.2353     ?      5.8599+-0.1637        ?
   emscripten-cube2hash                              24.1876+-0.6467     ?     24.5358+-0.8620        ? might be 1.0144x slower
   external-arguments-getbyval                        1.1234+-0.0364     ?      1.1275+-0.0489        ?
   external-arguments-putbyval                        1.5861+-0.0376            1.5779+-0.1227        
   fixed-typed-array-storage-var-index                1.0112+-0.0393     ?      1.0138+-0.0228        ?
   fixed-typed-array-storage                          0.6431+-0.0435     ?      0.6665+-0.0386        ? might be 1.0364x slower
   Float32Array-matrix-mult                           3.8936+-0.0388     ?      3.9861+-0.4784        ? might be 1.0238x slower
   Float32Array-to-Float64Array-set                  47.2681+-4.1753           46.2629+-0.9537          might be 1.0217x faster
   Float64Array-alloc-long-lived                     62.4034+-1.5670           62.1289+-0.7957        
   Float64Array-to-Int16Array-set                    54.9105+-1.3133     ?     55.0078+-0.2631        ?
   fold-double-to-int                                11.4935+-0.0516     ?     11.8701+-1.0125        ? might be 1.0328x slower
   for-of-iterate-array-entries                       5.5264+-0.1621     ?      5.6089+-0.5281        ? might be 1.0149x slower
   for-of-iterate-array-keys                          2.1867+-0.1355     ?      2.3857+-0.4778        ? might be 1.0910x slower
   for-of-iterate-array-values                        1.9847+-0.0625     ?      2.0040+-0.0976        ?
   fround                                            22.5043+-0.3450           22.3303+-0.3655        
   function-dot-apply                                 1.1051+-0.2472            1.0642+-0.0609          might be 1.0384x faster
   function-test                                      2.6726+-0.0653            2.6379+-0.0750          might be 1.0131x faster
   function-with-eval                                16.8524+-0.4956           16.6487+-0.3545          might be 1.0122x faster
   get-by-id-chain-from-try-block                     5.5303+-0.0536     ?      5.6227+-0.1750        ? might be 1.0167x slower
   get-by-id-proto-or-self                           11.2628+-0.6030           11.1470+-0.6664          might be 1.0104x faster
   get-by-id-self-or-proto                           11.3000+-0.2177     ?     11.3342+-0.3082        ?
   get-by-val-out-of-bounds                           3.1969+-0.0392            3.1866+-0.0619        
   get_callee_monomorphic                             2.7919+-0.0911     ?      2.7993+-0.0988        ?
   get_callee_polymorphic                             2.7815+-0.1871            2.6780+-0.0679          might be 1.0387x faster
   getter                                            10.5140+-0.1731     ?     10.6976+-0.2849        ? might be 1.0175x slower
   global-var-const-infer-fire-from-opt               0.6813+-0.1792     ?      0.7118+-0.0319        ? might be 1.0447x slower
   global-var-const-infer                             0.5468+-0.0490     ?      0.5789+-0.1194        ? might be 1.0588x slower
   HashMap-put-get-iterate-keys                      21.2709+-0.4996     ?     21.3666+-0.2132        ?
   HashMap-put-get-iterate                           21.2148+-1.3146     ?     21.2971+-0.8254        ?
   HashMap-string-put-get-iterate                    25.7957+-0.6637           25.6835+-0.4569        
   imul-double-only                                   9.3182+-0.0438            9.2085+-0.1093          might be 1.0119x faster
   imul-int-only                                      8.8632+-0.2467     ?      8.9577+-0.2918        ? might be 1.0107x slower
   imul-mixed                                        11.8339+-0.1459           11.7974+-0.3412        
   in-four-cases                                     12.1102+-0.0464     ?     12.2891+-0.6639        ? might be 1.0148x slower
   in-one-case-false                                  6.3717+-0.1432     ?      6.3901+-0.1092        ?
   in-one-case-true                                   6.3008+-0.1341     ?      6.4802+-0.2394        ? might be 1.0285x slower
   in-two-cases                                       6.7437+-0.3053            6.5772+-0.1301          might be 1.0253x faster
   indexed-properties-in-objects                      2.4080+-0.0527     ?      2.4578+-0.0999        ? might be 1.0207x slower
   infer-closure-const-then-mov-no-inline             2.7401+-0.0363            2.7217+-0.0521        
   infer-closure-const-then-mov                      18.2510+-1.3620           17.4486+-0.4636          might be 1.0460x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.4136+-0.5281           10.2925+-0.1459          might be 1.0118x faster
   infer-closure-const-then-put-to-scope             21.2559+-0.1137     ?     21.9273+-1.2916        ? might be 1.0316x slower
   infer-closure-const-then-reenter-no-inline   
                                                     48.6475+-0.4516     ?     48.8307+-0.8195        ?
   infer-closure-const-then-reenter                  21.8364+-0.6542           21.3676+-0.2367          might be 1.0219x faster
   infer-one-time-closure-ten-vars                   16.9810+-0.2948     ?     17.6420+-0.8652        ? might be 1.0389x slower
   infer-one-time-closure-two-vars                   17.1103+-0.5771     ?     17.1935+-0.0337        ?
   infer-one-time-closure                            16.8564+-0.2188     !     17.4272+-0.2913        ! definitely 1.0339x slower
   infer-one-time-deep-closure                       34.2043+-1.6270           34.0645+-0.8032        
   inline-arguments-access                            0.9550+-0.0741     ?      0.9711+-0.0556        ? might be 1.0169x slower
   inline-arguments-aliased-access                    1.0683+-0.0491     ?      1.0773+-0.0635        ?
   inline-arguments-local-escape                     11.1242+-0.1217           10.8904+-0.3473          might be 1.0215x faster
   inline-get-scoped-var                              3.9630+-0.1105     ?      4.0118+-0.0897        ? might be 1.0123x slower
   inlined-put-by-id-transition                       8.7558+-0.1617     ?      8.8181+-0.4925        ?
   int-or-other-abs-then-get-by-val                   5.1650+-0.1496            5.0964+-0.0715          might be 1.0134x faster
   int-or-other-abs-zero-then-get-by-val             17.4343+-0.3743           17.1487+-0.3421          might be 1.0167x faster
   int-or-other-add-then-get-by-val                   6.6006+-0.3991     ?      6.6057+-0.1506        ?
   int-or-other-add                                   6.1335+-0.0362     !      6.2252+-0.0407        ! definitely 1.0149x slower
   int-or-other-div-then-get-by-val                   4.1525+-0.1009     ?      4.5359+-1.2117        ? might be 1.0923x slower
   int-or-other-max-then-get-by-val                   4.5270+-0.0592     ?      4.6199+-0.1652        ? might be 1.0205x slower
   int-or-other-min-then-get-by-val                   4.7253+-0.0658     ?      4.8945+-0.4785        ? might be 1.0358x slower
   int-or-other-mod-then-get-by-val                   3.8647+-0.0481     ?      3.8676+-0.0776        ?
   int-or-other-mul-then-get-by-val                   4.2692+-0.2850            4.1349+-0.0897          might be 1.0325x faster
   int-or-other-neg-then-get-by-val                   4.8512+-0.0716     ?      4.8620+-0.0756        ?
   int-or-other-neg-zero-then-get-by-val             17.0445+-0.6193     ?     17.1204+-0.8477        ?
   int-or-other-sub-then-get-by-val                   6.8100+-0.1849            6.7993+-0.2825        
   int-or-other-sub                                   5.3719+-0.1693     ?      5.4512+-0.0418        ? might be 1.0148x slower
   int-overflow-local                                 3.6978+-0.0868     ?      3.9538+-0.5597        ? might be 1.0692x slower
   Int16Array-alloc-long-lived                       45.3895+-1.8998           44.7217+-0.1982          might be 1.0149x faster
   Int16Array-bubble-sort-with-byteLength            17.9753+-1.9966     ?     19.4047+-0.7376        ? might be 1.0795x slower
   Int16Array-bubble-sort                            16.3075+-0.1436     ?     16.3254+-0.3998        ?
   Int16Array-load-int-mul                            1.1965+-0.0420     ?      1.2754+-0.1717        ? might be 1.0659x slower
   Int16Array-to-Int32Array-set                      43.2715+-1.2176           42.6219+-0.8450          might be 1.0152x faster
   Int32Array-alloc-large                            12.7415+-1.3867           12.6401+-0.8268        
   Int32Array-alloc-long-lived                       49.8883+-0.3697     ?     50.0630+-0.2130        ?
   Int32Array-alloc                                   2.4424+-0.0594     ?      2.4855+-0.0960        ? might be 1.0176x slower
   Int32Array-Int8Array-view-alloc                    8.4851+-0.5946            8.3391+-0.2479          might be 1.0175x faster
   int52-spill                                        6.5042+-0.1587     ?      6.6044+-0.2007        ? might be 1.0154x slower
   Int8Array-alloc-long-lived                        40.8506+-0.8158           40.7183+-0.6195        
   Int8Array-load-with-byteLength                     3.1348+-0.0431            3.1196+-0.0197        
   Int8Array-load                                     3.1297+-0.0665            3.1229+-0.0654        
   integer-divide                                    10.0457+-0.3361     ?     10.2057+-0.4906        ? might be 1.0159x slower
   integer-modulo                                     1.3184+-0.1003            1.3168+-0.0482        
   large-int-captured                                 5.4174+-0.2135     ?      5.4364+-0.1193        ?
   large-int-neg                                     14.0964+-0.1772     ?     14.6466+-1.6208        ? might be 1.0390x slower
   large-int                                         13.1874+-0.3276           13.1515+-0.3709        
   logical-not                                        4.0453+-0.5646            3.8853+-0.1481          might be 1.0412x faster
   lots-of-fields                                     6.6533+-0.1082     ?      6.8633+-0.6718        ? might be 1.0316x slower
   make-indexed-storage                               2.2798+-0.0716            2.0951+-0.3863          might be 1.0882x faster
   make-rope-cse                                      3.7122+-0.1525            3.6635+-0.1045          might be 1.0133x faster
   marsaglia-larger-ints                             65.3561+-1.9722     ?     65.7378+-1.0200        ?
   marsaglia-osr-entry                               28.7213+-0.9645           28.5740+-0.5672        
   method-on-number                                  17.7003+-0.6576           17.4322+-0.2939          might be 1.0154x faster
   misc-strict-eq                                    37.1450+-1.3845     ?     37.9603+-0.3439        ? might be 1.0219x slower
   negative-zero-divide                               0.2499+-0.0143     ?      0.2610+-0.0328        ? might be 1.0444x slower
   negative-zero-modulo                               0.2535+-0.0205            0.2505+-0.0099          might be 1.0119x faster
   negative-zero-negate                               0.2707+-0.0592            0.2560+-0.0397          might be 1.0572x faster
   nested-function-parsing                           22.6801+-0.9370           21.7504+-0.7935          might be 1.0427x faster
   new-array-buffer-dead                              2.6555+-0.3041            2.6259+-0.1047          might be 1.0113x faster
   new-array-buffer-push                              6.2847+-0.1264            6.2371+-0.1371        
   new-array-dead                                    19.3544+-0.3096           19.2313+-0.7646        
   new-array-push                                     4.1797+-0.1613     ?      4.2916+-0.0853        ? might be 1.0268x slower
   number-test                                        2.4422+-0.0393     ?      2.5016+-0.1472        ? might be 1.0243x slower
   object-closure-call                                4.5679+-0.3652            4.5142+-0.1235          might be 1.0119x faster
   object-test                                        2.5947+-0.0619            2.5651+-0.0743          might be 1.0116x faster
   poly-stricteq                                     45.2128+-1.6479           44.3875+-1.8210          might be 1.0186x faster
   polymorphic-array-call                             1.3683+-0.0965            1.3183+-0.0297          might be 1.0379x faster
   polymorphic-get-by-id                              2.5158+-0.1022            2.4898+-0.0680          might be 1.0104x faster
   polymorphic-put-by-id                             41.5616+-49.3263    ?     58.5696+-58.4548       ? might be 1.4092x slower
   polymorphic-structure                             13.1450+-0.3808     ?     13.2355+-0.2921        ?
   polyvariant-monomorphic-get-by-id                  4.9765+-0.1883            4.8690+-0.0827          might be 1.0221x faster
   proto-getter-access                               19.4456+-0.4488     ?     19.4763+-0.2443        ?
   put-by-id                                         11.9398+-0.1511     ?     12.0521+-0.5963        ?
   put-by-val-large-index-blank-indexing-type   
                                                      5.8743+-0.0572     ?      6.0046+-0.2782        ? might be 1.0222x slower
   put-by-val-machine-int                             1.9415+-0.0820     ?      1.9819+-0.0261        ? might be 1.0208x slower
   rare-osr-exit-on-local                            12.8328+-0.4133           12.6913+-0.3078          might be 1.0112x faster
   register-pressure-from-osr                        15.8768+-0.2107     ?     15.9279+-0.2688        ?
   setter                                            10.6903+-0.2440     ?     10.7468+-0.3192        ?
   simple-activation-demo                            23.5605+-0.5218           23.4045+-0.4602        
   simple-getter-access                              31.9802+-2.4350           31.5043+-0.7733          might be 1.0151x faster
   slow-array-profile-convergence                     2.2819+-0.2244     ?      2.2859+-0.0866        ?
   slow-convergence                                   2.4819+-0.0562     ?      2.5894+-0.1911        ? might be 1.0433x slower
   sparse-conditional                                 0.9025+-0.1286     ?      0.9067+-0.0637        ?
   splice-to-remove                                  34.7090+-1.0254     ?     35.1881+-1.5913        ? might be 1.0138x slower
   string-char-code-at                               12.7178+-1.0729     ?     13.5532+-0.5287        ? might be 1.0657x slower
   string-concat-object                               1.8017+-0.0376     ?      1.9086+-0.3089        ? might be 1.0594x slower
   string-concat-pair-object                          1.7284+-0.0443     ?      1.7340+-0.0454        ?
   string-concat-pair-simple                         10.0825+-0.0947     ?     10.5920+-1.1789        ? might be 1.0505x slower
   string-concat-simple                              10.7007+-0.9321           10.3337+-0.1551          might be 1.0355x faster
   string-cons-repeat                                 6.6406+-0.0839     ?      6.6747+-0.1166        ?
   string-cons-tower                                  6.8616+-0.1788            6.8306+-0.1878        
   string-equality                                   24.5867+-0.3643           24.4832+-1.6380        
   string-get-by-val-big-char                         7.1893+-0.1049            7.0750+-0.1196          might be 1.0162x faster
   string-get-by-val-out-of-bounds-insane             3.1706+-0.0713     ?      3.2250+-0.0501        ? might be 1.0172x slower
   string-get-by-val-out-of-bounds                    2.6890+-0.0451     ?      2.7777+-0.0818        ? might be 1.0330x slower
   string-get-by-val                                  2.4312+-0.0622     ?      2.4323+-0.0076        ?
   string-hash                                        1.5512+-0.0271     ?      1.5786+-0.0337        ? might be 1.0176x slower
   string-long-ident-equality                        21.9065+-0.8889           21.6010+-0.4800          might be 1.0141x faster
   string-repeat-arith                               25.8989+-1.3851           25.8905+-1.1841        
   string-sub                                        50.5704+-1.2057     ?     50.8372+-0.4374        ?
   string-test                                        2.3288+-0.0712            2.2717+-0.0281          might be 1.0251x faster
   string-var-equality                               36.8400+-7.3311           34.3920+-0.6728          might be 1.0712x faster
   structure-hoist-over-transitions                   1.9705+-0.0168     ?      1.9705+-0.0354        ?
   switch-char-constant                               2.0526+-0.0831     ?      2.0605+-0.0338        ?
   switch-char                                        4.5370+-0.0409     ?      4.5388+-0.0767        ?
   switch-constant                                    6.4991+-0.1493     ?      6.5764+-0.1101        ? might be 1.0119x slower
   switch-string-basic-big-var                       12.2833+-0.7003           12.2460+-0.2190        
   switch-string-basic-big                           12.8124+-0.3156           12.6300+-0.1919          might be 1.0144x faster
   switch-string-basic-var                           11.9585+-0.1198     ?     12.0510+-0.2383        ?
   switch-string-basic                               12.5106+-0.8789           11.8444+-0.0804          might be 1.0563x faster
   switch-string-big-length-tower-var                18.0536+-1.1105           17.3878+-0.4741          might be 1.0383x faster
   switch-string-length-tower-var                    12.4534+-0.1587     ?     12.6730+-1.1704        ? might be 1.0176x slower
   switch-string-length-tower                        11.1302+-0.0723     ?     11.2511+-0.1786        ? might be 1.0109x slower
   switch-string-short                               11.0715+-0.0798     ?     11.2012+-0.2591        ? might be 1.0117x slower
   switch                                             9.6192+-0.1459     ?      9.6927+-0.0503        ?
   tear-off-arguments-simple                          1.5692+-0.2965            1.4616+-0.0286          might be 1.0736x faster
   tear-off-arguments                                 2.3118+-0.1417            2.2860+-0.0390          might be 1.0113x faster
   temporal-structure                                11.5048+-0.3431     ?     11.6188+-0.2192        ?
   to-int32-boolean                                  11.4911+-0.1208     ?     11.6115+-0.2057        ? might be 1.0105x slower
   undefined-test                                     2.4951+-0.0878            2.4440+-0.0289          might be 1.0209x faster
   unprofiled-licm                                   32.7851+-0.9030     ?     32.9747+-0.2451        ?
   weird-inlining-const-prop                          1.3372+-0.0895     ?      1.3865+-0.1259        ? might be 1.0369x slower

   &lt;arithmetic&gt;                                      12.8363+-0.1977     ?     12.9325+-0.2726        ? might be 1.0075x slower
   &lt;geometric&gt; *                                      6.5808+-0.0440     ?      6.6054+-0.0271        ? might be 1.0037x slower
   &lt;harmonic&gt;                                         3.0357+-0.0627     ?      3.0359+-0.0389        ? might be 1.0001x slower

                                                        WithoutBT                   WithBT                                      
AsmBench:
   bigfib.cpp                                       904.8443+-16.4908    ?    920.8026+-19.2952       ? might be 1.0176x slower
   cray.c                                           518.1676+-9.0886     ?    521.0995+-5.9082        ?
   dry.c                                            821.8760+-22.7555         815.6345+-14.5357       
   FloatMM.c                                       1414.0047+-23.0696    ?   1434.0497+-18.9260       ? might be 1.0142x slower
   gcc-loops.cpp                                   8355.7632+-79.4811    ?   8450.5498+-127.5787      ? might be 1.0113x slower
   n-body.c                                        1454.5997+-27.5138    ?   1457.6918+-20.9632       ?
   Quicksort.c                                      729.0630+-11.6187    ?    730.0959+-13.2260       ?
   stepanov_container.cpp                          4540.4850+-79.5394    ?   4553.9360+-34.2360       ?
   Towers.c                                         392.7635+-27.2796         384.2907+-5.8973          might be 1.0220x faster

   &lt;arithmetic&gt;                                    2125.7297+-14.6593    ?   2140.9056+-8.1701        ? might be 1.0071x slower
   &lt;geometric&gt; *                                   1270.1096+-6.6314     ?   1273.8272+-4.0344        ? might be 1.0029x slower
   &lt;harmonic&gt;                                       908.3719+-12.2412         906.8104+-3.6583          might be 1.0017x faster

                                                        WithoutBT                   WithBT                                      
All benchmarks:
   &lt;arithmetic&gt;                                     126.3109+-0.2650     ?    127.2125+-1.1030        ? might be 1.0071x slower
   &lt;geometric&gt;                                       11.5171+-0.0530     ?     11.5785+-0.0528        ? might be 1.0053x slower
   &lt;harmonic&gt;                                         2.7865+-0.0337     ?      2.7976+-0.0230        ? might be 1.0040x slower

                                                        WithoutBT                   WithBT                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   47.8749+-0.0571     !     48.2860+-0.1744        ! definitely 1.0086x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1007514</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-07 21:08:04 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 132670</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230993</attachid>
            <date>2014-05-07 05:20:29 -0700</date>
            <delta_ts>2014-05-07 19:52:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132650.diff</filename>
            <type>text/plain</type>
            <size>4924</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGE5YmM1YWIuLjU1MzIwODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDE0LTA1LTA3ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBbWDg2XSBFbWl0IEJUIGluc3RydWN0aW9u
IGZvciBzaW5nbGUtYml0IHRlc3RzLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTMy
NjUwPgorCisgICAgICAgIEltcGxlbWVudCB0ZXN0LWJpdC1hbmQtYnJhbmNoIHNsaWdodGx5IG1v
cmUgZWZmaWNpZW50bHkgYnkgdXNpbmcKKyAgICAgICAgQlQgKyBKQy9KTkMgaW5zdGVhZCBvZiBU
RVNUICsgSlovSk5aIHdoZW4gd2UncmUgb25seSB0ZXN0aW5nIGZvcgorICAgICAgICBhIHNpbmds
ZSBiaXQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZDb21tb246OnNpbmdsZUJpdEluZGV4KToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZDb21tb246OmJyYW5jaFRlc3QzMik6CisgICAgICAgICogYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmJ0X2k4cik6Cisg
ICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6YnRfaThtKToKKwogMjAxNC0wNS0wNiAgTWljaGFl
bCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgdGVzdCBmb3IgZGVs
ZXRlQWxsQ29tcGlsZWRDb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNmZkZjc5OC4uZjFlYzFi
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtMTE2MywxNCArMTE2Myw2NSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpDQyh4ODZDb25kaXRpb24oY29uZCkpKTsK
ICAgICB9CiAKKyAgICBpbnQgc2luZ2xlQml0SW5kZXgodW5zaWduZWQgbWFzaykKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobWFzaykgeworICAgICAgICBjYXNlIDB4MDAwMDAwMDE6IHJldHVybiAw
OworICAgICAgICBjYXNlIDB4MDAwMDAwMDI6IHJldHVybiAxOworICAgICAgICBjYXNlIDB4MDAw
MDAwMDQ6IHJldHVybiAyOworICAgICAgICBjYXNlIDB4MDAwMDAwMDg6IHJldHVybiAzOworICAg
ICAgICBjYXNlIDB4MDAwMDAwMTA6IHJldHVybiA0OworICAgICAgICBjYXNlIDB4MDAwMDAwMjA6
IHJldHVybiA1OworICAgICAgICBjYXNlIDB4MDAwMDAwNDA6IHJldHVybiA2OworICAgICAgICBj
YXNlIDB4MDAwMDAwODA6IHJldHVybiA3OworICAgICAgICBjYXNlIDB4MDAwMDAxMDA6IHJldHVy
biA4OworICAgICAgICBjYXNlIDB4MDAwMDAyMDA6IHJldHVybiA5OworICAgICAgICBjYXNlIDB4
MDAwMDA0MDA6IHJldHVybiAxMDsKKyAgICAgICAgY2FzZSAweDAwMDAwODAwOiByZXR1cm4gMTE7
CisgICAgICAgIGNhc2UgMHgwMDAwMTAwMDogcmV0dXJuIDEyOworICAgICAgICBjYXNlIDB4MDAw
MDIwMDA6IHJldHVybiAxMzsKKyAgICAgICAgY2FzZSAweDAwMDA0MDAwOiByZXR1cm4gMTQ7Cisg
ICAgICAgIGNhc2UgMHgwMDAwODAwMDogcmV0dXJuIDE1OworICAgICAgICBjYXNlIDB4MDAwMTAw
MDA6IHJldHVybiAxNjsKKyAgICAgICAgY2FzZSAweDAwMDIwMDAwOiByZXR1cm4gMTc7CisgICAg
ICAgIGNhc2UgMHgwMDA0MDAwMDogcmV0dXJuIDE4OworICAgICAgICBjYXNlIDB4MDAwODAwMDA6
IHJldHVybiAxOTsKKyAgICAgICAgY2FzZSAweDAwMTAwMDAwOiByZXR1cm4gMjA7CisgICAgICAg
IGNhc2UgMHgwMDIwMDAwMDogcmV0dXJuIDIxOworICAgICAgICBjYXNlIDB4MDA0MDAwMDA6IHJl
dHVybiAyMjsKKyAgICAgICAgY2FzZSAweDAwODAwMDAwOiByZXR1cm4gMjM7CisgICAgICAgIGNh
c2UgMHgwMTAwMDAwMDogcmV0dXJuIDI0OworICAgICAgICBjYXNlIDB4MDIwMDAwMDA6IHJldHVy
biAyNTsKKyAgICAgICAgY2FzZSAweDA0MDAwMDAwOiByZXR1cm4gMjY7CisgICAgICAgIGNhc2Ug
MHgwODAwMDAwMDogcmV0dXJuIDI3OworICAgICAgICBjYXNlIDB4MTAwMDAwMDA6IHJldHVybiAy
ODsKKyAgICAgICAgY2FzZSAweDIwMDAwMDAwOiByZXR1cm4gMjk7CisgICAgICAgIGNhc2UgMHg0
MDAwMDAwMDogcmV0dXJuIDMwOworICAgICAgICBjYXNlIDB4ODAwMDAwMDA6IHJldHVybiAzMTsK
KyAgICAgICAgZGVmYXVsdDogcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCiAgICAgSnVt
cCBicmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBUcnVz
dGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCiAgICAgeworICAgICAgICBpbnQgYml0
SW5kZXggPSBzaW5nbGVCaXRJbmRleChtYXNrLm1fdmFsdWUpOworICAgICAgICBpZiAoKGNvbmQg
PT0gWmVybyB8fCBjb25kID09IE5vblplcm8pICYmIGJpdEluZGV4ICE9IC0xKSB7CisgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5idF9pOHIoYml0SW5kZXgsIHJlZyk7CisgICAgICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qQ0MoY29uZCA9PSBaZXJvID8gWDg2QXNzZW1ibGVyOjpDb25k
aXRpb25OQyA6IFg4NkFzc2VtYmxlcjo6Q29uZGl0aW9uQykpOworICAgICAgICB9CisKICAgICAg
ICAgdGVzdDMyKGNvbmQsIHJlZywgbWFzayk7CiAgICAgICAgIHJldHVybiBicmFuY2goY29uZCk7
CiAgICAgfQogCiAgICAgSnVtcCBicmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIEFk
ZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQogICAg
IHsKKyAgICAgICAgaW50IGJpdEluZGV4ID0gc2luZ2xlQml0SW5kZXgobWFzay5tX3ZhbHVlKTsK
KyAgICAgICAgaWYgKChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvKSAmJiBiaXRJbmRl
eCAhPSAtMSkgeworICAgICAgICAgICAgbV9hc3NlbWJsZXIuYnRfaThtKGJpdEluZGV4LCBhZGRy
ZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmpDQyhjb25kID09IFplcm8gPyBYODZBc3NlbWJsZXI6OkNvbmRpdGlvbk5DIDogWDg2
QXNzZW1ibGVyOjpDb25kaXRpb25DKSk7CisgICAgICAgIH0KKwogICAgICAgICBnZW5lcmF0ZVRl
c3QzMihhZGRyZXNzLCBtYXNrKTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuakND
KHg4NkNvbmRpdGlvbihjb25kKSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCmluZGV4IDRhMDFjNzIuLjMzOTg2MWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaApAQCAtMjc4LDYg
KzI3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIE9QX1NFVENDICAgICAgICAgICAgPSAweDkwLAog
ICAgICAgICBPUDJfM0JZVEVfRVNDQVBFICAgID0gMHhBRSwKICAgICAgICAgT1AyX0lNVUxfR3ZF
diAgICAgICA9IDB4QUYsCisgICAgICAgIE9QMl9HUk9VUF9CVCAgICAgICAgPSAweEJBLAogICAg
ICAgICBPUDJfTU9WWlhfR3ZFYiAgICAgID0gMHhCNiwKICAgICAgICAgT1AyX01PVlNYX0d2RWIg
ICAgICA9IDB4QkUsCiAgICAgICAgIE9QMl9NT1ZaWF9HdkV3ICAgICAgPSAweEI3LApAQCAtMzM2
LDYgKzMzNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIEdST1VQMTRfT1BfUFNMTFEgPSA2LAogICAg
ICAgICBHUk9VUDE0X09QX1BTUkxRID0gMiwKIAorICAgICAgICBHUk9VUF9CVF9PUF9CVCA9IDQs
CisKICAgICAgICAgRVNDQVBFX0REX0ZTVFBfZG91YmxlUmVhbCA9IDMsCiAgICAgfSBHcm91cE9w
Y29kZUlEOwogICAgIApAQCAtMTIyMSw2ICsxMjI0LDE4IEBAIHB1YmxpYzoKICAgICAgICAgbV9m
b3JtYXR0ZXIuaW1tZWRpYXRlOChpbW0pOwogICAgIH0KIAorICAgIHZvaWQgYnRfaThyKGludCBi
aXRJbmRleCwgUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Zvcm1hdHRlci50d29C
eXRlT3AoT1AyX0dST1VQX0JULCBHUk9VUF9CVF9PUF9CVCwgc3JjKTsKKyAgICAgICAgbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlOChiaXRJbmRleCk7CisgICAgfQorCisgICAgdm9pZCBidF9pOG0oaW50
IGJpdEluZGV4LCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2UpCisgICAgeworICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoT1AyX0dST1VQX0JULCBHUk9VUF9CVF9PUF9CVCwgYmFzZSwg
b2Zmc2V0KTsKKyAgICAgICAgbV9mb3JtYXR0ZXIuaW1tZWRpYXRlOChiaXRJbmRleCk7CisgICAg
fQorCiAgICAgdm9pZCBzZXRDQ19yKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGRzdCkKICAg
ICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcDgoc2V0Y2NPcGNvZGUoY29uZCksIChH
cm91cE9wY29kZUlEKTAsIGRzdCk7Cg==
</data>
<flag name="review"
          id="255400"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>