Author: Armin Rigo <[email protected]>
Branch: 
Changeset: r70659:31fa36a1d761
Date: 2014-04-16 16:20 +0200
http://bitbucket.org/pypy/pypy/changeset/31fa36a1d761/

Log:    jit.isconstant(float)

diff --git a/rpython/jit/metainterp/blackhole.py 
b/rpython/jit/metainterp/blackhole.py
--- a/rpython/jit/metainterp/blackhole.py
+++ b/rpython/jit/metainterp/blackhole.py
@@ -887,6 +887,10 @@
     def bhimpl_int_isconstant(x):
         return False
 
+    @arguments("f", returns="i")
+    def bhimpl_float_isconstant(x):
+        return False
+
     @arguments("r", returns="i")
     def bhimpl_ref_isconstant(x):
         return False
diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -1169,7 +1169,9 @@
     def _opimpl_isconstant(self, box):
         return ConstInt(isinstance(box, Const))
 
-    opimpl_int_isconstant = opimpl_ref_isconstant = _opimpl_isconstant
+    opimpl_int_isconstant = _opimpl_isconstant
+    opimpl_ref_isconstant = _opimpl_isconstant
+    opimpl_float_isconstant = _opimpl_isconstant
 
     @arguments("box")
     def _opimpl_isvirtual(self, box):
diff --git a/rpython/jit/metainterp/test/test_ajit.py 
b/rpython/jit/metainterp/test/test_ajit.py
--- a/rpython/jit/metainterp/test/test_ajit.py
+++ b/rpython/jit/metainterp/test/test_ajit.py
@@ -3329,6 +3329,25 @@
         assert res == main(1, 10, 2)
         self.check_resops(call=0)
 
+    def test_look_inside_iff_const_float(self):
+        @look_inside_iff(lambda arg: isconstant(arg))
+        def f(arg):
+            return arg + 0.5
+
+        driver = JitDriver(greens = [], reds = ['n', 'total'])
+
+        def main(n):
+            total = 0.0
+            while n > 0:
+                driver.jit_merge_point(n=n, total=total)
+                total = f(total)
+                n -= 1
+            return total
+
+        res = self.meta_interp(main, [10], enable_opts='')
+        assert res == 5.0
+        self.check_resops(call=1)
+
     def test_look_inside_iff_virtual(self):
         # There's no good reason for this to be look_inside_iff, but it's a 
test!
         @look_inside_iff(lambda arg, n: isvirtual(arg))
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to