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

Reply via email to