This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [gfortran,patch] Make MIN and MAX handle NaNs correctly (PR32048)


FX Coudert wrote:
Attached patch makes MIN and MAX intrinsics return correct IEEE results (and consistent results) when given one or more NaN as arguments. It does so by changing the code generated from MAX(a,b) := (b > a ? b : a) into MAX(a,b) := (b > a || isnan(a) ? b : a); handling of multiple arguments is done similarly.

The introduction of isnan() tests probably has a cost, but hey, we want a correct result anyway, don't we? Thus, I added a note into the code saying that when IEEE_ARITHMETIC is implemented, we might want to make this codepath dependent on IEEE_ARITHMETIC being used (I don't think we should do that, but we should certainly discuss the option).

I also added a testcase, I don't have much experience with NaNs so I don't know if all targets have them, does someone know if "x = 0.0 ; x = x / x;" will result in a NaN in all cases?

Take a look in the testsuite at real_constant_3.f90. I suppose this is really only testing mpfr. I wonder if we should modify this or come up with a new test case that forces these values to be computed at run time.

Bootstrapped and regtested on x86_64-linux, OK for mainline? FX

:ADDPATH fortran:
This is OK.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]