[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