[pypy-commit] pypy cleanup-llgraph-backend: (fijal, arigo) in-progress
arigo
noreply at buildbot.pypy.org
Wed Oct 17 17:36:39 CEST 2012
Author: Armin Rigo <arigo at tunes.org>
Branch: cleanup-llgraph-backend
Changeset: r58179:6b95b9479e1a
Date: 2012-10-17 17:36 +0200
http://bitbucket.org/pypy/pypy/changeset/6b95b9479e1a/
Log: (fijal, arigo) in-progress
diff --git a/pypy/jit/backend/llgraph/runner.py b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -19,10 +19,9 @@
has_been_freed = False
invalid = False
- def __init__(self, inputargs, operations, looptoken):
+ def __init__(self, inputargs, operations):
self.inputargs = inputargs
self.operations = operations
- self.looptoken = looptoken
class GuardFailed(Exception):
def __init__(self, failargs, descr):
@@ -155,7 +154,7 @@
def compile_loop(self, inputargs, operations, looptoken, log=True, name=''):
clt = model.CompiledLoopToken(self, looptoken.number)
looptoken.compiled_loop_token = clt
- lltrace = LLTrace(inputargs, operations, looptoken)
+ lltrace = LLTrace(inputargs, operations)
clt._llgraph_loop = lltrace
clt._llgraph_alltraces = [lltrace]
self._record_labels(lltrace)
@@ -164,7 +163,7 @@
original_loop_token, log=True):
clt = original_loop_token.compiled_loop_token
clt.compiling_a_bridge()
- lltrace = LLTrace(inputargs, operations, original_loop_token)
+ lltrace = LLTrace(inputargs, operations)
faildescr._llgraph_bridge = lltrace
clt._llgraph_alltraces.append(lltrace)
self._record_labels(lltrace)
@@ -196,6 +195,8 @@
def free_loop_and_bridges(self, compiled_loop_token):
for c in compiled_loop_token._llgraph_alltraces:
c.has_been_freed = True
+ compiled_loop_token._llgraph_alltraces = []
+ compiled_loop_token._llgraph_loop = None
model.AbstractCPU.free_loop_and_bridges(self, compiled_loop_token)
def make_execute_token(self, *argtypes):
@@ -447,7 +448,8 @@
def bh_newstr(self, length):
return lltype.cast_opaque_ptr(llmemory.GCREF,
- lltype.malloc(rstr.STR, length))
+ lltype.malloc(rstr.STR, length,
+ zero=True))
def bh_strlen(self, s):
return s._obj.container.chars.getlength()
@@ -467,7 +469,8 @@
def bh_newunicode(self, length):
return lltype.cast_opaque_ptr(llmemory.GCREF,
- lltype.malloc(rstr.UNICODE, length))
+ lltype.malloc(rstr.UNICODE, length,
+ zero=True))
def bh_unicodelen(self, string):
return string._obj.container.chars.getlength()
@@ -490,7 +493,7 @@
lltype.malloc(sizedescr.S, zero=True))
def bh_new_with_vtable(self, vtable, descr):
- result = lltype.malloc(descr.S)
+ result = lltype.malloc(descr.S, zero=True)
result_as_objptr = lltype.cast_pointer(rclass.OBJECTPTR, result)
result_as_objptr.typeptr = support.cast_from_int(rclass.CLASSTYPE,
vtable)
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -26,7 +26,7 @@
def show_procedures(metainterp_sd, procedure=None, error=None):
# debugging
- if option.view or option.viewloops:
+ if option and (option.view or option.viewloops):
if error:
errmsg = error.__class__.__name__
if str(error):
diff --git a/pypy/jit/metainterp/memmgr.py b/pypy/jit/metainterp/memmgr.py
--- a/pypy/jit/metainterp/memmgr.py
+++ b/pypy/jit/metainterp/memmgr.py
@@ -10,7 +10,7 @@
# in warmstate.py), apart from the 'alive_loops' set in MemoryManager,
# which is the only (long-living) place that keeps them alive. If a
# loop was not called for long enough, then it is removed from
-# 'alive_loops'. It will soon be freed by the GC. LoopToken.__del__
+# 'alive_loops'. It will soon be freed by the GC. CompiledLoopToken.__del__
# calls the method cpu.free_loop_and_bridges().
#
# The alive_loops set is maintained using the notion of a global
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
@@ -218,6 +218,7 @@
res = self.meta_interp(f, [1], loop_longevity=4, inline=True)
assert res == 42
self.check_jitcell_token_count(6)
+ import pdb;pdb.set_trace()
tokens = [t() for t in get_stats().jitcell_token_wrefs]
# Some loops have been freed
assert None in tokens
@@ -254,4 +255,3 @@
finally:
if hasattr(test, 'teardown_class'):
test.teardown_class()
-
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
@@ -33,7 +33,10 @@
self.links[word] = linktext
s = '<%s> %s\\n%s' % (typename, word, s)
nodename = 'node%d' % len(nodes)
- dotgen.emit_node(nodename, label=s, shape="box")
+ kwds = {}
+ if i == len(objectlist) - 1:
+ kwds['color'] = 'red'
+ dotgen.emit_node(nodename, label=s, shape="box", **kwds)
nodes[uid(objectlist[i])] = nodename
for o2 in self.get_referents(objectlist[i]):
if o2 is None:
More information about the pypy-commit
mailing list