Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r79163:a747291d1194
Date: 2015-08-23 18:23 +0200
http://bitbucket.org/pypy/pypy/changeset/a747291d1194/

Log:    fix some more tests

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
@@ -1,4 +1,5 @@
 
+import sys
 from rpython.jit.metainterp.history import Const
 from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes,\
      ShortPreambleBuilder, PreambleOp
@@ -9,6 +10,7 @@
     VirtualStateConstructor, VirtualStatesCantMatch)
 from rpython.jit.metainterp.resoperation import rop, ResOperation, GuardResOp
 from rpython.jit.metainterp import compile
+from rpython.rlib.debug import debug_print
 
 class UnrollableOptimizer(Optimizer):
     def force_op_from_preamble(self, preamble_op):
@@ -142,20 +144,41 @@
         jump_op = operations[-1]
         cell_token = jump_op.getdescr()
         if not inline_short_preamble or len(cell_token.target_tokens) == 1:
-            assert cell_token.target_tokens[0].virtual_state is None
-            jump_op = jump_op.copy_and_change(rop.JUMP,
-                                        descr=cell_token.target_tokens[0])
-            self.optimizer.send_extra_operation(jump_op)
-            return info, self.optimizer._newoperations[:]
+            return self.jump_to_preamble(cell_token, jump_op, info)
         vs = self.jump_to_existing_trace(jump_op, inline_short_preamble)
         if vs is None:
             return info, self.optimizer._newoperations[:]
+        warmrunnerdescr = self.optimizer.metainterp_sd.warmrunnerdesc
+        limit = warmrunnerdescr.memory_manager.retrace_limit
+        if cell_token.retraced_count < limit:
+            cell_token.retraced_count += 1
+            debug_print('Retracing (%d/%d)' % (cell_token.retraced_count, 
limit))
+        else:
+            debug_print("Retrace count reached, jumping to preamble")
+            return self.jump_to_preamble(cell_token, jump_op, info)
+        maxguards = warmrunnerdescr.memory_manager.max_retrace_guards
+        guard_count = 0
+        for op in self.optimizer._newoperations:
+            if op.is_guard():
+                guard_count += 1
+        if guard_count > maxguards:
+            target_token = cell_token.target_tokens[0]
+            target_token.targeting_jitcell_token.retraced_count = sys.maxint
+            return self.jump_to_preamble(cell_token, jump_op, info)
         exported_state = self.export_state(start_label,
                                            operations[-1].getarglist(),
                                            info.inputargs)
         self.optimizer._clean_optimization_info(self.optimizer._newoperations)
         return exported_state, self.optimizer._newoperations
 
+    def jump_to_preamble(self, cell_token, jump_op, info):
+        assert cell_token.target_tokens[0].virtual_state is None
+        jump_op = jump_op.copy_and_change(rop.JUMP,
+                                          descr=cell_token.target_tokens[0])
+        self.optimizer.send_extra_operation(jump_op)
+        return info, self.optimizer._newoperations[:]
+
+
     def jump_to_existing_trace(self, jump_op, inline_short_preamble):
         jitcelltoken = jump_op.getdescr()
         args = [self.get_box_replacement(op) for op in jump_op.getarglist()]
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py 
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -2,8 +2,8 @@
 from rpython.jit.metainterp.history import (ConstInt, Const,
         ConstPtr, ConstFloat)
 from rpython.jit.metainterp.optimizeopt import info
-from rpython.jit.metainterp.optimizeopt.intutils import IntUnbounded,\
-     ConstIntBound, MININT, MAXINT
+from rpython.jit.metainterp.optimizeopt.intutils import \
+     ConstIntBound, MININT, MAXINT, IntBound
 from rpython.jit.metainterp.resoperation import rop, ResOperation,\
      AbstractInputArg
 from rpython.rlib.debug import debug_start, debug_stop, debug_print
@@ -325,11 +325,12 @@
                 # XXX strings?
                 self.lenbound = info.getlenbound(None)
         elif type == 'i':
-            if info.lower < MININT / 2:
-                info.lower = MININT
-            if info.upper > MAXINT / 2:
-                info.upper = MAXINT
-            self.intbound = info
+            if isinstance(info, IntBound):
+                if info.lower < MININT / 2:
+                    info.lower = MININT
+                if info.upper > MAXINT / 2:
+                    info.upper = MAXINT
+                self.intbound = info
 
     def is_const(self):
         return self.constbox is not None
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
@@ -2767,9 +2767,8 @@
             return i
         #
         seen = []
-        def my_optimize_trace(metainterp_sd, jitdriver_sd, loop, enable_opts,
-                              *args, **kwds):
-            seen.append('unroll' in enable_opts)
+        def my_optimize_trace(metainterp_sd, jitdriver_sd, data):
+            seen.append('unroll' in data.enable_opts)
             raise InvalidLoop
         old_optimize_trace = optimizeopt.optimize_trace
         optimizeopt.optimize_trace = my_optimize_trace
@@ -3011,7 +3010,7 @@
             return a[0].intvalue
         res = self.meta_interp(f, [100])
         assert res == -2
-        self.check_resops(setarrayitem_gc=2, getarrayitem_gc=1)
+        self.check_resops(setarrayitem_gc=2, getarrayitem_gc_r=1)
 
     def 
test_continue_tracing_with_boxes_in_start_snapshot_replaced_by_optimizer(self):
         myjitdriver = JitDriver(greens = [], reds = ['sa', 'n', 'a', 'b'])
@@ -3307,7 +3306,7 @@
                 lock.release()
             return n
         res = self.meta_interp(f, [10, 1])
-        self.check_resops(getfield_gc=4)
+        self.check_resops(getfield_gc_i=4)
         assert res == f(10, 1)
 
     def test_jit_merge_point_with_raw_pointer(self):
@@ -3371,10 +3370,10 @@
 
         res = self.meta_interp(main, [0, 10, 2], enable_opts='')
         assert res == main(0, 10, 2)
-        self.check_resops(call=1)
+        self.check_resops(call_i=1)
         res = self.meta_interp(main, [1, 10, 2], enable_opts='')
         assert res == main(1, 10, 2)
-        self.check_resops(call=0)
+        self.check_resops(call_i=0)
 
     def test_look_inside_iff_const_float(self):
         @look_inside_iff(lambda arg: isconstant(arg))
@@ -3393,7 +3392,7 @@
 
         res = self.meta_interp(main, [10], enable_opts='')
         assert res == 5.0
-        self.check_resops(call=1)
+        self.check_resops(call_f=1)
 
     def test_look_inside_iff_virtual(self):
         # There's no good reason for this to be look_inside_iff, but it's a 
test!
@@ -3418,10 +3417,10 @@
                     i += f(A(2), n)
         res = self.meta_interp(main, [0], enable_opts='')
         assert res == main(0)
-        self.check_resops(call=1, getfield_gc=0)
+        self.check_resops(call_i=1, getfield_gc_i=0)
         res = self.meta_interp(main, [1], enable_opts='')
         assert res == main(1)
-        self.check_resops(call=0, getfield_gc=0)
+        self.check_resops(call_i=0, getfield_gc_i=0)
 
     def test_isvirtual_call_assembler(self):
         driver = JitDriver(greens = ['code'], reds = ['n', 's'])
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to