[pypy-commit] pypy optresult-unroll: test and a fix
fijal
noreply at buildbot.pypy.org
Fri Aug 28 16:59:24 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79280:c3486c27afbd
Date: 2015-08-28 16:59 +0200
http://bitbucket.org/pypy/pypy/changeset/c3486c27afbd/
Log: test and a fix
diff --git a/rpython/jit/metainterp/optimizeopt/earlyforce.py b/rpython/jit/metainterp/optimizeopt/earlyforce.py
--- a/rpython/jit/metainterp/optimizeopt/earlyforce.py
+++ b/rpython/jit/metainterp/optimizeopt/earlyforce.py
@@ -26,7 +26,7 @@
not is_raw_free(op, opnum)):
for arg in op.getarglist():
- self.optimizer.force_box(arg)
+ self.optimizer.force_box(arg, self)
self.emit_operation(op)
def setup(self):
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,8 +146,8 @@
def getlastop(self):
return self.optimizer.getlastop()
- def force_box(self, box):
- return self.optimizer.force_box(box)
+ def force_box(self, box, optforce=None):
+ return self.optimizer.force_box(box, optforce)
def replace_op_with(self, op, newopnum, args=None, descr=None):
return self.optimizer.replace_op_with(op, newopnum, args, descr)
@@ -336,8 +336,10 @@
return op
return op.get_box_replacement(not_const)
- def force_box(self, op):
+ def force_box(self, op, optforce=None):
op = self.get_box_replacement(op)
+ if optforce is None:
+ optforce = self
info = op.get_forwarded()
if self.optunroll and self.optunroll.potential_extra_ops:
# XXX hack
@@ -351,7 +353,7 @@
if info is not None:
if op.type == 'i' and info.is_constant():
return ConstInt(info.getint())
- return info.force_box(op, self)
+ return info.force_box(op, optforce)
return op
def is_inputarg(self, op):
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
@@ -579,9 +579,9 @@
i3 = getfield_gc_i(p3, descr=valuedescr)
escape_n(i3)
p1 = new_with_vtable(descr=nodesize)
- setfield_gc(p1, i1, descr=valuedescr)
p1sub = new_with_vtable(descr=nodesize2)
setfield_gc(p1sub, i1, descr=valuedescr)
+ setfield_gc(p1, i1, descr=valuedescr)
setfield_gc(p1, p1sub, descr=nextdescr)
jump(i1, p1, p2)
"""
@@ -5785,5 +5785,25 @@
"""
self.optimize_loop(ops, expected)
+ def test_force_virtual_write(self):
+ ops = """
+ [i1, i2]
+ p1 = new(descr=ssize)
+ setfield_gc(p1, i1, descr=adescr)
+ setfield_gc(p1, i2, descr=bdescr)
+ call_n(123, p1, descr=writeadescr)
+ i3 = getfield_gc_i(p1, descr=bdescr)
+ finish(i3)
+ """
+ expected = """
+ [i1, i2]
+ p1 = new(descr=ssize)
+ setfield_gc(p1, i1, descr=adescr)
+ call_n(123, p1, descr=writeadescr)
+ setfield_gc(p1, i2, descr=bdescr)
+ finish(i2)
+ """
+ self.optimize_loop(ops, expected)
+
class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin):
pass
More information about the pypy-commit
mailing list