Author: Carl Friedrich Bolz <cfb...@gmx.de> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit