[pypy-svn] r32491 - in pypy/branch/kill-keepalives/pypy: rpython/memory translator/backendopt

mwh at codespeak.net mwh at codespeak.net
Tue Sep 19 15:05:48 CEST 2006


Author: mwh
Date: Tue Sep 19 15:05:46 2006
New Revision: 32491

Modified:
   pypy/branch/kill-keepalives/pypy/rpython/memory/gctransform.py
   pypy/branch/kill-keepalives/pypy/translator/backendopt/malloc.py
Log:
tweaks, and an important fix to malloc.py


Modified: pypy/branch/kill-keepalives/pypy/rpython/memory/gctransform.py
==============================================================================
--- pypy/branch/kill-keepalives/pypy/rpython/memory/gctransform.py	(original)
+++ pypy/branch/kill-keepalives/pypy/rpython/memory/gctransform.py	Tue Sep 19 15:05:46 2006
@@ -138,35 +138,36 @@
 
                 variables_by_block = {}
                 for block, var in info.variables:
-                    vars = variables_by_block.setdefault(block, {})
-                    vars[var] = True
+                    vars = variables_by_block.setdefault(block, set())
+                    vars.add(var)
                 for block, vars in variables_by_block.iteritems():
                     links_with_a_var = []
                     links_without_a_var = []
                     for link in block.exits:
-                        if set(vars) & set(link.args):
+                        if vars & set(link.args):
                             links_with_a_var.append(link)
                         else:
                             links_without_a_var.append(link)
                     #if not links_without_a_var:
                     #    continue
                     for link in links_without_a_var:
+                        vv = iter(vars).next()
                         for v in vars:
                             assert v not in link.args
                             if v.concretetype == llmemory.Address:
-                                break
+                                vv = v
                         newblock = insert_empty_block(None, link)
-                        link.args.append(v)
-                        newblock.inputargs.append(copyvar(None, v))
-                        if v.concretetype != llmemory.Address:
+                        link.args.append(vv)
+                        newblock.inputargs.append(copyvar(None, vv))
+                        if vv.concretetype != llmemory.Address:
                             newv = varoftype(llmemory.Address)
                             newblock.operations.append(SpaceOperation(
                                 "cast_ptr_to_adr", [newblock.inputargs[-1]], newv))
-                            v = newv
+                            vv = newv
                         else:
-                            v = newblock.inputargs[-1]
+                            vv = newblock.inputargs[-1]
                         newblock.operations.append(SpaceOperation(
-                            "raw_free", [v], varoftype(lltype.Void)))
+                            "raw_free", [vv], varoftype(lltype.Void)))
         checkgraph(graph)
 
     def compute_borrowed_vars(self, graph):

Modified: pypy/branch/kill-keepalives/pypy/translator/backendopt/malloc.py
==============================================================================
--- pypy/branch/kill-keepalives/pypy/translator/backendopt/malloc.py	(original)
+++ pypy/branch/kill-keepalives/pypy/translator/backendopt/malloc.py	Tue Sep 19 15:05:46 2006
@@ -87,7 +87,7 @@
     def visit(node):
         if isinstance(node, Block):
             for op in node.operations:
-                if op.opname in ("same_as", "cast_pointer"):
+                if op.opname in ("same_as", "cast_pointer", "cast_adr_to_ptr"):
                     # special-case these operations to identify their input
                     # and output variables
                     union(node, op.args[0], node, op.result)



More information about the Pypy-commit mailing list