Index: docs/LangRef.rst =================================================================== --- docs/LangRef.rst +++ docs/LangRef.rst @@ -5081,33 +5081,28 @@ It is sometimes useful to attach information to loop constructs. Currently, loop metadata is implemented as metadata attached to the branch instruction -in the loop latch block. This type of metadata refer to a metadata node that is -guaranteed to be separate for each loop. The loop identifier metadata is -specified with the name ``llvm.loop``. - -The loop identifier metadata is implemented using a metadata that refers to -itself to avoid merging it with any other identifier metadata, e.g., -during module linkage or function inlining. That is, each loop should refer -to their own identification metadata even if they reside in separate functions. -The following example contains loop identifier metadata for two separate loop -constructs: - -.. code-block:: llvm - - !0 = !{!0} - !1 = !{!1} - -The loop identifier metadata can be used to specify additional -per-loop metadata. Any operands after the first operand can be treated -as user-defined metadata. For example the ``llvm.loop.unroll.count`` -suggests an unroll factor to the loop unroller: +in the loop latch block. The loop metadata node is an unordered list of +other metadata nodes, each representing a property of the loop. Usually, +the first item of the property node is a string. For example the +``llvm.loop.unroll.count`` suggests an unroll factor to the loop +unroller: .. code-block:: llvm br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !0 ... - !0 = !{!0, !1} - !1 = !{!"llvm.loop.unroll.count", i32 4} + !0 = distinct !{!0, !1, !2} + !1 = !{!"llvm.loop.unroll.enable"} + !2 = !{!"llvm.loop.unroll.count", i32 4} + +For legacy reasons, the first item of a loop metadata node must be a +reference to itself. It was used to avoid collapsing of multiple loop +metadata nodes into one. The use of 'distinct' metadata nodes is also +obsolete. + +Loop metadata nodes cannot be used as identifiers. It is +neither persistent for the same loop through pass transformations nor +unique to just one loop. '``llvm.loop.vectorize``' and '``llvm.loop.interleave``' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^