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.
%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:
@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