Author: Maciej Fijalkowski <[email protected]>
Branch:
Changeset: r50884:40a95aa4967f
Date: 2011-12-26 23:36 +0200
http://bitbucket.org/pypy/pypy/changeset/40a95aa4967f/
Log: some tests and fixes
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
@@ -389,14 +389,22 @@
return log, loops
def split_trace(trace):
- labels = [i for i, op in enumerate(trace.operations)
- if op.name == 'label']
- labels = [0] + labels + [len(trace.operations) - 1]
+ labels = [0]
+ if trace.comment and 'Guard' in trace.comment:
+ descrs = ['bridge ' + re.search('Guard (\d+)', trace.comment).group(1)]
+ else:
+ descrs = ['']
+ for i, op in enumerate(trace.operations):
+ if op.name == 'label':
+ labels.append(i)
+ descrs.append(op.descr)
+ labels.append(len(trace.operations) - 1)
parts = []
for i in range(len(labels) - 1):
start, stop = labels[i], labels[i+1]
part = copy(trace)
part.operations = trace.operations[start : stop + 1]
+ part.descr = descrs[i]
parts.append(part)
return parts
@@ -407,11 +415,7 @@
lines = input[-1].splitlines()
mapping = {}
for loop in loops:
- com = loop.comment
- if 'Loop' in com:
- mapping['loop ' + re.search('Loop (\d+)', com).group(1)] = loop
- else:
- mapping['bridge ' + re.search('Guard (\d+)', com).group(1)] = loop
+ mapping[loop.descr] = loop
for line in lines:
if line:
num, count = line.split(':', 2)
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,7 @@
from pypy.tool.jitlogparser.parser import (SimpleParser, TraceForOpcode,
Function, adjust_bridges,
- import_log, split_trace, Op)
+ import_log, split_trace, Op,
+ parse_log_counts)
from pypy.tool.jitlogparser.storage import LoopStorage
import py, sys
@@ -236,10 +237,10 @@
loop = parse('''
[i7]
i9 = int_lt(i7, 1003)
- label(i9)
+ label(i9, descr=grrr)
guard_true(i9, descr=<Guard2>) []
i13 = getfield_raw(151937600, descr=<SignedFieldDescr
pypysig_long_struct.c_value 0>)
- label(i13)
+ label(i13, descr=asb)
i19 = int_lt(i13, 1003)
guard_true(i19, descr=<Guard2>) []
i113 = getfield_raw(151937600, descr=<SignedFieldDescr
pypysig_long_struct.c_value 0>)
@@ -249,3 +250,32 @@
assert len(parts[0].operations) == 2
assert len(parts[1].operations) == 4
assert len(parts[2].operations) == 4
+ assert parts[1].descr == 'grrr'
+ assert parts[2].descr == 'asb'
+
+def test_parse_log_counts():
+ loop = parse('''
+ [i7]
+ i9 = int_lt(i7, 1003)
+ label(i9, descr=grrr)
+ guard_true(i9, descr=<Guard2>) []
+ i13 = getfield_raw(151937600, descr=<SignedFieldDescr
pypysig_long_struct.c_value 0>)
+ label(i13, descr=asb)
+ i19 = int_lt(i13, 1003)
+ guard_true(i19, descr=<Guard3>) []
+ i113 = getfield_raw(151937600, descr=<SignedFieldDescr
pypysig_long_struct.c_value 0>)
+ ''')
+ bridge = parse('''
+ # bridge out of Guard 2 with 1 ops
+ []
+ i0 = int_lt(1, 2)
+ finish(i0)
+ ''')
+ bridge.comment = 'bridge out of Guard 2 with 1 ops'
+ loop.comment = ''
+ loops = split_trace(loop) + split_trace(bridge)
+ input = ['grrr:123\nasb:12\nbridge 2:1234']
+ parse_log_counts(input, loops)
+ assert loops[-1].count == 1234
+ assert loops[1].count == 123
+ assert loops[2].count == 12
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit