Author: Carl Friedrich Bolz <[email protected]>
Branch:
Changeset: r73833:b9d7ef669611
Date: 2014-10-07 10:43 +0200
http://bitbucket.org/pypy/pypy/changeset/b9d7ef669611/
Log: update comment and actually stop putting things into the heap cache
(which is unnecessary, now that we generate a getfield_gc_pure)
adapt optimizeopt tests
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
@@ -532,10 +532,14 @@
def optimize_QUASIIMMUT_FIELD(self, op):
# Pattern: QUASIIMMUT_FIELD(s, descr=QuasiImmutDescr)
- # x = GETFIELD_GC(s, descr='inst_x')
- # If 's' is a constant (after optimizations), then we make 's.inst_x'
- # a constant too, and we rely on the rest of the optimizations to
- # constant-fold the following getfield_gc.
+ # x = GETFIELD_GC_PURE(s, descr='inst_x')
+ # If 's' is a constant (after optimizations) we rely on the rest of the
+ # optimizations to constant-fold the following getfield_gc_pure.
+ # in addition, we record the dependency here to make invalidation work
+ # correctly.
+ # NB: emitting the GETFIELD_GC_PURE is only safe because the
+ # QUASIIMMUT_FIELD is also emitted to make sure the dependency is
+ # registered.
structvalue = self.getvalue(op.getarg(0))
if not structvalue.is_constant():
self._remove_guard_not_invalidated = True
@@ -553,11 +557,6 @@
if self.optimizer.quasi_immutable_deps is None:
self.optimizer.quasi_immutable_deps = {}
self.optimizer.quasi_immutable_deps[qmutdescr.qmut] = None
- # perform the replacement in the list of operations
- fieldvalue = self.getvalue(qmutdescr.constantfieldbox)
- cf = self.field_cache(qmutdescr.fielddescr)
- cf.force_lazy_setfield(self)
- cf.remember_field_value(structvalue, fieldvalue)
self._remove_guard_not_invalidated = False
def optimize_GUARD_NOT_INVALIDATED(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
@@ -5200,7 +5200,7 @@
[]
quasiimmut_field(ConstPtr(quasiptr), descr=quasiimmutdescr)
guard_not_invalidated() []
- i0 = getfield_gc(ConstPtr(quasiptr), descr=quasifielddescr)
+ i0 = getfield_gc_pure(ConstPtr(quasiptr), descr=quasifielddescr)
i1 = call_pure(123, i0, descr=nonwritedescr)
finish(i1)
"""
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
@@ -6893,13 +6893,13 @@
[p0, p1, i0]
quasiimmut_field(p0, descr=quasiimmutdescr)
guard_not_invalidated() []
- i1 = getfield_gc(p0, descr=quasifielddescr)
+ i1 = getfield_gc_pure(p0, descr=quasifielddescr)
escape(i1)
jump(p1, p0, i1)
"""
expected = """
[p0, p1, i0]
- i1 = getfield_gc(p0, descr=quasifielddescr)
+ i1 = getfield_gc_pure(p0, descr=quasifielddescr)
escape(i1)
jump(p1, p0, i1)
"""
@@ -6910,7 +6910,7 @@
[]
quasiimmut_field(ConstPtr(quasiptr), descr=quasiimmutdescr)
guard_not_invalidated() []
- i1 = getfield_gc(ConstPtr(quasiptr), descr=quasifielddescr)
+ i1 = getfield_gc_pure(ConstPtr(quasiptr), descr=quasifielddescr)
escape(i1)
jump()
"""
@@ -6962,11 +6962,11 @@
[i0a, i0b]
quasiimmut_field(ConstPtr(quasiptr), descr=quasiimmutdescr)
guard_not_invalidated() []
- i1 = getfield_gc(ConstPtr(quasiptr), descr=quasifielddescr)
+ i1 = getfield_gc_pure(ConstPtr(quasiptr), descr=quasifielddescr)
call_may_force(i0b, descr=mayforcevirtdescr)
quasiimmut_field(ConstPtr(quasiptr), descr=quasiimmutdescr)
guard_not_invalidated() []
- i2 = getfield_gc(ConstPtr(quasiptr), descr=quasifielddescr)
+ i2 = getfield_gc_pure(ConstPtr(quasiptr), descr=quasifielddescr)
i3 = escape(i1)
i4 = escape(i2)
jump(i3, i4)
@@ -6989,11 +6989,11 @@
setfield_gc(p, 421, descr=quasifielddescr)
quasiimmut_field(p, descr=quasiimmutdescr)
guard_not_invalidated() []
- i1 = getfield_gc(p, descr=quasifielddescr)
+ i1 = getfield_gc_pure(p, descr=quasifielddescr)
call_may_force(i0b, descr=mayforcevirtdescr)
quasiimmut_field(p, descr=quasiimmutdescr)
guard_not_invalidated() []
- i2 = getfield_gc(p, descr=quasifielddescr)
+ i2 = getfield_gc_pure(p, descr=quasifielddescr)
i3 = escape(i1)
i4 = escape(i2)
jump(i3, i4)
@@ -8242,7 +8242,7 @@
quasiimmut_field(p69, descr=quasiimmutdescr)
guard_not_invalidated() []
- p71 = getfield_gc(p69, descr=quasifielddescr) # inst_code
+ p71 = getfield_gc_pure(p69, descr=quasifielddescr) # inst_code
guard_value(p71, -4247) []
p106 = new_with_vtable(ConstClass(node_vtable))
@@ -8260,7 +8260,7 @@
[p69]
quasiimmut_field(p69, descr=quasiimmutdescr)
guard_not_invalidated() []
- p71 = getfield_gc(p69, descr=quasifielddescr) # inst_code
+ p71 = getfield_gc_pure(p69, descr=quasifielddescr) # inst_code
guard_value(p71, -4247) []
jump(ConstPtr(myptr))
"""
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit