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