https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91734
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This is:
/* sqrt(x) < c is the same as x < c*c, if we ignore NaNs. */
(if (! HONOR_NANS (@0))
(cmp @0 { build_real (TREE_TYPE (@0), c2); })
/* sqrt(x) < c is the same as x >= 0 && x < c*c. */
(if (GENERIC)
(truth_andif
(ge @0 { build_real (TREE_TYPE (@0), dconst0); })
(cmp @0 { build_real (TREE_TYPE (@0), c2); })))))))))
c here is 1.17549435082228750796873653722224567781866555677208752151e-38f,
so c2 is 0.0f because the product is smaller than smallest positive subnormal
float. Obviously, in that case we can't use < c2, but need to use <= c2.
Maybe we probably should compute c2 with rounding towards positive infinity,
then we could keep using < c2.