Index: docs/LangRef.rst =================================================================== --- docs/LangRef.rst +++ docs/LangRef.rst @@ -1239,10 +1239,19 @@ 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 + This attribute indicates that the callee might depend 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 these execution models, certain operations have the property that they + cannot be made control-dependent on any additional values. We call these + operations ``convergent``. For example, the ``llvm.cuda.syncthreads`` + intrinsic is convergent, and so functions which (transitively) invoke it + must also be convergent. + + Unless it can be proved that an operation does not transitively invoke any + convergent operations, transformations that are execution-model agnostic + may not make the execution of a convergent operation control-dependent on + any additional values. ``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