[LLVMdev] PROPOSAL : Introduce NamedMetadata
Dan Gohman
gohman at apple.com
Mon Jul 27 13:13:44 PDT 2009
On Jul 27, 2009, at 10:10 AM, Devang Patel wrote:
> In LLVM IR metadata is used to attach auxiliary information with
> various IR constructs. Currently metadata information is represented
> using MDNode and MDString. The metadata can refer to LLVM values but
> these references are not counted as regular "uses" of these values
> because metadata is maintained 'on the side'. This ensures that the
> optimizer is not influenced by auxiliary information. For example,
>
> !1 = { i32 42 }
>
> define void @foo() {
> %x = call i8 @llvm.something(metadata !1)
> }
>
>
> See http://nondot.org/~sabre/LLVMNotes/EmbeddedMetadata.txt for more
> information.
>
> This metadata support is not useful if the auxiliary information is
> not referenced by any LLVM IR entity. This is a limiting factor. The
> proposed solution is to introduced NamedMetadata. The NamedMetadata is
> derived from GlobalValue.
So, the idea is that some Analysis can take an LLVM IR entity, mangle
information about that entity into a string, and then use that string
to look up the associated NamedMetadata?
An alternative to this would be to introduce a form of MDNode that
has a designated Value that it's associated with. Then, for any
given Value, one could look up all the Metadatas(?) associated
with it.
> The NamedMetadata is an array of metadata
> nodes and metadata strings.
>
> @class.42 = ![ !5, !11, !2 ] ; NamedMetadata
>
> !5 = metadata !"int"
> !11 = metadata !"class.21 pointer"
> !2 = metadata ! {I32 8 } ; size
>
>
> The NamedMetadata element list contains MDString and MDNodes only. The
> NamedMetadata is always implicitly typed as metadata. LLVM bitcode
> reader and writer will keep track of NamedMetadata in a Module. A
> module can use metadata that is not listed in any NamedMetadata value.
> A module can have multiple NamedMetadata values. NamedMetadata
> implicitly uses AppendingLinkage.
And DefaultVisibility and a default Section and an Alignment of 1?
GlobalValues carry some amount of baggage here.
Dan
More information about the llvm-dev
mailing list