<?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>151741</bug_id>
          
          <creation_ts>2015-12-02 01:13:49 -0800</creation_ts>
          <short_desc>[JSC] Add a function attribute for Pure functions in B3</short_desc>
          <delta_ts>2015-12-02 14:17: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>1145534</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-02 01:13:49 -0800</bug_when>
    <thetext>[JSC] Add a function attribute for Pure functions in B3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145535</commentid>
    <comment_count>1</comment_count>
      <attachid>266435</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-02 01:16:39 -0800</bug_when>
    <thetext>Created attachment 266435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145637</commentid>
    <comment_count>2</comment_count>
      <attachid>266435</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-02 11:17:28 -0800</bug_when>
    <thetext>Comment on attachment 266435
Patch

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

r=me

&gt; Source/JavaScriptCore/b3/B3CCallValue.h:38
&gt; +    enum Pure { PureCall };

Usually we call this &quot;enum PureCallTag { PureCall }&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145725</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-12-02 14:12:46 -0800</bug_when>
    <thetext>Committed r192967: &lt;http://trac.webkit.org/changeset/192967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145726</commentid>
    <comment_count>4</comment_count>
      <attachid>266435</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-02 14:17:27 -0800</bug_when>
    <thetext>Comment on attachment 266435
Patch

This doesn&apos;t belong here at all.  A pure function can be labeled by setting its Effects appropriately.  Also, I really hate the word &quot;pure&quot; since it has no precise meaning.  Do you mean that a call to the function with the same incoming values will yield the same result?  Do you also mean that the function has no hidden effects that cause it to require execution even if the result is unused?  Do you also mean that it will never read any memory, or can it still read some memory?

I created B3::Effects with the intent that it can answer all of these questions precisely:
- You can say that a function reads no memory.
- You can say that a function writes no memory.
- You can say that a function is not control-dependent.
- You can say that a function will not side-exit (for C functions a side-exit would be if it triggered unwinding - so this can always be cleared for all of the C functions we call).

The strongest purity guarantee is &quot;any call to this function with the same arguments will yield the same result&quot;.  I believe that this guarantee can be expressed by saying that it does not read or write memory, does not have SSA effects, doesn&apos;t do any of the other things (control-dependent, side-exit, terminal).  My goal with CSE was to have pure CSE rules on calls and patchpoints that do this.

So, can we please roll this out?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266435</attachid>
            <date>2015-12-02 01:16:39 -0800</date>
            <delta_ts>2015-12-02 14:17:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151741-20151202011615.patch</filename>
            <type>text/plain</type>
            <size>3582</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyOTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
