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