[pypy-commit] pypy x86-dump-labels: dump labels to the log
antocuni
noreply at buildbot.pypy.org
Wed May 11 14:32:05 CEST 2011
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: x86-dump-labels
Changeset: r44073:a439f2b21bd5
Date: 2011-05-11 14:39 +0200
http://bitbucket.org/pypy/pypy/changeset/a439f2b21bd5/
Log: dump labels to the log
diff --git a/pypy/jit/backend/x86/codebuf.py b/pypy/jit/backend/x86/codebuf.py
--- a/pypy/jit/backend/x86/codebuf.py
+++ b/pypy/jit/backend/x86/codebuf.py
@@ -1,5 +1,7 @@
from pypy.rpython.lltypesystem import lltype, rffi
from pypy.rlib.rarithmetic import intmask
+from pypy.rlib.debug import debug_start, debug_print, debug_stop
+from pypy.rlib.debug import have_debug_prints
from pypy.jit.backend.llsupport.asmmemmgr import BlockBuilderMixin
from pypy.jit.backend.x86.rx86 import X86_32_CodeBuilder, X86_64_CodeBuilder
from pypy.jit.backend.x86.regloc import LocationCodeBuilder
@@ -42,3 +44,13 @@
adr[0] = intmask(adr[0] - p)
valgrind.discard_translations(addr, self.get_relative_pos())
self._dump(addr, "jit-backend-dump", backend_name)
+ self.dump_labels(addr, "jit-backend-dump-labels")
+
+ def dump_labels(self, addr, logname):
+ debug_start(logname)
+ if have_debug_prints():
+ debug_print('LABELS @%x' % addr)
+ for offset, name in self.labels:
+ debug_print('+%d: %s' % (offset, name))
+ debug_stop(logname)
+
diff --git a/pypy/jit/backend/x86/test/test_runner.py b/pypy/jit/backend/x86/test/test_runner.py
--- a/pypy/jit/backend/x86/test/test_runner.py
+++ b/pypy/jit/backend/x86/test/test_runner.py
@@ -391,6 +391,7 @@
assert res == 20
def test_labels(self):
+ from pypy.rlib import debug
i0 = BoxInt()
i1 = BoxInt()
i2 = BoxInt()
@@ -401,8 +402,9 @@
ResOperation(rop.JUMP, [i1], None, descr=looptoken),
]
inputargs = [i0]
+ debug._log = dlog = debug.DebugLog()
self.cpu.compile_loop(inputargs, operations, looptoken)
- labels = looptoken._x86_labels
+ debug._log = None
expected = ['getfield_raw',
'int_add',
'setfield_raw',
@@ -410,9 +412,23 @@
'int_le',
'jump',
'--end of the loop--']
+ #
+ # check the labels saved on the looptoken
+ labels = looptoken._x86_labels
assert len(labels) == len(expected)
for (off, lbl), exp_lbl in zip(labels, expected):
assert exp_lbl in lbl
+ #
+ # -----
+ # check the labels dumped to the log
+ # discards code blocks which do not belong to loops
+ dumped_labels, = [content for category, content in dlog
+ if (category == 'jit-backend-dump-labels' and
+ len(content) > 1)]
+ # the first debug_print is LABELS @address
+ assert len(dumped_labels) == len(expected) + 1
+ for (_, lbl), exp_lbl in zip(dumped_labels[1:], expected):
+ assert exp_lbl in lbl
class TestDebuggingAssembler(object):
def setup_method(self, meth):
More information about the pypy-commit
mailing list