Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: share-guard-info
Changeset: r79761:c167bc541cbb
Date: 2015-09-22 12:48 +0200
http://bitbucket.org/pypy/pypy/changeset/c167bc541cbb/

Log:    don't look into guard_exception for now

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
@@ -847,6 +847,9 @@
                 assert 0, box.type
             self.status = ty | (r_uint(i) << self.ST_SHIFT)
 
+class ResumeGuardExcDescr(ResumeGuardDescr):
+    pass
+
 class ResumeAtPositionDescr(ResumeGuardDescr):
     pass
 
@@ -934,6 +937,8 @@
     elif opnum in (rop.GUARD_IS_OBJECT, rop.GUARD_SUBCLASS, rop.GUARD_GC_TYPE):
         # note - this only happens in tests
         resumedescr = ResumeAtPositionDescr()
+    elif opnum in (rop.GUARD_EXCEPTION, rop.GUARD_NO_EXCEPTION):
+        resumedescr = ResumeGuardExcDescr()
     else:
         resumedescr = ResumeGuardDescr()
     return resumedescr
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -603,7 +603,8 @@
                                              self._last_guard_op)
         else:
             op = self.store_final_boxes_in_guard(guard_op, pendingfields)
-            self._last_guard_op = op
+            if op.getopnum() != rop.GUARD_EXCEPTION:
+                self._last_guard_op = op
             # for unrolling
             for farg in op.getfailargs():
                 if farg:
@@ -612,6 +613,8 @@
 
 
     def _copy_resume_data_from(self, guard_op, last_guard_op):
+        if guard_op.getopnum() in (rop.GUARD_NO_EXCEPTION, 
rop.GUARD_EXCEPTION):
+            assert last_guard_op.getopnum() == rop.GUARD_NOT_FORCED
         descr = compile.invent_fail_descr_for_op(guard_op.getopnum(), self)
         descr.copy_all_attributes_from(last_guard_op.getdescr())
         guard_op.setdescr(descr)
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
@@ -2322,7 +2322,7 @@
         if isinstance(key, compile.ResumeAtPositionDescr):
             self.seen_loop_header_for_jdindex = self.jitdriver_sd.index
         try:
-            self.prepare_resume_from_failure(deadframe)
+            self.prepare_resume_from_failure(deadframe, key)
             if self.resumekey_original_loop_token is None:   # very rare case
                 raise SwitchToBlackhole(Counters.ABORT_BRIDGE)
             self.interpret()
@@ -2465,17 +2465,20 @@
             else: assert 0
         self.jitdriver_sd.warmstate.execute_assembler(loop_token, *args)
 
-    def prepare_resume_from_failure(self, deadframe):
+    def prepare_resume_from_failure(self, deadframe, resumedescr):
         exception = self.cpu.grab_exc_value(deadframe)
-        if exception:
-            self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR,
-                                                          exception))
-        #else:
-        #    self.clear_exception()
-        #try:
-        #    self.handle_possible_exception()
-        #except ChangeFrame:
-        #    pass
+        if isinstance(resumedescr, compile.ResumeGuardExcDescr):
+            if exception:
+                self.execute_ll_raised(lltype.cast_opaque_ptr(rclass.OBJECTPTR,
+                                                              exception))
+            else:
+                self.clear_exception()
+            try:
+                self.handle_possible_exception()
+            except ChangeFrame:
+                pass
+        else:
+            assert not exception
 
     def get_procedure_token(self, greenkey, with_compiled_targets=False):
         JitCell = self.jitdriver_sd.warmstate.JitCell
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to