Index: docs/LangRef.rst =================================================================== --- docs/LangRef.rst +++ docs/LangRef.rst @@ -1239,10 +1239,20 @@ 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. + This attribute indicates that the optimizer should preserve convergent + behavior produced by the callee. + + In some parallel execution models, there exist operations that are useful + only if the optimizer does not make them control-dependent on any + additional values. We call these operations (e.g. the + ``llvm.cuda.syncthreads`` intrinsic) ``intrinsically convergent``. + + The ``convergent`` attribute indicates that the caller may rely on + convergent behavior within of the callee. Unless it can be proved that the + callee does not transitively invoke an intrinsically convergent operation, + a convergent callee must not be made 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