[pypy-commit] pypy jit-short_from_state: hg revert -r 45027 optimizeopt/heap.py
hakanardo
noreply at buildbot.pypy.org
Fri Jul 1 08:44:58 CEST 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-short_from_state
Changeset: r45207:3af4b2b1b960
Date: 2011-06-30 19:13 +0200
http://bitbucket.org/pypy/pypy/changeset/3af4b2b1b960/
Log: hg revert -r 45027 optimizeopt/heap.py
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
@@ -4,7 +4,7 @@
from pypy.rlib.objectmodel import we_are_translated
from pypy.jit.metainterp.jitexc import JitException
from pypy.jit.metainterp.optimizeopt.optimizer import Optimization
-from pypy.jit.metainterp.history import ConstInt, Const
+
class CachedField(object):
def __init__(self):
@@ -23,7 +23,6 @@
# 'cached_fields'.
#
self._cached_fields = {}
- self._cached_fields_getfield_op = {}
self._lazy_setfield = None
self._lazy_setfield_registered = False
@@ -70,10 +69,9 @@
else:
return self._cached_fields.get(structvalue, None)
- def remember_field_value(self, structvalue, fieldvalue, getfield_op=None):
+ def remember_field_value(self, structvalue, fieldvalue):
assert self._lazy_setfield is None
self._cached_fields[structvalue] = fieldvalue
- self._cached_fields_getfield_op[structvalue] = getfield_op
def force_lazy_setfield(self, optheap):
op = self._lazy_setfield
@@ -83,7 +81,6 @@
# setfield might impact any of the stored result (because of
# possible aliasing).
self._cached_fields.clear()
- self._cached_fields_getfield_op.clear()
self._lazy_setfield = None
optheap.next_optimization.propagate_forward(op)
# Once it is done, we can put at least one piece of information
@@ -93,32 +90,21 @@
fieldvalue = optheap.getvalue(op.getarg(1))
self.remember_field_value(structvalue, fieldvalue)
- def get_cloned(self, optimizer, valuemap, short_boxes):
+ def get_reconstructed(self, optimizer, valuemap):
assert self._lazy_setfield is None
cf = CachedField()
for structvalue, fieldvalue in self._cached_fields.iteritems():
- op = self._cached_fields_getfield_op.get(structvalue, None)
- if op and op.result in short_boxes and short_boxes[op.result] is op:
- structvalue2 = structvalue.get_cloned(optimizer, valuemap)
- fieldvalue2 = fieldvalue .get_cloned(optimizer, valuemap)
- cf._cached_fields[structvalue2] = fieldvalue2
+ structvalue2 = structvalue.get_reconstructed(optimizer, valuemap)
+ fieldvalue2 = fieldvalue .get_reconstructed(optimizer, valuemap)
+ cf._cached_fields[structvalue2] = fieldvalue2
return cf
- def produce_potential_short_preamble_ops(self, optimizer,
- potential_ops, descr):
- if self._lazy_setfield is not None:
- return
- for structvalue, op in self._cached_fields_getfield_op.iteritems():
- if op and structvalue in self._cached_fields:
- potential_ops[op.result] = op
class CachedArrayItems(object):
def __init__(self):
self.fixed_index_items = {}
- self.fixed_index_getops = {}
self.var_index_item = None
self.var_index_indexvalue = None
- self.var_index_getop = None
class BogusPureField(JitException):
pass
@@ -133,23 +119,19 @@
self._lazy_setfields = []
# cached array items: {descr: CachedArrayItems}
self.cached_arrayitems = {}
- self.original_producer = {}
self._remove_guard_not_invalidated = False
self._seen_guard_not_invalidated = False
- def force_at_end_of_preamble(self):
- self.force_all_lazy_setfields()
-
- def flush(self):
- self.force_all_lazy_setfields()
-
- def reconstruct_for_next_iteration(self, short_boxes, surviving_boxes,
- optimizer, valuemap):
+ def reconstruct_for_next_iteration(self, optimizer, valuemap):
new = OptHeap()
+ if True:
+ self.force_all_lazy_setfields()
+ else:
+ assert 0 # was: new.lazy_setfields = self.lazy_setfields
+
for descr, d in self.cached_fields.items():
- new.cached_fields[descr] = d.get_cloned(optimizer, valuemap, short_boxes)
- return new
+ new.cached_fields[descr] = d.get_reconstructed(optimizer, valuemap)
new.cached_arrayitems = {}
for descr, d in self.cached_arrayitems.items():
@@ -157,41 +139,19 @@
new.cached_arrayitems[descr] = newd
for value, cache in d.items():
newcache = CachedArrayItems()
- newd[value.get_cloned(optimizer, valuemap)] = newcache
- if cache.var_index_getop and cache.var_index_getop.result in short_boxes:
- if cache.var_index_item:
- newcache.var_index_item = \
- cache.var_index_item.get_cloned(optimizer, valuemap)
- if cache.var_index_indexvalue:
- newcache.var_index_indexvalue = \
- cache.var_index_indexvalue.get_cloned(optimizer,
- valuemap)
+ newd[value.get_reconstructed(optimizer, valuemap)] = newcache
+ if cache.var_index_item:
+ newcache.var_index_item = \
+ cache.var_index_item.get_reconstructed(optimizer, valuemap)
+ if cache.var_index_indexvalue:
+ newcache.var_index_indexvalue = \
+ cache.var_index_indexvalue.get_reconstructed(optimizer, valuemap)
for index, fieldvalue in cache.fixed_index_items.items():
- op = cache.fixed_index_getops.get(index, None)
- if op and op.result in short_boxes:
- newcache.fixed_index_items[index] = \
- fieldvalue.get_cloned(optimizer, valuemap)
+ newcache.fixed_index_items[index] = \
+ fieldvalue.get_reconstructed(optimizer, valuemap)
return new
- def produce_potential_short_preamble_ops(self, potential_ops):
- for descr, d in self.cached_fields.items():
- d.produce_potential_short_preamble_ops(self.optimizer,
- potential_ops, descr)
- return
-
- for descr, d in self.cached_arrayitems.items():
- for value, cache in d.items():
- for index in cache.fixed_index_items.keys():
- op = cache.fixed_index_getops[index]
- if op:
- potential_ops[op.result] = op
- if cache.var_index_item and cache.var_index_indexvalue:
- op = cache.var_index_getop
- if op:
- potential_ops[op.result] = op
-
-
def clean_caches(self):
del self._lazy_setfields[:]
self.cached_fields.clear()
@@ -204,8 +164,7 @@
cf = self.cached_fields[descr] = CachedField()
return cf
- def cache_arrayitem_value(self, descr, value, indexvalue, fieldvalue,
- write=False, getop=None):
+ def cache_arrayitem_value(self, descr, value, indexvalue, fieldvalue, write=False):
d = self.cached_arrayitems.get(descr, None)
if d is None:
d = self.cached_arrayitems[descr] = {}
@@ -223,11 +182,9 @@
othercache.var_index_item = None
try:
del othercache.fixed_index_items[index]
- del othercache.fixed_index_getops[index]
except KeyError:
pass
cache.fixed_index_items[index] = fieldvalue
- cache.fixed_index_getops[index] = getop
else:
if write:
for value, othercache in d.iteritems():
@@ -235,10 +192,8 @@
othercache.var_index_indexvalue = None
othercache.var_index_item = None
othercache.fixed_index_items.clear()
- othercache.fixed_index_getops.clear()
cache.var_index_indexvalue = indexvalue
cache.var_index_item = fieldvalue
- cache.var_index_getop = getop
def read_cached_arrayitem(self, descr, value, indexvalue):
d = self.cached_arrayitems.get(descr, None)
@@ -298,7 +253,6 @@
try:
cf = self.cached_fields[fielddescr]
cf._cached_fields.clear()
- cf._cached_fields_getfield_op.clear()
except KeyError:
pass
for arraydescr in effectinfo.write_descrs_arrays:
@@ -322,14 +276,7 @@
if value is not newvalue:
for cf in self.cached_fields.itervalues():
if value in cf._cached_fields:
- if newvalue not in cf._cached_fields:
- cf._cached_fields[newvalue] = cf._cached_fields[value]
- op = cf._cached_fields_getfield_op[value].clone()
- constbox = value.box
- assert isinstance(constbox, Const)
- op.setarg(0, constbox)
- cf._cached_fields_getfield_op[newvalue] = op
-
+ cf._cached_fields[newvalue] = cf._cached_fields[value]
def force_lazy_setfield(self, descr):
try:
@@ -397,14 +344,14 @@
fieldvalue = cf.getfield_from_cache(self, structvalue)
if fieldvalue is not None:
self.make_equal_to(op.result, fieldvalue)
- else:
- # 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)
+ 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)
def optimize_SETFIELD_GC(self, op):
if self.has_pure_result(rop.GETFIELD_GC_PURE, [op.getarg(0)],
@@ -426,8 +373,7 @@
###self.optimizer.optimize_default(op)
self.emit_operation(op)
fieldvalue = self.getvalue(op.result)
- self.cache_arrayitem_value(op.getdescr(), value, indexvalue, fieldvalue,
- getop=op)
+ self.cache_arrayitem_value(op.getdescr(), value, indexvalue, fieldvalue)
def optimize_SETARRAYITEM_GC(self, op):
self.emit_operation(op)
More information about the pypy-commit
mailing list