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

Dale Johannesen dalej at apple.com
Mon Oct 6 13:30:25 PDT 2008


On Oct 6, 2008, at 1:20 PMPDT, Dan Gohman wrote:

> 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?

OK.

>
> 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
>
> _______________________________________________
> 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