[llvm-commits] [llvm] r57185 - /llvm/trunk/lib/Support/APFloat.cpp

Dan Gohman gohman at apple.com
Mon Oct 6 13:20:23 PDT 2008


Hi Dale,

This is causing these tests:

CodeGen/X86/all-ones-vector.ll
CodeGen/CBackend/2003-10-12-NANGlobalInits.ll

to fail with error message "Floating point constant invalid for type"
from llvm-as. Can you investigate?

Thanks,

Dan

On Oct 6, 2008, at 11:22 AM, Dale Johannesen wrote:

> Author: johannes
> Date: Mon Oct  6 13:22:29 2008
> New Revision: 57185
>
> URL: http://llvm.org/viewvc/llvm-project?rev=57185&view=rev
> Log:
> Mark shortening NaN conversions as Inexact.  PR 2856.
> Improve description of unsupported formats.
>
>
> Modified:
>    llvm/trunk/lib/Support/APFloat.cpp
>
> Modified: llvm/trunk/lib/Support/APFloat.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/APFloat.cpp?rev=57185&r1=57184&r2=57185&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Support/APFloat.cpp (original)
> +++ llvm/trunk/lib/Support/APFloat.cpp Mon Oct  6 13:22:29 2008
> @@ -1727,11 +1727,12 @@
>       APInt::tcShiftLeft(significandParts(), newPartCount, shift);
>     else if (shift < 0)
>       APInt::tcShiftRight(significandParts(), newPartCount, -shift);
> +    // If the new size is shorter, we lost information.
> +    fs = (shift < 0) ? opInexact : opOK;
>     // gcc forces the Quiet bit on, which means (float)(double) 
> (float_sNan)
>     // does not give you back the same bits.  This is dubious, and we
>     // don't currently do it.  You're really supposed to get
>     // an invalid operation signal at runtime, but nobody does that.
> -    fs = opOK;
>   } else {
>     semantics = &toSemantics;
>     fs = opOK;
> @@ -2633,11 +2634,13 @@
>   return api.bitsToDouble();
> }
>
> -/// Integer bit is explicit in this format.  Current Intel book  
> does not
> -/// define meaning of:
> -///  exponent = all 1's, integer bit not set.
> -///  exponent = 0, integer bit set. (formerly "psuedodenormals")
> -///  exponent!=0 nor all 1's, integer bit not set. (formerly  
> "unnormals")
> +/// Integer bit is explicit in this format.  Intel hardware (387  
> and later)
> +/// does not support these bit patterns:
> +///  exponent = all 1's, integer bit 0, significand 0  
> ("pseudoinfinity")
> +///  exponent = all 1's, integer bit 0, significand nonzero  
> ("pseudoNaN")
> +///  exponent = 0, integer bit 1 ("pseudodenormal")
> +///  exponent!=0 nor all 1's, integer bit 0 ("unnormal")
> +/// At the moment, the first two are treated as NaNs, the second  
> two as Normal.
> void
> APFloat::initFromF80LongDoubleAPInt(const APInt &api)
> {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list