X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FLangRef.rst;h=34873e1f41d650602c76aa8c6f11f6926e59d218;hb=daf061cf05d9ea2682c660f8208c40776f926cde;hp=3f7845f89f7af80605c314b1138adb54e42bdc9d;hpb=8ec1546db4ad92e8080012672f049c564b366586;p=oota-llvm.git diff --git a/docs/LangRef.rst b/docs/LangRef.rst index 3f7845f89f7..34873e1f41d 100644 --- a/docs/LangRef.rst +++ b/docs/LangRef.rst @@ -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 `` + 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 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^