Fold comparisons between sqrt and zero
The expression:
signbit(sqrt(x))
is always 0 for -ffast-math. The signbit fold first converts it to:
sqrt(x) < 0
and whether we realise that this is false depends on a race between two
folders: the sqrt comparison folder, which wants to convert it to
x < 0*0
and the generic tree_expr_nonnegative_p rule for ... < 0, which would
give the hoped-for 0.
The sqrt code already handles comparisons with negative values specially,
so this patch simply extends that idea to comparisons with zero.
Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi.
gcc/
* match.pd: Handle sqrt(x) cmp 0 specially.
gcc/testsuite/
* gcc.dg/torture/builtin-sqrt-cmp-1.c: New test.
From-SVN: r229422