[llvm] r260318 - Update documentation about convergent attribute.

Justin Lebar via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 9 15:03:17 PST 2016


Author: jlebar
Date: Tue Feb  9 17:03:17 2016
New Revision: 260318

URL: http://llvm.org/viewvc/llvm-project?rev=260318&view=rev
Log:
Update documentation about convergent attribute.

Summary:
Be more explicit about what 'convergent' means, and indicate that the
compiler may remove the attribute from a function if it can prove that
the function doesn't in fact execute any convergent ops.

Reviewers: resistor, jingyue, joker.eph

Subscribers: hfinkel, chandlerc, arsenm, jhen, tra, llvm-commits

Differential Revision: http://reviews.llvm.org/D17012

Modified:
    llvm/trunk/docs/LangRef.rst

Modified: llvm/trunk/docs/LangRef.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/LangRef.rst?rev=260318&r1=260317&r2=260318&view=diff
==============================================================================
--- llvm/trunk/docs/LangRef.rst (original)
+++ llvm/trunk/docs/LangRef.rst Tue Feb  9 17:03:17 2016
@@ -1238,10 +1238,17 @@ example:
     function call are also considered to be cold; and, thus, given low
     weight.
 ``convergent``
-    This attribute indicates that the callee is dependent on a convergent
-    thread execution pattern under certain parallel execution models.
-    Transformations that are execution model agnostic may not make the execution
-    of a convergent operation control dependent on any additional values.
+    In some parallel execution models, there exist operations that cannot be
+    made control-dependent on any additional values.  We call such operations
+    ``convergent``, and mark them with this function attribute.
+
+    For example, the intrinsic ``llvm.cuda.syncthreads`` is ``convergent``, so
+    calls to this intrinsic cannot be made control-dependent on additional
+    values.  Other functions may also be marked as convergent; this prevents
+    the same optimization on those functions.
+
+    The optimizer may remove the ``convergent`` attribute when it can prove
+    that the function does not execute any convergent operations.
 ``inaccessiblememonly``
     This attribute indicates that the function may only access memory that
     is not accessible by the module being compiled. This is a weaker form




More information about the llvm-commits mailing list