]> granicus.if.org Git - llvm/commitdiff
LangRef: Document the allowed metadata dropping transforms.
authorPeter Collingbourne <peter@pcc.me.uk>
Wed, 25 Jan 2017 21:50:14 +0000 (21:50 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Wed, 25 Jan 2017 21:50:14 +0000 (21:50 +0000)
Document the current practice regarding dropping metadata on modules,
functions and global variables.

Differential Revision: https://reviews.llvm.org/D29110

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@293101 91177308-0d34-0410-b5e6-96231b3b80d8

docs/LangRef.rst

index ba15713429f810e8dcb91ba6c4e16ecb5358f54e..ecf48455427b72695e50e849dfbe554289cea53d 100644 (file)
@@ -3941,15 +3941,28 @@ to the ``add`` instruction using the ``!dbg`` identifier:
 
     %indvar.next = add i64 %indvar, 1, !dbg !21
 
-Metadata can also be attached to a function definition. Here metadata ``!22``
-is attached to the ``foo`` function using the ``!dbg`` 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:
 
 .. code-block:: llvm
 
-    define void @foo() !dbg !22 {
+    declare !dbg !22 void @f1()
+    define void @f2() !dbg !22 {
       ret void
     }
 
+    @g1 = global i32 0, !dbg !22
+    @g2 = external global i32, !dbg !22
+
+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
+unconditionally dropped unless the global is itself deleted.
+
+Metadata attached to a module using named metadata may not be dropped, with
+the exception of debug metadata (named metadata with the name ``!llvm.dbg.*``).
+
 More information about specific metadata nodes recognized by the
 optimizers and code generator is found below.