Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r50807:d73152d7b1ad Date: 2011-12-21 16:15 +0100 http://bitbucket.org/pypy/pypy/changeset/d73152d7b1ad/
Log: merge heads 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) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit