Hi,<br><br>I&#39;ve been trying out writing my own interpreter using the PyPy framework recently, as a bit of fun. I&#39;ve been trying to get the JIT to optimize a trivial loop down to the minimal amount of operations. With judicious use of `_immutable_fields_` and `_virtualizable2_`, I&#39;ve got pretty close.<br>
<br>But I&#39;m still seeing lots of calls to `ll_dict_lookup__dicttablePtr_Signed_Signed`, which don&#39;t correspond to any code in my interpreter. I don&#39;t think I even have any dicts that take integer keys. Could someone give me a hint where these are coming from and for what purpose? Or perhaps how to inspect the dicts or get further info?<br>
<br>I append what I&#39;m seeing in the logs (Note: I&#39;ve augmented the logs to give the raw pointer). In this case, it is only looking up the value 21, but I&#39;ve seen other values in addition when running other programs. The setarrayitem_gc calls are expected - it is nulling out the stack that was being used. Everything from i17 is unexpected. I tested on revisions 00711ff1e03d and 96a212b0688a.<br>
<br>Thanks,<br><br>Boris<br><br><br>#############################<br><br>[3fd12ea6569db] {jit-log-opt-loop<br># Loop 0 : loop with 37 ops<br>[p0, p1, p2, i3, p4, p5]<br>debug_merge_point(0, &#39;::Test$iinit:20&#39;)<br>+113: i7 = int_add(i3, 1)<br>
debug_merge_point(0, &#39;::Test$iinit:22&#39;)<br>debug_merge_point(0, &#39;::Test$iinit:23&#39;)<br>debug_merge_point(0, &#39;::Test$iinit:26&#39;)<br>+116: setarrayitem_gc(p5, 0, ConstPtr(ptr9,0x0), descr=&lt;GcPtrArrayDescr&gt;)<br>
+126: setarrayitem_gc(p5, 1, ConstPtr(ptr11,0x0), descr=&lt;GcPtrArrayDescr&gt;)<br>+133: i13 = uint_lt(i7, 10000)<br>guard_true(i13, descr=&lt;Guard2&gt;) [p0, p1, p2, p4, i7]<br>+145: i17 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr15,0x84c2958), 21, 21, descr=&lt;SignedCallDescr&gt;)<br>
+176: guard_no_exception(, descr=&lt;Guard3&gt;) [p0, i17, p1, p2, p4, i7]<br>+189: i19 = int_and(i17, -2147483648)<br>+195: i20 = int_is_true(i19)<br>guard_true(i20, descr=&lt;Guard4&gt;) [p0, p1, p2, p4, i7]<br>+204: i23 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr22,0x84c2978), 21, 21, descr=&lt;SignedCallDescr&gt;)<br>
+235: guard_no_exception(, descr=&lt;Guard5&gt;) [p0, i23, p1, p2, p4, i7]<br>+248: i24 = int_and(i23, -2147483648)<br>+254: i25 = int_is_true(i24)<br>guard_true(i25, descr=&lt;Guard6&gt;) [p0, p1, p2, p4, i7]<br>+263: i28 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr27,0x84c2988), 21, 21, descr=&lt;SignedCallDescr&gt;)<br>
+294: guard_no_exception(, descr=&lt;Guard7&gt;) [p0, i28, p1, p2, p4, i7]<br>+307: i29 = int_and(i28, -2147483648)<br>+313: i30 = int_is_true(i29)<br>guard_true(i30, descr=&lt;Guard8&gt;) [p0, p1, p2, p4, i7]<br>+322: i33 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr32,0x84c2998), 21, 21, descr=&lt;SignedCallDescr&gt;)<br>
+353: guard_no_exception(, descr=&lt;Guard9&gt;) [p0, i33, p1, p2, p4, i7]<br>+366: i34 = int_and(i33, -2147483648)<br>+372: i35 = int_is_true(i34)<br>guard_false(i35, descr=&lt;Guard10&gt;) [p0, p1, p2, p4, i7]<br>+381: i38 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr37,0x84c2968), 21, 21, descr=&lt;SignedCallDescr&gt;)<br>
+412: guard_no_exception(, descr=&lt;Guard11&gt;) [p0, i38, p1, p2, p4, i7]<br>+425: i39 = int_and(i38, -2147483648)<br>+431: i40 = int_is_true(i39)<br>guard_true(i40, descr=&lt;Guard12&gt;) [p0, p1, p2, p4, i7]<br>debug_merge_point(0, &#39;::Test$iinit:20&#39;)<br>
+440: i41 = arraylen_gc(p5, descr=&lt;GcPtrArrayDescr&gt;)<br>+440: jump(p0, p1, p2, i7, p4, p5, descr=&lt;Loop0&gt;)<br>+448: --end of the loop--<br>[3fd12ea696ce9] jit-log-opt-loop}<br><br><br><div style="visibility: hidden; left: -5000px; position: absolute; z-index: 9999; padding: 0px; margin-left: 0px; margin-top: 0px; overflow: hidden; word-wrap: break-word; color: black; font-size: 10px; text-align: left; line-height: 130%;" id="avg_ls_inline_popup">
</div>