[LLVMdev] Generating Floating point constants
dalej at apple.com
Wed Jun 2 11:00:26 PDT 2010
On Jun 2, 2010, at 10:48 AMPDT, Dale Johannesen wrote:
>>>> We need to generate "Floating point constants" in our code. In http://llvm.org/docs/LangRef.html it is explained that FP has to follow special encoding rules to be handled by LLVM later one (hexadecimal coding...)
>>>> Is there any code available in LLVM to handle this kind of "standard float to LLVM float" conversion?
>>> If you're writing C++ code, just stick your float into an APFloat and
>>> doesn't worry about the hexadecimal coding. If you're generating
>>> textual IR,
>> Yes we are generating textual IR,
>>> and you don't care about the precise hexadecimal
>>> representation, AFAIK just printing a decimal float works.
>> Seems like some values cannot be assembled later on (for instance with "llc")
> Yes, there are floating point values (such as NaNs) that cannot be expressed in decimal, and others that would require a prohibitively large number of digits. You don't want to do that.
> The code that writes out APFloats is in WriteConstantInt [sic] in VMCore/AsmWriter.cpp. It's not set up to do conversions separately from writing out, but you should be able to figure it out.
More fully, if you have a host floating point constant, you want to build an APFloat from it (there's a constructor that takes a float), then use the APFloat routines to manipulate it. If your source is in string form use convertFromString. Host floating point arithmetic is not portable; even float and double are not because of the x87 roundoff problem.
More information about the llvm-dev