[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