From 3fd58f91dd318518f7daa4ba64c0aaf31799d89b Mon Sep 17 00:00:00 2001
From: rdivacky Named metadata is a collection of metadata. Metadata
- node and null are the only valid named metadata operands.
- Metadata strings are not allowed as an named metadata operand. Named metadata is a collection of metadata. Metadata
+ nodes (but not metadata strings) and null are the only valid operands for
+ a named metadata. Metadata provides a way to attach arbitrary data to the instruction
- stream without affecting the behaviour of the program. There are two
- metadata primitives, strings and nodes. All metadata has the
- metadata type and is identified in syntax by a preceding exclamation
- point ('!'). A metadata string is a string surrounded by double quotes. It can contain
- any character by escaping non-printable characters with "\xx" where "xx" is
- the two digit hex code. For example: "!"test\00"". Metadata nodes are represented with notation similar to structure constants
- (a comma separated list of elements, surrounded by braces and preceded by an
- exclamation point). For example: "!{ metadata !"test\00", i32
- 10}". A metadata node will attempt to track changes to the values it holds. In the
- event that a value is deleted, it will be replaced with a typeless
- "null", such as "metadata !{null, i32 10}". A named metadata is a collection of
- metadata nodes. For example: "!foo = metadata !{!4, !3}".
-
- Optimizations may rely on metadata to provide additional information about
- the program that isn't available in the instructions, or that isn't easily
- computable. Similarly, the code generator may expect a certain metadata
- format to be used to express debugging information. LLVM IR allows metadata to be attached to instructions 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. All
+ metadata has the metadata type and is identified in syntax by a
+ preceding exclamation point ('!'). A metadata string is a string surrounded by double quotes. It can contain
+ any character by escaping non-printable characters with "\xx" where "xx" is
+ the two digit hex code. For example: "!"test\00"". Metadata nodes are represented with notation similar to structure constants
+ (a comma separated list of elements, surrounded by braces and preceded by an
+ exclamation point). For example: "!{ metadata !"test\00", i32
+ 10}". Metadata nodes can have any values as their operand. A named metadata is a collection of
+ metadata nodes, which can be looked up in the module symbol table. For
+ example: "!foo = metadata !{!4, !3}".
+
+ Note that the code generator does not yet completely support unwind, and
+that the invoke/unwind semantics are likely to change in future versions.Syntax:
Example:
%retval = invoke i32 @Test(i32 15) to label %Continue
@@ -2876,6 +2868,9 @@ Instruction
Note that the code generator does not yet completely support unwind, and +that the invoke/unwind semantics are likely to change in future versions.
+ @@ -7350,7 +7345,7 @@ LLVM. Chris Lattner