[pypy-commit] pypy small-unroll-improvements: better debug prints when translated

cfbolz noreply at buildbot.pypy.org
Sat Apr 12 09:24:47 CEST 2014


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: small-unroll-improvements
Changeset: r70599:0841797a4108
Date: 2014-04-12 09:23 +0200
http://bitbucket.org/pypy/pypy/changeset/0841797a4108/

Log:	better debug prints when translated

diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -526,7 +526,7 @@
         values = [self.getvalue(arg)
                   for arg in jumpop.getarglist()]
         debug_start('jit-log-virtualstate')
-        virtual_state.debug_print("Looking for ")
+        virtual_state.debug_print("Looking for ", metainterp_sd=self.optimizer.metainterp_sd)
 
         for target in cell_token.target_tokens:
             if not target.virtual_state:
@@ -546,7 +546,7 @@
                 else:
                     debugmsg = 'Matched '
             except VirtualStatesCantMatch, e:
-                target.virtual_state.debug_print(debugmsg, e.state.bad)
+                target.virtual_state.debug_print(debugmsg, e.state.bad, metainterp_sd=self.optimizer.metainterp_sd)
                 continue
 
             assert patchguardop is not None or (extra_guards == [] and len(target.short_preamble) == 1)
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -1,5 +1,5 @@
 from rpython.jit.metainterp import resume
-from rpython.jit.metainterp.history import BoxInt, ConstInt, BoxPtr, Const
+from rpython.jit.metainterp.history import BoxInt, ConstInt, BoxPtr, Const, ConstPtr
 from rpython.jit.metainterp.optimizeopt import virtualize
 from rpython.jit.metainterp.optimizeopt.intutils import IntUnbounded
 from rpython.jit.metainterp.optimizeopt.optimizer import (LEVEL_CONSTANT,
@@ -82,7 +82,7 @@
     def _enum(self, virtual_state):
         raise NotImplementedError
 
-    def debug_print(self, indent, seen, bad):
+    def debug_print(self, indent, seen, bad, metainterp_sd):
         mark = ''
         if self in bad:
             mark = '*'
@@ -90,7 +90,7 @@
         if self not in seen:
             seen[self] = True
             for s in self.fieldstate:
-                s.debug_print(indent + "    ", seen, bad)
+                s.debug_print(indent + "    ", seen, bad, metainterp_sd)
         else:
             debug_print(indent + "    ...")
 
@@ -405,22 +405,34 @@
         self.position_in_notvirtuals = len(virtual_state.notvirtuals)
         virtual_state.notvirtuals.append(self)
 
-    def debug_print(self, indent, seen, bad):
+    def debug_print(self, indent, seen, bad, metainterp_sd=None):
         mark = ''
         if self in bad:
             mark = '*'
-        if we_are_translated():
-            l = {LEVEL_UNKNOWN: 'Unknown',
-                 LEVEL_NONNULL: 'NonNull',
-                 LEVEL_KNOWNCLASS: 'KnownClass',
-                 LEVEL_CONSTANT: 'Constant',
-                 }[self.level]
+        if self.level == LEVEL_UNKNOWN:
+            l = "Unknown"
+        elif self.level == LEVEL_NONNULL:
+            l = "NonNull"
+        elif self.level == LEVEL_KNOWNCLASS:
+            addr = self.known_class.getaddr()
+            if metainterp_sd:
+                name = metainterp_sd.get_name_from_address(addr)
+            else:
+                name = "?"
+            l = "KnownClass(%s)" % name
         else:
-            l = {LEVEL_UNKNOWN: 'Unknown',
-                 LEVEL_NONNULL: 'NonNull',
-                 LEVEL_KNOWNCLASS: 'KnownClass(%r)' % self.known_class,
-                 LEVEL_CONSTANT: 'Constant(%r)' % self.constbox,
-                 }[self.level]
+            assert self.level == LEVEL_CONSTANT
+            const = self.constbox
+            if isinstance(const, ConstInt):
+                l = "ConstInt(%s)" % (const.value, )
+            elif isinstance(const, ConstPtr):
+                if const.value:
+                    l = "ConstPtr"
+                else:
+                    l = "ConstPtr(null)"
+            else:
+                assert isinstance(const, ConstFloat)
+                l = "ConstFloat(%s)" % cons.getfloat()
 
         lb = ''
         if self.lenbound:
@@ -481,13 +493,13 @@
 
         return inputargs
 
-    def debug_print(self, hdr='', bad=None):
+    def debug_print(self, hdr='', bad=None, metainterp_sd=None):
         if bad is None:
             bad = {}
         debug_print(hdr + "VirtualState():")
         seen = {}
         for s in self.state:
-            s.debug_print("    ", seen, bad)
+            s.debug_print("    ", seen, bad, metainterp_sd)
 
 
 class VirtualStateAdder(resume.ResumeDataVirtualAdder):


More information about the pypy-commit mailing list