Index: clang/include/clang/Basic/Attr.td =================================================================== --- clang/include/clang/Basic/Attr.td +++ clang/include/clang/Basic/Attr.td @@ -1073,7 +1073,7 @@ def Cold : InheritableAttr { let Spellings = [GCC<"cold">]; let Subjects = SubjectList<[Function]>; - let Documentation = [Undocumented]; + let Documentation = [ColdFunctionEntryDocs]; let SimpleHandler = 1; } @@ -1519,7 +1519,7 @@ def Hot : InheritableAttr { let Spellings = [GCC<"hot">]; let Subjects = SubjectList<[Function]>; - let Documentation = [Undocumented]; + let Documentation = [HotFunctionEntryDocs]; let SimpleHandler = 1; } def : MutualExclusions<[Hot, Cold]>; Index: clang/include/clang/Basic/AttrDocs.td =================================================================== --- clang/include/clang/Basic/AttrDocs.td +++ clang/include/clang/Basic/AttrDocs.td @@ -5241,6 +5241,21 @@ }]; } +def HotFunctionEntryDocs : Documentation { + let Category = DocCatFunction; + let Content = [{ +``__attribute__((hot))`` marks a function as hot, as a manual alternative to PGO hotness data. +If PGO data is available, the annotation ``__attribute__((hot))`` overrides the profile count based hotness (unlike ``__attribute__((cold))``). +}]; +} + +def ColdFunctionEntryDocs : Documentation { + let Category = DocCatFunction; + let Content = [{ +``__attribute__((cold))`` marks a function as cold, as a manual alternative to PGO hotness data. +If PGO data is available, the profile count based hotness overrides the ``__attribute__((cold))`` annotation (unlike ``__attribute__((hot))``). +}]; +} def TransparentUnionDocs : Documentation { let Category = DocCatDecl; let Content = [{