[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