[pypy-commit] pypy optresult-unroll: write enough to pass the test, maybe we want to jump to preamble instead

fijal noreply at buildbot.pypy.org
Thu Sep 3 20:31:00 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79403:319cea2b97b0
Date: 2015-09-03 20:31 +0200
http://bitbucket.org/pypy/pypy/changeset/319cea2b97b0/

Log:	write enough to pass the test, maybe we want to jump to preamble
	instead

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
@@ -339,8 +339,7 @@
         loop_info, loop_ops = optimize_trace(metainterp_sd, jitdriver_sd,
                                              loop_data)
     except InvalidLoop:
-        raise Exception("think about it")
-        xxx
+        return None
         # Fall back on jumping directly to preamble
         jump_op = ResOperation(rop.JUMP, inputargs[:],
                                descr=loop_jitcell_token.target_tokens[0])
@@ -1004,13 +1003,9 @@
     #
     # Attempt to use optimize_bridge().  This may return None in case
     # it does not work -- i.e. none of the existing old_loop_tokens match.
-    #new_trace = create_empty_loop(metainterp)
-    #new_trace.inputargs = metainterp.history.inputargs[:]
-
-    #new_trace.operations = metainterp.history.operations[:]
+    
     metainterp_sd = metainterp.staticdata
     jitdriver_sd = metainterp.jitdriver_sd
-    state = jitdriver_sd.warmstate
     if isinstance(resumekey, ResumeAtPositionDescr):
         inline_short_preamble = False
     else:
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -9,7 +9,7 @@
      Optimization, LoopInfo, MININT, MAXINT
 from rpython.jit.metainterp.optimizeopt.vstring import StrPtrInfo
 from rpython.jit.metainterp.optimizeopt.virtualstate import (
-    VirtualStateConstructor, VirtualStatesCantMatch)
+    VirtualStateConstructor, VirtualStatesCantMatch, BadVirtualState)
 from rpython.jit.metainterp.resoperation import rop, ResOperation, GuardResOp
 from rpython.jit.metainterp import compile
 from rpython.rlib.debug import debug_print
@@ -142,11 +142,14 @@
                                                        state.virtual_state,
                                                 celltoken.target_tokens)
         # force the boxes for virtual state to match
-        args = target_virtual_state.make_inputargs(
-            [self.get_box_replacement(x) for x in end_jump.getarglist()],
-            self.optimizer, force_boxes=True)
-        for arg in args:
-            self.optimizer.force_box(arg)
+        try:
+            args = target_virtual_state.make_inputargs(
+               [self.get_box_replacement(x) for x in end_jump.getarglist()],
+               self.optimizer, force_boxes=True)
+            for arg in args:
+                self.optimizer.force_box(arg)
+        except BadVirtualState:
+            raise InvalidLoop
         extra_same_as = self.short_preamble_producer.extra_same_as[:]
         target_token = self.finalize_short_preamble(label_op,
                                                     state.virtual_state)


More information about the pypy-commit mailing list