Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r78543:e6d31ebd3035
Date: 2015-07-13 09:32 +0200
http://bitbucket.org/pypy/pypy/changeset/e6d31ebd3035/

Log:    small fixes

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
@@ -306,11 +306,10 @@
             # XXX hack, use stuff on info somehow, a bit on the hard side
             #     but doable :-)
             try:
-                preamble_op = self.optunroll.ops_to_import[op]
+                self.optunroll.ops_to_import[op]
             except KeyError:
                 pass
             else:
-                self.optunroll.short.append(preamble_op)
                 self.optunroll.extra_label_args.append(op)
                 del self.optunroll.ops_to_import[op]
         if info is not None:
@@ -468,6 +467,11 @@
         self.resumedata_memo.update_counters(self.metainterp_sd.profiler)
         return BasicLoopInfo(newargs), self._newoperations
 
+    def _clean_optimization_info(self, lst):
+        for op in lst:
+            if op.get_forwarded() is not None:
+                op.set_forwarded(None)
+
     def send_extra_operation(self, op):
         self.first_optimization.propagate_forward(op)
 
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -8103,9 +8103,9 @@
         jump(i1, i3)
         """
         expected = """
-        [i1, i2, i6, i3]
-        call_n(i6, descr=nonwritedescr)
-        jump(i1, i3, i6, i3)
+        [i1, i2, i3]
+        call_n(i3, descr=nonwritedescr)
+        jump(i1, i2, i3)
         """
         short = """
         [i1, i2]
@@ -8113,7 +8113,7 @@
         i4 = int_add(i3, i3)
         i5 = int_add(i4, i4)
         i6 = int_add(i5, i5)
-        jump(i1, i2, i6, i3)
+        #jump(i1, i2, i6, i3)
         """
         self.optimize_loop(ops, expected, expected_short=short)
 
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
@@ -3,9 +3,9 @@
 from rpython.jit.metainterp.history import TargetToken, JitCellToken, Const
 from rpython.jit.metainterp.optimizeopt.shortpreamble import ShortBoxes
 from rpython.jit.metainterp.optimize import InvalidLoop
-from rpython.jit.metainterp.optimizeopt import info
+from rpython.jit.metainterp.optimizeopt import info, intutils
 from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\
-     Optimization, LoopInfo
+     Optimization, LoopInfo, MININT, MAXINT
 from rpython.jit.metainterp.optimizeopt.virtualstate import 
(VirtualStateConstructor,
         BadVirtualState, VirtualStatesCantMatch)
 from rpython.jit.metainterp.resoperation import rop, ResOperation,\
@@ -50,6 +50,7 @@
         op = self.get_box_replacement(op)
         if isinstance(preamble_info, info.PtrInfo):
             if preamble_info.is_virtual():
+                # XXX do we want to sanitize this?
                 op.set_forwarded(preamble_info)
                 return
             if op.is_constant():
@@ -59,6 +60,15 @@
                 self.make_constant_class(op, known_class, False)
             if preamble_info.is_nonnull():
                 self.make_nonnull(op)
+        elif isinstance(preamble_info, intutils.IntBound):
+            if preamble_info.lower > MININT/2 or preamble_info.upper < 
MAXINT/2:
+                intbound = self.getintbound(op)
+                if preamble_info.lower > MININT/2:
+                    intbound.has_lower = True
+                    intbound.lower = preamble_info.lower
+                if preamble_info.upper < MAXINT/2:
+                    intbound.has_upper = True
+                    intbound.upper = preamble_info.upper
 
 
 class UnrollOptimizer(Optimization):
@@ -88,9 +98,12 @@
         self._check_no_forwarding([[start_label, end_label], ops])
         info, newops = self.optimizer.propagate_all_forward(
             start_label.getarglist()[:], ops)
-        self.flush()
+        self.optimizer.flush()
         exported_state = self.export_state(start_label, end_label,
                                            info.inputargs)
+        # we need to absolutely make sure that we've cleaned up all
+        # the optimization info
+        self.optimizer._clean_optimization_info(self.optimizer._newoperations)
         return exported_state, self.optimizer._newoperations
 
     def optimize_peeled_loop(self, start_label, end_jump, ops, state):
@@ -107,7 +120,7 @@
         jump_args = state.virtual_state.make_inputargs(jump_args,
                     self.optimizer, force_boxes=True) + args_from_extras
         
-        self.flush()
+        self.optimizer.flush()
         jump_op = ResOperation(rop.JUMP, jump_args)
         self.optimizer._newoperations.append(jump_op)
         return (UnrollInfo(self.make_short_preamble(start_label.getarglist()),
@@ -226,10 +239,8 @@
         for box in sb.short_boxes:
             infos[box] = self.optimizer.getinfo(box)
         label_args = virtual_state.make_inputargs(end_args, self.optimizer)
-        for arg in end_args:
-            if arg.get_forwarded() is not None:
-                arg.set_forwarded(None) # forget the optimization info
-                                        # (it's by infos exported)
+        self.optimizer._clean_optimization_info(end_args)
+        self.optimizer._clean_optimization_info(start_label.getarglist())
         return ExportedState(label_args, inparg_mapping, virtual_state, infos,
                              sb.short_boxes, renamed_inputargs)
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to