[pypy-commit] pypy fix-sre-problems: - remove frontend_tag_overflow

cfbolz pypy.commits at gmail.com
Wed Mar 28 04:50:31 EDT 2018


Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: fix-sre-problems
Changeset: r94154:c7964f0be55f
Date: 2018-03-28 10:49 +0200
http://bitbucket.org/pypy/pypy/changeset/c7964f0be55f/

Log:	- remove frontend_tag_overflow
	- rename done to not clash with TraceIterator.done
	- add a defensive assert there

diff --git a/rpython/jit/metainterp/opencoder.py b/rpython/jit/metainterp/opencoder.py
--- a/rpython/jit/metainterp/opencoder.py
+++ b/rpython/jit/metainterp/opencoder.py
@@ -49,13 +49,6 @@
     way up to lltype.Signed for indexes everywhere
     """
 
-def frontend_tag_overflow():
-    # Minor abstraction leak: raise directly the right exception
-    # expected by the rest of the machinery
-    from rpython.jit.metainterp import history
-    from rpython.rlib.jit import Counters
-    raise history.SwitchToBlackhole(Counters.ABORT_TOO_LONG)
-
 class BaseTrace(object):
     pass
 
@@ -306,8 +299,10 @@
         self._ops[self._pos] = rffi.cast(model.STORAGE_TP, v)
         self._pos += 1
 
-    def done(self):
+    def tracing_done(self, abandoned_trace=False):
         from rpython.rlib.debug import debug_start, debug_stop, debug_print
+        if not abandoned_trace:
+            assert not self.tag_overflow
 
         self._bigints_dict = {}
         self._refs_dict = llhelper.new_ref_dict_3()
@@ -319,8 +314,6 @@
         debug_print(" ref consts: " + str(self._consts_ptr) + " " + str(len(self._refs)))
         debug_print(" descrs: " + str(len(self._descrs)))
         debug_stop("jit-trace-done")
-        return 0 # completely different than TraceIter.done, but we have to
-        # share the base class
 
     def length(self):
         return self._pos
diff --git a/rpython/jit/metainterp/pyjitpl.py b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -2387,7 +2387,7 @@
         if (self.history.length() > warmrunnerstate.trace_limit or
                 self.history.trace_tag_overflow()):
             jd_sd, greenkey_of_huge_function = self.find_biggest_function()
-            self.history.trace.done()
+            self.history.trace.tracing_done(abandoned_trace=True)
             self.staticdata.stats.record_aborted(greenkey_of_huge_function)
             self.portal_trace_positions = None
             if greenkey_of_huge_function is not None:
@@ -2690,7 +2690,7 @@
                      try_disabling_unroll=False, exported_state=None):
         num_green_args = self.jitdriver_sd.num_green_args
         greenkey = original_boxes[:num_green_args]
-        self.history.trace.done()
+        self.history.trace.tracing_done()
         if not self.partial_trace:
             ptoken = self.get_procedure_token(greenkey)
             if ptoken is not None and ptoken.target_tokens is not None:
@@ -2743,7 +2743,7 @@
         self.history.record(rop.JUMP, live_arg_boxes[num_green_args:], None,
                             descr=target_jitcell_token)
         self.history.ends_with_jump = True
-        self.history.trace.done()
+        self.history.trace.tracing_done()
         try:
             target_token = compile.compile_trace(self, self.resumekey,
                 live_arg_boxes[num_green_args:])
@@ -2777,7 +2777,7 @@
             assert False
         # FIXME: can we call compile_trace?
         self.history.record(rop.FINISH, exits, None, descr=token)
-        self.history.trace.done()
+        self.history.trace.tracing_done()
         target_token = compile.compile_trace(self, self.resumekey, exits)
         if target_token is not token:
             compile.giveup()
@@ -2803,7 +2803,7 @@
         sd = self.staticdata
         token = sd.exit_frame_with_exception_descr_ref
         self.history.record(rop.FINISH, [valuebox], None, descr=token)
-        self.history.trace.done()
+        self.history.trace.tracing_done()
         target_token = compile.compile_trace(self, self.resumekey, [valuebox])
         if target_token is not token:
             compile.giveup()


More information about the pypy-commit mailing list