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