Author: Carl Friedrich Bolz-Tereick <[email protected]>
Branch:
Changeset: r92364:0f364935cfcf
Date: 2017-09-09 22:40 +0200
http://bitbucket.org/pypy/pypy/changeset/0f364935cfcf/
Log: issue #2650 testing
Functions that write immutable fields don't need to invalidate the
heap cache for such fields. However, they *do* need to force the
lazy sets of such fields!
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
@@ -445,13 +445,13 @@
if effectinfo.check_readonly_descr_field(fielddescr):
cf.force_lazy_set(self, fielddescr)
if effectinfo.check_write_descr_field(fielddescr):
+ cf.force_lazy_set(self, fielddescr, can_cache=False)
if fielddescr.is_always_pure():
continue
try:
del self.cached_dict_reads[fielddescr]
except KeyError:
pass
- cf.force_lazy_set(self, fielddescr, can_cache=False)
#
for arraydescr, submap in self.cached_arrayitems.items():
if effectinfo.check_readonly_descr_array(arraydescr):
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
@@ -3562,6 +3562,27 @@
"""
self.optimize_loop(ops, expected, expected_preamble=expected_preamble)
+ def test_residual_call_still_forces_immutable_writes_though(self):
+ ops = """
+ [p1]
+ setfield_gc(p1, 6, descr=valuedescr3)
+ i2 = call_i(5, descr=writevalue3descr)
+ jump(p1)
+ """
+ expected_preamble = """
+ [p1]
+ setfield_gc(p1, 6, descr=valuedescr3)
+ i2 = call_i(5, descr=writevalue3descr)
+ jump(p1)
+ """
+ expected = """
+ [p1]
+ setfield_gc(p1, 6, descr=valuedescr3)
+ i2 = call_i(5, descr=writevalue3descr)
+ jump(p1)
+ """
+ self.optimize_loop(ops, expected, expected_preamble=expected_preamble)
+
def test_residual_call_invalidate_some_caches(self):
ops = """
[p1, p2]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit