Hi,<br><br>I've been trying out writing my own interpreter using the PyPy framework recently, as a bit of fun. I'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've got pretty close.<br>
<br>But I'm still seeing lots of calls to `ll_dict_lookup__dicttablePtr_Signed_Signed`, which don't correspond to any code in my interpreter. I don'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'm seeing in the logs (Note: I've augmented the logs to give the raw pointer). In this case, it is only looking up the value 21, but I'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, '::Test$iinit:20')<br>+113: i7 = int_add(i3, 1)<br>
debug_merge_point(0, '::Test$iinit:22')<br>debug_merge_point(0, '::Test$iinit:23')<br>debug_merge_point(0, '::Test$iinit:26')<br>+116: setarrayitem_gc(p5, 0, ConstPtr(ptr9,0x0), descr=<GcPtrArrayDescr>)<br>
+126: setarrayitem_gc(p5, 1, ConstPtr(ptr11,0x0), descr=<GcPtrArrayDescr>)<br>+133: i13 = uint_lt(i7, 10000)<br>guard_true(i13, descr=<Guard2>) [p0, p1, p2, p4, i7]<br>+145: i17 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr15,0x84c2958), 21, 21, descr=<SignedCallDescr>)<br>
+176: guard_no_exception(, descr=<Guard3>) [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=<Guard4>) [p0, p1, p2, p4, i7]<br>+204: i23 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr22,0x84c2978), 21, 21, descr=<SignedCallDescr>)<br>
+235: guard_no_exception(, descr=<Guard5>) [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=<Guard6>) [p0, p1, p2, p4, i7]<br>+263: i28 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr27,0x84c2988), 21, 21, descr=<SignedCallDescr>)<br>
+294: guard_no_exception(, descr=<Guard7>) [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=<Guard8>) [p0, p1, p2, p4, i7]<br>+322: i33 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr32,0x84c2998), 21, 21, descr=<SignedCallDescr>)<br>
+353: guard_no_exception(, descr=<Guard9>) [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=<Guard10>) [p0, p1, p2, p4, i7]<br>+381: i38 = call(ConstClass(ll_dict_lookup__dicttablePtr_Signed_Signed), ConstPtr(ptr37,0x84c2968), 21, 21, descr=<SignedCallDescr>)<br>
+412: guard_no_exception(, descr=<Guard11>) [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=<Guard12>) [p0, p1, p2, p4, i7]<br>debug_merge_point(0, '::Test$iinit:20')<br>
+440: i41 = arraylen_gc(p5, descr=<GcPtrArrayDescr>)<br>+440: jump(p0, p1, p2, i7, p4, p5, descr=<Loop0>)<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>