[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