[pypy-commit] pypy jit-optimizeopt-cleanups: digg results for GETFIELD_GC_PURE out of the heap cache in case their corresponding setfield was delayed
hakanardo
noreply at buildbot.pypy.org
Fri Sep 30 08:37:49 CEST 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-optimizeopt-cleanups
Changeset: r47698:b824114855e0
Date: 2011-09-30 08:30 +0200
http://bitbucket.org/pypy/pypy/changeset/b824114855e0/
Log: digg results for GETFIELD_GC_PURE out of the heap cache in case
their corresponding setfield was delayed
diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py
--- a/pypy/jit/metainterp/optimizeopt/heap.py
+++ b/pypy/jit/metainterp/optimizeopt/heap.py
@@ -363,12 +363,22 @@
return
# default case: produce the operation
structvalue.ensure_nonnull()
- ###self.optimizer.optimize_default(op)
self.emit_operation(op)
# then remember the result of reading the field
fieldvalue = self.getvalue(op.result)
cf.remember_field_value(structvalue, fieldvalue, op)
+ def optimize_GETFIELD_GC_PURE(self, op):
+ structvalue = self.getvalue(op.getarg(0))
+ cf = self.field_cache(op.getdescr())
+ fieldvalue = cf.getfield_from_cache(self, structvalue)
+ if fieldvalue is not None:
+ self.make_equal_to(op.result, fieldvalue)
+ return
+ # default case: produce the operation
+ structvalue.ensure_nonnull()
+ self.emit_operation(op)
+
def optimize_SETFIELD_GC(self, op):
if self.has_pure_result(rop.GETFIELD_GC_PURE, [op.getarg(0)],
op.getdescr()):
More information about the pypy-commit
mailing list