[pypy-svn] r25041 - pypy/dist/pypy/translator/backendopt
cfbolz at codespeak.net
cfbolz at codespeak.net
Mon Mar 27 17:03:42 CEST 2006
Author: cfbolz
Date: Mon Mar 27 17:03:40 2006
New Revision: 25041
Modified:
pypy/dist/pypy/translator/backendopt/all.py
pypy/dist/pypy/translator/backendopt/stat.py
Log:
(cfbolz, pedronis): add statistics per graph (sorted by hash of bytecode to
make it more diffable)
Modified: pypy/dist/pypy/translator/backendopt/all.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/all.py (original)
+++ pypy/dist/pypy/translator/backendopt/all.py Mon Mar 27 17:03:40 2006
@@ -22,7 +22,7 @@
if PRINT_STATISTICS:
print "before optimizations:"
- print_statistics(translator.graphs[0], translator)
+ print_statistics(translator.graphs[0], translator, "per-graph.txt")
if raisingop2direct_call_all:
raisingop2direct_call(translator)
Modified: pypy/dist/pypy/translator/backendopt/stat.py
==============================================================================
--- pypy/dist/pypy/translator/backendopt/stat.py (original)
+++ pypy/dist/pypy/translator/backendopt/stat.py Mon Mar 27 17:03:40 2006
@@ -1,17 +1,21 @@
from pypy.translator.simplify import get_graph
+import md5
-def get_statistics(graph, translator):
+def get_statistics(graph, translator, save_per_graph_details=None):
seen_graphs = {}
stack = [graph]
num_graphs = 0
num_blocks = 0
num_ops = 0
+ per_graph = {}
while stack:
graph = stack.pop()
if graph in seen_graphs:
continue
seen_graphs[graph] = True
num_graphs += 1
+ old_num_blocks = num_blocks
+ old_num_ops = num_ops
for block in graph.iterblocks():
num_blocks += 1
for op in block.operations:
@@ -24,10 +28,27 @@
if called_graphs is not None:
stack.extend(called_graphs)
num_ops += 1
+ per_graph[graph] = (num_blocks-old_num_blocks, num_ops-old_num_ops)
+ if save_per_graph_details:
+ details = []
+ for graph, (nblocks, nops) in per_graph.iteritems():
+ try:
+ code = graph.func.func_code.co_code
+ except AttributeError:
+ code = "None"
+ hash = md5.new(code).hexdigest()
+ details.append((hash, graph.name, nblocks, nops))
+ details.sort()
+ f = open(save_per_graph_details, "w")
+ try:
+ for hash, name, nblocks, nops in details:
+ print >>f, hash, name, nblocks, nops
+ finally:
+ f.close()
return num_graphs, num_blocks, num_ops
-def print_statistics(graph, translator):
- num_graphs, num_blocks, num_ops = get_statistics(graph, translator)
+def print_statistics(graph, translator, save_per_graph_details=None):
+ num_graphs, num_blocks, num_ops = get_statistics(graph, translator, save_per_graph_details)
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