Author: Hakan Ardo <[email protected]>
Branch: jit-short_from_state
Changeset: r45560:421d6523ee43
Date: 2011-07-13 16:39 +0200
http://bitbucket.org/pypy/pypy/changeset/421d6523ee43/
Log: separated the genralization startegy into a class of its own
diff --git a/pypy/jit/metainterp/optimizeopt/generalize.py
b/pypy/jit/metainterp/optimizeopt/generalize.py
new file mode 100644
--- /dev/null
+++ b/pypy/jit/metainterp/optimizeopt/generalize.py
@@ -0,0 +1,18 @@
+from pypy.jit.metainterp.optimizeopt.optimizer import MININT, MAXINT
+
+class GeneralizationStrategy(object):
+ def __init__(self, optimizer):
+ self.optimizer = optimizer
+
+ def apply(self):
+ raise NotImplementedError
+
+class KillHugeIntBounds(GeneralizationStrategy):
+ def apply(self):
+ for v in self.optimizer.values.values():
+ if v.intbound.lower < MININT/2:
+ v.intbound.lower = MININT
+ if v.intbound.upper > MAXINT/2:
+ v.intbound.upper = MAXINT
+ import pdb; pdb.set_trace()
+
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
@@ -87,10 +87,6 @@
return self.box
def force_at_end_of_preamble(self, already_forced):
- if self.intbound.lower < MININT/2:
- self.intbound.lower = MININT
- if self.intbound.upper > MAXINT/2:
- self.intbound.upper = MAXINT
return self
def get_cloned(self, optimizer, valuemap, force_if_needed=True):
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -2865,8 +2865,7 @@
jump(p8, p11, p26)
"""
expected = """
- [p8, p11, i24, i19, p16, i21, i34]
- i39 = getfield_gc(p8, descr=nextdescr)
+ [p8, p11, i24, i39, i19, p16, i21, i34]
i40 = int_ge(i39, i19)
guard_false(i40) []
i41 = getfield_gc(p16, descr=nextdescr)
@@ -2876,7 +2875,7 @@
setfield_gc(p8, i44, descr=nextdescr)
i45 = int_add_ovf(i34, i43)
guard_no_overflow() []
- jump(p8, p11, i43, i19, p16, i21, i34)
+ jump(p8, p11, i43, i44, i19, p16, i21, i34)
"""
self.optimize_loop(ops, expected)
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
@@ -9,6 +9,7 @@
from pypy.jit.metainterp.jitexc import JitException
from pypy.jit.metainterp.history import make_hashable_int
from pypy.jit.codewriter.effectinfo import EffectInfo
+from pypy.jit.metainterp.optimizeopt.generalize import KillHugeIntBounds
# Assumptions
# ===========
@@ -171,6 +172,8 @@
jumpop.initarglist([])
self.optimizer.flush()
+ KillHugeIntBounds(self.optimizer).apply()
+
loop.preamble.operations = self.optimizer.newoperations
modifier = VirtualStateAdder(self.optimizer)
@@ -192,7 +195,7 @@
self.optimizer.quasi_immutable_deps)
self.optimizer = self.optimizer.reconstruct_for_next_iteration(sb,
jump_args)
loop.quasi_immutable_deps = self.optimizer.quasi_immutable_deps
-
+
initial_inputargs_len = len(inputargs)
self.inliner = Inliner(loop.inputargs, jump_args)
@@ -307,6 +310,7 @@
self.add_op_to_short(op, short, short_seen)
self.optimizer.flush()
+
i = j = 0
while i < len(self.optimizer.newoperations):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit