Author: Carl Friedrich Bolz <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit