[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