[LLVMdev] subtle issue with soft-float and new attribute scheme (possibly an issue with other attributes)

Reed Kotler rkotler at mips.com
Fri May 17 06:57:21 PDT 2013

Just to clarify...

The target independent part of the code generator knows from the command 
line to use soft float when it legalizes.

However, any other code (target independent or dependent) which later 
tries to find out if soft float is in effect is going to get the wrong 

On 05/17/2013 03:04 AM, reed kotler wrote:
> I can't say this is a bug it is changed behavior from before the new
> attribute scheme.
> This issue may appear with other attributes. (there are other attributes
> that clang will now place
> on each function)
> If you run clang  as a single pass to create a .ll and don't say
> -msoft-float, it puts the attribute use-soft-float=false on every
> function. (It used to be that in that case -msoft-float had no effect
> because those
> attributes where not preserved in the IL. )
> Then if you run llc and say -soft-float, what happens is that the code
> generator will compile everything as soft-float, but the value of the
> following will be false in XXXISelLowering
> getTargetMachine().Options.UseSoftFloat
> When the constructor for XXXISelLowering is called,
> TM.Options.UseSoftFloat will be true.
> What is interesting is that code for "make check" won't have any of the
> new attributes there so
> it will work as before.
> I was seeing this behavior and could not figure out how my tests could
> possibly pass if getTargetMachine().Options.UseSoftFloat was returning
> the wrong result.

More information about the llvm-dev mailing list