[pypy-svn] r78688 - pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt

hakanardo at codespeak.net hakanardo at codespeak.net
Thu Nov 4 08:45:25 CET 2010


Author: hakanardo
Date: Thu Nov  4 08:45:23 2010
New Revision: 78688

Modified:
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/heap.py
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
Log:
Update heap cache once a value turnes constant

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	Thu Nov  4 08:45:23 2010
@@ -151,6 +151,16 @@
 
     def force_at_end_of_preamble(self):
         self.force_all_lazy_setfields()
+
+    def turned_constant(self, value):
+        assert value.is_constant()
+        newvalue = self.getvalue(value.box)
+        if value is not newvalue:
+            for d in self.cached_fields.values():
+                if value in d:
+                    d[newvalue] = d[value]
+        # FIXME: Update the other caches too?
+        
         
     def force_lazy_setfield(self, descr, before_guard=False):
         try:

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	Thu Nov  4 08:45:23 2010
@@ -196,6 +196,9 @@
     def force_at_end_of_preamble(self):
         pass
 
+    def turned_constant(self, value):
+        pass
+
 class Optimizer(Optimization):
 
     def __init__(self, metainterp_sd, loop, optimizations=None):
@@ -231,6 +234,10 @@
         for o in self.optimizations:
             o.force_at_end_of_preamble()
 
+    def turned_constant(self, value):
+        for o in self.optimizations:
+            o.turned_constant(value)
+
     def forget_numberings(self, virtualbox):
         self.metainterp_sd.profiler.count(jitprof.OPT_FORCINGS)
         self.resumedata_memo.forget_numberings(virtualbox)

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	Thu Nov  4 08:45:23 2010
@@ -153,6 +153,7 @@
         if emit_operation:
             self.emit_operation(op)
         value.make_constant(constbox)
+        self.optimizer.turned_constant(value)
 
     def optimize_GUARD_ISNULL(self, op):
         value = self.getvalue(op.getarg(0))



More information about the Pypy-commit mailing list