<div dir="ltr">I think what you want Eliot is not necessarily related to frameless methods.<div><br></div><div>I think what you want is that if there are several storeChecks in the same object in-between two interrupt points, which could be several inst var store or several inlined at: put: on the same object, you want to merge the storeCheck logic so it&#39;s done in one place instead of multiple.</div><div><br></div><div>In the case of frameless methods, there are no interrupt points, so it works for the whole method. However, I don&#39;t see why the technique would not apply if you write code such as:</div><div><br></div><div>foo: arg1</div><div>    &quot;any code here that may include sends or anything&quot;</div><div>    instVar1 := 1.</div><div>    instVar2 := arg1.</div><div>    instVar3 := #bar.</div><div>    &quot;any code here that may include sends or anything&quot;</div><div><br></div><div>In this case you can merge the store check for the 3 inst var as it&#39;s done in between two interrupt points.</div><div><br></div><div>Currently, for each instVar store, the process is:</div><div>- is the value stored a immediate ?</div><div>- is the object holding the instVar young ?</div><div>- is the value stored old ?</div><div>- is the object holding the instVar already remembered ?</div><div>If all 4 are false, the object holding the instVar needs to be added in the remembered table.</div><div><br></div><div>And I guess the 2 tests on the object holding the inst var, 2 out of 4, could be done only once.</div><div><br></div><div>In the future I guess that the write barrier will be more important because of the tricolor marking GC. As far as I understood, we&#39;ll have to check in addition if the object and the value are not black &amp; white or white &amp; black, in which case we need to color one of the operands to gray. So I guess an improvement there may be valuable.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-04-24 8:05 GMT+02:00 stephane ducasse <span dir="ltr">&lt;<a href="mailto:stephane.ducasse@gmail.com" target="_blank">stephane.ducasse@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hi eliot<br>
<br>
<br>
&gt; Hi All,<br>
&gt;<br>
&gt;     here&#39;s a challenge.  Currently the JIT is naive about a sequence of inst var assignments.  It treats assignment separately, each getting its own copy of the store check.  For example when initializing an Interval via:<br>
&gt;<br>
&gt; setFrom: startInteger to: stopInteger by: stepInteger<br>
&gt;<br>
&gt;       start := startInteger.<br>
&gt;       stop := stopInteger.<br>
&gt;       step := stepInteger<br>
<br>
<br>
Is this pattern frequent?<br>
Because it was proposed by K. Beck but do people use it?<br>
Especially now with automatic invocation of initialize, we often have<br>
<br>
        start := startInteger.<br>
&gt;      stop := stopInteger.<br>
&gt;      step := stepInteger<br>
        self do.</blockquote></div><br></div>