[MCJIT] Refactor and add stub inspection to the RuntimeDyldChecker framework.
[oota-llvm.git] / docs / LangRef.rst
index 3f7845f89f7af80605c314b1138adb54e42bdc9d..34873e1f41d650602c76aa8c6f11f6926e59d218 100644 (file)
@@ -921,6 +921,13 @@ Currently, only the following parameter attributes are defined:
     the first parameter. This is not a valid attribute for return
     values.
 
+``align <n>``
+    This indicates that the pointer value may be assumed by the optimizer to
+    have the specified alignment.
+
+    Note that this attribute has additional semantics when combined with the
+    ``byval`` attribute.
+
 .. _noalias:
 
 ``noalias``
@@ -2910,37 +2917,49 @@ suggests an unroll factor to the loop unroller:
       br i1 %exitcond, label %._crit_edge, label %.lr.ph, !llvm.loop !0
     ...
     !0 = metadata !{ metadata !0, metadata !1 }
-    !1 = metadata !{ metadata !"llvm.loop.vectorize.width", i32 4 }
+    !1 = metadata !{ metadata !"llvm.loop.unroll.count", i32 4 }
 
-'``llvm.loop.vectorize``'
-^^^^^^^^^^^^^^^^^^^^^^^^^
+'``llvm.loop.vectorize``' and '``llvm.loop.interleave``'
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-Metadata prefixed with ``llvm.loop.vectorize`` is used to control
-per-loop vectorization parameters such as vectorization width and
-interleave count.  ``llvm.loop.vectorize`` metadata should be used in
+Metadata prefixed with ``llvm.loop.vectorize`` or ``llvm.loop.interleave`` are
+used to control per-loop vectorization and interleaving parameters such as
+vectorization width and interleave count.  These metadata should be used in
 conjunction with ``llvm.loop`` loop identification metadata.  The
-``llvm.loop.vectorize`` metadata are only optimization hints and the
-vectorizer will only vectorize loops if it believes it is safe to do
-so.  The ``llvm.mem.parallel_loop_access`` metadata which contains
-information about loop-carried memory dependencies can be helpful in
-determining the safety of loop vectorization.
+``llvm.loop.vectorize`` and ``llvm.loop.interleave`` metadata are only
+optimization hints and the optimizer will only interleave and vectorize loops if
+it believes it is safe to do so.  The ``llvm.mem.parallel_loop_access`` metadata
+which contains information about loop-carried memory dependencies can be helpful
+in determining the safety of these transformations.
 
-'``llvm.loop.vectorize.unroll``' Metadata
+'``llvm.loop.interleave.count``' Metadata
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-This metadata suggests an interleave count to the loop vectorizer.
-The first operand is the string ``llvm.loop.vectorize.unroll`` and the
+This metadata suggests an interleave count to the loop interleaver.
+The first operand is the string ``llvm.loop.interleave.count`` and the
 second operand is an integer specifying the interleave count. For
 example:
 
 .. code-block:: llvm
 
-   !0 = metadata !{ metadata !"llvm.loop.vectorize.unroll", i32 4 }
+   !0 = metadata !{ metadata !"llvm.loop.interleave.count", i32 4 }
+
+Note that setting ``llvm.loop.interleave.count`` to 1 disables interleaving
+multiple iterations of the loop.  If ``llvm.loop.interleave.count`` is set to 0
+then the interleave count will be determined automatically.
+
+'``llvm.loop.vectorize.enable``' Metadata
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+This metadata selectively enables or disables vectorization for the loop. The
+first operand is the string ``llvm.loop.vectorize.enable`` and the second operand
+is a bit.  If the bit operand value is 1 vectorization is enabled. A value of
+0 disables vectorization:
+
+.. code-block:: llvm
 
-Note that setting ``llvm.loop.vectorize.unroll`` to 1 disables
-interleaving multiple iterations of the loop.  If
-``llvm.loop.vectorize.unroll`` is set to 0 then the interleave count
-will be determined automatically.
+   !0 = metadata !{ metadata !"llvm.loop.vectorize.enable", i1 0 }
+   !1 = metadata !{ metadata !"llvm.loop.vectorize.enable", i1 1 }
 
 '``llvm.loop.vectorize.width``' Metadata
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^