Author: Maciej Fijalkowski <fij...@gmail.com>
Branch: optresult-unroll
Changeset: r78357:9f67e775a106
Date: 2015-06-30 11:04 +0200
http://bitbucket.org/pypy/pypy/changeset/9f67e775a106/

Log:    add GUARD_VALUE for short preamble

diff --git a/rpython/jit/metainterp/optimizeopt/intutils.py 
b/rpython/jit/metainterp/optimizeopt/intutils.py
--- a/rpython/jit/metainterp/optimizeopt/intutils.py
+++ b/rpython/jit/metainterp/optimizeopt/intutils.py
@@ -245,6 +245,10 @@
         return res
 
     def make_guards(self, box, guards):
+        if self.is_constant():
+            guards.append(ResOperation(rop.GUARD_VALUE,
+                                       [box, ConstInt(self.upper)]))
+            return
         if self.has_lower and self.lower > MININT:
             bound = self.lower
             op = ResOperation(rop.INT_GE, [box, ConstInt(bound)])
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
@@ -442,12 +442,13 @@
         else:
             return CONST_0
 
-    def propagate_all_forward(self, clear=True):
+    def propagate_all_forward(self, clear=True, create_inp_args=True):
         if clear:
             self.clear_newoperations()
-        self.inparg_dict = {}
-        for op in self.loop.inputargs:
-            self.inparg_dict[op] = None
+        if create_inp_args:
+            self.inparg_dict = {}
+            for op in self.loop.inputargs:
+                self.inparg_dict[op] = None
         for op in self.loop.operations:
             self._really_emitted_operation = None
             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
@@ -450,7 +450,7 @@
         [i0]
         i1 = int_is_true(i0)
         guard_value(i1, 1) []
-        jump(i0)
+        #jump(i0) <- xxx
         """
         self.optimize_loop(ops, expected, preamble, 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
@@ -27,8 +27,9 @@
 
 
 class PreambleOp(AbstractResOp):
-    def __init__(self, op):
+    def __init__(self, op, info):
         self.op = op
+        self.info = info
 
     def getarg(self, i):
         return self.op.getarg(i)
@@ -56,9 +57,11 @@
             self.emitted_guards += 1 # FIXME: can we use counter in 
self._emit_operation?
         self._emit_operation(op)
 
-    def force_op_from_preamble(self, op):
-        op = op.op
+    def force_op_from_preamble(self, preamble_op):
+        op = preamble_op.op
         self.optunroll.short.append(op)
+        if preamble_op.info:
+            preamble_op.info.make_guards(op, self.optunroll.short)
         return op
 
 
@@ -117,7 +120,12 @@
             jumpop = None
 
         self.import_state(start_label, starting_state)
-        self.optimizer.propagate_all_forward(clear=False)
+        self.optimizer.inparg_dict = {}
+        for box in start_label.getarglist():
+            self.optimizer.inparg_dict[box] = None
+        import pdb
+        pdb.set_trace()
+        self.optimizer.propagate_all_forward(clear=False, 
create_inp_args=False)
 
         if not jumpop:
             return
@@ -311,7 +319,8 @@
             if not op:
                 continue
             if op.is_always_pure():
-                self.pure(op.getopnum(), PreambleOp(op))
+                self.pure(op.getopnum(),
+                          PreambleOp(op, self.optimizer.getinfo(op)))
             else:
                 yyy
         return
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py 
b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -589,7 +589,7 @@
                     state.append(self.visit_not_virtual(box))
             elif box.type == 'i':
                 intbound = opt.getintbound(box)
-                state.append(self.visit_not_ptr(box, intbound))
+                state.append(self.visit_not_virtual(box))
             else:
                 xxx
         #values = [self.getvalue(box).force_at_end_of_preamble(already_forced,
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to