Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de>
Branch: 
Changeset: r97754:5dd2d3cca75b
Date: 2019-10-10 15:43 +0200
http://bitbucket.org/pypy/pypy/changeset/5dd2d3cca75b/

Log:    debug-print quasi-immutable invalidations

        (been wanting that since a while)

diff --git a/rpython/jit/metainterp/quasiimmut.py 
b/rpython/jit/metainterp/quasiimmut.py
--- a/rpython/jit/metainterp/quasiimmut.py
+++ b/rpython/jit/metainterp/quasiimmut.py
@@ -5,6 +5,7 @@
 from rpython.jit.metainterp.history import (
     AbstractDescr, ConstPtr, ConstInt, ConstFloat)
 from rpython.rlib.objectmodel import we_are_translated
+from rpython.rlib.debug import ll_assert, debug_print, debug_start, debug_stop
 
 
 def get_mutate_field_name(fieldname):
@@ -31,7 +32,7 @@
         qmut_ptr = getattr(p, mutatefieldname)
         setattr(p, mutatefieldname, lltype.nullptr(rclass.OBJECT))
         qmut = cast_base_ptr_to_instance(QuasiImmut, qmut_ptr)
-        qmut.invalidate()
+        qmut.invalidate(mutatefieldname)
     _invalidate_now._dont_inline_ = True
     #
     def invalidation(p):
@@ -45,7 +46,7 @@
     if qmut_ref:
         cpu.bh_setfield_gc_r(p, ConstPtr.value, mutatefielddescr)
         qmut = cast_gcref_to_instance(QuasiImmut, qmut_ref)
-        qmut.invalidate()
+        qmut.invalidate(mutatefielddescr.fieldname)
 
 
 class QuasiImmut(object):
@@ -78,7 +79,8 @@
         # already invalidated; see below
         self.compress_limit = (len(self.looptokens_wrefs) + 15) * 2
 
-    def invalidate(self):
+    def invalidate(self, fieldname=None):
+        debug_start("jit-invalidate-quasi-immutable")
         # When this is called, all the loops that we record become
         # invalid: all GUARD_NOT_INVALIDATED in these loops (and
         # in attached bridges) must now fail.
@@ -87,9 +89,11 @@
             return
         wrefs = self.looptokens_wrefs
         self.looptokens_wrefs = []
+        invalidated = 0
         for wref in wrefs:
             looptoken = wref()
             if looptoken is not None:
+                invalidated += 1
                 looptoken.invalidated = True
                 self.cpu.invalidate_loop(looptoken)
                 # NB. we must call cpu.invalidate_loop() even if
@@ -100,6 +104,8 @@
                 if not we_are_translated():
                     self.cpu.stats.invalidated_token_numbers.add(
                         looptoken.number)
+        debug_print("fieldname", fieldname or "<unknown>", "invalidated", 
invalidated)
+        debug_stop("jit-invalidate-quasi-immutable")
 
 
 class QuasiImmutDescr(AbstractDescr):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to