diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst --- a/llvm/docs/LangRef.rst +++ b/llvm/docs/LangRef.rst @@ -5035,8 +5035,8 @@ Metadata ======== -LLVM IR allows metadata to be attached to instructions in the program -that can convey extra information about the code to the optimizers and +LLVM IR allows metadata to be attached to instructions and global objects in the +program that can convey extra information about the code to the optimizers and code generator. One example application of metadata is source-level debug information. There are two metadata primitives: strings and nodes. @@ -5096,6 +5096,9 @@ %indvar.next = add i64 %indvar, 1, !dbg !21 +Instructions may not have multiple metadata attachments with the same +identifier. + Metadata can also be attached to a function or a global variable. Here metadata ``!22`` is attached to the ``f1`` and ``f2`` functions, and the globals ``g1`` and ``g2`` using the ``!dbg`` identifier: @@ -5110,6 +5113,9 @@ @g1 = global i32 0, !dbg !22 @g2 = external global i32, !dbg !22 +Unlike instructions, global objects (functions and global variables) may have +multiple metadata attachments with the same identifier. + A transformation is required to drop any metadata attachment that it does not know or know it can't preserve. Currently there is an exception for metadata attachment to globals for ``!type`` and ``!absolute_symbol`` which can't be