[pypy-commit] pypy cleanup-llgraph-backend: Trying to understand why, in-progress

arigo noreply at buildbot.pypy.org
Thu Oct 18 10:28:00 CEST 2012


Author: Armin Rigo <arigo at tunes.org>
Branch: cleanup-llgraph-backend
Changeset: r58193:f3dfbc8684db
Date: 2012-10-18 10:27 +0200
http://bitbucket.org/pypy/pypy/changeset/f3dfbc8684db/

Log:	Trying to understand why, in-progress

diff --git a/pypy/jit/metainterp/test/test_memmgr.py b/pypy/jit/metainterp/test/test_memmgr.py
--- a/pypy/jit/metainterp/test/test_memmgr.py
+++ b/pypy/jit/metainterp/test/test_memmgr.py
@@ -212,13 +212,34 @@
             g(u, 0); g(u+2, 0)     #  \  make more loops for g(u+1) to g(u+4),
             g(u, 0); g(u+3, 0)     #  /  but keeps g(u) alive
             g(u, 0); g(u+4, 0)     # /
+            g(u, 0); g(u+5, 0)     # /
+            g(u, 0); g(u+6, 0)     # /
+            g(u, 0); g(u+7, 0)     # /
+            g(u, 0); g(u+8, 0)     # /
+            g(u, 0); g(u+9, 0)     # /
+            g(u, 0); g(u+10, 0)     # /
+            g(u, 0); g(u+11, 0)     # /
+            g(u, 0); g(u+12, 0)     # /
             g(u, 8)       # call g(u) again, with its call_assembler to h(u)
             return 42
 
-        res = self.meta_interp(f, [1], loop_longevity=4, inline=True)
+        res = self.meta_interp(f, [1], loop_longevity=3, inline=True)
         assert res == 42
-        self.check_jitcell_token_count(6)
+        self.check_jitcell_token_count(6+8)
+        #
+        # manually free the inner loops of the llgraph backend
+        tokens = [t() for t in get_stats().jitcell_token_wrefs]
+        for token in tokens:
+            if token is not None:
+                for key in token.compiled_loop_token.__dict__.keys():
+                    if key.startswith('_llgraph_'):
+                        setattr(token.compiled_loop_token, key, 'STUBBED')
+        del tokens, token
+        import gc; gc.collect(); gc.collect(); gc.collect(); gc.collect()
         import pdb;pdb.set_trace()
+        # from pypy.translator.tool.reftracker import track
+        # track(get_stats().jitcell_token_wrefs[8]())
+        #
         tokens = [t() for t in get_stats().jitcell_token_wrefs]
         # Some loops have been freed
         assert None in tokens
diff --git a/pypy/translator/tool/reftracker.py b/pypy/translator/tool/reftracker.py
--- a/pypy/translator/tool/reftracker.py
+++ b/pypy/translator/tool/reftracker.py
@@ -14,7 +14,7 @@
 
 class BaseRefTrackerPage(GraphPage):
 
-    def compute(self, objectlist):
+    def compute(self, objectlist, highlight=set()):
         assert objectlist[0] is MARKER
         self.objectlist = objectlist
         dotgen = DotGen('reftracker')
@@ -34,7 +34,7 @@
             s = '<%s> %s\\n%s' % (typename, word, s)
             nodename = 'node%d' % len(nodes)
             kwds = {}
-            if i == len(objectlist) - 1:
+            if i in highlight:
                 kwds['color'] = 'red'
             dotgen.emit_node(nodename, label=s, shape="box", **kwds)
             nodes[uid(objectlist[i])] = nodename
@@ -78,11 +78,13 @@
             for o2 in self.get_referrers(objectlist[i]):
                 if uid(o2) == id1:
                     found = o2
+        highlight = set()
         if found is not None:
+            highlight.add(len(objectlist))
             objectlist = objectlist + [found]
         else:
             print '*** NOTE: object not found'
-        return self.newpage(objectlist)
+        return self.newpage(objectlist, highlight)
 
     def formatobject(self, o):
         header = self.shortrepr(o, compact=False)
@@ -106,8 +108,8 @@
     def edgelabel(self, o1, o2):
         return ''
 
-    def newpage(self, objectlist):
-        return self.__class__(objectlist)
+    def newpage(self, *args):
+        return self.__class__(*args)
 
 
 class RefTrackerPage(BaseRefTrackerPage):


More information about the pypy-commit mailing list