[llvm-commits] [llvm] r40974 - in /llvm/trunk/lib: Bitcode/Reader/BitcodeReader.cpp Bitcode/Writer/BitcodeWriter.cpp VMCore/Constants.cpp

Chris Lattner clattner at apple.com
Thu Aug 9 16:58:27 PDT 2007


> Patch 10 for long double.  Doing constants right needs expanding  
> ConstantFP
> to handle values bigger than double.  If we assume host==target and  
> host
> long double works correctly, this is not too bad, but we don't want to
> have that limitation longterm.  I could implement accepting double
> constants as long double or something like that, which would lead to
> incorrect codegen with no errors; the more I think about that the  
> worse
> it seems.  Rather than do such a hack that would be backed out later,
> I'm settling for giving reasonable error messages, for now.

Using host long double is an acceptable hack for now.  Alternatively:

> ====================================================================== 
> ========
> --- llvm/trunk/lib/VMCore/Constants.cpp (original)
> +++ llvm/trunk/lib/VMCore/Constants.cpp Thu Aug  9 17:51:36 2007
> @@ -288,12 +291,17 @@
>      ConstantFP *&Slot = (*FloatConstants)[std::make_pair(IntVal,  
> Ty)];
>      if (Slot) return Slot;
>      return Slot = new ConstantFP(Ty, (float)V);
> +  } else if (Ty == Type::DoubleTy) {
>      uint64_t IntVal = DoubleToBits(V);
>      ConstantFP *&Slot = (*DoubleConstants)[std::make_pair(IntVal,  
> Ty)];
>      if (Slot) return Slot;
>      return Slot = new ConstantFP(Ty, V);
> +  // FIXME:  Make long double constants work.
> +  } else if (Ty == Type::X86_FP80Ty ||
> +             Ty == Type::PPC_FP128Ty || Ty == Type::FP128Ty) {
> +    assert(0 && "Long double constants not handled yet.");

You could just treat these like doubles for now:

>      uint64_t IntVal = DoubleToBits(V);
>      ConstantFP *&Slot = (*DoubleConstants)[std::make_pair(IntVal,  
> Ty)];
>      if (Slot) return Slot;
>      return Slot = new ConstantFP(Ty, V);

This gives you the correct value, but loses the long double  
precision.  Seems a better short term hack than just asserting :)

-Chris



More information about the llvm-commits mailing list