[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