[pypy-commit] pypy getarrayitem-into-bridges: merge arrays-force-less
cfbolz
pypy.commits at gmail.com
Wed Aug 2 11:32:27 EDT 2017
Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: getarrayitem-into-bridges
Changeset: r92039:e8af759e759d
Date: 2017-08-02 12:09 +0200
http://bitbucket.org/pypy/pypy/changeset/e8af759e759d/
Log: merge arrays-force-less
diff --git a/rpython/jit/metainterp/optimizeopt/heap.py b/rpython/jit/metainterp/optimizeopt/heap.py
--- a/rpython/jit/metainterp/optimizeopt/heap.py
+++ b/rpython/jit/metainterp/optimizeopt/heap.py
@@ -224,7 +224,10 @@
def invalidate(self, descr):
for opinfo in self.cached_infos:
assert isinstance(opinfo, info.ArrayPtrInfo)
- opinfo._items[self.index] = None
+ # only invalidate those at self.index
+ if self.index < len(opinfo._items):
+ opinfo._items[self.index] = None
+ #opinfo._items = None #[self.index] = None
self.cached_infos = []
self.cached_structs = []
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
@@ -1537,6 +1537,46 @@
"""
self.optimize_loop(ops, expected)
+ def test_duplicate_getarrayitem_after_setarrayitem_and_guard(self):
+ ops = """
+ [p0, p1, p2, p3, i1]
+ p4 = getarrayitem_gc_r(p0, 0, descr=arraydescr2)
+ p5 = getarrayitem_gc_r(p0, 1, descr=arraydescr2)
+ p6 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ setarrayitem_gc(p1, 1, p3, descr=arraydescr2)
+ guard_true(i1) [i1]
+ p7 = getarrayitem_gc_r(p0, 0, descr=arraydescr2)
+ p8 = getarrayitem_gc_r(p0, 1, descr=arraydescr2)
+ p9 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ p10 = getarrayitem_gc_r(p1, 1, descr=arraydescr2)
+ escape_n(p4)
+ escape_n(p5)
+ escape_n(p6)
+ escape_n(p7)
+ escape_n(p8)
+ escape_n(p9)
+ escape_n(p10)
+ jump(p0, p1, p2, p3, i1)
+ """
+ expected = """
+ [p0, p1, p2, p3, i1]
+ p4 = getarrayitem_gc_r(p0, 0, descr=arraydescr2)
+ p5 = getarrayitem_gc_r(p0, 1, descr=arraydescr2)
+ p6 = getarrayitem_gc_r(p1, 0, descr=arraydescr2)
+ setarrayitem_gc(p1, 1, p3, descr=arraydescr2)
+ guard_true(i1) [i1]
+ p8 = getarrayitem_gc_r(p0, 1, descr=arraydescr2)
+ escape_n(p4)
+ escape_n(p5)
+ escape_n(p6)
+ escape_n(p4)
+ escape_n(p8)
+ escape_n(p6)
+ escape_n(p3)
+ jump(p0, p1, p2, p3, 1)
+ """
+ self.optimize_loop(ops, expected)
+
def test_getarrayitem_pure_does_not_invalidate(self):
ops = """
[p1, p2]
More information about the pypy-commit
mailing list