YmNlNDk0MmQ2OTU0MDgyMGY0ODAwY2JjMDY4YWZmMTA5ZGE2ZGFmLi4xODA4MjNiYTU0OTQ4Y2U3
MGM3MmFjZDYzMjczMjViZjczMmIxNWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNS0xMi0wMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgYSBmdW5jdGlvbiBhdHRyaWJ1dGUgZm9yIFB1cmUg
ZnVuY3Rpb25zIGluIEIzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTE3NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZSBoYXZlIHBsZW50eSBvZiBmdW5jdGlvbnMgd2l0aG91dCBzaWRlIGVmZmVjdHMK
KyAgICAgICAgd2hlbiBsb3dlcmluZyBERkcuCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGUg
IlB1cmVDYWxsIiBmbGFnIHRvIEIzJ3MgQ0NhbGwKKyAgICAgICAgdG8gbWFrZSBzdXJlIHRob3Nl
IGZ1bmN0aW9ucyBkbyBub3QgcHJldmVudCBvcHRpbWl6YXRpb25zLgorCisgICAgICAgICogYjMv
QjNDQ2FsbFZhbHVlLmg6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RDYWxsU2ltcGxlUHVyZSk6CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorCiAyMDE1
LTEyLTAxICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAg
IFtFUzZdIEltcGxlbWVudCBMTEludC9CYXNlbGluZSBTdXBwb3J0IGZvciBFUzYgR2VuZXJhdG9y
cyBhbmQgZW5hYmxlIHRoaXMgZmVhdHVyZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ0NhbGxWYWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxW
YWx1ZS5oCmluZGV4IDFjNjVlOWI0MDEwNjAzMDdlM2Q1ZGY5MzI3OWVjYTkzNDIxOTVkODQuLjE1
ZDZiOTNlOGVmMTU4NmUxOGIzNmY0Mjc1OGM0ZjVlZmMxOTY1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgKQEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENDYWxsVmFsdWUgOiBw
dWJsaWMgVmFsdWUgewogcHVibGljOgorICAgIGVudW0gUHVyZSB7IFB1cmVDYWxsIH07CiAgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ0Nh
bGw7IH0KIAogICAgIH5DQ2FsbFZhbHVlKCk7CkBAIC01MCw2ICs1MSwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAsIGVmZmVjdHMoRWZmZWN0czo6Zm9yQ2FsbCgpKQogICAgIHsKICAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQ0NhbGxWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBQdXJlLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlw
ZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCisgICAgeworICAgIH0KIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCBhYjQxYjYy
MzRkNjU4MGM1NzljMThlOTIyMTVmYjAzZTkzNzVkM2RiLi42OTljMzYxNGU3NTNhMjY4MWI2MDk0
NjkxMjRlYzhiZjZhOGI1NmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcApAQCAt
NDYyNSw2ICs0NjI1LDIxIEBAIHZvaWQgdGVzdENhbGxTaW1wbGUoaW50IGEsIGludCBiKQogICAg
IENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhLCBiKSA9PSBhICsgYik7CiB9CiAKK3Zv
aWQgdGVzdENhbGxTaW1wbGVQdXJlKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8Q0NhbGxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBJ
bnQzMiwgT3JpZ2luKCksIENDYWxsVmFsdWU6OlB1cmVDYWxsLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHNpbXBsZUZ1bmN0aW9uKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50
Pihwcm9jLCBhLCBiKSA9PSBhICsgYik7Cit9CisKIGludCBmdW5jdGlvbldpdGhIZWxsYUFyZ3Vt
ZW50cyhpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZCwgaW50IGUsIGludCBmLCBpbnQgZywgaW50
IGgsIGludCBpLCBpbnQgaiwgaW50IGssIGludCBsLCBpbnQgbSwgaW50IG4sIGludCBvLCBpbnQg
cCwgaW50IHEsIGludCByLCBpbnQgcywgaW50IHQsIGludCB1LCBpbnQgdiwgaW50IHcsIGludCB4
LCBpbnQgeSwgaW50IHopCiB7CiAgICAgcmV0dXJuIChhIDw8IDApICsgKGIgPDwgMSkgKyAoYyA8
PCAyKSArIChkIDw8IDMpICsgKGUgPDwgNCkgKyAoZiA8PCA1KSArIChnIDw8IDYpICsgKGggPDwg
NykgKyAoaSA8PCA4KSArIChqIDw8IDkpICsgKGsgPDwgMTApICsgKGwgPDwgMTEpICsgKG0gPDwg
MTIpICsgKG4gPDwgMTMpICsgKG8gPDwgMTQpICsgKHAgPDwgMTUpICsgKHEgPDwgMTYpICsgKHIg
PDwgMTcpICsgKHMgPDwgMTgpICsgKHQgPDwgMTkpICsgKHUgPDwgMjApICsgKHYgPDwgMjEpICsg
KHcgPDwgMjIpICsgKHggPDwgMjMpICsgKHkgPDwgMjQpICsgKHogPDwgMjUpOwpAQCAtNTg4OSw2
ICs1OTA0LDcgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0U3Bp
bGxGUCgpKTsKIAogICAgIFJVTih0ZXN0Q2FsbFNpbXBsZSgxLCAyKSk7CisgICAgUlVOKHRlc3RD
YWxsU2ltcGxlUHVyZSgxLCAyKSk7CiAgICAgUlVOKHRlc3RDYWxsRnVuY3Rpb25XaXRoSGVsbGFB
cmd1bWVudHMoKSk7CiAKICAgICBSVU4odGVzdFJldHVybkRvdWJsZSgwLjApKTsK
</data>
<flag name="review"
          id="291451"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>