[LLVMdev] [RFC] Overhauling Attributes

Bill Wendling wendling at apple.com
Tue Jan 29 13:53:31 PST 2013


Oops! Sorry...This got skipped by me.

I'm not sure what the recommended approach should be here. I don't like you modifying the IR to add the 'target' keyword. Would this be an acceptable hack? Create a global variable "@llvm.mips16" or whatever. That global would list the functions which have that attribute. Those which aren't in the list would have the attribute "nomips16".

Alternatively, you could create a module flag which takes a list of functions that have that attribute:

!0 = metadata !{ i32 1, metadata !"mips16", !{ i32 ()* @foo, i32 ()* @bar } }

!llvm.module.flags = !{ !0 }

-bw

On Jan 11, 2013, at 3:41 PM, Reed Kotler <rkotler at mips.com> wrote:

> Looks like new attribute work is moving along quickly
> 
> Maybe I should just wait.
> 
> ???
> On 01/11/2013 03:09 PM, Reed Kotler wrote:
>> I would like to add something to atttributes.h, attributes.cpp in the
>> interim until your full scheme is available.
>> 
>> A new attribute called "target" would be added to AttrKind.
>> 
>> And target can take a list of strings.
>> 
>> target("foo", "goo")
>> 
>> For example.
>> 
>> I would add a component targetAttrs to AttrBuilder
>> 
>> Will this meet with resistance if I try and put this back?
>> 
>> Reed
>> 
>> On 01/01/2013 04:07 AM, Bill Wendling wrote:
>>> On Dec 31, 2012, at 4:37 AM, Duncan Sands <baldrick at free.fr> wrote:
>>> 
>>>> Hi Bill,
>>>> 
>>>> On 30/12/12 03:21, Bill Wendling wrote:
>>>>> Hi Rafael,
>>>>> 
>>>>> Sorry, I forgot to respond to this. They can be arbitrary strings
>>>>> that are known only to the specific back-end. It may be beneficial
>>>>> to define them inside of the LangRef document though.
>>>> 
>>>> this sounds so much like metadata...  What was the reason for not
>>>> enhancing
>>>> metadata to cover this use case?  I'm sure you explained but I've
>>>> completely
>>>> forgotten...
>>>> 
>>> Hi Duncan,
>>> 
>>> There are a couple of reasons why I don't think it's a good idea to
>>> use metadata (or more specifically, the module-level flags). Firstly,
>>> everything would have to be specified as a strings: "noinline", "ssp",
>>> etc., because a metadata object can hold only a Value type. Secondly,
>>> I don't want to have a "loop" in the attributes:
>>> 
>>>   !1 = metadata !{ !"noinline", !2 }
>>>   !2 = metadata !{ !1, !"ssp" }
>>> 
>>> This makes uniquifying the attributes that much harder.
>>> 
>>> We also want to be able to intelligently merge the attribute groups.
>>> These two groups are identical:
>>> 
>>>   #1 = attributes { noredzone noinline sspreq "mcpu"="cortex-a8" }
>>>   #2 = attributes { "mcpu"="cortex-a8" sspreq noinline noredzone }
>>> 
>>> Which brings up the '<kind>=<value>' syntax. The ability to have
>>> (possibly multiple) values assigned to an attribute kind isn't
>>> something easily modeled in metadata, as far as I can tell.
>>> 
>>> These (and maybe a few more, it's late) are some of the reasons why I
>>> feel a new first-class IR construct is needed. It's possible to modify
>>> metadata to handle these. But I feel that it's much more cumbersome to
>>> do that.
>>> 
>>> -bw
>>> 
> 




More information about the llvm-dev mailing list