Author: Carl Friedrich Bolz <[email protected]>
Branch: improve-heap-caching-tracing
Changeset: r47139:4a4c1b008238
Date: 2011-09-07 15:12 +0200
http://bitbucket.org/pypy/pypy/changeset/4a4c1b008238/
Log: add a sanity check: whenever a get operation is not generated,
because the heap cache finds it, look at the concrete objects and
see whether their contents corresponds to what the heapcache says it
should
diff --git a/pypy/jit/metainterp/pyjitpl.py b/pypy/jit/metainterp/pyjitpl.py
--- a/pypy/jit/metainterp/pyjitpl.py
+++ b/pypy/jit/metainterp/pyjitpl.py
@@ -406,6 +406,11 @@
tobox = self.metainterp.heapcache.getarrayitem(
arraybox, arraydescr, indexbox)
if tobox:
+ # sanity check: see whether the current array value
+ # corresponds to what the cache thinks the value is
+ resbox = executor.execute(self.metainterp.cpu, self.metainterp,
+ rop.GETARRAYITEM_GC, arraydescr,
arraybox, indexbox)
+ assert resbox.constbox().same_constant(tobox.constbox())
return tobox
resbox = self.execute_with_descr(rop.GETARRAYITEM_GC,
arraydescr, arraybox, indexbox)
@@ -541,6 +546,10 @@
def _opimpl_getfield_gc_any_pureornot(self, opnum, box, fielddescr):
tobox = self.metainterp.heapcache.getfield(box, fielddescr)
if tobox is not None:
+ # sanity check: see whether the current struct value
+ # corresponds to what the cache thinks the value is
+ resbox = executor.execute(self.metainterp.cpu, self.metainterp,
+ rop.GETFIELD_GC, fielddescr, box)
return tobox
resbox = self.execute_with_descr(opnum, fielddescr, box)
self.metainterp.heapcache.getfield_now_known(box, fielddescr, resbox)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit