Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit