[pypy-commit] pypy default: copy logic from logger to show the printable_location in the graphs, but only if get_printable_location was provided
hakanardo
noreply at buildbot.pypy.org
Wed Dec 21 15:54:42 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch:
Changeset: r50803:b1bccc7a772e
Date: 2011-12-21 15:46 +0100
http://bitbucket.org/pypy/pypy/changeset/b1bccc7a772e/
Log: copy logic from logger to show the printable_location in the graphs,
but only if get_printable_location was provided
diff --git a/pypy/jit/metainterp/compile.py b/pypy/jit/metainterp/compile.py
--- a/pypy/jit/metainterp/compile.py
+++ b/pypy/jit/metainterp/compile.py
@@ -38,7 +38,8 @@
else:
extraprocedures = [procedure]
metainterp_sd.stats.view(errmsg=errmsg,
- extraprocedures=extraprocedures)
+ extraprocedures=extraprocedures,
+ metainterp_sd=metainterp_sd)
def create_empty_loop(metainterp, name_prefix=''):
name = metainterp.staticdata.stats.name_for_new_loop()
diff --git a/pypy/jit/metainterp/graphpage.py b/pypy/jit/metainterp/graphpage.py
--- a/pypy/jit/metainterp/graphpage.py
+++ b/pypy/jit/metainterp/graphpage.py
@@ -12,7 +12,7 @@
def get_display_text(self):
return None
-def display_procedures(procedures, errmsg=None, highlight_procedures={}):
+def display_procedures(procedures, errmsg=None, highlight_procedures={}, metainterp_sd=None):
graphs = [(procedure, highlight_procedures.get(procedure, 0))
for procedure in procedures]
for graph, highlight in graphs:
@@ -20,7 +20,7 @@
if is_interesting_guard(op):
graphs.append((SubGraph(op.getdescr()._debug_suboperations),
highlight))
- graphpage = ResOpGraphPage(graphs, errmsg)
+ graphpage = ResOpGraphPage(graphs, errmsg, metainterp_sd)
graphpage.display()
def is_interesting_guard(op):
@@ -36,8 +36,8 @@
class ResOpGraphPage(GraphPage):
- def compute(self, graphs, errmsg=None):
- resopgen = ResOpGen()
+ def compute(self, graphs, errmsg=None, metainterp_sd=None):
+ resopgen = ResOpGen(metainterp_sd)
for graph, highlight in graphs:
resopgen.add_graph(graph, highlight)
if errmsg:
@@ -50,13 +50,14 @@
CLUSTERING = True
BOX_COLOR = (128, 0, 96)
- def __init__(self):
+ def __init__(self, metainterp_sd=None):
self.graphs = []
self.highlight_graphs = {}
self.block_starters = {} # {graphindex: {set-of-operation-indices}}
self.all_operations = {}
self.errmsg = None
self.target_tokens = {}
+ self.metainterp_sd = metainterp_sd
def op_name(self, graphindex, opindex):
return 'g%dop%d' % (graphindex, opindex)
@@ -164,7 +165,14 @@
opindex = opstartindex
while True:
op = operations[opindex]
- lines.append(op.repr(graytext=True))
+ op_repr = op.repr(graytext=True)
+ if op.getopnum() == rop.DEBUG_MERGE_POINT:
+ jd_sd = self.metainterp_sd.jitdrivers_sd[op.getarg(0).getint()]
+ if jd_sd._get_printable_location_ptr:
+ s = jd_sd.warmstate.get_location_str(op.getarglist()[2:])
+ s = s.replace(',', '.') # we use comma for argument splitting
+ op_repr = "debug_merge_point(%d, '%s')" % (op.getarg(1).getint(), s)
+ lines.append(op_repr)
if is_interesting_guard(op):
tgt = op.getdescr()._debug_suboperations[0]
tgt_g, tgt_i = self.all_operations[tgt]
diff --git a/pypy/jit/metainterp/history.py b/pypy/jit/metainterp/history.py
--- a/pypy/jit/metainterp/history.py
+++ b/pypy/jit/metainterp/history.py
@@ -1084,7 +1084,7 @@
if option.view:
self.view()
- def view(self, errmsg=None, extraprocedures=[]):
+ def view(self, errmsg=None, extraprocedures=[], metainterp_sd=None):
from pypy.jit.metainterp.graphpage import display_procedures
procedures = self.get_all_loops()[:]
for procedure in extraprocedures:
@@ -1096,7 +1096,7 @@
if hasattr(procedure, '_looptoken_number') and (
procedure._looptoken_number in self.invalidated_token_numbers):
highlight_procedures.setdefault(procedure, 2)
- display_procedures(procedures, errmsg, highlight_procedures)
+ display_procedures(procedures, errmsg, highlight_procedures, metainterp_sd)
# ----------------------------------------------------------------
diff --git a/pypy/jit/metainterp/test/test_virtual.py b/pypy/jit/metainterp/test/test_virtual.py
--- a/pypy/jit/metainterp/test/test_virtual.py
+++ b/pypy/jit/metainterp/test/test_virtual.py
@@ -860,12 +860,15 @@
assert res == f(10)
self.check_resops(jump=2)
- def test_nested_loops(self):
+ def test_nested_loops_1(self):
class Int(object):
def __init__(self, val):
self.val = val
- myjitdriver = JitDriver(greens = ['pc'], reds = ['n', 'sa', 'i', 'j'])
bytecode = "iajb+JI"
+ def get_printable_location(i):
+ return "%d: %s" % (i, bytecode[i])
+ myjitdriver = JitDriver(greens = ['pc'], reds = ['n', 'sa', 'i', 'j'],
+ get_printable_location=get_printable_location)
def f(n):
pc = sa = 0
i = j = Int(0)
More information about the pypy-commit
mailing list