<html>
    <head>
      <base href="https://bugs.webkit.org/" />
    </head>
    <body>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - op_get_by_id_with_this should use inline caching"
   href="https://bugs.webkit.org/show_bug.cgi?id=162124#c30">Comment # 30</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - op_get_by_id_with_this should use inline caching"
   href="https://bugs.webkit.org/show_bug.cgi?id=162124">bug 162124</a>
              from <span class="vcard"><a class="email" href="mailto:ticaiolima&#64;gmail.com" title="Caio Lima &lt;ticaiolima&#64;gmail.com&gt;"> <span class="fn">Caio Lima</span></a>
</span></b>
        <pre>(In reply to <a href="show_bug.cgi?id=162124#c28">comment #28</a>)
<span class="quote">&gt; (In reply to <a href="show_bug.cgi?id=162124#c20">comment #20</a>)
&gt; &gt; (In reply to <a href="show_bug.cgi?id=162124#c19">comment #19</a>)
&gt; &gt; &gt; Why would we do this?
&gt; &gt; 
&gt; &gt; If I didn't miss any context *_with_this were created to solve the bug on
&gt; &gt; (<a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - Getter and setter on super are called with wrong &quot;this&quot; object"
   href="show_bug.cgi?id=147064">https://bugs.webkit.org/show_bug.cgi?id=147064</a>). The current
&gt; &gt; implementationis just a call to slow paths &quot;operation*WithThis&quot;, meaning
&gt; &gt; that we don't use IC or PIC on &quot;super.foo&quot; for example.
&gt; &gt; Merging get_by_id_with_this with op_get_by_id we enable its optimization
&gt; &gt; including IC and PIC. In terms of performance, now it means 20% faster over
&gt; &gt; op_get_by_id_with_this version.
&gt; 
&gt; Then you should make get_by_id_with_this use inline caches. 
&gt; 
&gt; You shouldn't change get_by_id. 
&gt; 
&gt; &gt; 
&gt; &gt; &gt; It's definitely good for lower tiers that get_by_id does not take an extra
&gt; &gt; &gt; this operand.  It's also easier to parse.  I don't understand why we would
&gt; &gt; &gt; remove this optimization.
&gt; &gt; 
&gt; &gt; I didn't understand why it is easier to parse.
&gt; &gt; Also, About good parts of get_by_id does not take an extra this operand, do
&gt; &gt; you mind explain me why? I can think that we use extra memory to store the
&gt; &gt; this operand, which has a big impact because get_by_id is one of the most
&gt; &gt; used op_codes.
&gt; 
&gt; Compiler analyses always have an O(E) component, where E is the number of
&gt; data flow edges. One such analysis is the OSR likeness analysis in the DFG
&gt; and FTL. It's a very expensive analysis and we don't want to make it worse.
&gt; You're adding a useless &quot;this&quot; data flow edge to every property access. I
&gt; don't think we want that. </span >

Thank you for this explanation. I implemented a logic to avoid create an edge if ```base == this``` just thinking in memory usage, but it is interesting know that it also affects analyses performance.

<span class="quote">&gt; I just want to be very clear: I'm strongly against uniting get_by_id with
&gt; get_by_id_with_this. Please change your approach to making the unification
&gt; happen at the PolymorphicAxcess/StructureStubInfo level and please keep
&gt; these opcodes sepaate.</span >

Agreed. I don't like the idea of an operand for ```this``` in all property access on op_get_by_id since it is useless ~95% of time. 

(In reply to <a href="show_bug.cgi?id=162124#c29">comment #29</a>)
<span class="quote">&gt; I agree with Fil. I think we should just abstract the IC machinery to allow
&gt; for get_by_id_with_this semantics. It probably requires modifying
&gt; PolymorphicAccess, a new IC generator for the baseline, and proper handling
&gt; in the DFG/FTL. I suspect you'll be able to abstract certain code in the
&gt; DFG/FTL to handle both nodes. Also, I suspect the heart of the work you
&gt; already did was in PolymorphicAccess and StructureStubInfo, so all of that
&gt; code should not really be changed regardless of if the opcodes are united or
&gt; not.</span >

Cool. I am going to work on that.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>