Author: Carl Friedrich Bolz <cfb...@gmx.de>
Branch: guard-compatible
Changeset: r85472:4c174b7fa972
Date: 2016-06-29 14:52 +0200
http://bitbucket.org/pypy/pypy/changeset/4c174b7fa972/

Log:    print the implicit conditions at the beginning of a bridge too

diff --git a/rpython/jit/metainterp/compatible.py 
b/rpython/jit/metainterp/compatible.py
--- a/rpython/jit/metainterp/compatible.py
+++ b/rpython/jit/metainterp/compatible.py
@@ -182,6 +182,13 @@
         return "\n".join([cond.repr(argrepr) for cond in self.conditions])
 
 
+    def repr_of_conditions_as_jit_debug(self, argrepr="?"):
+        conditions = [cond.repr(argrepr) for cond in self.conditions]
+        # make fake jit-debug ops to print
+        for i in range(len(conditions)):
+            conditions[i] = "jit_debug('%s')" % (conditions[i], )
+        return conditions
+
 
 class Condition(object):
     def __init__(self, optimizer):
diff --git a/rpython/jit/metainterp/compile.py 
b/rpython/jit/metainterp/compile.py
--- a/rpython/jit/metainterp/compile.py
+++ b/rpython/jit/metainterp/compile.py
@@ -1163,6 +1163,12 @@
             return self._compatibility_conditions.repr_of_conditions(argrepr)
         return ''
 
+    def repr_of_conditions_as_jit_debug(self, argrepr="?"):
+        if self._compatibility_conditions:
+            return 
self._compatibility_conditions.repr_of_conditions_as_jit_debug(argrepr)
+        return []
+
+
 # ____________________________________________________________
 
 memory_error = MemoryError()
diff --git a/rpython/jit/metainterp/logger.py b/rpython/jit/metainterp/logger.py
--- a/rpython/jit/metainterp/logger.py
+++ b/rpython/jit/metainterp/logger.py
@@ -57,6 +57,7 @@
 
     def log_bridge(self, inputargs, operations, extra=None,
                    descr=None, ops_offset=None, memo=None):
+        from rpython.jit.metainterp.compile import GuardCompatibleDescr
         if extra == "noopt":
             debug_start("jit-log-noopt-bridge")
             debug_print("# bridge out of Guard",
@@ -80,11 +81,23 @@
             debug_stop("jit-log-compiling-bridge")
         else:
             debug_start("jit-log-opt-bridge")
-            debug_print("# bridge out of Guard",
-                        "0x%x" % r_uint(compute_unique_id(descr)),
-                        "with", len(operations), "ops")
-            logops = self._log_operations(inputargs, operations, ops_offset,
-                                          memo)
+            if have_debug_prints():
+                print_after_inputargs = ''
+                debug_print("# bridge out of Guard",
+                            "0x%x" % r_uint(compute_unique_id(descr)),
+                            "with", len(operations), "ops")
+                logops = self._make_log_operations(memo)
+                if isinstance(descr, GuardCompatibleDescr):
+                    if descr.fallback_jump_target == 0:
+                        # this means it's the last attached guard
+                        ccond = descr.other_compat_conditions[-1]
+                        argrepr = logops.repr_of_arg(
+                                inputargs[descr.failarg_index])
+                        conditions = ccond.repr_of_conditions_as_jit_debug(
+                                argrepr)
+                        print_after_inputargs = "\n".join(conditions)
+                logops = self._log_operations(inputargs, operations, 
ops_offset,
+                                              memo, logops, 
print_after_inputargs)
             debug_stop("jit-log-opt-bridge")
         return logops
 
@@ -105,11 +118,12 @@
         debug_stop("jit-abort-log")
         return logops
 
-    def _log_operations(self, inputargs, operations, ops_offset, memo=None):
+    def _log_operations(self, inputargs, operations, ops_offset, memo=None, 
logops=None, print_after_inputargs=''):
         if not have_debug_prints():
             return None
-        logops = self._make_log_operations(memo)
-        logops._log_operations(inputargs, operations, ops_offset, memo)
+        if logops is None:
+            logops = self._make_log_operations(memo)
+        logops._log_operations(inputargs, operations, ops_offset, memo, 
print_after_inputargs)
         return logops
 
     def _make_log_operations(self, memo):
@@ -229,18 +243,14 @@
             from rpython.jit.metainterp.compile import GuardCompatibleDescr
             descr = op.getdescr()
             assert isinstance(descr, GuardCompatibleDescr)
-            conditions = descr.repr_of_conditions(argreprs[0])
+            conditions = descr.repr_of_conditions_as_jit_debug(argreprs[0])
             if conditions:
-                # make fake jit-debug ops to print
-                conditions = conditions.split("\n")
-                for i in range(len(conditions)):
-                    conditions[i] = "jit_debug('%s')" % (conditions[i], )
                 fail_args += "\n" + "\n".join(conditions)
         return s_offset + res + op.getopname() + '(' + args + ')' + fail_args
 
 
     def _log_operations(self, inputargs, operations, ops_offset=None,
-                        memo=None):
+                        memo=None, print_after_inputargs=''):
         if not have_debug_prints():
             return
         if ops_offset is None:
@@ -248,6 +258,8 @@
         if inputargs is not None:
             args = ", ".join([self.repr_of_arg(arg) for arg in inputargs])
             debug_print('[' + args + ']')
+        if print_after_inputargs:
+            debug_print(print_after_inputargs)
         for i in range(len(operations)):
             #op = operations[i]
             debug_print(self.repr_of_resop(operations[i], ops_offset))
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to