[pypy-commit] pypy optresult-unroll: fix a case of heapcache - now breaks some tests because it produces less good code, but seems to work, fixing
fijal
noreply at buildbot.pypy.org
Fri Aug 28 14:10:32 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79275:cfa79aa0c03f
Date: 2015-08-28 14:10 +0200
http://bitbucket.org/pypy/pypy/changeset/cfa79aa0c03f/
Log: fix a case of heapcache - now breaks some tests because it produces
less good code, but seems to work, fixing
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
@@ -123,7 +123,7 @@
return constptr
#
op.set_forwarded(None)
- optforce._emit_operation(op)
+ optforce.emit_operation(op)
newop = optforce.getlastop()
op.set_forwarded(newop)
newop.set_forwarded(self)
@@ -187,10 +187,7 @@
setfieldop = ResOperation(rop.SETFIELD_GC, [op, subbox],
descr=flddescr)
self._fields[i] = None
- if optforce.optheap is not None:
- optforce.optheap.propagate_forward(setfieldop)
- else:
- optforce.emit_operation(setfieldop)
+ optforce.emit_operation(setfieldop)
def _force_at_the_end_of_preamble(self, op, optforce, rec):
if self._fields is None:
@@ -456,10 +453,7 @@
[op, ConstInt(i), subbox],
descr=arraydescr)
self._items[i] = None
- if optforce.optheap is not None:
- optforce.optheap.propagate_forward(setop)
- else:
- optforce.emit_operation(setop)
+ optforce.emit_operation(setop)
optforce.pure_from_args(rop.ARRAYLEN_GC, [op], ConstInt(len(self._items)))
def setitem(self, descr, index, struct, op, cf=None, optheap=None):
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
@@ -146,6 +146,9 @@
def getlastop(self):
return self.optimizer.getlastop()
+ def force_box(self, box):
+ return self.optimizer.force_box(box)
+
def replace_op_with(self, op, newopnum, args=None, descr=None):
return self.optimizer.replace_op_with(op, newopnum, args, descr)
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
@@ -827,8 +827,8 @@
escape_n(i3)
p4 = new_with_vtable(descr=nodesize)
p1sub = new_with_vtable(descr=nodesize2)
+ setfield_gc(p1sub, i1, descr=valuedescr)
setfield_gc(p4, i1, descr=valuedescr)
- setfield_gc(p1sub, i1, descr=valuedescr)
setfield_gc(p4, p1sub, descr=nextdescr)
jump(i1, p4)
"""
@@ -3971,9 +3971,9 @@
p3 = force_token()
#
p2 = new_with_vtable(descr=vref_descr)
+ setfield_gc(p2, p3, descr=virtualtokendescr)
+ setfield_gc(p2, NULL, descr=virtualforceddescr)
setfield_gc(p0, p2, descr=nextdescr)
- setfield_gc(p2, NULL, descr=virtualforceddescr)
- setfield_gc(p2, p3, descr=virtualtokendescr)
#
call_may_force_n(i1, descr=mayforcevirtdescr)
guard_not_forced() [i1]
@@ -3982,9 +3982,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)
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
@@ -265,7 +265,8 @@
def _enum(self, virtual_state):
for s in self.fieldstate:
- s.enum(virtual_state)
+ if s:
+ s.enum(virtual_state)
def debug_header(self, indent):
debug_print(indent + 'VArrayStateInfo(%d):' % self.position)
@@ -573,6 +574,8 @@
def make_inputargs(self, inputargs, optimizer, force_boxes=False,
append_virtuals=False):
+ if optimizer.optearlyforce:
+ optimizer = optimizer.optearlyforce
assert len(inputargs) == len(self.state)
boxes = [None] * self.numnotvirtuals
More information about the pypy-commit
mailing list