[pypy-svn] r68618 - in pypy/trunk/pypy/jit: backend metainterp/test
pedronis at codespeak.net
pedronis at codespeak.net
Mon Oct 19 11:18:33 CEST 2009
Author: pedronis
Date: Mon Oct 19 11:18:33 2009
New Revision: 68618
Modified:
pypy/trunk/pypy/jit/backend/loopviewer.py
pypy/trunk/pypy/jit/backend/showstats.py
pypy/trunk/pypy/jit/metainterp/test/oparser.py
pypy/trunk/pypy/jit/metainterp/test/test_oparser.py
Log:
(pedronis, cfbolz): add a helper function that splits the content of the log
file containing optimized loops into its parts (e.g. loops and bridges)
Modified: pypy/trunk/pypy/jit/backend/loopviewer.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/loopviewer.py (original)
+++ pypy/trunk/pypy/jit/backend/loopviewer.py Mon Oct 19 11:18:33 2009
@@ -2,9 +2,10 @@
""" Usage: loopviewer.py [loopnum] loopfile
"""
+import autopath
import py
import sys
-from pypy.jit.metainterp.test.oparser import parse
+from pypy.jit.metainterp.test.oparser import parse, split_logs_into_loops
from pypy.jit.metainterp.history import ConstInt
from pypy.rpython.lltypesystem import llmemory, lltype
@@ -16,8 +17,8 @@
def main(loopnum, loopfile):
data = py.path.local(loopfile).read()
- loops = [i for i in data.split("[") if i]
- inp = "[" + loops[loopnum]
+ loops = split_logs_into_loops(data)
+ inp = loops[loopnum]
loop = parse(inp, namespace=alldict)
loop.show()
Modified: pypy/trunk/pypy/jit/backend/showstats.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/showstats.py (original)
+++ pypy/trunk/pypy/jit/backend/showstats.py Mon Oct 19 11:18:33 2009
@@ -1,6 +1,7 @@
#!/usr/bin/env python
+import autopath
import sys, py
-from pypy.jit.metainterp.test.oparser import parse
+from pypy.jit.metainterp.test.oparser import parse, split_logs_into_loops
from pypy.jit.metainterp.resoperation import rop
from pypy.rpython.lltypesystem import lltype, llmemory
@@ -11,9 +12,8 @@
alldict = AllDict()
def main(argv):
- lst = ("\n" + py.path.local(argv[0]).read()).split("\n[")
- lst = ['[' + i for i in lst if i]
- for oplist in lst:
+ parts = split_logs_into_loops(py.path.local(argv[0]).read())
+ for oplist in parts:
loop = parse(oplist, namespace=alldict)
num_ops = 0
num_dmp = 0
Modified: pypy/trunk/pypy/jit/metainterp/test/oparser.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/oparser.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/oparser.py Mon Oct 19 11:18:33 2009
@@ -295,6 +295,24 @@
kwds['invent_fail_descr'] = None
return parse(*args, **kwds)
+
+def split_logs_into_loops(text):
+ lines = text.splitlines()
+ parts = []
+ last_with_hash = False
+ lines_of_part = []
+ for i, line in enumerate(lines):
+ if (line.startswith("[") and last_with_hash
+ and len(lines_of_part) > 1):
+ parts.append("\n".join(lines_of_part[:-1]))
+ lines_of_part = [lines_of_part[-1], line]
+ else:
+ lines_of_part.append(line)
+ last_with_hash = line.startswith("#")
+ parts.append("\n".join(lines_of_part))
+ return parts
+
+
def _box_counter_more_than(s):
if s.isdigit():
Box._counter = max(Box._counter, int(s)+1)
Modified: pypy/trunk/pypy/jit/metainterp/test/test_oparser.py
==============================================================================
--- pypy/trunk/pypy/jit/metainterp/test/test_oparser.py (original)
+++ pypy/trunk/pypy/jit/metainterp/test/test_oparser.py Mon Oct 19 11:18:33 2009
@@ -1,7 +1,7 @@
from pypy.rpython.lltypesystem import lltype, llmemory
-from pypy.jit.metainterp.test.oparser import parse
+from pypy.jit.metainterp.test.oparser import parse, split_logs_into_loops
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.metainterp.history import AbstractDescr, BoxInt, LoopToken,\
BoxFloat
@@ -160,3 +160,72 @@
'''
loop = parse(x)
# assert did not explode
+
+def test_split_logs_into_loops():
+ text = '''\
+# Loop0 (loop), 12 ops
+[i0, i1]
+debug_merge_point('(no jitdriver.get_printable_location!)')
+i3 = call(ConstClass(cls2), i0, descr=<Descr object at 0xb18a86c>)
+guard_no_exception(, descr=<Guard5>) [i0, i1, i3]
+i5 = int_add(i1, 2)
+i7 = call(ConstClass(cls6), i0, descr=<Descr object at 0xb18a86c>)
+p9 = guard_exception(4, descr=<Guard6>) [i5, i0, i7]
+i11 = int_sub(i5, 1)
+i12 = int_sub(i0, 1)
+i14 = int_gt(i12, 3)
+guard_true(i14, descr=<Guard7>) [i11, i12]
+debug_merge_point('(no jitdriver.get_printable_location!)')
+jump(i12, i11, descr=<Loop0>)
+# Loop1 (entry bridge), 12 ops
+[i0, i1]
+debug_merge_point('(no jitdriver.get_printable_location!)')
+i3 = call(ConstClass(cls2), i0, descr=<Descr object at 0xb18a86c>)
+p5 = guard_exception(4, descr=<Guard8>) [i0, i1, i3]
+i7 = int_add(i1, 1)
+i9 = call(ConstClass(cls8), i0, descr=<Descr object at 0xb18a86c>)
+p11 = guard_exception(4, descr=<Guard9>) [i7, i0, i9]
+i12 = int_sub(i7, 1)
+i13 = int_sub(i0, 1)
+i15 = int_gt(i13, 3)
+guard_true(i15, descr=<Guard10>) [i12, i13]
+debug_merge_point('(no jitdriver.get_printable_location!)')
+jump(i13, i12, descr=<Loop0>)
+# bridge out of Guard5, 10 ops
+[i0, i1, i2]
+p4 = guard_exception(4, descr=<Guard11>) [i0, i1, i2]
+i6 = int_add(i1, 1)
+i8 = call(ConstClass(cls7), i0, descr=<Descr object at 0xb18a86c>)
+p10 = guard_exception(4, descr=<Guard12>) [i6, i0, i8]
+i11 = int_sub(i6, 1)
+i12 = int_sub(i0, 1)
+i14 = int_gt(i12, 3)
+guard_true(i14, descr=<Guard13>) [i11, i12]
+debug_merge_point('(no jitdriver.get_printable_location!)')
+jump(i12, i11, descr=<Loop0>)
+# bridge out of Guard9, 6 ops
+[i0, i1, i2]
+i4 = int_add(i0, 2)
+i6 = int_sub(i1, 1)
+i8 = int_gt(i6, 3)
+guard_true(i8, descr=<Guard14>) [i4, i6]
+debug_merge_point('(no jitdriver.get_printable_location!)')
+jump(i6, i4, descr=<Loop0>)
+# bridge out of Guard12, 6 ops
+[i0, i1, i2]
+i4 = int_add(i0, 2)
+i6 = int_sub(i1, 1)
+i8 = int_gt(i6, 3)
+guard_true(i8, descr=<Guard15>) [i4, i6]
+debug_merge_point('(no jitdriver.get_printable_location!)')
+jump(i6, i4, descr=<Loop0>)
+'''
+ parts = split_logs_into_loops(text)
+ assert len(parts) == 5
+ assert "\n".join(parts) == text.strip()
+ for part, typ in zip(parts,
+ ["Loop0", "Loop1",
+ "bridge out of Guard5",
+ "bridge out of Guard9",
+ "bridge out of Guard12"]):
+ assert part.startswith("# %s" % typ)
More information about the Pypy-commit
mailing list