[pypy-commit] pypy jit-targets: Start fixing graphpage.py.
arigo
noreply at buildbot.pypy.org
Sun Nov 6 11:29:13 CET 2011
Author: Armin Rigo <arigo at 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)
# ----------------------------------------------------------------
More information about the pypy-commit
mailing list