Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: share-guard-info
Changeset: r79767:91e6f52d365c
Date: 2015-09-22 14:10 +0200
http://bitbucket.org/pypy/pypy/changeset/91e6f52d365c/

Log:    rookie mistake on using is on integers, also fix some tests and
        reenable removing guards

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
@@ -567,15 +567,13 @@
         self.metainterp_sd.profiler.count(jitprof.Counters.OPT_OPS)
         if op.is_guard():
             assert isinstance(op, GuardResOp)
-            #if self.origin_jitcode is not None:
-            #    if (self.origin_jitcode is op.rd_frame_info_list.jitcode and
-            #        self.origin_pc is op.rd_frame_info_list.pc):
-            #        self.origin_jitcode = None
-            #        self.origin_pc = 0
-            #    else:
-            #        import pdb
-            #        pdb.set_trace()
-            #        return # we optimize the guard
+            if self.origin_jitcode is not None:
+                if (self.origin_jitcode is op.rd_frame_info_list.jitcode and
+                    self.origin_pc == op.rd_frame_info_list.pc):
+                    self.origin_jitcode = None
+                    self.origin_pc = 0
+                else:
+                    return # we optimize the guard
             self.metainterp_sd.profiler.count(jitprof.Counters.OPT_GUARDS)
             pendingfields = self.pendingfields
             self.pendingfields = None
@@ -587,10 +585,12 @@
                 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() and
+        if ((op.has_no_side_effect() or op.is_guard() or op.is_jit_debug() or
+             op.is_ovf()) and
             not self.is_call_pure_pure_canraise(op)):
             pass
         else:
+            assert self.origin_jitcode is None
             self._last_guard_op = None
         self._really_emitted_operation = op
         self._newoperations.append(op)
diff --git a/rpython/jit/metainterp/test/test_ajit.py 
b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -2082,7 +2082,7 @@
         assert res == 7068153
         self.check_trace_count(6)
         self.check_resops(guard_true=8, guard_class=2, int_mul=3,
-                          int_add=3, guard_false=4)
+                          int_add=3, guard_false=3)
 
     def test_dont_trace_every_iteration(self):
         myjitdriver = JitDriver(greens = [], reds = ['a', 'b', 'i', 'sa'])
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to