[pypy-commit] pypy optresult-unroll: fix some tests

fijal noreply at buildbot.pypy.org
Sun Aug 23 11:11:41 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r79149:1643091d8b44
Date: 2015-08-23 11:11 +0200
http://bitbucket.org/pypy/pypy/changeset/1643091d8b44/

Log:	fix some tests

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
@@ -140,8 +140,8 @@
             return fw
         return None
 
-    def get_box_replacement(self, op):
-        return self.optimizer.get_box_replacement(op)
+    def get_box_replacement(self, op, not_const=False):
+        return self.optimizer.get_box_replacement(op, not_const=not_const)
 
     def getlastop(self):
         return self.optimizer._last_emitted_op
@@ -318,10 +318,10 @@
             if self.get_box_replacement(op).is_constant():
                 return info.FloatConstInfo(self.get_box_replacement(op))
 
-    def get_box_replacement(self, op):
+    def get_box_replacement(self, op, not_const=False):
         if op is None:
             return op
-        return op.get_box_replacement()
+        return op.get_box_replacement(not_const)
 
     def force_box(self, op):
         op = self.get_box_replacement(op)
@@ -551,6 +551,9 @@
             else:
                 guard_op = self.replace_op_with(op, op.getopnum())
                 op = self.store_final_boxes_in_guard(guard_op, pendingfields)
+                # for unrolling
+                for farg in op.getfailargs():
+                    self.force_box(farg)
         elif op.can_raise():
             self.exception_might_have_happened = True
         self._really_emitted_operation = op
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
@@ -182,7 +182,7 @@
         return virtual_state
 
     def filter_extra_jump_args(self, label_args, jump_args):
-        label_args = [self.get_box_replacement(x) for x in label_args]
+        label_args = [self.get_box_replacement(x, True) for x in label_args]
         jump_args = [self.get_box_replacement(x) for x in jump_args]
         new_label_args = []
         new_jump_args = []
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
@@ -33,11 +33,12 @@
         llop.debug_print(lltype.Void, "setting forwarded on:", self.__class__.__name__)
         raise SettingForwardedOnAbstractValue()
 
-    def get_box_replacement(op):
+    def get_box_replacement(op, not_const=False):
         orig_op = op
         c = 0
         while (op.get_forwarded() is not None and
-               not op.get_forwarded().is_info_class):
+               not op.get_forwarded().is_info_class and
+               (not not_const or not op.get_forwarded().is_constant())):
             c += 1
             op = op.get_forwarded()
         if op is not orig_op and c > 1:


More information about the pypy-commit mailing list