Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r79057:ecd1d13ff7d7
Date: 2015-08-19 14:52 +0200
http://bitbucket.org/pypy/pypy/changeset/ecd1d13ff7d7/
Log: fix a couple more tests
diff --git a/rpython/jit/metainterp/optimizeopt/info.py
b/rpython/jit/metainterp/optimizeopt/info.py
--- a/rpython/jit/metainterp/optimizeopt/info.py
+++ b/rpython/jit/metainterp/optimizeopt/info.py
@@ -420,8 +420,11 @@
class ArrayStructInfo(ArrayPtrInfo):
def __init__(self, size, vdescr=None):
+ from rpython.jit.metainterp.optimizeopt import intutils
+
self.length = size
lgt = len(vdescr.get_all_fielddescrs())
+ self.lenbound = intutils.ConstIntBound(size)
self.vdescr = vdescr
self._items = [None] * (size * lgt)
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
@@ -484,13 +484,21 @@
newargs = inputargs
self.init_inparg_dict_from(newargs)
self.call_pure_results = call_pure_results
- for op in ops:
+ if ops[-1].getopnum() in (rop.FINISH, rop.JUMP):
+ last = len(ops) - 1
+ extra_jump = True
+ else:
+ extra_jump = False
+ last = len(ops)
+ for i in range(last):
self._really_emitted_operation = None
- self.first_optimization.propagate_forward(op)
+ self.first_optimization.propagate_forward(ops[i])
#self.loop.operations = self.get_newoperations()
#self.loop.quasi_immutable_deps = self.quasi_immutable_deps
# accumulate counters
self.flush()
+ if extra_jump:
+ self.first_optimization.propagate_forward(ops[-1])
self.resumedata_memo.update_counters(self.metainterp_sd.profiler)
return BasicLoopInfo(newargs), self._newoperations
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -568,8 +568,8 @@
i3 = getfield_gc_i(p3, descr=valuedescr)
escape_n(i3)
p1 = new_with_vtable(descr=nodesize)
+ p1sub = new_with_vtable(descr=nodesize2)
setfield_gc(p1, i1, descr=valuedescr)
- p1sub = new_with_vtable(descr=nodesize2)
setfield_gc(p1sub, i1, descr=valuedescr)
setfield_gc(p1, p1sub, descr=nextdescr)
jump(i1, p1, p2)
@@ -584,10 +584,10 @@
p3sub = getfield_gc_r(p3, descr=nextdescr)
i3 = getfield_gc_i(p3sub, descr=valuedescr)
escape_n(i3)
+ p2sub = new_with_vtable(descr=nodesize2)
+ setfield_gc(p2, p2sub, descr=nextdescr)
p1 = new_with_vtable(descr=nodesize)
- p2sub = new_with_vtable(descr=nodesize2)
setfield_gc(p2sub, i1, descr=valuedescr)
- setfield_gc(p2, p2sub, descr=nextdescr)
jump(i1, p1, p2)
"""
# The same as test_p123_simple, but in the end the "old" p2 contains
@@ -3040,9 +3040,9 @@
p3 = force_token()
#
p2 = new_with_vtable(descr=vref_descr)
+ setfield_gc(p0, p2, descr=nextdescr)
+ setfield_gc(p2, NULL, descr=virtualforceddescr)
setfield_gc(p2, p3, descr=virtualtokendescr)
- setfield_gc(p2, NULL, descr=virtualforceddescr)
- setfield_gc(p0, p2, descr=nextdescr)
#
call_may_force_n(i1, descr=mayforcevirtdescr)
guard_not_forced() [i1]
@@ -3051,9 +3051,9 @@
setfield_gc(p2, NULL, descr=virtualtokendescr)
p1 = new_with_vtable(descr=nodesize)
p1b = new_with_vtable(descr=nodesize)
+ setfield_gc(p2, p1, descr=virtualforceddescr)
setfield_gc(p1b, 252, descr=valuedescr)
setfield_gc(p1, p1b, descr=nextdescr)
- setfield_gc(p2, p1, descr=virtualforceddescr)
jump(p0, i1)
"""
self.optimize_loop(ops, expected)
@@ -3080,9 +3080,9 @@
p3 = force_token()
#
p2 = new_with_vtable(descr=vref_descr)
+ setfield_gc(p0, p2, descr=nextdescr)
+ setfield_gc(p2, NULL, descr=virtualforceddescr)
setfield_gc(p2, p3, descr=virtualtokendescr)
- setfield_gc(p2, NULL, descr=virtualforceddescr)
- setfield_gc(p0, p2, descr=nextdescr)
#
call_may_force_n(i1, descr=mayforcevirtdescr)
guard_not_forced() [p2, i1]
@@ -3091,9 +3091,9 @@
setfield_gc(p2, NULL, descr=virtualtokendescr)
p1 = new_with_vtable(descr=nodesize)
p1b = new_with_vtable(descr=nodesize)
+ setfield_gc(p2, p1, descr=virtualforceddescr)
setfield_gc(p1b, i1, descr=valuedescr)
setfield_gc(p1, p1b, descr=nextdescr)
- setfield_gc(p2, p1, descr=virtualforceddescr)
jump(p0, i1)
"""
# the point of this test is that 'i1' should show up in the fail_args
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
@@ -145,6 +145,8 @@
args = [self.get_box_replacement(op) for op in jump_op.getarglist()]
target_token = jitcelltoken.target_tokens[0]
virtual_state = self.get_virtual_state(args)
+ target_virtual_state = target_token.virtual_state
+
short_preamble = target_token.short_preamble
extra = self.inline_short_preamble(args,
short_preamble[0].getarglist(), short_preamble[1:-1],
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit