https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106819

--- Comment #4 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #1)
> Global Exported: iftmp.2_6 = [frange] double [0.0, 0.0] !SIGN
> Folding PHI node: iftmp.2_6 = PHI <0.0(4),  Nan(5)>
> Queued PHI for removal.  Folds to: 0.0
> 
> doesn't look correct.  It is a range [0,0] or NaN, so it shouldn't be
> singleton_p and shouldn't fold to 0.0.
> BTW, regarding sign, generally NaNs can have either sign, though in this
> testcase we know the sign is clear (positive NaN).  Not sure how much we can
> rely on that though, say if the NaN would be sNaN with known sign bit set,
> it could raise an exception and be replaced by canonical qNaN which doesn't
> have sign set.

Hmmm, I haven't really thought about signs on NaNs:

    # iftmp.2_6 = PHI <0.0(4),  Nan(5)>

iftmp.2_6 : [frange] double [0.0, 0.0] !SIGN 

This means we have a known positive 0.0 or a NAN, but the !SIGN only applies to
the range not the NAN.

Out of curiosity, how would be know a NAN is positive or negative?  Is there a
builtin that tells us that?  Perhaps we could use another frange property to
model that (NAN_SIGN??).

I'm way out of my depth here (as usual -)).

Reply via email to