<?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>154704</bug_id>
          
          <creation_ts>2016-02-25 16:54:58 -0800</creation_ts>
          <short_desc>[JSC] Add32(Imm, Tmp, Tmp) does not ZDef the destination if Imm is zero</short_desc>
          <delta_ts>2016-02-27 15:10:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1168304</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-25 16:54:58 -0800</bug_when>
    <thetext>[JSC] Add32(Imm, Tmp, Tmp) does not ZDef the destination if Imm is zero</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168316</commentid>
    <comment_count>1</comment_count>
      <attachid>272266</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-02-25 17:17:46 -0800</bug_when>
    <thetext>Created attachment 272266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168317</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-25 17:19:04 -0800</bug_when>
    <thetext>Attachment 272266 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:431:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168443</commentid>
    <comment_count>3</comment_count>
      <attachid>272266</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-26 00:15:00 -0800</bug_when>
    <thetext>Comment on attachment 272266
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168598</commentid>
    <comment_count>4</comment_count>
      <attachid>272266</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 11:18:50 -0800</bug_when>
    <thetext>Comment on attachment 272266
Patch

Clearing flags on attachment: 272266

Committed r197186: &lt;http://trac.webkit.org/changeset/197186&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168599</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 11:18:55 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168907</commentid>
    <comment_count>6</comment_count>
      <attachid>272266</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-27 15:09:51 -0800</bug_when>
    <thetext>Comment on attachment 272266
Patch

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

&gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:204
&gt;      void add32(TrustedImm32 imm, RegisterID src, RegisterID dest)
&gt;      {
&gt;          if (!imm.m_value) {
&gt; -            move(src, dest);
&gt; +            zeroExtend32ToPtr(src, dest);
&gt;              return;
&gt;          }
&gt;  

I think that this is still wrong.  Can we please remove this strength reduction rule from the MacroAssembler?  Unless a move instruction sets the same flags as an add32 instruction, then this constant-folding rule will cause us great confusion if we ever start reasoning about flags.  Reasoning about flags unlocks smart things, like realizing that if you compare the result of an addition to zero, you can usually just remove the compare (or test) instruction and branch directly on add&apos;s flags.

I&apos;ve already removed all other places that I found where we did this !imm.m_value optimization, because they were also causing ZDef bugs.  I then removed the add32AndSetFlags() thing because that appeared to mostly be for avoiding this optimization.  So, now the expectation is that add32() sets flags.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168908</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-27 15:10:27 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 272266 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272266&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:204
&gt; &gt;      void add32(TrustedImm32 imm, RegisterID src, RegisterID dest)
&gt; &gt;      {
&gt; &gt;          if (!imm.m_value) {
&gt; &gt; -            move(src, dest);
&gt; &gt; +            zeroExtend32ToPtr(src, dest);
&gt; &gt;              return;
&gt; &gt;          }
&gt; &gt;  
&gt; 
&gt; I think that this is still wrong.  Can we please remove this strength
&gt; reduction rule from the MacroAssembler?  Unless a move instruction sets the
&gt; same flags as an add32 instruction, then this constant-folding rule will
&gt; cause us great confusion if we ever start reasoning about flags.  Reasoning
&gt; about flags unlocks smart things, like realizing that if you compare the
&gt; result of an addition to zero, you can usually just remove the compare (or
&gt; test) instruction and branch directly on add&apos;s flags.
&gt; 
&gt; I&apos;ve already removed all other places that I found where we did this
&gt; !imm.m_value optimization, because they were also causing ZDef bugs.  I then
&gt; removed the add32AndSetFlags() thing because that appeared to mostly be for
&gt; avoiding this optimization.  So, now the expectation is that add32() sets
&gt; flags.

I just realized that I&apos;m wrong - three-operand add32() on X86 doesn&apos;t set flags!

Never mind everything I said above.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272266</attachid>
            <date>2016-02-25 17:17:46 -0800</date>
            <delta_ts>2016-02-26 11:18:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154704-20160225171729.patch</filename>
            <type>text/plain</type>
            <size>2953</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZjcyZDljYjAyOTkzMzBkYjBkYTBkNGJiNGQ4YmI1YTU5MjBlNTAwLi44N2RkOWZhOTQ0MDU5YzVl
NDU5YWQyN2M4NTNjMjQ1ODJhODVjY2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxOSBAQAogMjAxNi0wMi0yNSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KIAorICAgICAgICBbSlNDXSBBZGQzMihJbW0sIFRtcCwgVG1wKSBkb2VzIG5vdCBaRGVm
IHRoZSBkZXN0aW5hdGlvbiBpZiBJbW0gaXMgemVybworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NzA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSWYgdGhlIEltbSBpcyB6ZXJvLCB3ZSBzaG91bGQgc3Rp
bGwgemVybyB0aGUgdG9wIGJpdHMKKyAgICAgICAgdG8gbWF0Y2ggdGhlIGRlZmluaXRpb24gaW4g
QWlyT3Bjb2Rlcy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1v
bi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6YWRkMzIpOgorICAg
ICAgICAqIGIzL3Rlc3RiMy5jcHA6CisKKzIwMTYtMDItMjUgIEJlbmphbWluIFBvdWxhaW4gIDxi
cG91bGFpbkBhcHBsZS5jb20+CisKICAgICAgICAgW0pTQ10gUmVtb3ZlIGEgdXNlbGVzcyAiTW92
ZSIgaW4gdGhlIGxvd2VyaW5nIG9mIFNlbGVjdAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NjcwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAppbmRleCAzZWY5
ODg1NjQxNTI2OGZkOTJhODA4MzU4MGY4ODZmZDE5OWM1ZDZjLi4wOGVhNTc1OWQ3ZDkxZGQ2MThj
NDg5YmIxOGZhNTM4MWYzODA3NDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCkBAIC0xOTgsNyArMTk4
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmICghaW1tLm1fdmFsdWUp
IHsKLSAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgIHplcm9FeHRlbmQz
MlRvUHRyKHNyYywgZGVzdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAyZWMzMWY4OTU4NmU0YzNiOGFlNjdmYTI5
NGVhYTBkMzBlN2I0ODc5Li42MzE1NDNlNjJiZWU3MzdmOGRkNDcwYzZiMmFmNGRkMGI4ZWM1NDdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAtNDEyLDYgKzQxMiwyNSBAQCB2
b2lkIHRlc3RBZGRJbW1NZW0zMihpbnQzMl90IGEsIGludDMyX3QgYikKICAgICBDSEVDSyhpbnB1
dE91dHB1dCA9PSBhICsgYik7CiB9CiAKK3ZvaWQgdGVzdEFkZEFyZ1plcm9JbW1aRGVmKCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIFZhbHVlKiBhcmcgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICBw
cm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFs
dWUqIGNvbnN0WmVybyA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAwKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAg
ICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICBhcmcsCisgICAgICAg
ICAgICBjb25zdFplcm8pKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYywgMCk7Cisg
ICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCAweDAxMjM0NTY3ODlhYmNkZWYpID09IDB4
ODlhYmNkZWYpOworfQorCiB2b2lkIHRlc3RBZGRMb2FkVHdpY2UoKQogewogICAgIGF1dG8gdGVz
dCA9IFsmXSAodW5zaWduZWQgb3B0TGV2ZWwpIHsKQEAgLTEwNjE1LDYgKzEwNjM0LDcgQEAgdm9p
ZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTl9CSU5BUlkodGVzdEFkZEFyZ01lbTMy
LCBpbnQzMk9wZXJhbmRzKCksIGludDMyT3BlcmFuZHMoKSk7CiAgICAgUlVOX0JJTkFSWSh0ZXN0
QWRkTWVtQXJnMzIsIGludDMyT3BlcmFuZHMoKSwgaW50MzJPcGVyYW5kcygpKTsKICAgICBSVU5f
QklOQVJZKHRlc3RBZGRJbW1NZW0zMiwgaW50MzJPcGVyYW5kcygpLCBpbnQzMk9wZXJhbmRzKCkp
OworICAgIFJVTih0ZXN0QWRkQXJnWmVyb0ltbVpEZWYoKSk7CiAgICAgUlVOKHRlc3RBZGRMb2Fk
VHdpY2UoKSk7CiAKICAgICBSVU4odGVzdEFkZEFyZ0RvdWJsZShNX1BJKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>