Hi Akira!
> Akira said,
> Suppose there are two functions in a module which have different sets of
function attributes.
> One function has attributes for "-ffast-math" (foo1) and the
other (foo0) has attributes for "-fno-fast-math".
> In that case, which set of eabi attributes should
ARMAsmPrinter::emitAttributes emit?
That's an interesting question and a use-case I hadn't considered
whilst working on the build-attribute support recently.
An ABI-compliant linker has a set of rules for combing different
attribute values across objects which are documented in section 2.1.5
of the addenda to ARM ABI. If you wanted to combine attribute values
across attribute sets within a module, I think you would have to
implement the same set of rules in the attribute emitter. I'm sorry to
report that no such functionality exists AFAICT.
> Renato said,
> Build attributes were not created to describe everything inside the
> file, but to help you identify what support you need (or don't want) in
order to link with the most appropriate libraries, if you have more than one.
There is a notion of attribute scopes, where build attributes could be
given to individual entities defined in an object, specifically to
function or data objects identified by an ELF symbol definition (2.1.3
of the ABI addenda), but this use of build attributes is deprecated in
version 2.09 of the ABI (to which I'm trying to get LLVM to conform),
where producers are discouraged from generating them, and consumers
may ignore them.
> Renato said,
> In this case, I'd say the best course of action would be to set the
attribute to the least restrictive one, which in this case is to accept
fast-math.
My impression would be that you must emit attributes suitable for
-no-fast-maths, the most strict requirement in this example, and
assume a IEEE-conformant soft-math library will be linked for foo0's
use.
Kind regards,
Charlie.
On 19 December 2014 at 10:44, Renato Golin <renato.golin at linaro.org>
wrote:> On 19 December 2014 at 01:37, Akira Hatanaka <ahatanak at gmail.com>
wrote:
>> Suppose there are two functions in a module which have different sets
of
>> function attributes. One function has attributes for
"-ffast-math" (foo1)
>> and the other (foo0) has attributes for "-fno-fast-math". In
that case,
>> which set of eabi attributes should ARMAsmPrinter::emitAttributes emit?
>> ARMAsmPrinter::emitAttributes is called once at the start of a file
(not
>> once per every function), so I assume it has to merge those attributes
which
>> have different values or reject the IR if it discovers
incompatibilities.
>
> Hi Akira,
>
> Build attributes were not created to describe everything inside the
> file, but to help you identify what support you need (or don't want)
> in order to link with the most appropriate libraries, if you have more
> than one.
>
> In this case, I'd say the best course of action would be to set the
> attribute to the least restrictive one, which in this case is to
> accept fast-math.
>
> cheers,
> --renato
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev