Author: Carl Friedrich Bolz-Tereick <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit