<?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>193094</bug_id>
          
          <creation_ts>2019-01-02 17:10:33 -0800</creation_ts>
          <short_desc>DFG IntegerRangeOptimization phase exceeding loop limit shouldn&apos;t ASSERT</short_desc>
          <delta_ts>2022-02-27 23:29:21 -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>JavaScriptCore</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1491326</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-01-02 17:10:33 -0800</bug_when>
    <thetext>The current value of 50 for giveUpThreshold in DFGIntegerRangeOptimizationPhase.cpp is somewhat arbitrary.  It works for all our current tests, including benchmarks with real world code.  One can construct test cases that will exceed the threshold.  For example the code:

    const theNumber100 = 100;
    function foo() {
        for (var i = 0; i &lt; 1000; ++i) {
            switch (i + 1000) {
            case 0:
            case 2:
            case 23:
            case 26:
            case 29:
            case 32:
            case 35:
            case 38:
            case 41:
            case 44:
            case 46:
            case 49:
            case 52:
            case 55:
            case 58:
            case 61:
            case theNumber100:
                break;
            }
        }
    }

Due to the sequence of compare &amp; branch byte code generated due to the const, this code takes 53 loop iterations to converge.  Add a few more case statements and the loop count grows higher.  B3 has optimizations to handle this kind of compare and branch code even without running the IntegerRangeOptimization phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491327</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-01-02 17:11:09 -0800</bug_when>
    <thetext>&lt;rdar://problem/45838655&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491338</commentid>
    <comment_count>2</comment_count>
      <attachid>358230</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-01-02 17:30:41 -0800</bug_when>
    <thetext>Created attachment 358230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491360</commentid>
    <comment_count>3</comment_count>
      <attachid>358230</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-02 19:17:29 -0800</bug_when>
    <thetext>Comment on attachment 358230
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1098
&gt;                  // If you hit this assertion for a legitimate case, update the giveUpThreshold
&gt;                  // to the smallest values that converges.

There is no more assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491448</commentid>
    <comment_count>4</comment_count>
      <attachid>358230</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-01-03 09:55:12 -0800</bug_when>
    <thetext>Comment on attachment 358230
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1098
&gt;&gt;                  // to the smallest values that converges.
&gt; 
&gt; There is no more assertion.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491452</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2019-01-03 09:58:34 -0800</bug_when>
    <thetext>Committed r239595: &lt;https://trac.webkit.org/changeset/239595&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358230</attachid>
            <date>2019-01-02 17:30:41 -0800</date>
            <delta_ts>2022-02-27 23:29:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>193094.patch</filename>
            <type>text/plain</type>
            <size>2325</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjM5NTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDE5LTAxLTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb24gcGhhc2UgZXhjZWVkaW5nIGxvb3AgbGlt
aXQgc2hvdWxkbid0IEFTU0VSVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkzMDk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVtb3ZlZCB0aGlzIGRlYnVnIG9ubHkgQVNTRVJUIGFzIG9uZSBjYW4gY29u
c3RydWN0IHRlc3QgY2FzZXMgdGhhdCB3aWxsIGV4Y2VlZCB0aGUgZ2l2ZVVwVGhyZXNob2xkCisg
ICAgICAgIGFtb3VudC4gICBUaGlzIGNhbiBiZSBkb25lIHdpdGggYSBsYXJnZSBzd2l0Y2ggc3Rh
dGVtZW50IHdpdGggYXQgbGVhc3Qgb25lIGNvbnN0IG9yIHZhcmlhYmxlIGNhc2UKKyAgICAgICAg
Y2xhdXNlLiAgU3VjaCBjb2RlIGJ5dGVjb21waWxlcyB0byBjb21wYXJlIC8ganRydWUgc2VxdWVu
Y2VzLiAgSW5jcmVhc2luZyB0aGUgZ2l2ZVVwVGhyZXNob2xkIGNvdW50CisgICAgICAgIGRvZXNu
J3QgaGVscCB3aXRoIHRoZSBldmVudHVhbCBjb2RlIGdlbmVyYXRlZCBhcyBCMyBoYXMgb3B0aW1p
emF0aW9ucyB0byBjb2FsZXNjZSBjb21wYXJlIC8gYnJhbmNoCisgICAgICAgIGNvZGUgc2VxdWVu
Y2VzIGV2ZW4gd2hlbiB3ZSBkb24ndCBydW4gdGhlIEludGVnZXJSYW5nZU9wdGltaXphdGlvbiBw
aGFzZS4KKworICAgICAgICAqIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5j
cHA6CisKIDIwMTgtMTItMzEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CiAKICAgICAgICAgU291cmNlUHJvdmlkZXJzIHNob3VsZCB1c2UgYW4gYWN0dWFsIFVSTCBpbnN0
ZWFkIG9mIGEgc3RyaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVn
ZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMjM5NTcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VP
cHRpbWl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTIsMTMgKzEwOTIsMTIg
QEAgcHVibGljOgogICAgICAgICAgICAgKyttX2l0ZXJhdGlvbnM7CiAgICAgICAgICAgICBpZiAo
bV9pdGVyYXRpb25zID49IGdpdmVVcFRocmVzaG9sZCkgewogICAgICAgICAgICAgICAgIC8vIFRo
aXMgY2FzZSBpcyBub3QgbmVjZXNzYXJpbHkgd3JvbmcgYnV0IGl0IGNhbiBiZSBhIHNpZ24gdGhh
dCB0aGlzIHBoYXNlCi0gICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgY29udmVyZ2UuCisgICAg
ICAgICAgICAgICAgLy8gZG9lcyBub3QgY29udmVyZ2UuIFRoZSB2YWx1ZSBnaXZlVXBUaHJlc2hv
bGQgd2FzIGNob3NlbiBlbXBlcmljYWxseSBiYXNlZCBvbgorICAgICAgICAgICAgICAgIC8vIGN1
cnJlbnQgdGVzdHMgYW5kIHJlYWwgd29ybGQgSlMuCiAgICAgICAgICAgICAgICAgLy8gSWYgeW91
IGhpdCB0aGlzIGFzc2VydGlvbiBmb3IgYSBsZWdpdGltYXRlIGNhc2UsIHVwZGF0ZSB0aGUgZ2l2
ZVVwVGhyZXNob2xkCiAgICAgICAgICAgICAgICAgLy8gdG8gdGhlIHNtYWxsZXN0IHZhbHVlcyB0
aGF0IGNvbnZlcmdlcy4KLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAot
ICAgICAgICAgICAgICAgIC8vIEluIHJlbGVhc2UsIGRvIG5vdCByaXNrIGhvbGRpbmcgdGhlIHRo
cmVhZCBmb3IgdG9vIGxvbmcgc2luY2UgdGhpcyBwaGFzZQotICAgICAgICAgICAgICAgIC8vIGlz
IHJlYWxseSBzbG93LgorICAgICAgICAgICAgICAgIC8vIERvIG5vdCByaXNrIGhvbGRpbmcgdGhl
IHRocmVhZCBmb3IgdG9vIGxvbmcgc2luY2UgdGhpcyBwaGFzZSBpcyByZWFsbHkgc2xvdy4KICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAK
</data>
<flag name="review"
          id="375069"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>