[pypy-commit] pypy new-jit-log: start_new_trace was called too late, it must be called before the optimizer is invoked. added an ABORT_TRACE marker and encoding it into the jitlog
plan_rich
pypy.commits at gmail.com
Tue Apr 26 04:55:15 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: new-jit-log
Changeset: r83900:1ba36757f66e
Date: 2016-04-26 09:17 +0200
http://bitbucket.org/pypy/pypy/changeset/1ba36757f66e/
Log: start_new_trace was called too late, it must be called before the
optimizer is invoked. added an ABORT_TRACE marker and encoding it
into the jitlog
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
@@ -218,6 +218,7 @@
loop_info, ops = optimize_trace(metainterp_sd, jitdriver_sd,
data, metainterp.box_names_memo)
except InvalidLoop:
+ metainterp_sd.jitlog.trace_aborted()
trace.cut_at(cut_at)
return None
loop = create_empty_loop(metainterp)
@@ -251,7 +252,9 @@
history = metainterp.history
trace = history.trace
warmstate = jitdriver_sd.warmstate
-
+ #
+ metainterp_sd.jitlog.start_new_trace(None, False)
+ #
enable_opts = jitdriver_sd.warmstate.enable_opts
if try_disabling_unroll:
if 'unroll' not in enable_opts:
@@ -276,6 +279,7 @@
preamble_data,
metainterp.box_names_memo)
except InvalidLoop:
+ metainterp_sd.jitlog.trace_aborted()
history.cut(cut_at)
return None
@@ -292,6 +296,7 @@
loop_data,
metainterp.box_names_memo)
except InvalidLoop:
+ metainterp_sd.jitlog.trace_aborted()
history.cut(cut_at)
return None
@@ -341,7 +346,9 @@
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
history = metainterp.history
-
+ #
+ metainterp_sd.jitlog.start_new_trace(resumekey, False)
+ #
loop_jitcell_token = metainterp.get_procedure_token(greenkey)
assert loop_jitcell_token
@@ -369,6 +376,7 @@
loop_data,
metainterp.box_names_memo)
except InvalidLoop:
+ metainterp_sd.jitlog.trace_aborted()
history.cut(cut)
return None
@@ -566,7 +574,6 @@
def send_bridge_to_backend(jitdriver_sd, metainterp_sd, faildescr, inputargs,
operations, original_loop_token, memo):
- metainterp_sd.jitlog.start_new_trace(faildescr)
forget_optimization_info(operations)
forget_optimization_info(inputargs)
if not we_are_translated():
@@ -1018,7 +1025,7 @@
def compile_trace(metainterp, resumekey, runtime_boxes):
"""Try to compile a new bridge leading from the beginning of the history
- to some existging place.
+ to some existing place.
"""
from rpython.jit.metainterp.optimizeopt import optimize_trace
@@ -1031,6 +1038,9 @@
metainterp_sd = metainterp.staticdata
jitdriver_sd = metainterp.jitdriver_sd
+ #
+ metainterp_sd.jitlog.start_new_trace(resumekey, False)
+ #
if isinstance(resumekey, ResumeAtPositionDescr):
inline_short_preamble = False
else:
@@ -1055,6 +1065,7 @@
info, newops = optimize_trace(metainterp_sd, jitdriver_sd,
data, metainterp.box_names_memo)
except InvalidLoop:
+ metainterp_sd.jitlog.trace_aborted()
#pdb.post_mortem(sys.exc_info()[2])
debug_print("compile_new_bridge: got an InvalidLoop")
# XXX I am fairly convinced that optimize_bridge cannot actually raise
diff --git a/rpython/rlib/jitlog.py b/rpython/rlib/jitlog.py
--- a/rpython/rlib/jitlog.py
+++ b/rpython/rlib/jitlog.py
@@ -174,6 +174,7 @@
('JITLOG_HEADER',),
('MERGE_POINT',),
('COMMON_PREFIX',),
+ ('ABORT_TRACE',),
]
start = 0x11
@@ -235,6 +236,9 @@
content.append(encode_le_addr(int(entry_bridge)))
self._write_marked(MARK_START_TRACE, ''.join(content))
+ def trace_aborted(self):
+ self._write_marked(MARK_ABORT_TRACE, encode_le_64bit(self.trace_id))
+
def _write_marked(self, mark, line):
if not we_are_translated():
assert self.cintf.jitlog_enabled()
More information about the pypy-commit
mailing list