[pypy-svn] r23463 - pypy/dist/pypy/translator/backendopt
pedronis at codespeak.net
pedronis at codespeak.net
Fri Feb 17 23:42:35 CET 2006
Author: pedronis
Date: Fri Feb 17 23:42:32 2006
New Revision: 23463
Modified:
pypy/dist/pypy/translator/backendopt/all.py
pypy/dist/pypy/translator/backendopt/malloc.py
Log:
count malloc removals
Modified: pypy/dist/pypy/translator/backendopt/all.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/all.py (original)
+++ pypy/dist/pypy/translator/backendopt/all.py Fri Feb 17 23:42:32 2006
@@ -7,7 +7,7 @@
from pypy.translator.backendopt.merge_if_blocks import merge_if_blocks
from pypy.translator import simplify
from pypy.translator.backendopt.escape import malloc_to_stack
-
+from pypy.translator.backendopt.support import log
def backend_optimizations(translator, raisingop2direct_call_all=False,
inline_threshold=1,
@@ -36,12 +36,16 @@
# vaporize mallocs
if mallocs:
+ tot = 0
for graph in translator.graphs:
- if remove_simple_mallocs(graph):
+ count = remove_simple_mallocs(graph)
+ if count:
# remove typical leftovers from malloc removal
remove_same_as(graph)
simplify.eliminate_empty_blocks(graph)
simplify.transform_dead_op_vars(graph, translator)
+ tot += count
+ log.malloc("removed %d simple mallocs in total" % tot)
if propagate:
propagate_all(translator)
Modified: pypy/dist/pypy/translator/backendopt/malloc.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/malloc.py (original)
+++ pypy/dist/pypy/translator/backendopt/malloc.py Fri Feb 17 23:42:32 2006
@@ -149,6 +149,8 @@
vars = variables_by_block.setdefault(block, {})
vars[var] = True
+ count = [0]
+
for block, vars in variables_by_block.items():
def flowin(var, newvarsmap):
@@ -192,6 +194,7 @@
elif op.result in vars:
assert op.opname == "malloc"
assert vars == {var: True}
+ count[0] += 1
# drop the "malloc" operation
else:
newops.append(op)
@@ -232,22 +235,26 @@
newvarsmap = flatconstants.copy() # dummy initial values
flowin(var, newvarsmap)
- return True
+ assert count[0]
+ return count[0]
def remove_mallocs_once(graph):
"""Perform one iteration of malloc removal."""
remove_identical_vars(graph)
lifetimes = compute_lifetimes(graph)
- progress = False
+ progress = 0
for info in lifetimes:
- if _try_inline_malloc(info):
- progress = True
+ progress += _try_inline_malloc(info)
return progress
def remove_simple_mallocs(graph):
"""Iteratively remove (inline) the mallocs that can be simplified away."""
- done_something = False
- while remove_mallocs_once(graph):
- log.malloc('simple mallocs removed in %r' % graph.name)
- done_something = True
- return done_something
+ tot = 0
+ while True:
+ count = remove_mallocs_once(graph)
+ if count:
+ log.malloc('%d simple mallocs removed in %r' % (count, graph.name))
+ tot += count
+ else:
+ break
+ return tot
More information about the Pypy-commit
mailing list