[pypy-svn] r25015 - pypy/dist/pypy/translator/backendopt
cfbolz at codespeak.net
cfbolz at codespeak.net
Sun Mar 26 16:10:48 CEST 2006
Author: cfbolz
Date: Sun Mar 26 16:10:46 2006
New Revision: 25015
Added:
pypy/dist/pypy/translator/backendopt/stat.py
Modified:
pypy/dist/pypy/translator/backendopt/all.py
Log:
some minimal (and by default disable) statistic printing
Modified: pypy/dist/pypy/translator/backendopt/all.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/all.py (original)
+++ pypy/dist/pypy/translator/backendopt/all.py Sun Mar 26 16:10:46 2006
@@ -4,11 +4,14 @@
from pypy.translator.backendopt.malloc import remove_simple_mallocs
from pypy.translator.backendopt.ssa import SSI_to_SSA
from pypy.translator.backendopt.propagate import propagate_all
+from pypy.translator.backendopt.stat import print_statistics
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
+PRINT_STATISTICS = False
+
def backend_optimizations(translator, raisingop2direct_call_all=False,
inline_threshold=1,
mallocs=True,
@@ -17,6 +20,10 @@
propagate=False,
heap2stack=False):
+ if PRINT_STATISTICS:
+ print "before optimizations:"
+ print_statistics(translator.graphs[0], translator)
+
if raisingop2direct_call_all:
raisingop2direct_call(translator)
@@ -26,6 +33,10 @@
simplify.eliminate_empty_blocks(graph)
simplify.transform_dead_op_vars(graph, translator)
+ if PRINT_STATISTICS:
+ print "after no-op removal:"
+ print_statistics(translator.graphs[0], translator)
+
# ...
if propagate:
propagate_all(translator)
@@ -34,6 +45,10 @@
if inline_threshold:
auto_inlining(translator, inline_threshold)
+ if PRINT_STATISTICS:
+ print "after inlining:"
+ print_statistics(translator.graphs[0], translator)
+
# vaporize mallocs
if mallocs:
tot = 0
@@ -46,6 +61,11 @@
simplify.transform_dead_op_vars(graph, translator)
tot += count
log.malloc("removed %d simple mallocs in total" % tot)
+
+ if PRINT_STATISTICS:
+ print "after malloc removal:"
+ print_statistics(translator.graphs[0], translator)
+
if propagate:
propagate_all(translator)
@@ -55,7 +75,11 @@
if merge_if_blocks_to_switch:
for graph in translator.graphs:
merge_if_blocks(graph)
-
+
+ if PRINT_STATISTICS:
+ print "after if-to-switch:"
+ print_statistics(translator.graphs[0], translator)
+
if ssa_form:
for graph in translator.graphs:
SSI_to_SSA(graph)
Added: pypy/dist/pypy/translator/backendopt/stat.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/backendopt/stat.py Sun Mar 26 16:10:46 2006
@@ -0,0 +1,33 @@
+from pypy.translator.simplify import get_graph
+
+def get_statistics(graph, translator):
+ seen_graphs = {}
+ stack = [graph]
+ num_graphs = 0
+ num_blocks = 0
+ num_ops = 0
+ while stack:
+ graph = stack.pop()
+ if graph in seen_graphs:
+ continue
+ seen_graphs[graph] = True
+ num_graphs += 1
+ for block in graph.iterblocks():
+ num_blocks += 1
+ for op in block.operations:
+ if op.opname == "direct_call":
+ called_graph = get_graph(op.args[0], translator)
+ if called_graph is not None:
+ stack.append(called_graph)
+ elif op.opname == "indirect_call":
+ called_graphs = op.args[-1].value
+ if called_graphs is not None:
+ stack.extend(called_graphs)
+ num_ops += 1
+ return num_graphs, num_blocks, num_ops
+
+def print_statistics(graph, translator):
+ num_graphs, num_blocks, num_ops = get_statistics(graph, translator)
+ print ("Statistics:\nnumber of graphs %s\n"
+ "number of blocks %s\n"
+ "number of operations %s\n") % (num_graphs, num_blocks, num_ops)
More information about the Pypy-commit
mailing list