Index: docs/LangRef.rst =================================================================== --- docs/LangRef.rst +++ docs/LangRef.rst @@ -1239,10 +1239,17 @@ 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 attribute. + + For example, the intrinsic ``llvm.cuda.syncthreads`` is convergent. A + callsite which relies on convergent behavior in a callee (e.g. it relies on + the effect of the callee invoking ``llvm.cuda.syncthreads``) should be + marked as convergent. + + The optimizer may remove the ``convergent`` attribute when it can prove + that the callee 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