[pypy-svn] r79079 - pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt
hakanardo at codespeak.net
hakanardo at codespeak.net
Sun Nov 14 15:46:47 CET 2010
Author: hakanardo
Date: Sun Nov 14 15:46:45 2010
New Revision: 79079
Modified:
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/fficall.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/heap.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/intbounds.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py
pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py
Log:
Started to reconstruct values aswell (this is work in progress)
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/fficall.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/fficall.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/fficall.py Sun Nov 14 15:46:45 2010
@@ -67,7 +67,7 @@
def __init__(self):
self.funcinfo = None
- def reconstruct_for_next_iteration(self):
+ def reconstruct_for_next_iteration(self, valuemap):
return OptFfiCall()
# FIXME: Should any status be saved for next iteration?
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/heap.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/heap.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/heap.py Sun Nov 14 15:46:45 2010
@@ -23,7 +23,7 @@
self.lazy_setfields = {}
self.lazy_setfields_descrs = [] # keys (at least) of previous dict
- def reconstruct_for_next_iteration(self):
+ def reconstruct_for_next_iteration(self, valuemap):
self.force_all_lazy_setfields()
assert not self.lazy_setfields_descrs
assert not self.lazy_setfields
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/intbounds.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/intbounds.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/intbounds.py Sun Nov 14 15:46:45 2010
@@ -13,7 +13,7 @@
self.posponedop = None
self.nextop = None
- def reconstruct_for_next_iteration(self):
+ def reconstruct_for_next_iteration(self, valuemap):
assert self.posponedop is None
return self
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py Sun Nov 14 15:46:45 2010
@@ -51,6 +51,16 @@
boxes.append(self.force_box())
already_seen[self.get_key_box()] = None
+ def get_reconstructed(self, optimizer, valuemap):
+ if self in valuemap:
+ return valuemap[self]
+ new = self.reconstruct_for_next_iteration(optimizer, valuemap)
+ valuemap[self] = new
+ return new
+
+ def reconstruct_for_next_iteration(self, optimizer, valuemap):
+ return self
+
def get_args_for_fail(self, modifier):
pass
@@ -197,7 +207,7 @@
def turned_constant(self, value):
pass
- def reconstruct_for_next_iteration(self):
+ def reconstruct_for_next_iteration(self, valuemap):
#return self.__class__()
raise NotImplementedError
@@ -240,25 +250,29 @@
o.force_at_end_of_preamble()
def reconstruct_for_next_iteration(self):
- optimizations = [o.reconstruct_for_next_iteration() for o in
+ valuemap = {}
+ optimizations = [o.reconstruct_for_next_iteration(valuemap) for o in
self.optimizations]
optimizations = self.optimizations
new = Optimizer(self.metainterp_sd, self.loop, optimizations)
- new.values = self.values
+ new.values = {}
+ for box, value in self.values.items():
+ new.values[box] = value.get_reconstructed(new, valuemap)
new.interned_refs = self.interned_refs
- new.bool_boxes = self.bool_boxes
- new.loop_invariant_results = self.loop_invariant_results
+ new.bool_boxes = {}
+ for value in new.bool_boxes.keys():
+ new.bool_boxes[value.get_reconstructed(new, valuemap)] = None
+
+ # FIXME: Move to rewrite.py
+ new.loop_invariant_results = {}
+ for key, value in self.loop_invariant_results.items():
+ new.loop_invariant_results[key] = \
+ value.get_reconstructed(new, valuemap)
+
new.pure_operations = self.pure_operations
new.producer = self.producer
assert self.posponedop is None
- # FIXME: HACK!! Add a reconstruct_for_next_iteration to
- # the values instead and reconstruct them in the same manner.
- # That should also give us a clean solution for enabling
- # OptString in the preamble that forces it's virtuals before
- # the loop
- for v in new.values.values():
- v.optimizer = new
return new
def turned_constant(self, value):
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py Sun Nov 14 15:46:45 2010
@@ -10,7 +10,7 @@
This includes already executed operations and constants.
"""
- def reconstruct_for_next_iteration(self):
+ def reconstruct_for_next_iteration(self, valuemap):
return self
def propagate_forward(self, op):
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/string.py Sun Nov 14 15:46:45 2010
@@ -367,7 +367,7 @@
"Handling of strings and unicodes."
enabled = True
- def reconstruct_for_next_iteration(self):
+ def reconstruct_for_next_iteration(self, valuemap):
self.enabled = True
return self
Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py (original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py Sun Nov 14 15:46:45 2010
@@ -44,6 +44,9 @@
def _really_force(self):
raise NotImplementedError("abstract base")
+ def reconstruct_for_next_iteration(self, optimizer, valuemap):
+ return optimizer.OptValue(self.force_box())
+
def get_fielddescrlist_cache(cpu):
if not hasattr(cpu, '_optimizeopt_fielddescrlist_cache'):
result = descrlist_dict()
@@ -132,6 +135,15 @@
else:
boxes.append(self.box)
+ def reconstruct_for_next_iteration(self, optimizer, valuemap):
+ self.optimizer = optimizer
+ if self.box is None:
+ lst = self._get_field_descr_list()
+ for ofs in lst:
+ self._fields[ofs] = \
+ self._fields[ofs].get_reconstructed(optimizer, valuemap)
+ return self
+
class VirtualValue(AbstractVirtualStructValue):
level = optimizer.LEVEL_KNOWNCLASS
@@ -224,11 +236,18 @@
else:
boxes.append(self.box)
+ def reconstruct_for_next_iteration(self, optimizer, valuemap):
+ self.optimizer = optimizer
+ if self.box is None:
+ for i in range(len(self._items)):
+ self._items[i] = self._items[i].get_reconstructed(optimizer,
+ valuemap)
+ return self
class OptVirtualize(optimizer.Optimization):
"Virtualize objects until they escape."
- def reconstruct_for_next_iteration(self):
+ def reconstruct_for_next_iteration(self, valuemap):
return self
def make_virtual(self, known_class, box, source_op=None):
More information about the Pypy-commit
mailing list