Author: Maciej Fijalkowski <[email protected]>
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
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit