[pypy-commit] pypy share-guard-info: don't share guard_overflow/guard_exception

fijal noreply at buildbot.pypy.org
Sun Sep 20 18:23:28 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: share-guard-info
Changeset: r79723:f2903514ce72
Date: 2015-09-20 11:06 +0200
http://bitbucket.org/pypy/pypy/changeset/f2903514ce72/

Log:	don't share guard_overflow/guard_exception

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
@@ -573,7 +573,6 @@
                     self.origin_jitcode = None
                     self.origin_pc = 0
                 else:
-                    self._really_emitted_operation = None # removed
                     return # we optimize the guard
             self.metainterp_sd.profiler.count(jitprof.Counters.OPT_GUARDS)
             pendingfields = self.pendingfields
@@ -583,20 +582,7 @@
                 del self.replaces_guard[orig_op]
                 return
             else:
-                guard_op = self.replace_op_with(op, op.getopnum())
-                if (self._last_guard_op and guard_op.getdescr() is None and
-                    guard_op.getopnum() != rop.GUARD_VALUE and
-                    not guard_op.same_guard_position(self._last_guard_op)):
-                    op = self._copy_resume_data_from(guard_op,
-                                                     self._last_guard_op)
-                else:
-                    op = self.store_final_boxes_in_guard(guard_op,
-                                                         pendingfields)
-                    self._last_guard_op = op
-                    # for unrolling
-                    for farg in op.getfailargs():
-                        if farg:
-                            self.force_box(farg)
+                op = self.emit_guard_operation(op, pendingfields)
         elif op.can_raise():
             self.exception_might_have_happened = True
         if op.has_no_side_effect() or op.is_guard() or op.is_jit_debug():
@@ -606,6 +592,24 @@
         self._really_emitted_operation = op
         self._newoperations.append(op)
 
+    def emit_guard_operation(self, op, pendingfields):
+        guard_op = self.replace_op_with(op, op.getopnum())
+        if (self._last_guard_op and guard_op.getdescr() is None and
+            guard_op.getopnum() != rop.GUARD_VALUE and
+            not guard_op.same_guard_position(self._last_guard_op)):
+            op = self._copy_resume_data_from(guard_op,
+                                             self._last_guard_op)
+        else:
+            op = self.store_final_boxes_in_guard(guard_op, pendingfields)
+            if op.getopnum() not in (rop.GUARD_EXCEPTION, rop.GUARD_OVERFLOW):
+                self._last_guard_op = op
+            # for unrolling
+            for farg in op.getfailargs():
+                if farg:
+                    self.force_box(farg)
+        return op
+
+
     def _copy_resume_data_from(self, guard_op, last_guard_op):
         descr = compile.invent_fail_descr_for_op(guard_op.getopnum(), self)
         descr.copy_all_attributes_from(last_guard_op.getdescr())


More information about the pypy-commit mailing list