[PATCH] D86559: [Sema, CodeGen] Allow [[likely]] and [[unlikely]] on labels
Staffan Tjernstrom via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 27 19:08:34 PDT 2020
staffantj added a comment.
In D86559#2236931 <https://reviews.llvm.org/D86559#2236931>, @Quuxplusone wrote:
> This feels like the wrong approach to me... but I admit that I don't know what the "right" approach might be. (I doubt any right approach exists.)
>
> if (ch == ' ') [[likely]] {
> goto whitespace; // A
> } else if (ch == '\n' || ch == '\t') [[unlikely]] {
> goto whitespace; // B
> } else {
> foo();
> }
> [[likely]] whitespace: bar(); // C
>
> It seems like this patch would basically "copy" the `[[likely]]` attribute from line C up to lines A and B, where it would reinforce the likelihood of path A and (maybe?) "cancel out" the unlikelihood of path B, without actually saying anything specifically about the likelihood of label C (which is surely what the programmer intended by applying the attribute, right?). OTOH, I can't think of any particular optimization that would care about the likelihood of label C. I could imagine trying to align label C to a 4-byte boundary or something, but that wouldn't be an //optimization// on any platform as far as I know.
The only reason I could see for writing the above (and it's far more likely to be written with [[unlikely]] in my experience) is to control the probability that the call to bar() gets inlined or not.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D86559/new/
https://reviews.llvm.org/D86559
More information about the cfe-commits
mailing list