[pypy-commit] pypy jit-label-counters: split traces into parts going from one label to the next
hakanardo
noreply at buildbot.pypy.org
Sat Dec 24 10:51:21 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-label-counters
Changeset: r50839:b9fedb0f9f96
Date: 2011-12-24 10:51 +0100
http://bitbucket.org/pypy/pypy/changeset/b9fedb0f9f96/
Log: split traces into parts going from one label to the next
diff --git a/pypy/tool/jitlogparser/parser.py b/pypy/tool/jitlogparser/parser.py
--- a/pypy/tool/jitlogparser/parser.py
+++ b/pypy/tool/jitlogparser/parser.py
@@ -387,6 +387,25 @@
loops.append(loop)
return log, loops
+class Part(object):
+ def __init__(self, trace, operations):
+ self.trace = trace
+ self.operations = operations
+
+ def __len___(self):
+ return len(self.operations)
+
+def split_trace(trace):
+ labels = [i for i, op in enumerate(trace.operations)
+ if op.name == 'label']
+ labels = [0] + labels + [len(trace.operations) - 1]
+ parts = []
+ for i in range(len(labels) - 1):
+ start, stop = labels[i], labels[i+1]
+
+ parts.append(Part(trace, trace.operations[start : stop + 1]))
+
+ return parts
def parse_log_counts(input, loops):
if not input:
diff --git a/pypy/tool/jitlogparser/test/test_parser.py b/pypy/tool/jitlogparser/test/test_parser.py
--- a/pypy/tool/jitlogparser/test/test_parser.py
+++ b/pypy/tool/jitlogparser/test/test_parser.py
@@ -1,6 +1,6 @@
from pypy.tool.jitlogparser.parser import (SimpleParser, TraceForOpcode,
Function, adjust_bridges,
- import_log, Op)
+ import_log, split_trace, Op)
from pypy.tool.jitlogparser.storage import LoopStorage
import py, sys
@@ -231,3 +231,21 @@
myrepr = 'c = foobar(a, b, descr=mydescr)'
assert op.repr() == myrepr
assert op.repr() == myrepr # do it twice
+
+def test_split_trace():
+ loop = parse('''
+ [i7]
+ i9 = int_lt(i7, 1003)
+ label(i9)
+ guard_true(i9, descr=<Guard2>) []
+ i13 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+ label(i13)
+ i19 = int_lt(i13, 1003)
+ guard_true(i19, descr=<Guard2>) []
+ i113 = getfield_raw(151937600, descr=<SignedFieldDescr pypysig_long_struct.c_value 0>)
+ ''')
+ parts = split_trace(loop)
+ assert len(parts) == 3
+ assert len(parts[0].operations) == 2
+ assert len(parts[1].operations) == 4
+ assert len(parts[2].operations) == 4
More information about the pypy-commit
mailing list