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

Log:    invent new names for inputargs too, we need to rethink the
        check_lazy_fail_args at some point

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
@@ -5,7 +5,8 @@
 from rpython.jit.metainterp.optimizeopt.intutils import IntBound,\
      ConstIntBound, MININT, MAXINT
 from rpython.jit.metainterp.optimizeopt.util import make_dispatcher_method
-from rpython.jit.metainterp.resoperation import rop, AbstractResOp, GuardResOp
+from rpython.jit.metainterp.resoperation import rop, AbstractResOp, 
GuardResOp,\
+     OpHelpers
 from rpython.jit.metainterp.optimizeopt import info
 from rpython.jit.metainterp.typesystem import llhelper
 from rpython.rlib.objectmodel import specialize, we_are_translated
@@ -19,6 +20,13 @@
 llhelper.CONST_NULLREF = llhelper.CONST_NULL
 REMOVED = AbstractResOp()
 
+class LoopInfo(object):
+    pass
+
+class BasicLoopInfo(LoopInfo):
+    def __init__(self, inputargs):
+        self.inputargs = inputargs
+
 
 class Optimization(object):
     next_optimization = None
@@ -286,15 +294,9 @@
             zzz
 
     def get_box_replacement(self, op):
-        from rpython.jit.metainterp.optimizeopt.unroll import PreambleOp
-
-        orig_op = op
         if op is None:
             return op
-        res = op.get_box_replacement()
-        if isinstance(res, PreambleOp):
-            xxx
-        return res
+        return op.get_box_replacement()
 
     def force_box(self, op):
         op = self.get_box_replacement(op)
@@ -432,7 +434,12 @@
             return CONST_0
 
     def propagate_all_forward(self, inputargs, ops, call_pure_results=None):
-        self.init_inparg_dict_from(inputargs)
+        newargs = []
+        for inparg in inputargs:
+            new_arg = OpHelpers.inputarg_from_tp(inparg.type)
+            inparg.set_forwarded(new_arg)
+            newargs.append(new_arg)
+        self.init_inparg_dict_from(newargs)
         self.call_pure_results = call_pure_results
         for op in ops:
             self._really_emitted_operation = None
@@ -441,7 +448,7 @@
         #self.loop.quasi_immutable_deps = self.quasi_immutable_deps
         # accumulate counters
         self.resumedata_memo.update_counters(self.metainterp_sd.profiler)
-        return None, self._newoperations
+        return BasicLoopInfo(newargs), self._newoperations
 
     def send_extra_operation(self, op):
         self.first_optimization.propagate_forward(op)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py 
b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizebasic.py
@@ -84,7 +84,9 @@
         call_pure_results = self._convert_call_pure_results(call_pure_results)
         compile_data = compile.SimpleCompileData(label_op, loop.operations,
                                                  call_pure_results)
-        _, ops = self._do_optimize_loop(compile_data)
+        info, ops = self._do_optimize_loop(compile_data)
+        label_op = ResOperation(rop.LABEL, info.inputargs)
+        loop.inputargs = info.inputargs
         loop.operations = [label_op] + ops
         #print '\n'.join([str(o) for o in loop.operations])
         self.loop = loop
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
@@ -3332,7 +3332,6 @@
         self.optimize_loop(ops, expected)
 
     def test_int_and_or_with_zero(self):
-        xxx
         ops = """
         [i0, i1]
         i2 = int_and(i0, 0)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py 
b/rpython/jit/metainterp/optimizeopt/test/test_util.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_util.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py
@@ -420,7 +420,6 @@
         #
         compile_data.enable_opts = self.enable_opts
         state = optimize_trace(metainterp_sd, None, compile_data)
-        compile_data.forget_optimization_info()
         return state
 
     def _convert_call_pure_results(self, d):
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
@@ -5,7 +5,7 @@
 from rpython.jit.metainterp.optimize import InvalidLoop
 from rpython.jit.metainterp.optimizeopt import info
 from rpython.jit.metainterp.optimizeopt.optimizer import Optimizer,\
-     Optimization
+     Optimization, LoopInfo
 from rpython.jit.metainterp.optimizeopt.virtualstate import 
(VirtualStateConstructor,
         BadVirtualState, VirtualStatesCantMatch)
 from rpython.jit.metainterp.resoperation import rop, ResOperation,\
@@ -257,7 +257,8 @@
         # by short preamble
         for op, preamble_op in exported_state.short_boxes.items():
             if preamble_op.is_always_pure():
-                self.pure(op.getopnum(), PreambleOp(op, preamble_op, None))
+                self.pure(op.getopnum(), PreambleOp(op, preamble_op,
+                                                self.optimizer.getinfo(op)))
             else:
                 yyy
 
@@ -694,8 +695,6 @@
                                       'it has at the start of the target loop')
             i += 1
 
-class LoopInfo(object):
-    pass
 
 class UnrollInfo(LoopInfo):
     """ A state after optimizing the peeled loop, contains the following:
diff --git a/rpython/jit/metainterp/resoperation.py 
b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -34,10 +34,12 @@
 
     def get_box_replacement(op):
         orig_op = op
+        c = 0
         while (op.get_forwarded() is not None and
                not op.get_forwarded().is_info_class):
+            c += 1
             op = op.get_forwarded()
-        if op is not orig_op:
+        if op is not orig_op and c > 1:
             orig_op.set_forwarded(op)
         return op
 
@@ -1136,3 +1138,13 @@
                 opnum == rop.CALL_RELEASE_GIL_R or
                 opnum == rop.CALL_RELEASE_GIL_F or
                 opnum == rop.CALL_RELEASE_GIL_N)
+
+    @staticmethod
+    def inputarg_from_tp(tp):
+        if tp == 'i':
+            return InputArgInt()
+        elif tp == 'r':
+            return InputArgRef()
+        else:
+            assert tp == 'f'
+            return InputArgFloat()
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to