Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78972:58f957a4e8fb
Date: 2015-08-13 17:06 +0200
http://bitbucket.org/pypy/pypy/changeset/58f957a4e8fb/
Log: (fijal, arigo) change subtle order issues
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
@@ -161,9 +161,11 @@
subbox = optforce.force_box(fld)
setfieldop = ResOperation(rop.SETFIELD_GC, [op, subbox],
descr=flddescr)
- optforce._emit_operation(setfieldop)
- if optforce.optheap is not None:
- optforce.optheap.register_dirty_field(flddescr, op, self)
+ self._fields[i] = None
+ optforce.optheap.propagate_forward(setfieldop)
+ #optforce._emit_operation(setfieldop)
+ #if optforce.optheap is not None:
+ # optforce.optheap.register_dirty_field(flddescr, op, self)
def _visitor_walk_recursive(self, instbox, visitor, optimizer):
lst = self.vdescr.get_all_fielddescrs()
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -823,8 +823,8 @@
i3 = getfield_gc_i(p2, descr=valuedescr)
escape_n(i3)
p4 = new_with_vtable(descr=nodesize)
+ p1sub = new_with_vtable(descr=nodesize2)
setfield_gc(p4, i1, descr=valuedescr)
- p1sub = new_with_vtable(descr=nodesize2)
setfield_gc(p1sub, i1, descr=valuedescr)
setfield_gc(p4, p1sub, descr=nextdescr)
jump(i1, p4)
@@ -851,8 +851,8 @@
i3 = getfield_gc_i(p3sub, descr=valuedescr)
escape_n(i3)
p2sub = new_with_vtable(descr=nodesize2)
+ setfield_gc(p2, p2sub, descr=nextdescr)
setfield_gc(p2sub, i1, descr=valuedescr)
- setfield_gc(p2, p2sub, descr=nextdescr)
i4 = same_as_i(i1)
jump(i1, p2, p2sub, i4)
"""
@@ -1217,10 +1217,10 @@
i1 = int_add(i0, 1)
p1 = new_with_vtable(descr=nodesize2)
p2 = new_with_vtable(descr=nodesize2)
+ setfield_gc(p2, p1, descr=nextdescr)
+ setfield_gc(p0, p1, descr=nextdescr)
setfield_gc(p2, i1, descr=valuedescr)
- setfield_gc(p2, p1, descr=nextdescr)
setfield_gc(p1, p2, descr=nextdescr)
- setfield_gc(p0, p1, descr=nextdescr)
jump(p1)
"""
loop = """
@@ -1230,10 +1230,10 @@
i1 = int_add(i0, 1)
p1 = new_with_vtable(descr=nodesize2)
p2 = new_with_vtable(descr=nodesize2)
+ setfield_gc(p2, p1, descr=nextdescr)
+ setfield_gc(p0, p1, descr=nextdescr)
setfield_gc(p2, i1, descr=valuedescr)
- setfield_gc(p2, p1, descr=nextdescr)
setfield_gc(p1, p2, descr=nextdescr)
- setfield_gc(p0, p1, descr=nextdescr)
jump(p1)
"""
self.optimize_loop(ops, loop, preamble)
@@ -1288,8 +1288,8 @@
i28 = int_add(i0, 1)
i29 = int_add(i0, 2)
p30 = new_with_vtable(descr=nodesize)
+ setfield_gc(p3, p30, descr=nextdescr)
setfield_gc(p30, i28, descr=valuedescr)
- setfield_gc(p3, p30, descr=nextdescr)
#p46 = same_as(p30) # This same_as should be killed by backend
jump(i29, p30, p3)
"""
@@ -1298,8 +1298,8 @@
i28 = int_add(i0, 1)
i29 = int_add(i0, 2)
p30 = new_with_vtable(descr=nodesize)
+ setfield_gc(p3, p30, descr=nextdescr)
setfield_gc(p30, i28, descr=valuedescr)
- setfield_gc(p3, p30, descr=nextdescr)
jump(i29, p30, p3)
"""
self.optimize_loop(ops, expected, preamble)
@@ -2706,8 +2706,8 @@
guard_true(i3) [p1, p4]
i4 = int_neg(i2)
p2 = new_with_vtable(descr=nodesize)
+ setfield_gc(p1, p2, descr=nextdescr)
setfield_gc(p2, p4, descr=nextdescr)
- setfield_gc(p1, p2, descr=nextdescr)
#i101 = same_as(i4)
jump(p1, i2, i4, p4) #, i101)
"""
@@ -2715,8 +2715,8 @@
[p1, i2, i4, p4] #, i5]
guard_true(i4) [p1, p4]
p2 = new_with_vtable(descr=nodesize)
+ setfield_gc(p1, p2, descr=nextdescr)
setfield_gc(p2, p4, descr=nextdescr)
- setfield_gc(p1, p2, descr=nextdescr)
jump(p1, i2, 1, p4) #, i5)
"""
self.optimize_loop(ops, expected, preamble)
@@ -3953,9 +3953,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]
@@ -3964,9 +3964,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, expected)
@@ -3993,9 +3993,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]
@@ -4004,9 +4004,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
@@ -121,7 +121,7 @@
start_label.getarglist() + self.short_preamble_producer.used_boxes,
jump_args + extra_jump_args)
jump_op = ResOperation(rop.JUMP, jump_args)
- self.optimizer._newoperations.append(jump_op)
+ self.optimizer.send_extra_operation(jump_op)
return (UnrollInfo(self.short_preamble_producer.build_short_preamble(),
label_args,
self.short_preamble_producer.extra_same_as),
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit