[pypy-commit] pypy default: Fix bug with regard to multiple loops at the same assembler piece. Make parsing

fijal noreply at buildbot.pypy.org
Sat Jul 16 16:29:48 CEST 2011


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: 
Changeset: r45668:402d04acdc09
Date: 2011-07-16 16:29 +0200
http://bitbucket.org/pypy/pypy/changeset/402d04acdc09/

Log:	Fix bug with regard to multiple loops at the same assembler piece.
	Make parsing assembler lazy (a bit ugly)

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
@@ -343,18 +343,20 @@
             addr = int(m.group(1), 16)
             entry = entry.lower()
             m = re.search('guard \d+', entry)
-            addrs[addr] = m.group(0)
+            name = m.group(0)
         else:
             name = entry[:entry.find('(') - 1].lower()
-            addrs[int(m.group(1), 16)] = name
+            addr = int(m.group(1), 16)
+        addrs.setdefault(addr, []).append(name)
     dumps = {}
     for entry in extract_category(log, 'jit-backend-dump'):
         backend, _, dump, _ = entry.split("\n")
         _, addr, _, data = re.split(" +", dump)
         backend_name = backend.split(" ")[1]
         addr = int(addr[1:], 16)
-        if addr in addrs:
-            dumps[addrs[addr]] = (backend_name, addr, data)
+        if addr in addrs and addrs[addr]:
+            name = addrs[addr].pop(0) # they should come in order
+            dumps[name] = (backend_name, addr, data)
     loops = []
     for entry in extract_category(log, 'jit-log-opt'):
         parser = ParserCls(entry, None, {}, 'lltype', None,
@@ -369,7 +371,10 @@
             name = comm[2:comm.find(':')-1]
         if name in dumps:
             bname, start_ofs, dump = dumps[name]
-            parser.postprocess(loop, backend_tp=bname, backend_dump=dump,
-                               dump_start=start_ofs)
+            loop.force_asm = (lambda dump=dump, start_ofs=start_ofs,
+                              bname=bname, loop=loop:
+                              parser.postprocess(loop, backend_tp=bname,
+                                                 backend_dump=dump,
+                                                 dump_start=start_ofs))
         loops.append(loop)
     return log, loops
diff --git a/pypy/tool/jitlogparser/test/logtest2.log b/pypy/tool/jitlogparser/test/logtest2.log
--- a/pypy/tool/jitlogparser/test/logtest2.log
+++ b/pypy/tool/jitlogparser/test/logtest2.log
@@ -259,7 +259,7 @@
 [1f600873506] {jit-backend-dump
 BACKEND x86_64
 SYS_EXECUTABLE python
-CODE_DUMP @7f8907a0b9e5 +0  C8000000
+CODE_DUMP @7f8907a0b3d5 +0  C8000000
 [1f600874b44] jit-backend-dump}
 [1f6008754d4] {jit-backend-dump
 BACKEND x86_64
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
@@ -213,11 +213,15 @@
 def test_import_log():
     _, loops = import_log(str(py.path.local(__file__).join('..',
                                                            'logtest.log')))
+    for loop in loops:
+        loop.force_asm()
     assert 'jge' in loops[0].operations[3].asm
 
 def test_import_log_2():
     _, loops = import_log(str(py.path.local(__file__).join('..',
                                                            'logtest2.log')))
+    for loop in loops:
+        loop.force_asm()
     assert 'cmp' in loops[1].operations[1].asm
     # bridge
     assert 'jo' in loops[3].operations[3].asm


More information about the pypy-commit mailing list