[pypy-commit] pypy optresult-unroll: fix for guard_value on floats

fijal noreply at buildbot.pypy.org
Tue Jul 7 12:09:04 CEST 2015


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78485:087a1c3233fb
Date: 2015-07-07 12:09 +0200
http://bitbucket.org/pypy/pypy/changeset/087a1c3233fb/

Log:	fix for guard_value on floats

diff --git a/rpython/jit/metainterp/optimizeopt/rewrite.py b/rpython/jit/metainterp/optimizeopt/rewrite.py
--- a/rpython/jit/metainterp/optimizeopt/rewrite.py
+++ b/rpython/jit/metainterp/optimizeopt/rewrite.py
@@ -313,6 +313,10 @@
                 if old_guard_op is not None:
                     op = self.replace_guard_class_with_guard_value(op, info,
                                                               old_guard_op)
+        elif arg0.type == 'f':
+            arg0 = self.get_box_replacement(arg0)
+            if arg0.is_constant():
+                return
         constbox = op.getarg(1)
         assert isinstance(constbox, Const)
         self.optimize_guard(op, constbox)
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
@@ -5722,5 +5722,19 @@
         """
         self.optimize_loop(ops, expected)
 
+    def test_float_guard_value(self):
+        ops = """
+        [f0]
+        guard_value(f0, 3.5) []
+        guard_value(f0, 3.5) []
+        finish(f0)
+        """
+        expected = """
+        [f0]
+        guard_value(f0, 3.5) []
+        finish(3.5)
+        """
+        self.optimize_loop(ops, expected)
+
 class TestLLtype(BaseTestOptimizeBasic, LLtypeMixin):
     pass


More information about the pypy-commit mailing list