Author: Armin Rigo <ar...@tunes.org> Branch: jit-targets Changeset: r48819:1772c5517e92 Date: 2011-11-06 11:28 +0100 http://bitbucket.org/pypy/pypy/changeset/1772c5517e92/
Log: Start fixing graphpage.py. 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 @@ -24,7 +24,7 @@ from pypy.jit.metainterp.jitprof import ABORT_BRIDGE raise SwitchToBlackhole(ABORT_BRIDGE) -def show_loop(metainterp_sd, loop=None, error=None): +def show_procedures(metainterp_sd, procedure=None, error=None): # debugging if option.view or option.viewloops: if error: @@ -33,11 +33,12 @@ errmsg += ': ' + str(error) else: errmsg = None - if loop is None: # or type(loop) is TerminatingLoop: - extraloops = [] + if procedure is None: + extraprocedures = [] else: - extraloops = [loop] - metainterp_sd.stats.view(errmsg=errmsg, extraloops=extraloops) + extraprocedures = [procedure] + metainterp_sd.stats.view(errmsg=errmsg, + extraprocedures=extraprocedures) def create_empty_loop(metainterp, name_prefix=''): name = metainterp.staticdata.stats.name_for_new_loop() @@ -78,8 +79,6 @@ if descr.procedure_token is not looptoken: looptoken.record_jump_to(descr.procedure_token) op._descr = None # clear reference, mostly for tests - if not we_are_translated(): - op._jumptarget_number = descr.procedure_token.number # record this looptoken on the QuasiImmut used in the code if loop.quasi_immutable_deps is not None: for qmut in loop.quasi_immutable_deps: @@ -187,7 +186,7 @@ globaldata.loopnumbering += 1 if not we_are_translated(): - show_loop(metainterp_sd, loop) + show_procedures(metainterp_sd, loop) loop.check_consistency() operations = get_deep_immutable_oplist(loop.operations) @@ -218,7 +217,7 @@ jitdriver_sd.on_compile_bridge(metainterp_sd.logger_ops, original_loop_token, operations, n) if not we_are_translated(): - show_loop(metainterp_sd) + show_procedures(metainterp_sd) seen = dict.fromkeys(inputargs) TreeLoop.check_consistency_of_branch(operations, seen) metainterp_sd.profiler.start_backend() 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,8 +12,9 @@ def get_display_text(self): return None -def display_loops(loops, errmsg=None, highlight_loops={}): - graphs = [(loop, highlight_loops.get(loop, 0)) for loop in loops] +def display_procedures(procedures, errmsg=None, highlight_procedures={}): + graphs = [(procedure, highlight_procedures.get(procedure, 0)) + for procedure in procedures] for graph, highlight in graphs: for op in graph.get_operations(): if is_interesting_guard(op): @@ -31,12 +32,6 @@ def compute(self, graphs, errmsg=None): resopgen = ResOpGen() for graph, highlight in graphs: - if getattr(graph, 'token', None) is not None: - resopgen.jumps_to_graphs[graph.token] = graph - if getattr(graph, '_looptoken_number', None) is not None: - resopgen.jumps_to_graphs[graph._looptoken_number] = graph - - for graph, highlight in graphs: resopgen.add_graph(graph, highlight) if errmsg: resopgen.set_errmsg(errmsg) @@ -54,7 +49,7 @@ self.block_starters = {} # {graphindex: {set-of-operation-indices}} self.all_operations = {} self.errmsg = None - self.jumps_to_graphs = {} + self.target_tokens = {} def op_name(self, graphindex, opindex): return 'g%dop%d' % (graphindex, opindex) @@ -73,16 +68,21 @@ for graphindex in range(len(self.graphs)): self.block_starters[graphindex] = {0: True} for graphindex, graph in enumerate(self.graphs): - last_was_mergepoint = False + mergepointblock = None for i, op in enumerate(graph.get_operations()): if is_interesting_guard(op): self.mark_starter(graphindex, i+1) if op.getopnum() == rop.DEBUG_MERGE_POINT: - if not last_was_mergepoint: - last_was_mergepoint = True - self.mark_starter(graphindex, i) + if mergepointblock is None: + mergepointblock = i + elif op.getopnum() == rop.LABEL: + self.mark_starter(graphindex, i) + self.target_tokens[op.getdescr()] = (graphindex, i) + mergepointblock = i else: - last_was_mergepoint = False + if mergepointblock is not None: + self.mark_starter(graphindex, mergepointblock) + mergepointblock = None def set_errmsg(self, errmsg): self.errmsg = errmsg @@ -172,24 +172,10 @@ (graphindex, opindex)) break if op.getopnum() == rop.JUMP: - tgt_g = -1 - tgt = None - tgt_number = getattr(op, '_jumptarget_number', None) - if tgt_number is not None: - tgt = self.jumps_to_graphs.get(tgt_number) - else: - tgt_descr = op.getdescr() - if tgt_descr is None: - tgt_g = graphindex - else: - tgt = self.jumps_to_graphs.get(tgt_descr.number) - if tgt is None: - tgt = self.jumps_to_graphs.get(tgt_descr) - if tgt is not None: - tgt_g = self.graphs.index(tgt) - if tgt_g != -1: + tgt_descr = op.getdescr() + if tgt_descr in self.target_tokens: self.genedge((graphindex, opstartindex), - (tgt_g, 0), + self.target_tokens[tgt_descr], weight="0") lines.append("") label = "\\l".join(lines) 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 @@ -803,7 +803,7 @@ return self.operations def get_display_text(self): # for graphpage.py - return self.name + return self.name + '\n' + repr(self.inputargs) def show(self, errmsg=None): "NOT_RPYTHON" @@ -1066,19 +1066,19 @@ if option.view: self.view() - def view(self, errmsg=None, extraloops=[]): - from pypy.jit.metainterp.graphpage import display_loops - loops = self.get_all_loops()[:] - for loop in extraloops: - if loop in loops: - loops.remove(loop) - loops.append(loop) - highlight_loops = dict.fromkeys(extraloops, 1) - for loop in loops: - if hasattr(loop, '_looptoken_number') and ( - loop._looptoken_number in self.invalidated_token_numbers): - highlight_loops.setdefault(loop, 2) - display_loops(loops, errmsg, highlight_loops) + def view(self, errmsg=None, extraprocedures=[]): + from pypy.jit.metainterp.graphpage import display_procedures + procedures = self.get_all_loops()[:] + for procedure in extraprocedures: + if procedure in procedures: + procedures.remove(procedure) + procedures.append(procedure) + highlight_procedures = dict.fromkeys(extraprocedures, 1) + for procedure in procedures: + 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) # ---------------------------------------------------------------- _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit