Make frange selftests work on !HONOR_NANS systems.
I'm just shuffling the FP self tests here, with no change to existing
functionality.
If we agree that explicit NANs in the source code with !HONOR_NANS
should behave any differently, I'm happy to address whatever needs
fixing, but for now I'd like to unblock the !HONOR_NANS build systems.
I have added an adaptation of a test Jakub suggested we handle in the PR:
void funk(int cond)
{
float x;
if (cond)
x = __builtin_nan ("");
else
x = 1.24;
bar(x);
}
For !HONOR_NANS, the range for the PHI of x_1 is the union of 1.24 and
NAN which is really 1.24 with a maybe NAN. This reflects the IL-- the
presence of the actual NAN. However, VRP will propagate this because
it sees the 1.24 and ignores the possibility of a NAN, per
!HONOR_NANS. IMO, this is correct. OTOH, for HONOR_NANS the unknown
NAN property keeps us from propagating the value.
Is there a reason we don't warn for calls to __builtin_nan when
!HONOR_NANS? That makes no sense to me.
PR tree-optimization/106785
gcc/ChangeLog:
* value-range.cc (range_tests_nan): Adjust tests for !HONOR_NANS.
(range_tests_floats): Same.