Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: 
Changeset: r75193:e48107da28ee
Date: 2015-01-01 14:53 +0200
http://bitbucket.org/pypy/pypy/changeset/e48107da28ee/

Log:    simple optimization - dont store unrolling only data when not
        exporting state

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
@@ -64,16 +64,17 @@
             # cancelling its previous effects with no side effect.
             self._lazy_setfield = None
 
-    def value_updated(self, oldvalue, newvalue):
+    def value_updated(self, oldvalue, newvalue, exporting_state):
         try:
             fieldvalue = self._cached_fields[oldvalue]
         except KeyError:
             pass
         else:
             self._cached_fields[newvalue] = fieldvalue
-            op = self._cached_fields_getfield_op[oldvalue].clone()
-            op.setarg(0, newvalue.box)
-            self._cached_fields_getfield_op[newvalue] = op
+            if exporting_state:
+                op = self._cached_fields_getfield_op[oldvalue].clone()
+                op.setarg(0, newvalue.box)
+                self._cached_fields_getfield_op[newvalue] = op
 
     def possible_aliasing(self, optheap, structvalue):
         # If lazy_setfield is set and contains a setfield on a different
@@ -98,8 +99,9 @@
                              optimizer=None):
         assert self._lazy_setfield is None
         self._cached_fields[structvalue] = fieldvalue
-        op = optimizer.get_op_replacement(op)
-        self._cached_fields_getfield_op[structvalue] = op
+        if optimizer.exporting_state:
+            op = optimizer.get_op_replacement(op)
+            self._cached_fields_getfield_op[structvalue] = op
 
     def force_lazy_setfield(self, optheap, can_cache=True):
         op = self._lazy_setfield
@@ -133,6 +135,7 @@
         self._cached_fields_getfield_op.clear()
 
     def produce_potential_short_preamble_ops(self, optimizer, shortboxes, 
descr):
+        assert optimizer.exporting_state
         if self._lazy_setfield is not None:
             return
         for structvalue in self._cached_fields_getfield_op.keys():
@@ -195,10 +198,11 @@
     def value_updated(self, oldvalue, newvalue):
         # XXXX very unhappy about that
         for cf in self.cached_fields.itervalues():
-            cf.value_updated(oldvalue, newvalue)
+            cf.value_updated(oldvalue, newvalue, 
self.optimizer.exporting_state)
         for submap in self.cached_arrayitems.itervalues():
             for cf in submap.itervalues():
-                cf.value_updated(oldvalue, newvalue)
+                cf.value_updated(oldvalue, newvalue,
+                                 self.optimizer.exporting_state)
 
     def force_at_end_of_preamble(self):
         self.cached_dict_reads.clear()
diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py 
b/rpython/jit/metainterp/optimizeopt/optimizer.py
--- a/rpython/jit/metainterp/optimizeopt/optimizer.py
+++ b/rpython/jit/metainterp/optimizeopt/optimizer.py
@@ -508,6 +508,8 @@
 
 class Optimizer(Optimization):
 
+    exporting_state = False
+
     def __init__(self, metainterp_sd, jitdriver_sd, loop, optimizations=None):
         self.metainterp_sd = metainterp_sd
         self.jitdriver_sd = jitdriver_sd
diff --git a/rpython/jit/metainterp/optimizeopt/pure.py 
b/rpython/jit/metainterp/optimizeopt/pure.py
--- a/rpython/jit/metainterp/optimizeopt/pure.py
+++ b/rpython/jit/metainterp/optimizeopt/pure.py
@@ -115,8 +115,9 @@
         return self.pure_operations.get(key, None)
 
     def remember_emitting_pure(self, op):
-        op = self.optimizer.get_op_replacement(op)
-        self.emitted_pure_operations[op] = True
+        if self.optimizer.exporting_state:
+            op = self.optimizer.get_op_replacement(op)
+            self.emitted_pure_operations[op] = True
 
     def produce_potential_short_preamble_ops(self, sb):
         for op in self.emitted_pure_operations:
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py 
b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -73,6 +73,7 @@
         return Snapshot(prev, new_snapshot_args)
 
     def propagate_all_forward(self, starting_state, export_state=True):
+        self.optimizer.exporting_state = export_state
         loop = self.optimizer.loop
         self.optimizer.clear_newoperations()
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to