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