[pypy-commit] pypy guard-compatible: temporary debug prints to figure out why heap knowledge gets lost

cfbolz pypy.commits at gmail.com
Wed Feb 21 12:18:31 EST 2018


Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: guard-compatible
Changeset: r93852:3f9f732b42d0
Date: 2018-02-20 11:40 +0100
http://bitbucket.org/pypy/pypy/changeset/3f9f732b42d0/

Log:	temporary debug prints to figure out why heap knowledge gets lost

diff --git a/rpython/jit/metainterp/optimizeopt/bridgeopt.py b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
--- a/rpython/jit/metainterp/optimizeopt/bridgeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/bridgeopt.py
@@ -3,6 +3,8 @@
 
 from rpython.jit.metainterp import resumecode
 
+from rpython.rlib.debug import (have_debug_prints, debug_start, debug_stop,
+    debug_print)
 
 # adds the following sections at the end of the resume code:
 #
@@ -59,7 +61,6 @@
     for box in liveboxes:
         if box is not None and box in liveboxes_from_env:
             available_boxes[box] = None
-    metainterp_sd = optimizer.metainterp_sd
 
     # class knowledge is stored as bits, true meaning the class is known, false
     # means unknown. on deserializing we look at the bits, and read the runtime
@@ -107,6 +108,8 @@
         numb_state.append_int(0)
 
 def deserialize_optimizer_knowledge(optimizer, resumestorage, frontend_boxes, liveboxes):
+    debug_start("jit-bridge-deserialize")
+
     reader = resumecode.Reader(resumestorage.rd_numb)
     assert len(frontend_boxes) == len(liveboxes)
     metainterp_sd = optimizer.metainterp_sd
@@ -116,6 +119,7 @@
     reader.jump(startcount - 1)
 
     # class knowledge
+    debug_print("# class knowledge")
     bitfield = 0
     mask = 0
     for i, box in enumerate(liveboxes):
@@ -129,9 +133,14 @@
         if class_known:
             cls = optimizer.cpu.ts.cls_of_box(frontend_boxes[i])
             optimizer.make_constant_class(box, cls)
+            debug_print("class known", i)
+        else:
+            debug_print("class NOT known", i)
 
     # heap knowledge
+    debug_print("# heap knowledge")
     if not optimizer.optheap:
+        debug_print("# no optheap!")
         return
     length = reader.next_item()
     result_struct = []
@@ -143,6 +152,15 @@
         tagged = reader.next_item()
         box2 = decode_box(resumestorage, tagged, liveboxes, metainterp_sd.cpu)
         result_struct.append((box1, descr, box2))
+
+        attrname = descr.repr_of_descr()
+        try:
+            i1 = liveboxes.index(box1)
+            i2 = liveboxes.index(box2)
+        except ValueError:
+            debug_print("getfield: some unknown box with field", attrname)
+        else:
+            debug_print("getfield:", i1, i2, attrname)
     length = reader.next_item()
     result_array = []
     for i in range(length):
@@ -155,3 +173,5 @@
         box2 = decode_box(resumestorage, tagged, liveboxes, metainterp_sd.cpu)
         result_array.append((box1, index, descr, box2))
     optimizer.optheap.deserialize_optheap(result_struct, result_array)
+
+    debug_stop("jit-bridge-deserialize")


More information about the pypy-commit mailing list