Author: Antonio Cuni <anto.c...@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): _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit