Author: Hakan Ardo <[email protected]>
Branch: jit-optimizeopt-cleanups
Changeset: r47751:273253d0c8f7
Date: 2011-10-01 19:14 +0200
http://bitbucket.org/pypy/pypy/changeset/273253d0c8f7/
Log: move emitted_pure_operations dict to OptPure
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py
b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -375,7 +375,8 @@
return new
def produce_potential_short_preamble_ops(self, sb):
- raise NotImplementedError('This is implemented in
unroll.UnrollableOptimizer')
+ for opt in self.optimizations:
+ opt.produce_potential_short_preamble_ops(sb)
def turned_constant(self, value):
for o in self.optimizations:
@@ -577,9 +578,6 @@
def optimize_default(self, op):
self.emit_operation(op)
- def remember_emitting_pure(self, op):
- pass
-
def constant_fold(self, op):
argboxes = [self.get_constant_box(op.getarg(i))
for i in range(op.numargs())]
diff --git a/pypy/jit/metainterp/optimizeopt/pure.py
b/pypy/jit/metainterp/optimizeopt/pure.py
--- a/pypy/jit/metainterp/optimizeopt/pure.py
+++ b/pypy/jit/metainterp/optimizeopt/pure.py
@@ -7,6 +7,7 @@
def __init__(self):
self.posponedop = None
self.pure_operations = args_dict()
+ self.emitted_pure_operations = {}
def propagate_forward(self, op):
dispatch_opt(self, op)
@@ -46,7 +47,7 @@
return
else:
self.pure_operations[args] = op
- self.optimizer.remember_emitting_pure(op)
+ self.remember_emitting_pure(op)
# otherwise, the operation remains
self.emit_operation(op)
@@ -81,7 +82,7 @@
return
else:
self.pure_operations[args] = op
- self.optimizer.remember_emitting_pure(op)
+ self.remember_emitting_pure(op)
# replace CALL_PURE with just CALL
args = op.getarglist()
@@ -115,5 +116,17 @@
def get_pure_result(self, key):
return self.pure_operations.get(key, None)
+ def remember_emitting_pure(self, op):
+ self.emitted_pure_operations[op] = True
+
+ def produce_potential_short_preamble_ops(self, sb):
+ for op in self.emitted_pure_operations:
+ if op.getopnum() == rop.GETARRAYITEM_GC_PURE or \
+ op.getopnum() == rop.STRGETITEM or \
+ op.getopnum() == rop.UNICODEGETITEM:
+ if not self.getvalue(op.getarg(1)).is_constant():
+ continue
+ sb.add_potential(op)
+
dispatch_opt = make_dispatcher_method(OptPure, 'optimize_',
default=OptPure.optimize_default)
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py
b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -75,7 +75,6 @@
self.importable_values = {}
self.emitting_dissabled = False
self.emitted_guards = 0
- self.emitted_pure_operations = {}
def ensure_imported(self, value):
if not self.emitting_dissabled and value in self.importable_values:
@@ -96,21 +95,6 @@
new = UnrollableOptimizer(self.metainterp_sd, self.loop)
return self._new(new)
- def remember_emitting_pure(self, op):
- self.emitted_pure_operations[op] = True
-
- def produce_potential_short_preamble_ops(self, sb):
- for op in self.emitted_pure_operations:
- if op.getopnum() == rop.GETARRAYITEM_GC_PURE or \
- op.getopnum() == rop.STRGETITEM or \
- op.getopnum() == rop.UNICODEGETITEM:
- if not self.getvalue(op.getarg(1)).is_constant():
- continue
- sb.add_potential(op)
- for opt in self.optimizations:
- opt.produce_potential_short_preamble_ops(sb)
-
-
class UnrollOptimizer(Optimization):
"""Unroll the loop into two iterations. The first one will
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit