[pypy-commit] pypy default: Test and fix (for 64-bit only): the nonnull() method of ConstFloat
arigo
noreply at buildbot.pypy.org
Sun Sep 28 22:46:12 CEST 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r73742:03e137fd14b3
Date: 2014-09-28 22:45 +0200
http://bitbucket.org/pypy/pypy/changeset/03e137fd14b3/
Log: Test and fix (for 64-bit only): the nonnull() method of ConstFloat
and BoxFloat was implemented with "self.value != 0.0", which returns
false for both 0.0 and -0.0. But the real intent of this method is
to check if the value is null in the sense that a pattern of zeros
is a correct initialization for the value.
diff --git a/rpython/jit/metainterp/history.py b/rpython/jit/metainterp/history.py
--- a/rpython/jit/metainterp/history.py
+++ b/rpython/jit/metainterp/history.py
@@ -285,7 +285,7 @@
return False
def nonnull(self):
- return self.value != longlong.ZEROF
+ return bool(longlong.extract_bits(self.value))
def _getrepr_(self):
return self.getfloat()
@@ -460,7 +460,7 @@
return longlong.gethash(self.value)
def nonnull(self):
- return self.value != longlong.ZEROF
+ return bool(longlong.extract_bits(self.value))
def _getrepr_(self):
return self.getfloat()
diff --git a/rpython/jit/metainterp/test/test_history.py b/rpython/jit/metainterp/test/test_history.py
--- a/rpython/jit/metainterp/test/test_history.py
+++ b/rpython/jit/metainterp/test/test_history.py
@@ -59,6 +59,20 @@
assert not c5.same_constant(c2)
assert not c5.same_constant(c4)
+def test_float_nonnull():
+ c1 = Const._new(0.0)
+ c2 = Const._new(1.0)
+ c3 = Const._new(INFINITY)
+ c4 = Const._new(-INFINITY)
+ c5 = Const._new(NAN)
+ c6 = Const._new(-0.0)
+ assert not c1.nonnull()
+ assert c2.nonnull()
+ assert c3.nonnull()
+ assert c4.nonnull()
+ assert c5.nonnull()
+ assert c6.nonnull()
+
class TestZTranslated(StandaloneTests):
def test_ztranslated_same_constant_float(self):
More information about the pypy-commit
mailing list