[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